@medplum/react 0.9.26 → 0.9.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/AddressDisplay.d.ts +6 -0
- package/dist/cjs/AddressInput.d.ts +8 -0
- package/dist/cjs/AnnotationInput.d.ts +8 -0
- package/dist/cjs/AttachmentArrayDisplay.d.ts +7 -0
- package/dist/cjs/AttachmentArrayInput.d.ts +9 -0
- package/dist/cjs/AttachmentDisplay.d.ts +7 -0
- package/dist/cjs/AttachmentInput.d.ts +9 -0
- package/dist/cjs/Autocomplete.d.ts +20 -0
- package/dist/cjs/Avatar.d.ts +12 -0
- package/dist/cjs/BackboneElementDisplay.d.ts +9 -0
- package/dist/cjs/BackboneElementInput.d.ts +9 -0
- package/dist/cjs/Button.d.ts +15 -0
- package/dist/cjs/CalendarInput.d.ts +16 -0
- package/dist/cjs/Checkbox.d.ts +12 -0
- package/dist/cjs/CheckboxFormSection.d.ts +9 -0
- package/dist/cjs/CodeInput.d.ts +9 -0
- package/dist/cjs/CodeableConceptDisplay.d.ts +6 -0
- package/dist/cjs/CodeableConceptInput.d.ts +9 -0
- package/dist/cjs/CodingDisplay.d.ts +6 -0
- package/dist/cjs/CodingInput.d.ts +9 -0
- package/dist/cjs/ContactDetailDisplay.d.ts +6 -0
- package/dist/cjs/ContactDetailInput.d.ts +8 -0
- package/dist/cjs/ContactPointDisplay.d.ts +6 -0
- package/dist/cjs/ContactPointInput.d.ts +8 -0
- package/dist/cjs/DateTimeInput.d.ts +23 -0
- package/dist/cjs/DefaultResourceTimeline.d.ts +6 -0
- package/dist/cjs/DescriptionList.d.ts +12 -0
- package/dist/cjs/DiagnosticReportDisplay.d.ts +12 -0
- package/dist/cjs/Dialog.d.ts +10 -0
- package/dist/cjs/Document.d.ts +7 -0
- package/dist/cjs/EncounterTimeline.d.ts +6 -0
- package/dist/cjs/ErrorBoundary.d.ts +18 -0
- package/dist/cjs/ExtensionInput.d.ts +8 -0
- package/dist/cjs/FhirPathDisplay.d.ts +9 -0
- package/dist/cjs/FhirPathTable.d.ts +29 -0
- package/dist/cjs/FooterLinks.d.ts +6 -0
- package/dist/cjs/Form.d.ts +8 -0
- package/dist/cjs/FormSection.d.ts +11 -0
- package/dist/cjs/FormUtils.d.ts +5 -0
- package/dist/cjs/GoogleButton.d.ts +8 -0
- package/dist/cjs/Header.d.ts +12 -0
- package/dist/cjs/HeaderSearchInput.d.ts +10 -0
- package/dist/cjs/HumanNameDisplay.d.ts +8 -0
- package/dist/cjs/HumanNameInput.d.ts +8 -0
- package/dist/cjs/IdentifierDisplay.d.ts +6 -0
- package/dist/cjs/IdentifierInput.d.ts +8 -0
- package/dist/cjs/Input.d.ts +22 -0
- package/dist/cjs/InputRow.d.ts +7 -0
- package/dist/cjs/Loading.d.ts +3 -0
- package/dist/cjs/Logo.d.ts +6 -0
- package/dist/cjs/MedplumLink.d.ts +13 -0
- package/dist/cjs/MedplumProvider.d.ts +34 -0
- package/dist/cjs/MenuItem.d.ts +9 -0
- package/dist/cjs/MenuSeparator.d.ts +3 -0
- package/dist/cjs/PatientTimeline.d.ts +6 -0
- package/dist/cjs/PeriodInput.d.ts +8 -0
- package/dist/cjs/PlanDefinitionBuilder.d.ts +7 -0
- package/dist/cjs/Popup.d.ts +14 -0
- package/dist/cjs/QuantityDisplay.d.ts +7 -0
- package/dist/cjs/QuantityInput.d.ts +8 -0
- package/dist/cjs/QuestionnaireBuilder.d.ts +8 -0
- package/dist/cjs/QuestionnaireForm.d.ts +14 -0
- package/dist/cjs/QuestionnaireUtils.d.ts +30 -0
- package/dist/cjs/RangeDisplay.d.ts +7 -0
- package/dist/cjs/RangeInput.d.ts +14 -0
- package/dist/cjs/RatioDisplay.d.ts +6 -0
- package/dist/cjs/RatioInput.d.ts +14 -0
- package/dist/cjs/ReferenceDisplay.d.ts +7 -0
- package/dist/cjs/ReferenceInput.d.ts +9 -0
- package/dist/cjs/RegisterForm.d.ts +18 -0
- package/dist/cjs/RequestGroupDisplay.d.ts +9 -0
- package/dist/cjs/ResourceArrayDisplay.d.ts +11 -0
- package/dist/cjs/ResourceArrayInput.d.ts +11 -0
- package/dist/cjs/ResourceBadge.d.ts +9 -0
- package/dist/cjs/ResourceBlame.d.ts +10 -0
- package/dist/cjs/ResourceDiff.d.ts +9 -0
- package/dist/cjs/ResourceDiffTable.d.ts +9 -0
- package/dist/cjs/ResourceForm.d.ts +10 -0
- package/dist/cjs/ResourceHistoryTable.d.ts +9 -0
- package/dist/cjs/ResourceInput.d.ts +12 -0
- package/dist/cjs/ResourceName.d.ts +7 -0
- package/dist/cjs/ResourcePropertyDisplay.d.ts +24 -0
- package/dist/cjs/ResourcePropertyInput.d.ts +21 -0
- package/dist/cjs/ResourceTable.d.ts +7 -0
- package/dist/cjs/ResourceTimeline.d.ts +11 -0
- package/dist/cjs/Scheduler.d.ts +7 -0
- package/dist/cjs/Scrollable.d.ts +9 -0
- package/dist/cjs/SearchControl.d.ts +40 -0
- package/dist/cjs/SearchControlField.d.ts +41 -0
- package/dist/cjs/SearchFieldEditor.d.ts +11 -0
- package/dist/cjs/SearchFilterEditor.d.ts +11 -0
- package/dist/cjs/SearchFilterValueDialog.d.ts +15 -0
- package/dist/cjs/SearchFilterValueDisplay.d.ts +7 -0
- package/dist/cjs/SearchFilterValueInput.d.ts +12 -0
- package/dist/cjs/SearchPopupMenu.d.ts +15 -0
- package/dist/cjs/SearchUtils.d.ts +174 -0
- package/dist/cjs/Select.d.ts +16 -0
- package/dist/cjs/ServiceRequestTimeline.d.ts +6 -0
- package/dist/cjs/SignInForm.d.ts +17 -0
- package/dist/cjs/StatusBadge.d.ts +6 -0
- package/dist/cjs/SubMenu.d.ts +7 -0
- package/dist/cjs/Tab.d.ts +12 -0
- package/dist/cjs/TabList.d.ts +10 -0
- package/dist/cjs/TabPanel.d.ts +6 -0
- package/dist/cjs/TabSwitch.d.ts +6 -0
- package/dist/cjs/TextArea.d.ts +18 -0
- package/dist/cjs/Timeline.d.ts +17 -0
- package/dist/cjs/TimingInput.d.ts +8 -0
- package/dist/cjs/TitleBar.d.ts +6 -0
- package/dist/cjs/UploadButton.d.ts +7 -0
- package/dist/cjs/constants.d.ts +1 -0
- package/dist/cjs/index.d.ts +86 -0
- package/dist/cjs/index.js +356 -192
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.min.js +1 -1
- package/dist/cjs/index.min.js.map +1 -1
- package/dist/cjs/stories/AddressInput.stories.d.ts +6 -0
- package/dist/cjs/stories/AttachmentArrayInput.stories.d.ts +6 -0
- package/dist/cjs/stories/AttachmentInput.stories.d.ts +6 -0
- package/dist/cjs/stories/Autocomplete.stories.d.ts +9 -0
- package/dist/cjs/stories/Avatar.stories.d.ts +10 -0
- package/dist/cjs/stories/Button.stories.d.ts +9 -0
- package/dist/cjs/stories/CodeableConceptDisplay.stories.d.ts +8 -0
- package/dist/cjs/stories/DiagnosticReportDisplay.stories.d.ts +5 -0
- package/dist/cjs/stories/Dialog.stories.d.ts +5 -0
- package/dist/cjs/stories/EncounterTimeline.stories.d.ts +5 -0
- package/dist/cjs/stories/FhirPathDisplay.stories.d.ts +7 -0
- package/dist/cjs/stories/FormSection.stories.d.ts +6 -0
- package/dist/cjs/stories/Header.stories.d.ts +8 -0
- package/dist/cjs/stories/Input.stories.d.ts +6 -0
- package/dist/cjs/stories/Loading.stories.d.ts +5 -0
- package/dist/cjs/stories/Logo.stories.d.ts +5 -0
- package/dist/cjs/stories/PatientTimeline.stories.d.ts +5 -0
- package/dist/cjs/stories/PlanDefinitionBuilder.stories.d.ts +5 -0
- package/dist/cjs/stories/QuestionnaireBuilder.stories.d.ts +7 -0
- package/dist/cjs/stories/QuestionnaireForm.stories.d.ts +11 -0
- package/dist/cjs/stories/ReferenceInput.stories.d.ts +6 -0
- package/dist/cjs/stories/RegisterForm.stories.d.ts +7 -0
- package/dist/cjs/stories/RequestGroupDisplay.stories.d.ts +5 -0
- package/dist/cjs/stories/ResourceBlame.stories.d.ts +5 -0
- package/dist/cjs/stories/ResourceForm.stories.d.ts +12 -0
- package/dist/cjs/stories/ResourceHistoryTable.stories.d.ts +5 -0
- package/dist/cjs/stories/ResourceTable.stories.d.ts +7 -0
- package/dist/cjs/stories/Scheduler.stories.d.ts +5 -0
- package/dist/cjs/stories/SearchControl.stories.d.ts +13 -0
- package/dist/cjs/stories/Select.stories.d.ts +6 -0
- package/dist/cjs/stories/SignInForm.stories.d.ts +8 -0
- package/dist/cjs/stories/StatusBadge.stories.d.ts +5 -0
- package/dist/cjs/stories/Tabs.stories.d.ts +6 -0
- package/dist/cjs/stories/Timeline.stories.d.ts +5 -0
- package/dist/cjs/stories/TimingInput.stories.d.ts +6 -0
- package/dist/cjs/stories/UploadButton.stories.d.ts +6 -0
- package/dist/cjs/styles.css +135 -130
- package/dist/cjs/test.setup.d.ts +1 -0
- package/dist/cjs/useResource.d.ts +8 -0
- package/dist/cjs/utils/blame.d.ts +8 -0
- package/dist/cjs/utils/date.d.ts +6 -0
- package/dist/cjs/utils/diff.d.ts +16 -0
- package/dist/cjs/utils/dom.d.ts +15 -0
- package/dist/cjs/utils/outcomes.d.ts +2 -0
- package/dist/cjs/utils/recaptcha.d.ts +12 -0
- package/dist/cjs/utils.d.ts +5 -0
- package/dist/esm/Autocomplete.d.ts +1 -0
- package/dist/esm/Autocomplete.js +4 -8
- package/dist/esm/Autocomplete.js.map +1 -1
- package/dist/esm/CalendarInput.d.ts +1 -0
- package/dist/esm/CalendarInput.js +6 -5
- package/dist/esm/CalendarInput.js.map +1 -1
- package/dist/esm/CodeableConceptDisplay.js +4 -2
- package/dist/esm/CodeableConceptDisplay.js.map +1 -1
- package/dist/esm/DateTimeInput.js +1 -3
- package/dist/esm/DateTimeInput.js.map +1 -1
- package/dist/esm/DiagnosticReportDisplay.js +2 -4
- package/dist/esm/DiagnosticReportDisplay.js.map +1 -1
- package/dist/esm/FhirPathTable.js +5 -2
- package/dist/esm/FhirPathTable.js.map +1 -1
- package/dist/esm/GoogleButton.js +1 -1
- package/dist/esm/GoogleButton.js.map +1 -1
- package/dist/esm/Header.js +7 -3
- package/dist/esm/Header.js.map +1 -1
- package/dist/esm/PlanDefinitionBuilder.js +108 -39
- package/dist/esm/PlanDefinitionBuilder.js.map +1 -1
- package/dist/esm/QuestionnaireBuilder.js +1 -1
- package/dist/esm/QuestionnaireBuilder.js.map +1 -1
- package/dist/esm/QuestionnaireForm.js +5 -1
- package/dist/esm/QuestionnaireForm.js.map +1 -1
- package/dist/esm/RegisterForm.js +14 -3
- package/dist/esm/RegisterForm.js.map +1 -1
- package/dist/esm/RequestGroupDisplay.js +3 -4
- package/dist/esm/RequestGroupDisplay.js.map +1 -1
- package/dist/esm/ResourceArrayInput.js +1 -2
- package/dist/esm/ResourceArrayInput.js.map +1 -1
- package/dist/esm/ResourceBlame.js +1 -1
- package/dist/esm/ResourceBlame.js.map +1 -1
- package/dist/esm/ResourceDiffTable.js +1 -1
- package/dist/esm/ResourceDiffTable.js.map +1 -1
- package/dist/esm/ResourceForm.js +1 -1
- package/dist/esm/ResourceForm.js.map +1 -1
- package/dist/esm/ResourceHistoryTable.js +6 -4
- package/dist/esm/ResourceHistoryTable.js.map +1 -1
- package/dist/esm/ResourceInput.d.ts +1 -0
- package/dist/esm/ResourceInput.js +4 -3
- package/dist/esm/ResourceInput.js.map +1 -1
- package/dist/esm/ResourcePropertyDisplay.js +5 -5
- package/dist/esm/ResourcePropertyDisplay.js.map +1 -1
- package/dist/esm/ResourcePropertyInput.js +3 -0
- package/dist/esm/ResourcePropertyInput.js.map +1 -1
- package/dist/esm/ResourceTable.js +1 -1
- package/dist/esm/ResourceTable.js.map +1 -1
- package/dist/esm/ResourceTimeline.js +13 -7
- package/dist/esm/ResourceTimeline.js.map +1 -1
- package/dist/esm/Scheduler.js +13 -6
- package/dist/esm/Scheduler.js.map +1 -1
- package/dist/esm/SearchControl.js +5 -2
- package/dist/esm/SearchControl.js.map +1 -1
- package/dist/esm/SearchFilterValueDisplay.js +2 -2
- package/dist/esm/SearchFilterValueDisplay.js.map +1 -1
- package/dist/esm/SearchUtils.js +2 -3
- package/dist/esm/SearchUtils.js.map +1 -1
- package/dist/esm/SignInForm.js +2 -1
- package/dist/esm/SignInForm.js.map +1 -1
- package/dist/esm/Timeline.js +2 -4
- package/dist/esm/Timeline.js.map +1 -1
- package/dist/esm/TimingInput.d.ts +8 -0
- package/dist/esm/TimingInput.js +90 -0
- package/dist/esm/TimingInput.js.map +1 -0
- package/dist/esm/index.d.ts +0 -1
- package/dist/esm/index.js +0 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +1 -1
- package/dist/esm/index.min.js.map +1 -1
- package/dist/esm/stories/Autocomplete.stories.d.ts +1 -0
- package/dist/esm/stories/CodeableConceptDisplay.stories.d.ts +8 -0
- package/dist/esm/stories/TimingInput.stories.d.ts +6 -0
- package/dist/esm/styles.css +135 -130
- package/dist/esm/utils/recaptcha.js +10 -4
- package/dist/esm/utils/recaptcha.js.map +1 -1
- package/package.json +6 -6
- package/dist/esm/DateTimeDisplay.d.ts +0 -5
- package/dist/esm/DateTimeDisplay.js +0 -11
- package/dist/esm/DateTimeDisplay.js.map +0 -1
- package/dist/esm/PeriodDisplay.d.ts +0 -6
- package/dist/esm/PeriodDisplay.js +0 -16
- package/dist/esm/PeriodDisplay.js.map +0 -1
- package/tsconfig.cjs.json +0 -7
- package/tsconfig.esm.json +0 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourceInput.js","sources":["../../src/ResourceInput.tsx"],"sourcesContent":["import { Bundle, BundleEntry, Reference, Resource, ResourceType } from '@medplum/fhirtypes';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Autocomplete } from './Autocomplete';\nimport { Avatar } from './Avatar';\nimport { useMedplum } from './MedplumProvider';\nimport { ResourceName } from './ResourceName';\nimport { useResource } from './useResource';\n\nexport interface ResourceInputProps<T extends Resource = Resource> {\n readonly resourceType: string;\n readonly name: string;\n readonly defaultValue?: T | Reference<T>;\n readonly className?: string;\n readonly placeholder?: string;\n readonly onChange?: (value: T | undefined) => void;\n}\n\nexport function ResourceInput<T extends Resource = Resource>(props: ResourceInputProps<T>): JSX.Element {\n const medplum = useMedplum();\n const defaultResource = useResource(props.defaultValue);\n const [value, setValue] = useState<T>();\n\n const resourceTypeRef = useRef<string>(props.resourceType);\n resourceTypeRef.current = props.resourceType;\n\n useEffect(() => {\n setValue(defaultResource);\n }, [defaultResource]);\n\n function setValueWrapper(newValue: T | undefined): void {\n setValue(newValue);\n if (props.onChange) {\n props.onChange(newValue);\n }\n }\n\n return (\n <Autocomplete\n loadOptions={(input: string): Promise<T[]> => {\n return medplum\n .search(resourceTypeRef.current as ResourceType, 'name=' + encodeURIComponent(input) + '&_count=10')\n .then((bundle: Bundle) => (bundle.entry as BundleEntry[]).map((entry) => entry.resource as T));\n }}\n getId={(item: T) => {\n return item.id as string;\n }}\n getIcon={(item: T) => <Avatar value={item} />}\n getDisplay={(item: T) => <ResourceName value={item} />}\n getHelpText={(item: T) => {\n if (item.resourceType === 'Patient' && item.birthDate) {\n return 'DoB: ' + item.birthDate;\n }\n return undefined;\n }}\n name={props.name}\n defaultValue={value ? [value] : undefined}\n className={props.className}\n placeholder={props.placeholder}\n onChange={(items: T[]) => {\n setValueWrapper(items.length > 0 ? items[0] : undefined);\n }}\n />\n );\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ResourceInput.js","sources":["../../src/ResourceInput.tsx"],"sourcesContent":["import { Bundle, BundleEntry, Reference, Resource, ResourceType } from '@medplum/fhirtypes';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Autocomplete } from './Autocomplete';\nimport { Avatar } from './Avatar';\nimport { useMedplum } from './MedplumProvider';\nimport { ResourceName } from './ResourceName';\nimport { useResource } from './useResource';\n\nexport interface ResourceInputProps<T extends Resource = Resource> {\n readonly resourceType: string;\n readonly name: string;\n readonly defaultValue?: T | Reference<T>;\n readonly className?: string;\n readonly placeholder?: string;\n readonly loadOnFocus?: boolean;\n readonly onChange?: (value: T | undefined) => void;\n}\n\nexport function ResourceInput<T extends Resource = Resource>(props: ResourceInputProps<T>): JSX.Element {\n const medplum = useMedplum();\n const defaultResource = useResource(props.defaultValue);\n const [value, setValue] = useState<T>();\n\n const resourceTypeRef = useRef<string>(props.resourceType);\n resourceTypeRef.current = props.resourceType;\n\n useEffect(() => {\n setValue(defaultResource);\n }, [defaultResource]);\n\n function setValueWrapper(newValue: T | undefined): void {\n setValue(newValue);\n if (props.onChange) {\n props.onChange(newValue);\n }\n }\n\n return (\n <Autocomplete\n loadOptions={async (input: string): Promise<T[]> => {\n return medplum\n .search(resourceTypeRef.current as ResourceType, 'name=' + encodeURIComponent(input) + '&_count=10')\n .then((bundle: Bundle) => (bundle.entry as BundleEntry[]).map((entry) => entry.resource as T));\n }}\n getId={(item: T) => {\n return item.id as string;\n }}\n getIcon={(item: T) => <Avatar value={item} />}\n getDisplay={(item: T) => <ResourceName value={item} />}\n getHelpText={(item: T) => {\n if (item.resourceType === 'Patient' && item.birthDate) {\n return 'DoB: ' + item.birthDate;\n }\n return undefined;\n }}\n name={props.name}\n defaultValue={value ? [value] : undefined}\n className={props.className}\n placeholder={props.placeholder}\n loadOnFocus={props.loadOnFocus}\n onChange={(items: T[]) => {\n setValueWrapper(items.length > 0 ? items[0] : undefined);\n }}\n />\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAkBM,SAAU,aAAa,CAAgC,KAA4B,EAAA;AACvF,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAK,CAAC;IAExC,MAAM,eAAe,GAAG,MAAM,CAAS,KAAK,CAAC,YAAY,CAAC,CAAC;AAC3D,IAAA,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC;IAE7C,SAAS,CAAC,MAAK;QACb,QAAQ,CAAC,eAAe,CAAC,CAAC;AAC5B,KAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,SAAS,eAAe,CAAC,QAAuB,EAAA;QAC9C,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC1B,SAAA;KACF;IAED,QACE,oBAAC,YAAY,EAAA,EACX,WAAW,EAAE,CAAO,KAAa,KAAkB,SAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA;AACjD,YAAA,OAAO,OAAO;AACX,iBAAA,MAAM,CAAC,eAAe,CAAC,OAAuB,EAAE,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;iBACnG,IAAI,CAAC,CAAC,MAAc,KAAM,MAAM,CAAC,KAAuB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAa,CAAC,CAAC,CAAC;AACnG,SAAC,CAAA,EACD,KAAK,EAAE,CAAC,IAAO,KAAI;YACjB,OAAO,IAAI,CAAC,EAAY,CAAC;AAC3B,SAAC,EACD,OAAO,EAAE,CAAC,IAAO,KAAK,KAAC,CAAA,aAAA,CAAA,MAAM,IAAC,KAAK,EAAE,IAAI,EAAA,CAAI,EAC7C,UAAU,EAAE,CAAC,IAAO,KAAK,KAAC,CAAA,aAAA,CAAA,YAAY,IAAC,KAAK,EAAE,IAAI,EAAA,CAAI,EACtD,WAAW,EAAE,CAAC,IAAO,KAAI;YACvB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;AACrD,gBAAA,OAAO,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;AACjC,aAAA;AACD,YAAA,OAAO,SAAS,CAAC;SAClB,EACD,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,YAAY,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,EACzC,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,QAAQ,EAAE,CAAC,KAAU,KAAI;AACvB,YAAA,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;SAC1D,EAAA,CACD,EACF;AACJ;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildTypeName, PropertyType, getTypedPropertyValue } from '@medplum/core';
|
|
1
|
+
import { buildTypeName, PropertyType, formatTiming, formatPeriod, formatDateTime, getTypedPropertyValue } from '@medplum/core';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { AddressDisplay } from './AddressDisplay.js';
|
|
4
4
|
import { AttachmentArrayDisplay } from './AttachmentArrayDisplay.js';
|
|
@@ -8,10 +8,8 @@ import { CodeableConceptDisplay } from './CodeableConceptDisplay.js';
|
|
|
8
8
|
import { CodingDisplay } from './CodingDisplay.js';
|
|
9
9
|
import { ContactDetailDisplay } from './ContactDetailDisplay.js';
|
|
10
10
|
import { ContactPointDisplay } from './ContactPointDisplay.js';
|
|
11
|
-
import { DateTimeDisplay } from './DateTimeDisplay.js';
|
|
12
11
|
import { HumanNameDisplay } from './HumanNameDisplay.js';
|
|
13
12
|
import { IdentifierDisplay } from './IdentifierDisplay.js';
|
|
14
|
-
import { PeriodDisplay } from './PeriodDisplay.js';
|
|
15
13
|
import { QuantityDisplay } from './QuantityDisplay.js';
|
|
16
14
|
import { RangeDisplay } from './RangeDisplay.js';
|
|
17
15
|
import { RatioDisplay } from './RatioDisplay.js';
|
|
@@ -44,7 +42,7 @@ function ResourcePropertyDisplay(props) {
|
|
|
44
42
|
return React.createElement(ReferenceDisplay, { value: { reference: value }, link: props.link });
|
|
45
43
|
case PropertyType.dateTime:
|
|
46
44
|
case PropertyType.instant:
|
|
47
|
-
return React.createElement(
|
|
45
|
+
return React.createElement("div", null, formatDateTime(value));
|
|
48
46
|
case PropertyType.markdown:
|
|
49
47
|
return React.createElement("pre", null, value);
|
|
50
48
|
case PropertyType.Address:
|
|
@@ -66,7 +64,7 @@ function ResourcePropertyDisplay(props) {
|
|
|
66
64
|
case PropertyType.Identifier:
|
|
67
65
|
return React.createElement(IdentifierDisplay, { value: value });
|
|
68
66
|
case PropertyType.Period:
|
|
69
|
-
return React.createElement(
|
|
67
|
+
return React.createElement("div", null, formatPeriod(value));
|
|
70
68
|
case PropertyType.Quantity:
|
|
71
69
|
return React.createElement(QuantityDisplay, { value: value });
|
|
72
70
|
case PropertyType.Range:
|
|
@@ -75,6 +73,8 @@ function ResourcePropertyDisplay(props) {
|
|
|
75
73
|
return React.createElement(RatioDisplay, { value: value });
|
|
76
74
|
case PropertyType.Reference:
|
|
77
75
|
return React.createElement(ReferenceDisplay, { value: value, link: props.link });
|
|
76
|
+
case PropertyType.Timing:
|
|
77
|
+
return React.createElement("div", null, formatTiming(value));
|
|
78
78
|
default:
|
|
79
79
|
if (!(property === null || property === void 0 ? void 0 : property.path)) {
|
|
80
80
|
throw Error(`Displaying property of type ${props.propertyType} requires element definition path`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourcePropertyDisplay.js","sources":["../../src/ResourcePropertyDisplay.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"ResourcePropertyDisplay.js","sources":["../../src/ResourcePropertyDisplay.tsx"],"sourcesContent":["import {\n buildTypeName,\n formatDateTime,\n formatPeriod,\n formatTiming,\n getTypedPropertyValue,\n PropertyType,\n TypedValue,\n} from '@medplum/core';\nimport { ElementDefinition } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { AddressDisplay } from './AddressDisplay';\nimport { AttachmentArrayDisplay } from './AttachmentArrayDisplay';\nimport { AttachmentDisplay } from './AttachmentDisplay';\nimport { BackboneElementDisplay } from './BackboneElementDisplay';\nimport { CodeableConceptDisplay } from './CodeableConceptDisplay';\nimport { CodingDisplay } from './CodingDisplay';\nimport { ContactDetailDisplay } from './ContactDetailDisplay';\nimport { ContactPointDisplay } from './ContactPointDisplay';\nimport { HumanNameDisplay } from './HumanNameDisplay';\nimport { IdentifierDisplay } from './IdentifierDisplay';\nimport { QuantityDisplay } from './QuantityDisplay';\nimport { RangeDisplay } from './RangeDisplay';\nimport { RatioDisplay } from './RatioDisplay';\nimport { ReferenceDisplay } from './ReferenceDisplay';\nimport { ResourceArrayDisplay } from './ResourceArrayDisplay';\n\nexport interface ResourcePropertyDisplayProps {\n property?: ElementDefinition;\n propertyType: PropertyType;\n value: any;\n arrayElement?: boolean;\n maxWidth?: number;\n ignoreMissingValues?: boolean;\n link?: boolean;\n}\n\nexport function ResourcePropertyDisplay(props: ResourcePropertyDisplayProps): JSX.Element {\n const { property, propertyType, value } = props;\n\n if (property?.max === '*' && !props.arrayElement) {\n if (propertyType === 'Attachment') {\n return <AttachmentArrayDisplay values={value} maxWidth={props.maxWidth} />;\n }\n return (\n <ResourceArrayDisplay\n property={property}\n values={value}\n ignoreMissingValues={props.ignoreMissingValues}\n link={props.link}\n />\n );\n }\n\n switch (propertyType) {\n case PropertyType.boolean:\n return <div>{value === undefined ? '' : Boolean(value).toString()}</div>;\n case PropertyType.SystemString:\n case PropertyType.code:\n case PropertyType.date:\n case PropertyType.integer:\n case PropertyType.positiveInt:\n case PropertyType.string:\n case PropertyType.unsignedInt:\n case PropertyType.uri:\n case PropertyType.url:\n return <div>{value}</div>;\n case PropertyType.canonical:\n return <ReferenceDisplay value={{ reference: value }} link={props.link} />;\n case PropertyType.dateTime:\n case PropertyType.instant:\n return <div>{formatDateTime(value)}</div>;\n case PropertyType.markdown:\n return <pre>{value}</pre>;\n case PropertyType.Address:\n return <AddressDisplay value={value} />;\n case PropertyType.Annotation:\n return <div>{value?.text}</div>;\n case PropertyType.Attachment:\n return <AttachmentDisplay value={value} maxWidth={props.maxWidth} />;\n case PropertyType.CodeableConcept:\n return <CodeableConceptDisplay value={value} />;\n case PropertyType.Coding:\n return <CodingDisplay value={value} />;\n case PropertyType.ContactDetail:\n return <ContactDetailDisplay value={value} />;\n case PropertyType.ContactPoint:\n return <ContactPointDisplay value={value} />;\n case PropertyType.HumanName:\n return <HumanNameDisplay value={value} />;\n case PropertyType.Identifier:\n return <IdentifierDisplay value={value} />;\n case PropertyType.Period:\n return <div>{formatPeriod(value)}</div>;\n case PropertyType.Quantity:\n return <QuantityDisplay value={value} />;\n case PropertyType.Range:\n return <RangeDisplay value={value} />;\n case PropertyType.Ratio:\n return <RatioDisplay value={value} />;\n case PropertyType.Reference:\n return <ReferenceDisplay value={value} link={props.link} />;\n case PropertyType.Timing:\n return <div>{formatTiming(value)}</div>;\n default:\n if (!property?.path) {\n throw Error(`Displaying property of type ${props.propertyType} requires element definition path`);\n }\n return (\n <BackboneElementDisplay\n value={{ type: buildTypeName(property?.path?.split('.') as string[]), value }}\n compact={true}\n ignoreMissingValues={props.ignoreMissingValues}\n />\n );\n }\n}\n\n/**\n * Returns the value of the property and the property type.\n * Some property definitions support multiple types.\n * For example, \"Observation.value[x]\" can be \"valueString\", \"valueInteger\", \"valueQuantity\", etc.\n * According to the spec, there can only be one property for a given element definition.\n * This function returns the value and the type.\n * @param context The base context (usually a FHIR resource).\n * @param property The property definition.\n * @returns The value of the property and the property type.\n */\nexport function getValueAndType(context: TypedValue, path: string): [any, PropertyType] {\n const typedResult = getTypedPropertyValue(context, path);\n if (!typedResult) {\n return [undefined, 'undefined' as PropertyType];\n }\n\n if (Array.isArray(typedResult)) {\n return [typedResult.map((e) => e.value), typedResult[0].type as PropertyType];\n }\n\n return [typedResult.value, typedResult.type as PropertyType];\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,7 @@ import { ReferenceInput } from './ReferenceInput.js';
|
|
|
25
25
|
import { ResourceArrayInput } from './ResourceArrayInput.js';
|
|
26
26
|
import { Select } from './Select.js';
|
|
27
27
|
import { TextArea } from './TextArea.js';
|
|
28
|
+
import { TimingInput } from './TimingInput.js';
|
|
28
29
|
|
|
29
30
|
function ResourcePropertyInput(props) {
|
|
30
31
|
var _a, _b, _c;
|
|
@@ -138,6 +139,8 @@ function ElementDefinitionTypeInput(props) {
|
|
|
138
139
|
return React.createElement(RatioInput, { name: name, defaultValue: value, onChange: props.onChange });
|
|
139
140
|
case PropertyType.Reference:
|
|
140
141
|
return (React.createElement(ReferenceInput, { name: name, defaultValue: value, targetTypes: getTargetTypes(property), onChange: props.onChange }));
|
|
142
|
+
case PropertyType.Timing:
|
|
143
|
+
return React.createElement(TimingInput, { name: name, defaultValue: value, onChange: props.onChange });
|
|
141
144
|
default:
|
|
142
145
|
return (React.createElement(BackboneElementInput, { typeName: buildTypeName((_a = property.path) === null || _a === void 0 ? void 0 : _a.split('.')), defaultValue: value, onChange: props.onChange, outcome: props.outcome }));
|
|
143
146
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourcePropertyInput.js","sources":["../../src/ResourcePropertyInput.tsx"],"sourcesContent":["import { buildTypeName, capitalize, PropertyType } from '@medplum/core';\nimport { ElementDefinition, ElementDefinitionType, OperationOutcome } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\nimport { AddressInput } from './AddressInput';\nimport { AnnotationInput } from './AnnotationInput';\nimport { AttachmentArrayInput } from './AttachmentArrayInput';\nimport { AttachmentInput } from './AttachmentInput';\nimport { BackboneElementInput } from './BackboneElementInput';\nimport { Checkbox } from './Checkbox';\nimport { CodeableConceptInput } from './CodeableConceptInput';\nimport { CodeInput } from './CodeInput';\nimport { CodingInput } from './CodingInput';\nimport { ContactDetailInput } from './ContactDetailInput';\nimport { ContactPointInput } from './ContactPointInput';\nimport { DateTimeInput } from './DateTimeInput';\nimport { ExtensionInput } from './ExtensionInput';\nimport { HumanNameInput } from './HumanNameInput';\nimport { IdentifierInput } from './IdentifierInput';\nimport { Input } from './Input';\nimport { InputRow } from './InputRow';\nimport { PeriodInput } from './PeriodInput';\nimport { QuantityInput } from './QuantityInput';\nimport { RangeInput } from './RangeInput';\nimport { RatioInput } from './RatioInput';\nimport { ReferenceInput } from './ReferenceInput';\nimport { ResourceArrayInput } from './ResourceArrayInput';\nimport { Select } from './Select';\nimport { TextArea } from './TextArea';\n\nexport interface ResourcePropertyInputProps {\n property: ElementDefinition;\n name: string;\n defaultPropertyType?: PropertyType;\n defaultValue?: any;\n arrayElement?: boolean;\n onChange?: (value: any, propName?: string) => void;\n outcome?: OperationOutcome;\n}\n\nexport function ResourcePropertyInput(props: ResourcePropertyInputProps): JSX.Element {\n const property = props.property;\n const propertyType = props.defaultPropertyType ?? (property.type?.[0]?.code as PropertyType);\n const name = props.name;\n const value = props.defaultValue;\n\n if (property.max === '*' && !props.arrayElement) {\n if (propertyType === 'Attachment') {\n return <AttachmentArrayInput name={name} defaultValue={value} onChange={props.onChange} />;\n }\n return <ResourceArrayInput property={property} name={name} defaultValue={value} onChange={props.onChange} />;\n }\n\n const propertyTypes = property.type as ElementDefinitionType[];\n if (propertyTypes.length > 1) {\n return <ElementDefinitionInputSelector elementDefinitionTypes={propertyTypes} {...props} />;\n } else {\n return <ElementDefinitionTypeInput elementDefinitionType={propertyTypes[0]} {...props} />;\n }\n}\n\nexport interface ElementDefinitionSelectorProps extends ResourcePropertyInputProps {\n elementDefinitionTypes: ElementDefinitionType[];\n}\n\nexport function ElementDefinitionInputSelector(props: ElementDefinitionSelectorProps): JSX.Element {\n const propertyTypes = props.elementDefinitionTypes;\n let initialPropertyType: ElementDefinitionType | undefined = undefined;\n if (props.defaultPropertyType) {\n initialPropertyType = propertyTypes.find((t) => t.code === props.defaultPropertyType) as ElementDefinitionType;\n }\n if (!initialPropertyType) {\n initialPropertyType = propertyTypes[0];\n }\n const [selectedType, setSelectedType] = useState(initialPropertyType);\n return (\n <InputRow>\n <Select\n style={{ width: '200px' }}\n defaultValue={selectedType?.code}\n onChange={(newValue) => {\n setSelectedType(\n propertyTypes.find((type: ElementDefinitionType) => type.code === newValue) as ElementDefinitionType\n );\n }}\n >\n {propertyTypes.map((type: ElementDefinitionType) => (\n <option key={type.code} value={type.code}>\n {type.code}\n </option>\n ))}\n </Select>\n <ElementDefinitionTypeInput\n {...props}\n elementDefinitionType={selectedType}\n onChange={(newValue: any) => {\n if (props.onChange) {\n props.onChange(newValue, props.name.replace('[x]', capitalize(selectedType.code as string)));\n }\n }}\n />\n </InputRow>\n );\n}\n\nexport interface ElementDefinitionTypeInputProps extends ResourcePropertyInputProps {\n elementDefinitionType: ElementDefinitionType;\n}\n\nexport function ElementDefinitionTypeInput(props: ElementDefinitionTypeInputProps): JSX.Element {\n const property = props.property;\n const propertyType = props.elementDefinitionType.code as PropertyType;\n const name = props.name;\n const value = props.defaultValue;\n\n switch (propertyType) {\n // 2.24.0.1 Primitive Types\n // https://www.hl7.org/fhir/datatypes.html#primitive\n\n case PropertyType.SystemString:\n case PropertyType.canonical:\n case PropertyType.string:\n case PropertyType.time:\n case PropertyType.uri:\n case PropertyType.url:\n return (\n <Input\n type=\"text\"\n name={name}\n testid={name}\n defaultValue={value}\n onChange={props.onChange}\n outcome={props.outcome}\n />\n );\n case PropertyType.date:\n return (\n <Input\n type=\"date\"\n name={name}\n testid={name}\n defaultValue={value}\n onChange={props.onChange}\n outcome={props.outcome}\n />\n );\n case PropertyType.dateTime:\n case PropertyType.instant:\n return (\n <DateTimeInput\n type=\"datetime-local\"\n name={name}\n testid={name}\n defaultValue={value}\n onChange={props.onChange}\n outcome={props.outcome}\n />\n );\n case PropertyType.decimal:\n case PropertyType.integer:\n case PropertyType.positiveInt:\n case PropertyType.unsignedInt:\n return (\n <Input\n type=\"number\"\n step={propertyType === PropertyType.decimal ? 'any' : 1}\n name={name}\n testid={name}\n defaultValue={value}\n onChange={(newValue) => {\n if (props.onChange) {\n props.onChange(parseFloat(newValue));\n }\n }}\n outcome={props.outcome}\n />\n );\n case PropertyType.code:\n return <CodeInput property={property} name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.boolean:\n return (\n <Checkbox\n name={name}\n testid={name}\n defaultValue={!!value}\n onChange={(newValue) => {\n if (props.onChange) {\n props.onChange(newValue);\n }\n }}\n />\n );\n case PropertyType.markdown:\n return <TextArea name={name} testid={name} defaultValue={value} onChange={props.onChange} />;\n\n // 2.24.0.2 Complex Types\n // https://www.hl7.org/fhir/datatypes.html#complex\n\n case PropertyType.Address:\n return <AddressInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Annotation:\n return <AnnotationInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Attachment:\n return <AttachmentInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.CodeableConcept:\n return <CodeableConceptInput property={property} name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Coding:\n return <CodingInput property={property} name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.ContactDetail:\n return <ContactDetailInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.ContactPoint:\n return <ContactPointInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Extension:\n return <ExtensionInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.HumanName:\n return <HumanNameInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Identifier:\n return <IdentifierInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Period:\n return <PeriodInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Quantity:\n return <QuantityInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Range:\n return <RangeInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Ratio:\n return <RatioInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Reference:\n return (\n <ReferenceInput\n name={name}\n defaultValue={value}\n targetTypes={getTargetTypes(property)}\n onChange={props.onChange}\n />\n );\n default:\n return (\n <BackboneElementInput\n typeName={buildTypeName(property.path?.split('.') as string[])}\n defaultValue={value}\n onChange={props.onChange}\n outcome={props.outcome}\n />\n );\n }\n}\n\nfunction getTargetTypes(property?: ElementDefinition): string[] | undefined {\n return property?.type?.[0]?.targetProfile?.map((p) => p.split('/').pop() as string);\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ResourcePropertyInput.js","sources":["../../src/ResourcePropertyInput.tsx"],"sourcesContent":["import { buildTypeName, capitalize, PropertyType } from '@medplum/core';\nimport { ElementDefinition, ElementDefinitionType, OperationOutcome } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\nimport { AddressInput } from './AddressInput';\nimport { AnnotationInput } from './AnnotationInput';\nimport { AttachmentArrayInput } from './AttachmentArrayInput';\nimport { AttachmentInput } from './AttachmentInput';\nimport { BackboneElementInput } from './BackboneElementInput';\nimport { Checkbox } from './Checkbox';\nimport { CodeableConceptInput } from './CodeableConceptInput';\nimport { CodeInput } from './CodeInput';\nimport { CodingInput } from './CodingInput';\nimport { ContactDetailInput } from './ContactDetailInput';\nimport { ContactPointInput } from './ContactPointInput';\nimport { DateTimeInput } from './DateTimeInput';\nimport { ExtensionInput } from './ExtensionInput';\nimport { HumanNameInput } from './HumanNameInput';\nimport { IdentifierInput } from './IdentifierInput';\nimport { Input } from './Input';\nimport { InputRow } from './InputRow';\nimport { PeriodInput } from './PeriodInput';\nimport { QuantityInput } from './QuantityInput';\nimport { RangeInput } from './RangeInput';\nimport { RatioInput } from './RatioInput';\nimport { ReferenceInput } from './ReferenceInput';\nimport { ResourceArrayInput } from './ResourceArrayInput';\nimport { Select } from './Select';\nimport { TextArea } from './TextArea';\nimport { TimingInput } from './TimingInput';\n\nexport interface ResourcePropertyInputProps {\n property: ElementDefinition;\n name: string;\n defaultPropertyType?: PropertyType;\n defaultValue?: any;\n arrayElement?: boolean;\n onChange?: (value: any, propName?: string) => void;\n outcome?: OperationOutcome;\n}\n\nexport function ResourcePropertyInput(props: ResourcePropertyInputProps): JSX.Element {\n const property = props.property;\n const propertyType = props.defaultPropertyType ?? (property.type?.[0]?.code as PropertyType);\n const name = props.name;\n const value = props.defaultValue;\n\n if (property.max === '*' && !props.arrayElement) {\n if (propertyType === 'Attachment') {\n return <AttachmentArrayInput name={name} defaultValue={value} onChange={props.onChange} />;\n }\n return <ResourceArrayInput property={property} name={name} defaultValue={value} onChange={props.onChange} />;\n }\n\n const propertyTypes = property.type as ElementDefinitionType[];\n if (propertyTypes.length > 1) {\n return <ElementDefinitionInputSelector elementDefinitionTypes={propertyTypes} {...props} />;\n } else {\n return <ElementDefinitionTypeInput elementDefinitionType={propertyTypes[0]} {...props} />;\n }\n}\n\nexport interface ElementDefinitionSelectorProps extends ResourcePropertyInputProps {\n elementDefinitionTypes: ElementDefinitionType[];\n}\n\nexport function ElementDefinitionInputSelector(props: ElementDefinitionSelectorProps): JSX.Element {\n const propertyTypes = props.elementDefinitionTypes;\n let initialPropertyType: ElementDefinitionType | undefined = undefined;\n if (props.defaultPropertyType) {\n initialPropertyType = propertyTypes.find((t) => t.code === props.defaultPropertyType) as ElementDefinitionType;\n }\n if (!initialPropertyType) {\n initialPropertyType = propertyTypes[0];\n }\n const [selectedType, setSelectedType] = useState(initialPropertyType);\n return (\n <InputRow>\n <Select\n style={{ width: '200px' }}\n defaultValue={selectedType?.code}\n onChange={(newValue) => {\n setSelectedType(\n propertyTypes.find((type: ElementDefinitionType) => type.code === newValue) as ElementDefinitionType\n );\n }}\n >\n {propertyTypes.map((type: ElementDefinitionType) => (\n <option key={type.code} value={type.code}>\n {type.code}\n </option>\n ))}\n </Select>\n <ElementDefinitionTypeInput\n {...props}\n elementDefinitionType={selectedType}\n onChange={(newValue: any) => {\n if (props.onChange) {\n props.onChange(newValue, props.name.replace('[x]', capitalize(selectedType.code as string)));\n }\n }}\n />\n </InputRow>\n );\n}\n\nexport interface ElementDefinitionTypeInputProps extends ResourcePropertyInputProps {\n elementDefinitionType: ElementDefinitionType;\n}\n\nexport function ElementDefinitionTypeInput(props: ElementDefinitionTypeInputProps): JSX.Element {\n const property = props.property;\n const propertyType = props.elementDefinitionType.code as PropertyType;\n const name = props.name;\n const value = props.defaultValue;\n\n switch (propertyType) {\n // 2.24.0.1 Primitive Types\n // https://www.hl7.org/fhir/datatypes.html#primitive\n\n case PropertyType.SystemString:\n case PropertyType.canonical:\n case PropertyType.string:\n case PropertyType.time:\n case PropertyType.uri:\n case PropertyType.url:\n return (\n <Input\n type=\"text\"\n name={name}\n testid={name}\n defaultValue={value}\n onChange={props.onChange}\n outcome={props.outcome}\n />\n );\n case PropertyType.date:\n return (\n <Input\n type=\"date\"\n name={name}\n testid={name}\n defaultValue={value}\n onChange={props.onChange}\n outcome={props.outcome}\n />\n );\n case PropertyType.dateTime:\n case PropertyType.instant:\n return (\n <DateTimeInput\n type=\"datetime-local\"\n name={name}\n testid={name}\n defaultValue={value}\n onChange={props.onChange}\n outcome={props.outcome}\n />\n );\n case PropertyType.decimal:\n case PropertyType.integer:\n case PropertyType.positiveInt:\n case PropertyType.unsignedInt:\n return (\n <Input\n type=\"number\"\n step={propertyType === PropertyType.decimal ? 'any' : 1}\n name={name}\n testid={name}\n defaultValue={value}\n onChange={(newValue) => {\n if (props.onChange) {\n props.onChange(parseFloat(newValue));\n }\n }}\n outcome={props.outcome}\n />\n );\n case PropertyType.code:\n return <CodeInput property={property} name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.boolean:\n return (\n <Checkbox\n name={name}\n testid={name}\n defaultValue={!!value}\n onChange={(newValue) => {\n if (props.onChange) {\n props.onChange(newValue);\n }\n }}\n />\n );\n case PropertyType.markdown:\n return <TextArea name={name} testid={name} defaultValue={value} onChange={props.onChange} />;\n\n // 2.24.0.2 Complex Types\n // https://www.hl7.org/fhir/datatypes.html#complex\n\n case PropertyType.Address:\n return <AddressInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Annotation:\n return <AnnotationInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Attachment:\n return <AttachmentInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.CodeableConcept:\n return <CodeableConceptInput property={property} name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Coding:\n return <CodingInput property={property} name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.ContactDetail:\n return <ContactDetailInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.ContactPoint:\n return <ContactPointInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Extension:\n return <ExtensionInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.HumanName:\n return <HumanNameInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Identifier:\n return <IdentifierInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Period:\n return <PeriodInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Quantity:\n return <QuantityInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Range:\n return <RangeInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Ratio:\n return <RatioInput name={name} defaultValue={value} onChange={props.onChange} />;\n case PropertyType.Reference:\n return (\n <ReferenceInput\n name={name}\n defaultValue={value}\n targetTypes={getTargetTypes(property)}\n onChange={props.onChange}\n />\n );\n case PropertyType.Timing:\n return <TimingInput name={name} defaultValue={value} onChange={props.onChange} />;\n default:\n return (\n <BackboneElementInput\n typeName={buildTypeName(property.path?.split('.') as string[])}\n defaultValue={value}\n onChange={props.onChange}\n outcome={props.outcome}\n />\n );\n }\n}\n\nfunction getTargetTypes(property?: ElementDefinition): string[] | undefined {\n return property?.type?.[0]?.targetProfile?.map((p) => p.split('/').pop() as string);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ function ResourceTable(props) {
|
|
|
9
9
|
const [schema, setSchema] = useState();
|
|
10
10
|
useEffect(() => {
|
|
11
11
|
if (value) {
|
|
12
|
-
medplum.requestSchema(value.resourceType).then(setSchema);
|
|
12
|
+
medplum.requestSchema(value.resourceType).then(setSchema).catch(console.log);
|
|
13
13
|
}
|
|
14
14
|
}, [medplum, value]);
|
|
15
15
|
if (!schema || !value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourceTable.js","sources":["../../src/ResourceTable.tsx"],"sourcesContent":["import { IndexedStructureDefinition } from '@medplum/core';\nimport { Reference, Resource } from '@medplum/fhirtypes';\nimport React, { useEffect, useState } from 'react';\nimport { BackboneElementDisplay } from './BackboneElementDisplay';\nimport { useMedplum } from './MedplumProvider';\nimport { useResource } from './useResource';\n\nexport interface ResourceTableProps {\n value: Resource | Reference;\n ignoreMissingValues?: boolean;\n}\n\nexport function ResourceTable(props: ResourceTableProps): JSX.Element | null {\n const medplum = useMedplum();\n const value = useResource(props.value);\n const [schema, setSchema] = useState<IndexedStructureDefinition | undefined>();\n\n useEffect(() => {\n if (value) {\n medplum.requestSchema(value.resourceType).then(setSchema);\n }\n }, [medplum, value]);\n\n if (!schema || !value) {\n return null;\n }\n\n return (\n <BackboneElementDisplay\n value={{ type: value.resourceType, value }}\n ignoreMissingValues={props.ignoreMissingValues}\n />\n );\n}\n"],"names":[],"mappings":";;;;;AAYM,SAAU,aAAa,CAAC,KAAyB,EAAA;AACrD,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,EAA0C,CAAC;IAE/E,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ResourceTable.js","sources":["../../src/ResourceTable.tsx"],"sourcesContent":["import { IndexedStructureDefinition } from '@medplum/core';\nimport { Reference, Resource } from '@medplum/fhirtypes';\nimport React, { useEffect, useState } from 'react';\nimport { BackboneElementDisplay } from './BackboneElementDisplay';\nimport { useMedplum } from './MedplumProvider';\nimport { useResource } from './useResource';\n\nexport interface ResourceTableProps {\n value: Resource | Reference;\n ignoreMissingValues?: boolean;\n}\n\nexport function ResourceTable(props: ResourceTableProps): JSX.Element | null {\n const medplum = useMedplum();\n const value = useResource(props.value);\n const [schema, setSchema] = useState<IndexedStructureDefinition | undefined>();\n\n useEffect(() => {\n if (value) {\n medplum.requestSchema(value.resourceType).then(setSchema).catch(console.log);\n }\n }, [medplum, value]);\n\n if (!schema || !value) {\n return null;\n }\n\n return (\n <BackboneElementDisplay\n value={{ type: value.resourceType, value }}\n ignoreMissingValues={props.ignoreMissingValues}\n />\n );\n}\n"],"names":[],"mappings":";;;;;AAYM,SAAU,aAAa,CAAC,KAAyB,EAAA;AACrD,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,EAA0C,CAAC;IAE/E,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9E,SAAA;AACH,KAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAErB,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;AACrB,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;IAED,QACE,oBAAC,sBAAsB,EAAA,EACrB,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,EAC1C,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAC9C,CAAA,EACF;AACJ;;;;"}
|
|
@@ -34,7 +34,7 @@ function ResourceTimeline(props) {
|
|
|
34
34
|
setHistory({});
|
|
35
35
|
return;
|
|
36
36
|
}
|
|
37
|
-
medplum.executeBatch(buildSearchRequests(resource)).then(handleBatchResponse);
|
|
37
|
+
medplum.executeBatch(buildSearchRequests(resource)).then(handleBatchResponse).catch(console.log);
|
|
38
38
|
}, [medplum, resource, buildSearchRequests]);
|
|
39
39
|
useEffect(() => {
|
|
40
40
|
loadTimeline();
|
|
@@ -85,9 +85,12 @@ function ResourceTimeline(props) {
|
|
|
85
85
|
// Encounter not loaded yet
|
|
86
86
|
return;
|
|
87
87
|
}
|
|
88
|
-
medplum
|
|
88
|
+
medplum
|
|
89
|
+
.createResource(props.createCommunication(resource, sender, contentString))
|
|
90
|
+
.then((result) => {
|
|
89
91
|
addResources([result]);
|
|
90
|
-
})
|
|
92
|
+
})
|
|
93
|
+
.catch(console.log);
|
|
91
94
|
}
|
|
92
95
|
/**
|
|
93
96
|
* Adds a Media resource to the timeline.
|
|
@@ -98,18 +101,21 @@ function ResourceTimeline(props) {
|
|
|
98
101
|
// Encounter not loaded yet
|
|
99
102
|
return;
|
|
100
103
|
}
|
|
101
|
-
medplum
|
|
104
|
+
medplum
|
|
105
|
+
.createResource(props.createMedia(resource, sender, attachment))
|
|
106
|
+
.then((result) => {
|
|
102
107
|
addResources([result]);
|
|
103
|
-
})
|
|
108
|
+
})
|
|
109
|
+
.catch(console.log);
|
|
104
110
|
}
|
|
105
111
|
function setPriority(communication, priority) {
|
|
106
112
|
return medplum.updateResource(Object.assign(Object.assign({}, communication), { priority }));
|
|
107
113
|
}
|
|
108
114
|
function onPin(communication) {
|
|
109
|
-
setPriority(communication, 'stat').then(loadTimeline);
|
|
115
|
+
setPriority(communication, 'stat').then(loadTimeline).catch(console.log);
|
|
110
116
|
}
|
|
111
117
|
function onUnpin(communication) {
|
|
112
|
-
setPriority(communication, 'routine').then(loadTimeline);
|
|
118
|
+
setPriority(communication, 'routine').then(loadTimeline).catch(console.log);
|
|
113
119
|
}
|
|
114
120
|
function onDetails(timelineItem) {
|
|
115
121
|
navigate(`/${timelineItem.resourceType}/${timelineItem.id}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourceTimeline.js","sources":["../../src/ResourceTimeline.tsx"],"sourcesContent":["import { getReferenceString, ProfileResource } from '@medplum/core';\nimport {\n Attachment,\n AuditEvent,\n Bundle,\n BundleEntry,\n Communication,\n DiagnosticReport,\n Media,\n Reference,\n Resource,\n} from '@medplum/fhirtypes';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { AttachmentDisplay } from './AttachmentDisplay';\nimport { Button } from './Button';\nimport { DiagnosticReportDisplay } from './DiagnosticReportDisplay';\nimport { Form } from './Form';\nimport { Input } from './Input';\nimport { Loading } from './Loading';\nimport { useMedplum } from './MedplumProvider';\nimport { MenuItem } from './MenuItem';\nimport { ResourceDiffTable } from './ResourceDiffTable';\nimport { ResourceTable } from './ResourceTable';\nimport { Scrollable } from './Scrollable';\nimport { Timeline, TimelineItem } from './Timeline';\nimport { UploadButton } from './UploadButton';\nimport { useResource } from './useResource';\nimport { sortByDateAndPriority } from './utils/date';\nimport './ResourceTimeline.css';\n\nexport interface ResourceTimelineProps<T extends Resource> {\n value: T | Reference<T>;\n buildSearchRequests: (resource: T) => Bundle;\n createCommunication?: (resource: T, sender: ProfileResource, text: string) => Communication;\n createMedia?: (resource: T, operator: ProfileResource, attachment: Attachment) => Media;\n}\n\nexport function ResourceTimeline<T extends Resource>(props: ResourceTimelineProps<T>): JSX.Element {\n const navigate = useNavigate();\n const medplum = useMedplum();\n const sender = medplum.getProfile() as ProfileResource;\n const inputRef = useRef<HTMLInputElement>(null);\n const resource = useResource(props.value);\n const [history, setHistory] = useState<Bundle>();\n const [items, setItems] = useState<Resource[]>([]);\n const buildSearchRequests = props.buildSearchRequests;\n\n const itemsRef = useRef<Resource[]>(items);\n itemsRef.current = items;\n\n const loadTimeline = useCallback(() => {\n if (!resource) {\n setItems([]);\n setHistory({} as Bundle);\n return;\n }\n medplum.executeBatch(buildSearchRequests(resource)).then(handleBatchResponse);\n }, [medplum, resource, buildSearchRequests]);\n\n useEffect(() => {\n loadTimeline();\n }, [loadTimeline]);\n\n /**\n * Handles a batch request response.\n * @param batchResponse The batch response.\n */\n function handleBatchResponse(batchResponse: Bundle): void {\n const newItems = [];\n\n if (batchResponse.entry) {\n for (const batchEntry of batchResponse.entry) {\n const bundle = batchEntry.resource as Bundle;\n if (!bundle) {\n // User may not have access to all resource types\n continue;\n }\n\n if (bundle.type === 'history') {\n setHistory(bundle);\n }\n\n if (bundle.entry) {\n for (const entry of bundle.entry) {\n newItems.push(entry.resource as Resource);\n }\n }\n }\n\n sortByDateAndPriority(newItems);\n newItems.reverse();\n }\n\n setItems(newItems);\n }\n\n /**\n * Adds an array of resources to the timeline.\n * @param resources Array of resources.\n */\n function addResources(resources: Resource[]): void {\n const newItems = [...itemsRef.current, ...resources];\n sortByDateAndPriority(newItems);\n newItems.reverse();\n setItems(newItems);\n }\n\n /**\n * Adds a Communication resource to the timeline.\n * @param contentString The comment content.\n */\n function createComment(contentString: string): void {\n if (!resource || !props.createCommunication) {\n // Encounter not loaded yet\n return;\n }\n medplum.createResource(props.createCommunication(resource, sender, contentString)).then((result) => {\n addResources([result]);\n });\n }\n\n /**\n * Adds a Media resource to the timeline.\n * @param attachment The media attachment.\n */\n function createMedia(attachment: Attachment): void {\n if (!resource || !props.createMedia) {\n // Encounter not loaded yet\n return;\n }\n medplum.createResource(props.createMedia(resource, sender, attachment)).then((result) => {\n addResources([result]);\n });\n }\n\n function setPriority(communication: Communication, priority: string): Promise<Communication> {\n return medplum.updateResource({ ...communication, priority });\n }\n\n function onPin(communication: Communication): void {\n setPriority(communication, 'stat').then(loadTimeline);\n }\n\n function onUnpin(communication: Communication): void {\n setPriority(communication, 'routine').then(loadTimeline);\n }\n\n function onDetails(timelineItem: Resource): void {\n navigate(`/${timelineItem.resourceType}/${timelineItem.id}`);\n }\n\n function onEdit(timelineItem: Resource): void {\n navigate(`/${timelineItem.resourceType}/${timelineItem.id}/edit`);\n }\n\n function onDelete(timelineItem: Resource): void {\n navigate(`/${timelineItem.resourceType}/${timelineItem.id}/delete`);\n }\n\n function onVersionDetails(version: Resource): void {\n navigate(`/${version.resourceType}/${version.id}/_history/${version.meta?.versionId}`);\n }\n\n if (!resource || !history) {\n return <Loading />;\n }\n\n return (\n <Timeline>\n {props.createCommunication && (\n <article className=\"medplum-timeline-item\">\n <div className=\"medplum-timeline-item-header\">\n <Form\n testid=\"timeline-form\"\n onSubmit={(formData: Record<string, string>) => {\n createComment(formData.text);\n\n const input = inputRef.current;\n if (input) {\n input.value = '';\n input.focus();\n }\n }}\n >\n <Input name=\"text\" testid=\"timeline-input\" inputRef={inputRef} />\n <Button type=\"submit\">Comment</Button>\n <UploadButton onUpload={createMedia} />\n </Form>\n </div>\n </article>\n )}\n {items.map((item) => {\n if (item.resourceType === resource.resourceType && item.id === resource.id) {\n return (\n <HistoryTimelineItem\n key={item.meta?.versionId}\n history={history}\n resource={item}\n onDetails={onVersionDetails}\n />\n );\n }\n const key = `${item.resourceType}/${item.id}`;\n switch (item.resourceType) {\n case 'AuditEvent':\n return <AuditEventTimelineItem key={key} resource={item} onDetails={onDetails} />;\n case 'Communication':\n return (\n <CommunicationTimelineItem\n key={key}\n resource={item}\n onPin={item.priority !== 'stat' ? onPin : undefined}\n onUnpin={item.priority === 'stat' ? onUnpin : undefined}\n onDetails={onDetails}\n onEdit={onEdit}\n onDelete={onDelete}\n />\n );\n case 'DiagnosticReport':\n return (\n <DiagnosticReportTimelineItem\n key={key}\n resource={item}\n onDetails={onDetails}\n onEdit={onEdit}\n onDelete={onDelete}\n />\n );\n case 'Media':\n return (\n <MediaTimelineItem key={key} resource={item} onDetails={onDetails} onEdit={onEdit} onDelete={onDelete} />\n );\n default:\n return (\n <TimelineItem key={key} resource={item} padding={true}>\n <ResourceTable value={item} ignoreMissingValues={true} />\n </TimelineItem>\n );\n }\n })}\n </Timeline>\n );\n}\n\ninterface BaseTimelineItemProps<T extends Resource> {\n resource: T;\n onPin?: (resource: T) => void;\n onUnpin?: (resource: T) => void;\n onDetails?: (resource: T) => void;\n onEdit?: (resource: T) => void;\n onDelete?: (resource: T) => void;\n}\n\nfunction TimelineItemPopupMenu<T extends Resource>(props: BaseTimelineItemProps<T>): JSX.Element {\n return (\n <>\n {props.onPin && (\n <MenuItem\n onClick={() => (props.onPin as (resource: T) => void)(props.resource)}\n label={`Pin ${getReferenceString(props.resource)}`}\n >\n Pin\n </MenuItem>\n )}\n {props.onUnpin && (\n <MenuItem\n onClick={() => (props.onUnpin as (resource: T) => void)(props.resource)}\n label={`Unpin ${getReferenceString(props.resource)}`}\n >\n Unpin\n </MenuItem>\n )}\n {props.onDetails && (\n <MenuItem\n onClick={() => (props.onDetails as (resource: T) => void)(props.resource)}\n label={`Details ${getReferenceString(props.resource)}`}\n >\n Details\n </MenuItem>\n )}\n {props.onEdit && (\n <MenuItem\n onClick={() => (props.onEdit as (resource: T) => void)(props.resource)}\n label={`Edit ${getReferenceString(props.resource)}`}\n >\n Edit\n </MenuItem>\n )}\n {props.onDelete && (\n <MenuItem\n onClick={() => (props.onDelete as (resource: T) => void)(props.resource)}\n label={`Delete ${getReferenceString(props.resource)}`}\n >\n Delete\n </MenuItem>\n )}\n </>\n );\n}\n\ninterface HistoryTimelineItemProps extends BaseTimelineItemProps<Resource> {\n history: Bundle;\n}\n\nfunction HistoryTimelineItem(props: HistoryTimelineItemProps): JSX.Element {\n const previous = getPrevious(props.history, props.resource);\n if (previous) {\n return (\n <TimelineItem resource={props.resource} padding={true} popupMenuItems={<TimelineItemPopupMenu {...props} />}>\n <ResourceDiffTable original={previous} revised={props.resource} />\n </TimelineItem>\n );\n } else {\n return (\n <TimelineItem resource={props.resource} padding={true} popupMenuItems={<TimelineItemPopupMenu {...props} />}>\n <h3>Created</h3>\n <ResourceTable value={props.resource} ignoreMissingValues={true} />\n </TimelineItem>\n );\n }\n}\n\nfunction getPrevious(history: Bundle, version: Resource): Resource | undefined {\n const entries = history.entry as BundleEntry[];\n const index = entries.findIndex((entry) => entry.resource?.meta?.versionId === version.meta?.versionId);\n if (index >= entries.length - 1) {\n return undefined;\n }\n return entries[index + 1].resource;\n}\n\nfunction CommunicationTimelineItem(props: BaseTimelineItemProps<Communication>): JSX.Element {\n const routine = !props.resource.priority || props.resource.priority === 'routine';\n const className = routine ? 'medplum-timeline-item' : 'medplum-timeline-item medplum-timeline-item-pinned';\n return (\n <TimelineItem\n resource={props.resource}\n profile={props.resource.sender}\n padding={true}\n className={className}\n popupMenuItems={<TimelineItemPopupMenu {...props} />}\n >\n <p>{props.resource.payload?.[0]?.contentString}</p>\n </TimelineItem>\n );\n}\n\nfunction MediaTimelineItem(props: BaseTimelineItemProps<Media>): JSX.Element {\n const contentType = props.resource.content?.contentType;\n const padding =\n contentType &&\n !contentType.startsWith('image/') &&\n !contentType.startsWith('video/') &&\n contentType !== 'application/pdf';\n return (\n <TimelineItem resource={props.resource} padding={!!padding} popupMenuItems={<TimelineItemPopupMenu {...props} />}>\n <AttachmentDisplay value={props.resource.content} />\n </TimelineItem>\n );\n}\n\nfunction AuditEventTimelineItem(props: BaseTimelineItemProps<AuditEvent>): JSX.Element {\n return (\n <TimelineItem resource={props.resource} padding={true} popupMenuItems={<TimelineItemPopupMenu {...props} />}>\n <Scrollable>\n <pre>{props.resource.outcomeDesc}</pre>\n </Scrollable>\n </TimelineItem>\n );\n}\n\nfunction DiagnosticReportTimelineItem(props: BaseTimelineItemProps<DiagnosticReport>): JSX.Element {\n return (\n <TimelineItem resource={props.resource} padding={true} popupMenuItems={<TimelineItemPopupMenu {...props} />}>\n <DiagnosticReportDisplay value={props.resource} />\n </TimelineItem>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ResourceTimeline.js","sources":["../../src/ResourceTimeline.tsx"],"sourcesContent":["import { getReferenceString, ProfileResource } from '@medplum/core';\nimport {\n Attachment,\n AuditEvent,\n Bundle,\n BundleEntry,\n Communication,\n DiagnosticReport,\n Media,\n Reference,\n Resource,\n} from '@medplum/fhirtypes';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { AttachmentDisplay } from './AttachmentDisplay';\nimport { Button } from './Button';\nimport { DiagnosticReportDisplay } from './DiagnosticReportDisplay';\nimport { Form } from './Form';\nimport { Input } from './Input';\nimport { Loading } from './Loading';\nimport { useMedplum } from './MedplumProvider';\nimport { MenuItem } from './MenuItem';\nimport { ResourceDiffTable } from './ResourceDiffTable';\nimport { ResourceTable } from './ResourceTable';\nimport { Scrollable } from './Scrollable';\nimport { Timeline, TimelineItem } from './Timeline';\nimport { UploadButton } from './UploadButton';\nimport { useResource } from './useResource';\nimport { sortByDateAndPriority } from './utils/date';\nimport './ResourceTimeline.css';\n\nexport interface ResourceTimelineProps<T extends Resource> {\n value: T | Reference<T>;\n buildSearchRequests: (resource: T) => Bundle;\n createCommunication?: (resource: T, sender: ProfileResource, text: string) => Communication;\n createMedia?: (resource: T, operator: ProfileResource, attachment: Attachment) => Media;\n}\n\nexport function ResourceTimeline<T extends Resource>(props: ResourceTimelineProps<T>): JSX.Element {\n const navigate = useNavigate();\n const medplum = useMedplum();\n const sender = medplum.getProfile() as ProfileResource;\n const inputRef = useRef<HTMLInputElement>(null);\n const resource = useResource(props.value);\n const [history, setHistory] = useState<Bundle>();\n const [items, setItems] = useState<Resource[]>([]);\n const buildSearchRequests = props.buildSearchRequests;\n\n const itemsRef = useRef<Resource[]>(items);\n itemsRef.current = items;\n\n const loadTimeline = useCallback(() => {\n if (!resource) {\n setItems([]);\n setHistory({} as Bundle);\n return;\n }\n medplum.executeBatch(buildSearchRequests(resource)).then(handleBatchResponse).catch(console.log);\n }, [medplum, resource, buildSearchRequests]);\n\n useEffect(() => {\n loadTimeline();\n }, [loadTimeline]);\n\n /**\n * Handles a batch request response.\n * @param batchResponse The batch response.\n */\n function handleBatchResponse(batchResponse: Bundle): void {\n const newItems = [];\n\n if (batchResponse.entry) {\n for (const batchEntry of batchResponse.entry) {\n const bundle = batchEntry.resource as Bundle;\n if (!bundle) {\n // User may not have access to all resource types\n continue;\n }\n\n if (bundle.type === 'history') {\n setHistory(bundle);\n }\n\n if (bundle.entry) {\n for (const entry of bundle.entry) {\n newItems.push(entry.resource as Resource);\n }\n }\n }\n\n sortByDateAndPriority(newItems);\n newItems.reverse();\n }\n\n setItems(newItems);\n }\n\n /**\n * Adds an array of resources to the timeline.\n * @param resources Array of resources.\n */\n function addResources(resources: Resource[]): void {\n const newItems = [...itemsRef.current, ...resources];\n sortByDateAndPriority(newItems);\n newItems.reverse();\n setItems(newItems);\n }\n\n /**\n * Adds a Communication resource to the timeline.\n * @param contentString The comment content.\n */\n function createComment(contentString: string): void {\n if (!resource || !props.createCommunication) {\n // Encounter not loaded yet\n return;\n }\n medplum\n .createResource(props.createCommunication(resource, sender, contentString))\n .then((result) => {\n addResources([result]);\n })\n .catch(console.log);\n }\n\n /**\n * Adds a Media resource to the timeline.\n * @param attachment The media attachment.\n */\n function createMedia(attachment: Attachment): void {\n if (!resource || !props.createMedia) {\n // Encounter not loaded yet\n return;\n }\n medplum\n .createResource(props.createMedia(resource, sender, attachment))\n .then((result) => {\n addResources([result]);\n })\n .catch(console.log);\n }\n\n function setPriority(communication: Communication, priority: string): Promise<Communication> {\n return medplum.updateResource({ ...communication, priority });\n }\n\n function onPin(communication: Communication): void {\n setPriority(communication, 'stat').then(loadTimeline).catch(console.log);\n }\n\n function onUnpin(communication: Communication): void {\n setPriority(communication, 'routine').then(loadTimeline).catch(console.log);\n }\n\n function onDetails(timelineItem: Resource): void {\n navigate(`/${timelineItem.resourceType}/${timelineItem.id}`);\n }\n\n function onEdit(timelineItem: Resource): void {\n navigate(`/${timelineItem.resourceType}/${timelineItem.id}/edit`);\n }\n\n function onDelete(timelineItem: Resource): void {\n navigate(`/${timelineItem.resourceType}/${timelineItem.id}/delete`);\n }\n\n function onVersionDetails(version: Resource): void {\n navigate(`/${version.resourceType}/${version.id}/_history/${version.meta?.versionId}`);\n }\n\n if (!resource || !history) {\n return <Loading />;\n }\n\n return (\n <Timeline>\n {props.createCommunication && (\n <article className=\"medplum-timeline-item\">\n <div className=\"medplum-timeline-item-header\">\n <Form\n testid=\"timeline-form\"\n onSubmit={(formData: Record<string, string>) => {\n createComment(formData.text);\n\n const input = inputRef.current;\n if (input) {\n input.value = '';\n input.focus();\n }\n }}\n >\n <Input name=\"text\" testid=\"timeline-input\" inputRef={inputRef} />\n <Button type=\"submit\">Comment</Button>\n <UploadButton onUpload={createMedia} />\n </Form>\n </div>\n </article>\n )}\n {items.map((item) => {\n if (item.resourceType === resource.resourceType && item.id === resource.id) {\n return (\n <HistoryTimelineItem\n key={item.meta?.versionId}\n history={history}\n resource={item}\n onDetails={onVersionDetails}\n />\n );\n }\n const key = `${item.resourceType}/${item.id}`;\n switch (item.resourceType) {\n case 'AuditEvent':\n return <AuditEventTimelineItem key={key} resource={item} onDetails={onDetails} />;\n case 'Communication':\n return (\n <CommunicationTimelineItem\n key={key}\n resource={item}\n onPin={item.priority !== 'stat' ? onPin : undefined}\n onUnpin={item.priority === 'stat' ? onUnpin : undefined}\n onDetails={onDetails}\n onEdit={onEdit}\n onDelete={onDelete}\n />\n );\n case 'DiagnosticReport':\n return (\n <DiagnosticReportTimelineItem\n key={key}\n resource={item}\n onDetails={onDetails}\n onEdit={onEdit}\n onDelete={onDelete}\n />\n );\n case 'Media':\n return (\n <MediaTimelineItem key={key} resource={item} onDetails={onDetails} onEdit={onEdit} onDelete={onDelete} />\n );\n default:\n return (\n <TimelineItem key={key} resource={item} padding={true}>\n <ResourceTable value={item} ignoreMissingValues={true} />\n </TimelineItem>\n );\n }\n })}\n </Timeline>\n );\n}\n\ninterface BaseTimelineItemProps<T extends Resource> {\n resource: T;\n onPin?: (resource: T) => void;\n onUnpin?: (resource: T) => void;\n onDetails?: (resource: T) => void;\n onEdit?: (resource: T) => void;\n onDelete?: (resource: T) => void;\n}\n\nfunction TimelineItemPopupMenu<T extends Resource>(props: BaseTimelineItemProps<T>): JSX.Element {\n return (\n <>\n {props.onPin && (\n <MenuItem\n onClick={() => (props.onPin as (resource: T) => void)(props.resource)}\n label={`Pin ${getReferenceString(props.resource)}`}\n >\n Pin\n </MenuItem>\n )}\n {props.onUnpin && (\n <MenuItem\n onClick={() => (props.onUnpin as (resource: T) => void)(props.resource)}\n label={`Unpin ${getReferenceString(props.resource)}`}\n >\n Unpin\n </MenuItem>\n )}\n {props.onDetails && (\n <MenuItem\n onClick={() => (props.onDetails as (resource: T) => void)(props.resource)}\n label={`Details ${getReferenceString(props.resource)}`}\n >\n Details\n </MenuItem>\n )}\n {props.onEdit && (\n <MenuItem\n onClick={() => (props.onEdit as (resource: T) => void)(props.resource)}\n label={`Edit ${getReferenceString(props.resource)}`}\n >\n Edit\n </MenuItem>\n )}\n {props.onDelete && (\n <MenuItem\n onClick={() => (props.onDelete as (resource: T) => void)(props.resource)}\n label={`Delete ${getReferenceString(props.resource)}`}\n >\n Delete\n </MenuItem>\n )}\n </>\n );\n}\n\ninterface HistoryTimelineItemProps extends BaseTimelineItemProps<Resource> {\n history: Bundle;\n}\n\nfunction HistoryTimelineItem(props: HistoryTimelineItemProps): JSX.Element {\n const previous = getPrevious(props.history, props.resource);\n if (previous) {\n return (\n <TimelineItem resource={props.resource} padding={true} popupMenuItems={<TimelineItemPopupMenu {...props} />}>\n <ResourceDiffTable original={previous} revised={props.resource} />\n </TimelineItem>\n );\n } else {\n return (\n <TimelineItem resource={props.resource} padding={true} popupMenuItems={<TimelineItemPopupMenu {...props} />}>\n <h3>Created</h3>\n <ResourceTable value={props.resource} ignoreMissingValues={true} />\n </TimelineItem>\n );\n }\n}\n\nfunction getPrevious(history: Bundle, version: Resource): Resource | undefined {\n const entries = history.entry as BundleEntry[];\n const index = entries.findIndex((entry) => entry.resource?.meta?.versionId === version.meta?.versionId);\n if (index >= entries.length - 1) {\n return undefined;\n }\n return entries[index + 1].resource;\n}\n\nfunction CommunicationTimelineItem(props: BaseTimelineItemProps<Communication>): JSX.Element {\n const routine = !props.resource.priority || props.resource.priority === 'routine';\n const className = routine ? 'medplum-timeline-item' : 'medplum-timeline-item medplum-timeline-item-pinned';\n return (\n <TimelineItem\n resource={props.resource}\n profile={props.resource.sender}\n padding={true}\n className={className}\n popupMenuItems={<TimelineItemPopupMenu {...props} />}\n >\n <p>{props.resource.payload?.[0]?.contentString}</p>\n </TimelineItem>\n );\n}\n\nfunction MediaTimelineItem(props: BaseTimelineItemProps<Media>): JSX.Element {\n const contentType = props.resource.content?.contentType;\n const padding =\n contentType &&\n !contentType.startsWith('image/') &&\n !contentType.startsWith('video/') &&\n contentType !== 'application/pdf';\n return (\n <TimelineItem resource={props.resource} padding={!!padding} popupMenuItems={<TimelineItemPopupMenu {...props} />}>\n <AttachmentDisplay value={props.resource.content} />\n </TimelineItem>\n );\n}\n\nfunction AuditEventTimelineItem(props: BaseTimelineItemProps<AuditEvent>): JSX.Element {\n return (\n <TimelineItem resource={props.resource} padding={true} popupMenuItems={<TimelineItemPopupMenu {...props} />}>\n <Scrollable>\n <pre>{props.resource.outcomeDesc}</pre>\n </Scrollable>\n </TimelineItem>\n );\n}\n\nfunction DiagnosticReportTimelineItem(props: BaseTimelineItemProps<DiagnosticReport>): JSX.Element {\n return (\n <TimelineItem resource={props.resource} padding={true} popupMenuItems={<TimelineItemPopupMenu {...props} />}>\n <DiagnosticReportDisplay value={props.resource} />\n </TimelineItem>\n );\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/Scheduler.js
CHANGED
|
@@ -2,7 +2,7 @@ import { getReferenceString } from '@medplum/core';
|
|
|
2
2
|
import React, { useState, useRef, useEffect } from 'react';
|
|
3
3
|
import { Avatar } from './Avatar.js';
|
|
4
4
|
import { Button } from './Button.js';
|
|
5
|
-
import { CalendarInput } from './CalendarInput.js';
|
|
5
|
+
import { getStartMonth, CalendarInput } from './CalendarInput.js';
|
|
6
6
|
import { FormSection } from './FormSection.js';
|
|
7
7
|
import { Input } from './Input.js';
|
|
8
8
|
import { useMedplum } from './MedplumProvider.js';
|
|
@@ -16,20 +16,27 @@ function Scheduler(props) {
|
|
|
16
16
|
const [slots, setSlots] = useState();
|
|
17
17
|
const slotsRef = useRef();
|
|
18
18
|
slotsRef.current = slots;
|
|
19
|
+
const [month, setMonth] = useState(getStartMonth());
|
|
19
20
|
const [date, setDate] = useState();
|
|
20
21
|
const [slot, setSlot] = useState();
|
|
21
22
|
const [info, setInfo] = useState();
|
|
22
23
|
const [form, setForm] = useState();
|
|
23
24
|
useEffect(() => {
|
|
24
25
|
if (schedule) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
setSlots([]);
|
|
27
|
+
medplum
|
|
28
|
+
.searchResources('Slot', new URLSearchParams([
|
|
29
|
+
['schedule', getReferenceString(schedule)],
|
|
30
|
+
['start', 'gt' + month.toISOString()],
|
|
31
|
+
['start', 'lt' + new Date(month.getTime() + 31 * 24 * 60 * 60 * 1000).toISOString()],
|
|
32
|
+
]))
|
|
33
|
+
.then(setSlots)
|
|
34
|
+
.catch(console.log);
|
|
28
35
|
}
|
|
29
36
|
else {
|
|
30
37
|
setSlots(undefined);
|
|
31
38
|
}
|
|
32
|
-
}, [medplum, schedule]);
|
|
39
|
+
}, [medplum, schedule, month]);
|
|
33
40
|
if (!schedule || !slots) {
|
|
34
41
|
return null;
|
|
35
42
|
}
|
|
@@ -45,7 +52,7 @@ function Scheduler(props) {
|
|
|
45
52
|
React.createElement("div", { className: "medplum-calendar-selection-pane" },
|
|
46
53
|
!date && (React.createElement("div", null,
|
|
47
54
|
React.createElement("h3", null, "Select date"),
|
|
48
|
-
React.createElement(CalendarInput, { slots: slots, onClick: setDate }))),
|
|
55
|
+
React.createElement(CalendarInput, { slots: slots, onChangeMonth: setMonth, onClick: setDate }))),
|
|
49
56
|
date && !slot && (React.createElement("div", null,
|
|
50
57
|
React.createElement("h3", null, "Select time"),
|
|
51
58
|
slots.map((s) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scheduler.js","sources":["../../src/Scheduler.tsx"],"sourcesContent":["import { getReferenceString } from '@medplum/core';\nimport {
|
|
1
|
+
{"version":3,"file":"Scheduler.js","sources":["../../src/Scheduler.tsx"],"sourcesContent":["import { getReferenceString } from '@medplum/core';\nimport { Reference, Schedule, Slot } from '@medplum/fhirtypes';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Avatar } from './Avatar';\nimport { Button } from './Button';\nimport { CalendarInput, getStartMonth } from './CalendarInput';\nimport { FormSection } from './FormSection';\nimport { Input } from './Input';\nimport { useMedplum } from './MedplumProvider';\nimport { ResourceName } from './ResourceName';\nimport './Scheduler.css';\nimport { useResource } from './useResource';\n\nexport interface SchedulerProps {\n schedule: Schedule | Reference<Schedule>;\n}\n\nexport function Scheduler(props: SchedulerProps): JSX.Element | null {\n const medplum = useMedplum();\n const schedule = useResource(props.schedule);\n\n const [slots, setSlots] = useState<Slot[]>();\n const slotsRef = useRef<Slot[]>();\n slotsRef.current = slots;\n\n const [month, setMonth] = useState<Date>(getStartMonth());\n const [date, setDate] = useState<Date>();\n const [slot, setSlot] = useState<Slot>();\n const [info, setInfo] = useState<string>();\n const [form, setForm] = useState<string>();\n\n useEffect(() => {\n if (schedule) {\n setSlots([]);\n medplum\n .searchResources(\n 'Slot',\n new URLSearchParams([\n ['schedule', getReferenceString(schedule)],\n ['start', 'gt' + month.toISOString()],\n ['start', 'lt' + new Date(month.getTime() + 31 * 24 * 60 * 60 * 1000).toISOString()],\n ])\n )\n .then(setSlots)\n .catch(console.log);\n } else {\n setSlots(undefined);\n }\n }, [medplum, schedule, month]);\n\n if (!schedule || !slots) {\n return null;\n }\n\n const actor = schedule.actor?.[0];\n\n return (\n <div className=\"medplum-calendar-container\" data-testid=\"scheduler\">\n <div className=\"medplum-calendar-info-pane\">\n {actor && <Avatar value={actor} size=\"large\" />}\n {actor && (\n <h1>\n <ResourceName value={actor} />\n </h1>\n )}\n <p>1 hour</p>\n {date && <p>{date.toLocaleDateString()}</p>}\n {slot && <p>{formatTime(new Date(slot.start as string))}</p>}\n </div>\n <div className=\"medplum-calendar-selection-pane\">\n {!date && (\n <div>\n <h3>Select date</h3>\n <CalendarInput slots={slots} onChangeMonth={setMonth} onClick={setDate} />\n </div>\n )}\n {date && !slot && (\n <div>\n <h3>Select time</h3>\n {slots.map((s) => {\n const slotStart = new Date(s.start as string);\n return (\n slotStart.getTime() > date.getTime() &&\n slotStart.getTime() < date.getTime() + 24 * 3600 * 1000 && (\n <div key={s.id}>\n <Button style={{ width: 150 }} onClick={() => setSlot(s)}>\n {formatTime(slotStart)}\n </Button>\n </div>\n )\n );\n })}\n </div>\n )}\n {date && slot && !info && (\n <div>\n <h3>Enter your info</h3>\n <FormSection title=\"Name\" htmlFor=\"name\">\n <Input name=\"name\" />\n </FormSection>\n <FormSection title=\"Email\" htmlFor=\"email\">\n <Input name=\"email\" />\n </FormSection>\n <Button primary={true} onClick={() => setInfo('info')}>\n Next\n </Button>\n </div>\n )}\n {date && slot && info && !form && (\n <div>\n <h3>Custom questions</h3>\n <FormSection title=\"Question 1\" htmlFor=\"q1\">\n <Input name=\"q1\" />\n </FormSection>\n <FormSection title=\"Question 2\" htmlFor=\"q2\">\n <Input name=\"email\" />\n </FormSection>\n <FormSection title=\"Question 3\" htmlFor=\"q3\">\n <Input name=\"email\" />\n </FormSection>\n <Button primary={true} onClick={() => setForm('form')}>\n Next\n </Button>\n </div>\n )}\n {date && slot && info && form && (\n <div>\n <h3>You're all set!</h3>\n <p>Check your email for a calendar invite.</p>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction formatTime(date: Date): string {\n return date.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' });\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -151,11 +151,14 @@ function SearchControl(props) {
|
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
useEffect(() => {
|
|
154
|
-
medplum
|
|
154
|
+
medplum
|
|
155
|
+
.requestSchema(props.search.resourceType)
|
|
156
|
+
.then((newSchema) => {
|
|
155
157
|
// The schema could have the same object identity,
|
|
156
158
|
// so need to use the spread operator to kick React re-render.
|
|
157
159
|
setSchema(Object.assign({}, newSchema));
|
|
158
|
-
})
|
|
160
|
+
})
|
|
161
|
+
.catch(console.log);
|
|
159
162
|
}, [medplum, props.search.resourceType]);
|
|
160
163
|
const typeSchema = (_a = schema === null || schema === void 0 ? void 0 : schema.types) === null || _a === void 0 ? void 0 : _a[props.search.resourceType];
|
|
161
164
|
if (!typeSchema) {
|