diff --git a/src/components/encounter/ohri-encounter-form.component.tsx b/src/components/encounter/ohri-encounter-form.component.tsx index f4860eb0f..fdab9f2b3 100644 --- a/src/components/encounter/ohri-encounter-form.component.tsx +++ b/src/components/encounter/ohri-encounter-form.component.tsx @@ -80,6 +80,7 @@ export const OHRIEncounterForm: React.FC = ({ const [fields, setFields] = useState>([]); const [encounterLocation, setEncounterLocation] = useState(null); const [encounterDate, setEncounterDate] = useState(formSessionDate); + const [encounterProvider, setEncounterProvider] = useState(provider); const { encounter, isLoading: isLoadingEncounter } = useEncounter(formJson); const [previousEncounter, setPreviousEncounter] = useState(null); const [isLoadingPreviousEncounter, setIsLoadingPreviousEncounter] = useState(true); @@ -100,6 +101,7 @@ export const OHRIEncounterForm: React.FC = ({ form: form, visit: visit, setEncounterDate, + setEncounterProvider, }), [encounter, form?.encounter, location, patient, previousEncounter, sessionMode], ); diff --git a/src/components/inputs/ui-select-extended/ui-select-extended.scss b/src/components/inputs/ui-select-extended/ui-select-extended.scss index 1b76e7969..e1cd65389 100644 --- a/src/components/inputs/ui-select-extended/ui-select-extended.scss +++ b/src/components/inputs/ui-select-extended/ui-select-extended.scss @@ -44,22 +44,6 @@ width: 22.313rem !important; } } - .row { - display: flex; - flex-direction: row; - align-items: baseline; - } - .inline-loader { - margin-left: 10px; - } - - @media (max-width: 600px) { - .form-row { - flex-direction: column; - } - - .inline-loader { - margin-left: 0; - margin-top: 10px; - } + .dataSourceLoader { + margin-left: 3rem; } \ No newline at end of file diff --git a/src/components/inputs/ui-select-extended/ui-select-extended.tsx b/src/components/inputs/ui-select-extended/ui-select-extended.tsx index fff7aed75..d7d5da748 100644 --- a/src/components/inputs/ui-select-extended/ui-select-extended.tsx +++ b/src/components/inputs/ui-select-extended/ui-select-extended.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useMemo, useRef, useState } from 'react'; -import { ComboBox, InlineLoading, DropdownSkeleton, NotificationButton } from '@carbon/react'; +import { ComboBox } from '@carbon/react'; import { Add } from '@carbon/react/icons'; import { OHRIFormField, OHRIFormFieldProps } from '../../../api/types'; import { useField } from 'formik'; @@ -13,6 +13,7 @@ import { fieldRequiredErrCode, isEmpty } from '../../../validators/ohri-form-val import { PreviousValueReview } from '../../previous-value-review/previous-value-review.component'; import debounce from 'lodash-es/debounce'; import LoadingIcon from '../../loaders/loading.component'; +import InlineLoader from '../../loaders/inline-loader.component'; export const UISelectExtended: React.FC = ({ question, handler, onChange }) => { const [field, meta] = useField(question.id); @@ -41,25 +42,23 @@ export const UISelectExtended: React.FC = ({ question, handl }; const debouncedSearch = debounce((searchterm, dataSource) => { - setIsLoading(true); + //setIsLoading(true); //Commented out to first fix loader CSS dataSource.fetchData(searchterm).then(dataItems => { setItems(dataItems.map(dataSource.toUuidAndDisplay)); - //setIsLoading(false); + setIsLoading(false); }); }, 300); useEffect(() => { // If not searchable, preload the items if (dataSource && !isTrue(question.questionOptions['isSearchable'])) { - setIsLoading(true); - console.log('Is loading..'); + //setIsLoading(true); dataSource.fetchData().then(dataItems => { setItems(dataItems.map(dataSource.toUuidAndDisplay)); - //setIsLoading(false); + setIsLoading(false); }); } }, [dataSource]); - console.log(isLoading); useEffect(() => { // get the data source @@ -109,8 +108,8 @@ export const UISelectExtended: React.FC = ({ question, handl
= ({ question, handl />
{isLoading ? ( -
- +
+
- ) : null} + ) : //
+ null} {previousValueForReview && ( -
+
( +
+ +
+ +
+
+); + +export default InlineLoader; diff --git a/src/components/loaders/inline-loader.scss b/src/components/loaders/inline-loader.scss new file mode 100644 index 000000000..cbac6e400 --- /dev/null +++ b/src/components/loaders/inline-loader.scss @@ -0,0 +1,14 @@ +@use '@carbon/colors'; + .formField { + margin-left: 2rem; + max-width: 19rem; + + > div > div > label { + color: colors.$gray-70; + } + } + .row { + display: flex; + flex-direction: row; + align-items: baseline; + } \ No newline at end of file diff --git a/src/ohri-form-context.tsx b/src/ohri-form-context.tsx index 8dd222116..eefd0c804 100644 --- a/src/ohri-form-context.tsx +++ b/src/ohri-form-context.tsx @@ -25,6 +25,7 @@ export interface EncounterContext { sessionMode: SessionMode; encounterDate: Date; setEncounterDate(value: Date): void; + setEncounterProvider(value: any): void; } export const OHRIFormContext = React.createContext(undefined); diff --git a/src/registry/registry.ts b/src/registry/registry.ts index 540fae8b4..530d0c7a2 100644 --- a/src/registry/registry.ts +++ b/src/registry/registry.ts @@ -24,6 +24,7 @@ import { EncounterDatetimeHandler } from '../submission-handlers/encounterDateti import { UISelectExtended } from '../components/inputs/ui-select-extended/ui-select-extended'; import { EncounterProviderDataSource } from '../data-sources/encounter-provider-data-source'; import { ConceptDataSource } from '../data-sources/concept-provider-data-source'; +import { EncounterProviderHandler } from '../submission-handlers/encounterProviderHandler'; export interface RegistryItem { id: string; @@ -183,6 +184,11 @@ const baseHandlers: Array = [ component: EncounterDatetimeHandler, type: 'encounterDatetime', }, + { + id: 'EncounterProviderHandler', + component: EncounterProviderHandler, + type: 'encounterProvider', + }, ]; const fieldValidators: Array = [ diff --git a/src/submission-handlers/encounterProviderHandler.ts b/src/submission-handlers/encounterProviderHandler.ts new file mode 100644 index 000000000..31d3ada70 --- /dev/null +++ b/src/submission-handlers/encounterProviderHandler.ts @@ -0,0 +1,21 @@ +import { useSession } from '@openmrs/esm-framework'; +import { SubmissionHandler } from '..'; +import { OpenmrsEncounter, OHRIFormField } from '../api/types'; +import { EncounterContext } from '../ohri-form-context'; + +export const EncounterProviderHandler: SubmissionHandler = { + handleFieldSubmission: (field: OHRIFormField, value: any, context: EncounterContext) => { + context.setEncounterProvider(value); + return value; + }, + getInitialValue: (encounter: OpenmrsEncounter, field: OHRIFormField, allFormFields?: OHRIFormField[]) => { + return encounter.encounterProviders[0]; + }, + + getDisplayValue: (field: OHRIFormField, value: any) => { + return field.value ? field.value : null; + }, + getPreviousValue: (field: OHRIFormField, value: any) => { + return null; + }, +};