diff --git a/src/Components/Common/AssetSelect.tsx b/src/Components/Common/AssetSelect.tsx index 0e47c7cfbfd..3f4f928032d 100644 --- a/src/Components/Common/AssetSelect.tsx +++ b/src/Components/Common/AssetSelect.tsx @@ -1,7 +1,7 @@ import { useCallback } from "react"; -import { useDispatch } from "react-redux"; -import { listAssets } from "../../Redux/actions"; import AutoCompleteAsync from "../Form/AutoCompleteAsync"; +import routes from "../../Redux/api"; +import request from "../../Utils/request/request"; interface AssetSelectProps { name: string; @@ -16,7 +16,6 @@ interface AssetSelectProps { asset_class?: string; showAll?: boolean; showNOptions?: number; - freeText?: boolean; selected: any; setSelected: (selected: any) => void; } @@ -33,21 +32,13 @@ export const AssetSelect = (props: AssetSelectProps) => { is_permanent = null, showNOptions = 10, className = "", - freeText = false, errors = "", asset_class = "", } = props; - const dispatchAction: any = useDispatch(); - const AssetSearch = useCallback( async (text: string) => { - const params: Partial & { - limit: number; - offset: number; - search_text: string; - asset_class: string; - } = { + const query = { limit: 50, offset: 0, search_text: text, @@ -56,17 +47,12 @@ export const AssetSelect = (props: AssetSelectProps) => { in_use_by_consultation, is_permanent, asset_class, - }; + } as const; - const res = await dispatchAction(listAssets(params)); - if (freeText) - res?.data?.results?.push({ - id: -1, - name: text, - }); - return res?.data?.results; + const { data } = await request(routes.listAssets, { query }); + return data?.results; }, - [dispatchAction] + [asset_class, facility, in_use_by_consultation, is_permanent, is_working] ); return ( diff --git a/src/Components/Common/BedSelect.tsx b/src/Components/Common/BedSelect.tsx index 94caded12a3..a548b7a9eb5 100644 --- a/src/Components/Common/BedSelect.tsx +++ b/src/Components/Common/BedSelect.tsx @@ -1,9 +1,9 @@ import { useCallback } from "react"; -import { useDispatch } from "react-redux"; -import { listFacilityBeds } from "../../Redux/actions"; import { BedModel } from "../Facility/models"; import AutoCompleteAsync from "../Form/AutoCompleteAsync"; import { useTranslation } from "react-i18next"; +import request from "../../Utils/request/request"; +import routes from "../../Redux/api"; interface BedSelectProps { name: string; @@ -34,13 +34,11 @@ export const BedSelect = (props: BedSelectProps) => { location, showNOptions = 20, } = props; - - const dispatchAction: any = useDispatch(); const { t } = useTranslation(); const onBedSearch = useCallback( async (text: string) => { - const params = { + const query = { limit: 50, offset: 0, search_text: text, @@ -49,17 +47,17 @@ export const BedSelect = (props: BedSelectProps) => { location, }; - const res = await dispatchAction(listFacilityBeds(params)); - if (res && res.data) { - let beds = res.data.results; - if (unoccupiedOnly) { - beds = beds.filter((bed: BedModel) => bed?.is_occupied === false); - } + const { data } = await request(routes.listFacilityBeds, { query }); - return beds; + if (unoccupiedOnly) { + return data?.results?.filter( + (bed: BedModel) => bed?.is_occupied === false + ); } + + return data?.results; }, - [dispatchAction, facility, location, searchAll, unoccupiedOnly] + [facility, location, searchAll, unoccupiedOnly] ); return ( diff --git a/src/Components/Common/DistrictAutocompleteFormField.tsx b/src/Components/Common/DistrictAutocompleteFormField.tsx index 122b576a2fc..dbee6c9f08d 100644 --- a/src/Components/Common/DistrictAutocompleteFormField.tsx +++ b/src/Components/Common/DistrictAutocompleteFormField.tsx @@ -1,51 +1,27 @@ -import { useDispatch } from "react-redux"; import { FormFieldBaseProps } from "../Form/FormFields/Utils"; -import { IState } from "./StateAutocompleteFormField"; import AutocompleteFormField from "../Form/FormFields/Autocomplete"; -import { statusType, useAbortableEffect } from "../../Common/utils"; -import { useCallback, useState } from "react"; -import { getDistrictByState } from "../../Redux/actions"; +import useQuery from "../../Utils/request/useQuery"; +import routes from "../../Redux/api"; +import { DistrictModel, StateModel } from "../Facility/models"; -export type IDistrict = { - id: number; - name: string; -}; - -type Props = FormFieldBaseProps & { +type Props = FormFieldBaseProps & { placeholder?: string; - state?: IState["id"]; + state?: StateModel["id"]; }; export default function DistrictAutocompleteFormField(props: Props) { - const dispatch = useDispatch(); - const [districts, setDistricts] = useState(); - - const fetchDistricts = useCallback( - async (status: any) => { - setDistricts(undefined); - if (!props.state) { - return; - } - const res = await dispatch(getDistrictByState({ id: props.state })); - if (!status.aborted && res.data) { - setDistricts(res.data); - } - }, - [dispatch, props.state] - ); - - useAbortableEffect( - (status: statusType) => fetchDistricts(status), - [props.state] - ); + const { data, loading } = useQuery(routes.getDistrictByState, { + pathParams: { id: props.state?.toString() ?? "" }, + prefetch: props.state !== undefined, + }); return ( option.name} optionValue={(option) => option.id} - isLoading={!!(props.state && districts === undefined)} + isLoading={loading} disabled={!props.state} /> ); diff --git a/src/Components/Common/FacilitySelect.tsx b/src/Components/Common/FacilitySelect.tsx index 1aabc36013b..17f67a7def1 100644 --- a/src/Components/Common/FacilitySelect.tsx +++ b/src/Components/Common/FacilitySelect.tsx @@ -1,8 +1,8 @@ import { useCallback } from "react"; -import { useDispatch } from "react-redux"; -import { getAllFacilities, getPermittedFacilities } from "../../Redux/actions"; import AutoCompleteAsync from "../Form/AutoCompleteAsync"; import { FacilityModel } from "../Facility/models"; +import request from "../../Utils/request/request"; +import routes from "../../Redux/api"; interface FacilitySelectProps { name: string; @@ -37,11 +37,9 @@ export const FacilitySelect = (props: FacilitySelectProps) => { errors = "", } = props; - const dispatchAction: any = useDispatch(); - const facilitySearch = useCallback( async (text: string) => { - const params = { + const query = { limit: 50, offset: 0, search_text: text, @@ -51,17 +49,19 @@ export const FacilitySelect = (props: FacilitySelectProps) => { district, }; - const res = await dispatchAction( - showAll ? getAllFacilities(params) : getPermittedFacilities(params) + const { data } = await request( + showAll ? routes.getAllFacilities : routes.getPermittedFacilities, + { query } ); + if (freeText) - res?.data?.results?.push({ + data?.results?.push({ id: -1, name: text, }); - return res?.data?.results; + return data?.results; }, - [dispatchAction, searchAll, showAll, facilityType, district] + [searchAll, showAll, facilityType, district, exclude_user, freeText] ); return ( diff --git a/src/Components/Common/LocalBodyAutocompleteFormField.tsx b/src/Components/Common/LocalBodyAutocompleteFormField.tsx index eacfbc35b89..32023fa559f 100644 --- a/src/Components/Common/LocalBodyAutocompleteFormField.tsx +++ b/src/Components/Common/LocalBodyAutocompleteFormField.tsx @@ -1,53 +1,27 @@ -import { useDispatch } from "react-redux"; import { FormFieldBaseProps } from "../Form/FormFields/Utils"; import AutocompleteFormField from "../Form/FormFields/Autocomplete"; -import { statusType, useAbortableEffect } from "../../Common/utils"; -import { useCallback, useState } from "react"; -import { getLocalbodyByDistrict } from "../../Redux/actions"; -import { IDistrict } from "./DistrictAutocompleteFormField"; +import { DistrictModel, LocalBodyModel } from "../Facility/models"; +import useQuery from "../../Utils/request/useQuery"; +import routes from "../../Redux/api"; -export type ILocalBody = { - id: number; - name: string; -}; - -type Props = FormFieldBaseProps & { +type Props = FormFieldBaseProps & { placeholder?: string; - district?: IDistrict["id"]; + district?: DistrictModel["id"]; }; export default function LocalBodyAutocompleteFormField(props: Props) { - const dispatch = useDispatch(); - const [localBodies, setLocalBodies] = useState(); - - const fetchLocalBodies = useCallback( - async (status: any) => { - setLocalBodies(undefined); - if (!props.district) { - return; - } - const res = await dispatch( - getLocalbodyByDistrict({ id: props.district }) - ); - if (!status.aborted && res && res.data) { - setLocalBodies(res.data); - } - }, - [dispatch, props.district] - ); - - useAbortableEffect( - (status: statusType) => fetchLocalBodies(status), - [props.district] - ); + const { data, loading } = useQuery(routes.getLocalbodyByDistrict, { + pathParams: { id: props.district?.toString() ?? "" }, + prefetch: props.district !== undefined, + }); return ( option.name} optionValue={(option) => option.id} - isLoading={!!(props.district && localBodies === undefined)} + isLoading={loading} disabled={!props.district} /> ); diff --git a/src/Components/Common/LocationSelect.tsx b/src/Components/Common/LocationSelect.tsx index d20c843fad8..dcade42a596 100644 --- a/src/Components/Common/LocationSelect.tsx +++ b/src/Components/Common/LocationSelect.tsx @@ -1,8 +1,7 @@ -import { useEffect, useState } from "react"; -import { useDispatch } from "react-redux"; -import { listFacilityAssetLocation } from "../../Redux/actions"; import AutocompleteFormField from "../Form/FormFields/Autocomplete"; import AutocompleteMultiSelectFormField from "../Form/FormFields/AutocompleteMultiselect"; +import useQuery from "../../Utils/request/useQuery"; +import routes from "../../Redux/api"; interface LocationSelectProps { name: string; disabled?: boolean; @@ -11,7 +10,7 @@ interface LocationSelectProps { className?: string; searchAll?: boolean; multiple?: boolean; - facilityId: number | string; + facilityId: string; showAll?: boolean; selected: string | string[] | null; setSelected: (selected: string | string[] | null) => void; @@ -19,76 +18,48 @@ interface LocationSelectProps { } export const LocationSelect = (props: LocationSelectProps) => { - const { - name, - multiple, - selected, - setSelected, - errors, - className = "", - facilityId, - disabled = false, - } = props; - const [locations, setLocations] = useState<{ name: string; id: string }[]>( - [] + const { data, loading, refetch } = useQuery( + routes.listFacilityAssetLocation, + { + query: { + limit: 14, + }, + pathParams: { + facility_external_id: props.facilityId, + }, + prefetch: props.facilityId !== undefined, + } ); - const [query, setQuery] = useState(""); - const [loading, setLoading] = useState(false); - const dispatchAction: any = useDispatch(); - - const handleValueChange = (current: string[]) => { - if (multiple) setSelected(current); - else setSelected(current ? current[0] : ""); - }; - - useEffect(() => { - if (!facilityId) return; - const params = { - limit: 14, - search_text: query, - }; - setLoading(true); - dispatchAction( - listFacilityAssetLocation(params, { facility_external_id: facilityId }) - ).then(({ data }: any) => { - setLocations(data.results); - setLoading(false); - }); - }, [query, facilityId]); return props.multiple ? ( handleValueChange(value as unknown as string[])} - onQuery={(query) => { - setQuery(query); - }} + name={props.name} + disabled={props.disabled} + value={props.selected as unknown as string[]} + options={data?.results ?? []} + onChange={({ value }) => props.setSelected(value)} + onQuery={(search_text) => refetch({ query: { search_text } })} placeholder="Search by location name" optionLabel={(option) => option.name} optionValue={(option) => option.id} - error={errors} - className={className} + error={props.errors} + className={props.className} errorClassName={props.errorClassName} /> ) : ( handleValueChange([value])} - onQuery={(query) => { - setQuery(query); - }} + name={props.name} + disabled={props.disabled} + value={props.selected as string} + options={data?.results ?? []} + onChange={({ value }) => props.setSelected(value)} + onQuery={(search_text) => refetch({ query: { search_text } })} isLoading={loading} placeholder="Search by location name" optionLabel={(option) => option.name} optionValue={(option) => option.id} - error={errors} - className={className} + error={props.errors} + className={props.className} errorClassName={props.errorClassName} /> ); diff --git a/src/Components/Common/SkillSelect.tsx b/src/Components/Common/SkillSelect.tsx index 941c29790d1..e0d9aafdb13 100644 --- a/src/Components/Common/SkillSelect.tsx +++ b/src/Components/Common/SkillSelect.tsx @@ -1,8 +1,8 @@ import { useCallback } from "react"; -import { useDispatch } from "react-redux"; -import { getAllSkills } from "../../Redux/actions"; import AutoCompleteAsync from "../Form/AutoCompleteAsync"; import { SkillModel, SkillObjectModel } from "../Users/models"; +import request from "../../Utils/request/request"; +import routes from "../../Redux/api"; interface SkillSelectProps { id?: string; @@ -11,12 +11,10 @@ interface SkillSelectProps { className?: string; searchAll?: boolean; multiple?: boolean; - showAll?: boolean; showNOptions?: number; disabled?: boolean; selected: SkillObjectModel | SkillObjectModel[] | null; setSelected: (selected: SkillObjectModel) => void; - username?: string; userSkills?: SkillModel[]; } @@ -28,37 +26,28 @@ export const SkillSelect = (props: SkillSelectProps) => { selected, setSelected, searchAll, - showAll = true, showNOptions = 10, disabled = false, className = "", errors = "", - //username, userSkills, } = props; - const dispatchAction: any = useDispatch(); - const skillSearch = useCallback( async (text: string) => { - const params = { + const query = { limit: 50, offset: 0, search_text: text, all: searchAll, }; - const res = await dispatchAction(getAllSkills(params)); - const skillsID: string[] = []; - userSkills?.map((skill: SkillModel) => - skillsID.push(skill.skill_object.id) - ); - const skills = res?.data?.results.filter( - (skill: any) => !skillsID.includes(skill.id) + const { data } = await request(routes.getAllSkills, { query }); + return data?.results.filter( + (skill) => !userSkills?.some((userSkill) => userSkill.id === skill.id) ); - return skills; }, - [dispatchAction, searchAll, userSkills, showAll] + [searchAll, userSkills] ); return ( diff --git a/src/Components/Common/StateAutocompleteFormField.tsx b/src/Components/Common/StateAutocompleteFormField.tsx index 384f46c3a7c..77d52768198 100644 --- a/src/Components/Common/StateAutocompleteFormField.tsx +++ b/src/Components/Common/StateAutocompleteFormField.tsx @@ -1,45 +1,23 @@ -import { useCallback, useState } from "react"; import AutocompleteFormField from "../Form/FormFields/Autocomplete"; import { FormFieldBaseProps } from "../Form/FormFields/Utils"; -import { statusType, useAbortableEffect } from "../../Common/utils"; -import { useDispatch } from "react-redux"; -import { getStates } from "../../Redux/actions"; +import { StateModel } from "../Facility/models"; +import useQuery from "../../Utils/request/useQuery"; +import routes from "../../Redux/api"; -export type IState = { - id: number; - name: string; -}; - -type Props = FormFieldBaseProps & { +type Props = FormFieldBaseProps & { placeholder?: string; }; export default function StateAutocompleteFormField(props: Props) { - const dispatch = useDispatch(); - const [states, setStates] = useState(); - - const fetchStates = useCallback( - async (status: any) => { - setStates(undefined); - const res = await dispatch(getStates()); - if (!status.aborted && res && res.data) { - setStates(res.data.results); - } - }, - [dispatch] - ); - - useAbortableEffect((status: statusType) => { - fetchStates(status); - }, []); + const { data, loading } = useQuery(routes.statesList); return ( option.name} optionValue={(option) => option.id} - isLoading={states === undefined} + isLoading={loading} /> ); } diff --git a/src/Components/Common/Uptime.tsx b/src/Components/Common/Uptime.tsx index 6f6966b9053..e3c7dd7a439 100644 --- a/src/Components/Common/Uptime.tsx +++ b/src/Components/Common/Uptime.tsx @@ -1,12 +1,10 @@ import { Popover } from "@headlessui/react"; -import { useCallback, useEffect, useRef, useState } from "react"; -import { listAssetAvailability } from "../../Redux/actions"; -import { useDispatch } from "react-redux"; -import * as Notification from "../../Utils/Notifications.js"; +import { useEffect, useRef, useState } from "react"; import { AssetStatus, AssetUptimeRecord } from "../Assets/AssetTypes"; -import { reverse } from "lodash-es"; import { classNames } from "../../Utils/utils"; import dayjs from "../../Utils/dayjs"; +import useQuery from "../../Utils/request/useQuery.js"; +import routes from "../../Redux/api.js"; const STATUS_COLORS = { Operational: "bg-green-500", @@ -63,7 +61,7 @@ function UptimeInfo({ <> Status Updates
- {reverse(incidents)?.map((incident, index) => { + {incidents.reverse().map((incident, index) => { const prevIncident = incidents[index - 1]; let endTimestamp; let ongoing = false; @@ -171,16 +169,16 @@ export default function Uptime(props: { assetId: string }) { const [summary, setSummary] = useState<{ [key: number]: AssetUptimeRecord[]; }>([]); - const [availabilityData, setAvailabilityData] = useState( - [] - ); - const [loading, setLoading] = useState(true); + const { data, loading } = useQuery(routes.listAssetAvailability, { + query: { external_id: props.assetId }, + onResponse: ({ data }) => setUptimeRecord(data?.results.reverse() ?? []), + }); + const availabilityData = data?.results ?? []; const graphElem = useRef(null); const [numDays, setNumDays] = useState( Math.floor((window.innerWidth - 1024) / 20) ); const [hoveredDay, setHoveredDay] = useState(-1); - const dispatch = useDispatch(); const handleResize = () => { const containerWidth = graphElem.current?.clientWidth ?? window.innerWidth; @@ -268,25 +266,6 @@ export default function Uptime(props: { assetId: string }) { return Math.round((upStatus / (days * 3)) * 100); } - const fetchData = useCallback(async () => { - setLoading(true); - setLoading(false); - - const availabilityData = await dispatch( - listAssetAvailability({ - external_id: props.assetId, - }) - ); - if (availabilityData?.data) { - setAvailabilityData(availabilityData.data.results); - setUptimeRecord(reverse(availabilityData.data.results)); - } else { - Notification.Error({ - msg: "Error fetching availability history", - }); - } - }, [dispatch, props.assetId]); - useEffect(() => { setTimeout(() => { handleResize(); @@ -297,8 +276,7 @@ export default function Uptime(props: { assetId: string }) { useEffect(() => { handleResize(); - fetchData(); - }, [props.assetId, fetchData]); + }, []); const getStatusColor = (day: number) => { if (summary[day]) { diff --git a/src/Components/Common/prescription-builder/InvestigationBuilder.tsx b/src/Components/Common/prescription-builder/InvestigationBuilder.tsx index 67ac412c2e0..cb0bbac1f66 100644 --- a/src/Components/Common/prescription-builder/InvestigationBuilder.tsx +++ b/src/Components/Common/prescription-builder/InvestigationBuilder.tsx @@ -1,12 +1,10 @@ import { useEffect, useState } from "react"; -import { useDispatch } from "react-redux"; -import { - listInvestigationGroups, - listInvestigations, -} from "../../../Redux/actions"; import { PrescriptionDropdown } from "./PrescriptionDropdown"; import { PrescriptionMultiDropdown } from "./PrescriptionMultiselect"; import CareIcon from "../../../CAREUI/icons/CareIcon"; +import request from "../../../Utils/request/request"; +import routes from "../../../Redux/api"; + export type InvestigationType = { type?: string[]; repetitive?: boolean; @@ -35,7 +33,6 @@ export default function InvestigationBuilder( ) { const { investigations, setInvestigations } = props; const [investigationsList, setInvestigationsList] = useState([]); - const dispatch: any = useDispatch(); const [activeIdx, setActiveIdx] = useState(null); const additionalInvestigations = [ ["Vitals", ["Temp", "Blood Pressure", "Respiratory Rate", "Pulse Rate"]], @@ -85,26 +82,20 @@ export default function InvestigationBuilder( }; const fetchInvestigations = async () => { - const res = await dispatch(listInvestigations({})); - if (res && res.data) { - return res.data.results.map( - (investigation: any) => - investigation.name + - " -- " + - investigation.groups - .map((group: any) => " ( " + group.name + " ) ") - .join(", ") - ); - } - return []; + const { data } = await request(routes.listInvestigations); + return ( + data?.results.map( + (investigation) => + `${investigation.name} -- ${investigation.groups + .map((group) => ` ( ${group.name} ) `) + .join(", ")}` + ) ?? [] + ); }; const fetchInvestigationGroups = async () => { - const res = await dispatch(listInvestigationGroups({})); - if (res && res.data) { - return res.data.results.map((group: any) => group.name + " (GROUP)"); - } - return []; + const { data } = await request(routes.listInvestigationGroups); + return data?.results.map((group) => `${group.name} (GROUP)`) ?? []; }; return ( diff --git a/src/Components/Facility/AssetCreate.tsx b/src/Components/Facility/AssetCreate.tsx index a1e06a8c7ab..35f71a746fd 100644 --- a/src/Components/Facility/AssetCreate.tsx +++ b/src/Components/Facility/AssetCreate.tsx @@ -563,7 +563,7 @@ const AssetCreate = (props: AssetProps) => { selected={location} showAll={false} multiple={false} - facilityId={facilityId as unknown as number} + facilityId={facilityId} errors={state.errors.location} />
diff --git a/src/Components/Facility/ConsultationForm.tsx b/src/Components/Facility/ConsultationForm.tsx index 77962cc7703..63e18645e13 100644 --- a/src/Components/Facility/ConsultationForm.tsx +++ b/src/Components/Facility/ConsultationForm.tsx @@ -229,11 +229,16 @@ type ConsultationFormSection = | "Treatment Plan" | "Bed Status"; -export const ConsultationForm = (props: any) => { +type Props = { + facilityId: string; + patientId: string; + id?: string; +}; + +export const ConsultationForm = ({ facilityId, patientId, id }: Props) => { const { goBack } = useAppHistory(); const { kasp_enabled, kasp_string } = useConfig(); const dispatchAction: any = useDispatch(); - const { facilityId, patientId, id } = props; const [state, dispatch] = useAutoSaveReducer( consultationFormReducer, initialState @@ -344,7 +349,7 @@ export const ConsultationForm = (props: any) => { const fetchData = useCallback( async (status: statusType) => { if (!patientId) setIsLoading(true); - const res = await dispatchAction(getConsultation(id)); + const res = await dispatchAction(getConsultation(id!)); handleFormFieldChange({ name: "InvestigationAdvice", value: !Array.isArray(res.data.investigation) @@ -743,7 +748,7 @@ export const ConsultationForm = (props: any) => { }; const res = await dispatchAction( - id ? updateConsultation(id, data) : createConsultation(data) + id ? updateConsultation(id!, data) : createConsultation(data) ); setIsLoading(false); if (res?.data && res.status !== 400) { diff --git a/src/Components/Facility/Investigations/Reports/index.tsx b/src/Components/Facility/Investigations/Reports/index.tsx index 9b3c29d40f8..b868e8e8af0 100644 --- a/src/Components/Facility/Investigations/Reports/index.tsx +++ b/src/Components/Facility/Investigations/Reports/index.tsx @@ -1,6 +1,6 @@ import * as Notification from "../../../../Utils/Notifications"; import _ from "lodash-es"; -import { Group, InvestigationType } from ".."; +import { InvestigationGroup, InvestigationType } from ".."; import { getPatient, getPatientInvestigation, @@ -22,7 +22,7 @@ import { useRef } from "react"; const RESULT_PER_PAGE = 14; interface InitialState { - investigationGroups: Group[]; + investigationGroups: InvestigationGroup[]; selectedGroup: string[]; investigations: InvestigationType[]; selectedInvestigations: any[]; diff --git a/src/Components/Facility/Investigations/index.tsx b/src/Components/Facility/Investigations/index.tsx index 91836b6bbec..95147ec4c89 100644 --- a/src/Components/Facility/Investigations/index.tsx +++ b/src/Components/Facility/Investigations/index.tsx @@ -22,7 +22,7 @@ const initialState = { form: {}, }; -export interface Group { +export interface InvestigationGroup { external_id: string; name: string; } @@ -38,9 +38,9 @@ export interface InvestigationType { unit?: string; choices?: string; ideal_value?: string; - groups: Group[]; + groups: InvestigationGroup[]; } -type SearchItem = Group | InvestigationType; +type SearchItem = InvestigationGroup | InvestigationType; function isInvestigation(e: SearchItem): e is InvestigationType { return (e as InvestigationType).groups !== undefined; } @@ -67,7 +67,7 @@ const listOfInvestigations = ( ); }; -const findGroup = (group_id: string, groups: Group[]) => { +const findGroup = (group_id: string, groups: InvestigationGroup[]) => { return groups.find((g) => g.external_id === group_id); }; @@ -106,7 +106,9 @@ const Investigation = (props: { const [selectedGroup, setSelectedGroup] = useState([]); const [state, setState] = useReducer(testFormReducer, initialState); const [investigations, setInvestigations] = useState([]); - const [investigationGroups, setInvestigationGroups] = useState([]); + const [investigationGroups, setInvestigationGroups] = useState< + InvestigationGroup[] + >([]); const [selectedInvestigations, setSelectedInvestigations] = useState< InvestigationType[] >([]); diff --git a/src/Components/Facility/models.tsx b/src/Components/Facility/models.tsx index c3ac910970c..f26f458d4ca 100644 --- a/src/Components/Facility/models.tsx +++ b/src/Components/Facility/models.tsx @@ -203,11 +203,11 @@ export interface InventoryItemsModel { } export interface LocationModel { - id?: string; - name?: string; + id: string; + name: string; description?: string; middleware_address?: string; - location_type?: AssetLocationType; + location_type: AssetLocationType; facility?: { name: string; }; @@ -218,8 +218,8 @@ export interface LocationModel { export interface BedModel { id?: string; bed_type?: string; - description?: string; name?: string; + description?: string; facility?: string; location_object?: { name: string; @@ -227,6 +227,8 @@ export interface BedModel { }; location?: string; is_occupied?: boolean; + created_date?: string; + modified_date?: string; } export interface CurrentBed { diff --git a/src/Components/Users/SkillsSlideOver.tsx b/src/Components/Users/SkillsSlideOver.tsx index 1819333451d..63353479f0d 100644 --- a/src/Components/Users/SkillsSlideOver.tsx +++ b/src/Components/Users/SkillsSlideOver.tsx @@ -115,12 +115,10 @@ export default ({ show, setShow, username }: IProps) => { multiple={false} name="skill" disabled={!authorizeForAddSkill} - showAll={true} showNOptions={Infinity} selected={selectedSkill} setSelected={setSelectedSkill} errors="" - username={username} userSkills={skills?.results || []} /> { return fireRequest("getPermittedFacilities", [], params); }; -export const getAllFacilities = (params: object) => { - return fireRequest("getAllFacilities", [], params); -}; - -export const getAllSkills = (params: object) => { - return fireRequest("getAllSkills", [], params); -}; - export const getAnyFacility = (id: number | string, key?: string) => { return fireRequest("getAnyFacility", [], {}, { id: id }, key); }; @@ -296,10 +288,10 @@ export const createConsultation = (params: object) => { export const getConsultationList = (params: object) => { return fireRequest("getConsultationList", [], params); }; -export const getConsultation = (id: number) => { +export const getConsultation = (id: string) => { return fireRequest("getConsultation", [], {}, { id: id }); }; -export const updateConsultation = (id: number, params: object) => { +export const updateConsultation = (id: string, params: object) => { return fireRequest("updateConsultation", [], params, { id: id }); }; //Inventory @@ -506,9 +498,6 @@ export const updateAsset = (id: string, params: object) => export const operateAsset = (id: string, params: object) => fireRequest("operateAsset", [], params, { external_id: id }); -export const listAssetAvailability = (params: object) => - fireRequest("listAssetAvailability", [], params); - export const listPMJYPackages = (query?: string) => fireRequest("listPMJYPackages", [], { query }); diff --git a/src/Redux/api.tsx b/src/Redux/api.tsx index 8f8fc76484d..db049b1ed71 100644 --- a/src/Redux/api.tsx +++ b/src/Redux/api.tsx @@ -27,6 +27,7 @@ import { AssetServiceUpdate, AssetTransaction, AssetUpdate, + AssetUptimeRecord, PatientAssetBed, } from "../Components/Assets/AssetTypes"; import { @@ -77,6 +78,10 @@ import { import { IComment, IResource } from "../Components/Resource/models"; import { IShift } from "../Components/Shifting/models"; import { HCXPolicyModel } from "../Components/HCX/models"; +import { + InvestigationGroup, + InvestigationType, +} from "../Components/Facility/Investigations"; /** * A fake function that returns an empty object casted to type T @@ -286,6 +291,7 @@ const routes = { getAllFacilities: { path: "/api/v1/getallfacilities", + TRes: Type>(), }, createFacility: { @@ -933,10 +939,12 @@ const routes = { listInvestigations: { path: "/api/v1/investigation/", method: "GET", + TRes: Type>(), }, listInvestigationGroups: { - path: "/api/v1/investigation/group", + path: "/api/v1/investigation/group/", method: "GET", + TRes: Type>(), }, createInvestigation: { path: "/api/v1/consultation/{consultation_external_id}/investigation/", @@ -1232,10 +1240,12 @@ const routes = { listAssetAvailability: { path: "/api/v1/asset_availability/", method: "GET", + TRes: Type>(), }, getAssetAvailability: { path: "/api/v1/asset_availability/{id}", method: "GET", + TRes: Type(), }, // Prescription endpoints