@medplum/react 0.9.24 → 0.9.27
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/index.js +24 -9
- 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/{types → esm}/AddressDisplay.d.ts +0 -0
- package/dist/esm/AddressDisplay.js +13 -0
- package/dist/esm/AddressDisplay.js.map +1 -0
- package/dist/{types → esm}/AddressInput.d.ts +0 -0
- package/dist/esm/AddressInput.js +69 -0
- package/dist/esm/AddressInput.js.map +1 -0
- package/dist/{types → esm}/AnnotationInput.d.ts +0 -0
- package/dist/esm/AnnotationInput.js +28 -0
- package/dist/esm/AnnotationInput.js.map +1 -0
- package/dist/{types → esm}/AttachmentArrayDisplay.d.ts +0 -0
- package/dist/esm/AttachmentArrayDisplay.js +11 -0
- package/dist/esm/AttachmentArrayDisplay.js.map +1 -0
- package/dist/{types → esm}/AttachmentArrayInput.d.ts +0 -0
- package/dist/esm/AttachmentArrayInput.js +42 -0
- package/dist/esm/AttachmentArrayInput.js.map +1 -0
- package/dist/{types → esm}/AttachmentDisplay.d.ts +0 -0
- package/dist/esm/AttachmentDisplay.js +20 -0
- package/dist/esm/AttachmentDisplay.js.map +1 -0
- package/dist/{types → esm}/AttachmentInput.d.ts +0 -0
- package/dist/esm/AttachmentInput.js +27 -0
- package/dist/esm/AttachmentInput.js.map +1 -0
- package/dist/{types → esm}/Autocomplete.d.ts +0 -0
- package/dist/esm/Autocomplete.js +284 -0
- package/dist/esm/Autocomplete.js.map +1 -0
- package/dist/{types → esm}/Avatar.d.ts +0 -0
- package/dist/esm/Avatar.js +24 -0
- package/dist/esm/Avatar.js.map +1 -0
- package/dist/{types → esm}/BackboneElementDisplay.d.ts +0 -0
- package/dist/esm/BackboneElementDisplay.js +43 -0
- package/dist/esm/BackboneElementDisplay.js.map +1 -0
- package/dist/{types → esm}/BackboneElementInput.d.ts +0 -0
- package/dist/esm/BackboneElementInput.js +51 -0
- package/dist/esm/BackboneElementInput.js.map +1 -0
- package/dist/{types → esm}/Button.d.ts +0 -0
- package/dist/esm/Button.js +13 -0
- package/dist/esm/Button.js.map +1 -0
- package/dist/{types → esm}/CalendarInput.d.ts +0 -0
- package/dist/esm/CalendarInput.js +96 -0
- package/dist/esm/CalendarInput.js.map +1 -0
- package/dist/{types → esm}/Checkbox.d.ts +0 -0
- package/dist/esm/Checkbox.js +13 -0
- package/dist/esm/Checkbox.js.map +1 -0
- package/dist/{types → esm}/CheckboxFormSection.d.ts +0 -0
- package/dist/esm/CheckboxFormSection.js +12 -0
- package/dist/esm/CheckboxFormSection.js.map +1 -0
- package/dist/{types → esm}/CodeInput.d.ts +0 -0
- package/dist/esm/CodeInput.js +28 -0
- package/dist/esm/CodeInput.js.map +1 -0
- package/dist/{types → esm}/CodeableConceptDisplay.d.ts +0 -0
- package/dist/esm/CodeableConceptDisplay.js +19 -0
- package/dist/esm/CodeableConceptDisplay.js.map +1 -0
- package/dist/{types → esm}/CodeableConceptInput.d.ts +0 -0
- package/dist/esm/CodeableConceptInput.js +52 -0
- package/dist/esm/CodeableConceptInput.js.map +1 -0
- package/dist/{types → esm}/CodingDisplay.d.ts +0 -0
- package/dist/esm/CodingDisplay.js +9 -0
- package/dist/esm/CodingDisplay.js.map +1 -0
- package/dist/{types → esm}/CodingInput.d.ts +0 -0
- package/dist/esm/CodingInput.js +30 -0
- package/dist/esm/CodingInput.js.map +1 -0
- package/dist/{types → esm}/ContactDetailDisplay.d.ts +0 -0
- package/dist/esm/ContactDetailDisplay.js +17 -0
- package/dist/esm/ContactDetailDisplay.js.map +1 -0
- package/dist/{types → esm}/ContactDetailInput.d.ts +0 -0
- package/dist/esm/ContactDetailInput.js +37 -0
- package/dist/esm/ContactDetailInput.js.map +1 -0
- package/dist/{types → esm}/ContactPointDisplay.d.ts +0 -0
- package/dist/esm/ContactPointDisplay.js +29 -0
- package/dist/esm/ContactPointDisplay.js.map +1 -0
- package/dist/{types → esm}/ContactPointInput.d.ts +0 -0
- package/dist/esm/ContactPointInput.js +60 -0
- package/dist/esm/ContactPointInput.js.map +1 -0
- package/dist/{types → esm}/DateTimeDisplay.d.ts +0 -0
- package/dist/esm/DateTimeDisplay.js +11 -0
- package/dist/esm/DateTimeDisplay.js.map +1 -0
- package/dist/{types → esm}/DateTimeInput.d.ts +0 -0
- package/dist/esm/DateTimeInput.js +62 -0
- package/dist/esm/DateTimeInput.js.map +1 -0
- package/dist/{types → esm}/DefaultResourceTimeline.d.ts +0 -0
- package/dist/esm/DefaultResourceTimeline.js +27 -0
- package/dist/esm/DefaultResourceTimeline.js.map +1 -0
- package/dist/{types → esm}/DescriptionList.d.ts +0 -0
- package/dist/esm/DescriptionList.js +13 -0
- package/dist/esm/DescriptionList.js.map +1 -0
- package/dist/{types → esm}/DiagnosticReportDisplay.d.ts +0 -0
- package/dist/esm/DiagnosticReportDisplay.js +103 -0
- package/dist/esm/DiagnosticReportDisplay.js.map +1 -0
- package/dist/{types → esm}/Dialog.d.ts +0 -0
- package/dist/esm/Dialog.js +43 -0
- package/dist/esm/Dialog.js.map +1 -0
- package/dist/{types → esm}/Document.d.ts +0 -0
- package/dist/esm/Document.js +9 -0
- package/dist/esm/Document.js.map +1 -0
- package/dist/{types → esm}/EncounterTimeline.d.ts +0 -0
- package/dist/esm/EncounterTimeline.js +47 -0
- package/dist/esm/EncounterTimeline.js.map +1 -0
- package/dist/{types → esm}/ErrorBoundary.d.ts +0 -0
- package/dist/esm/ErrorBoundary.js +27 -0
- package/dist/esm/ErrorBoundary.js.map +1 -0
- package/dist/{types → esm}/ExtensionInput.d.ts +0 -0
- package/dist/esm/ExtensionInput.js +14 -0
- package/dist/esm/ExtensionInput.js.map +1 -0
- package/dist/{types → esm}/FhirPathDisplay.d.ts +0 -0
- package/dist/esm/FhirPathDisplay.js +23 -0
- package/dist/esm/FhirPathDisplay.js.map +1 -0
- package/dist/{types → esm}/FhirPathTable.d.ts +0 -0
- package/dist/esm/FhirPathTable.js +117 -0
- package/dist/esm/FhirPathTable.js.map +1 -0
- package/dist/{types → esm}/FooterLinks.d.ts +0 -0
- package/dist/esm/FooterLinks.js +8 -0
- package/dist/esm/FooterLinks.js.map +1 -0
- package/dist/{types → esm}/Form.d.ts +0 -0
- package/dist/esm/Form.js +15 -0
- package/dist/esm/Form.js.map +1 -0
- package/dist/{types → esm}/FormSection.d.ts +0 -0
- package/dist/esm/FormSection.js +18 -0
- package/dist/esm/FormSection.js.map +1 -0
- package/dist/{types → esm}/FormUtils.d.ts +0 -0
- package/dist/esm/FormUtils.js +49 -0
- package/dist/esm/FormUtils.js.map +1 -0
- package/dist/{types → esm}/GoogleButton.d.ts +0 -0
- package/dist/esm/GoogleButton.js +48 -0
- package/dist/esm/GoogleButton.js.map +1 -0
- package/dist/{types → esm}/Header.d.ts +0 -0
- package/dist/esm/Header.js +95 -0
- package/dist/esm/Header.js.map +1 -0
- package/dist/{types → esm}/HeaderSearchInput.d.ts +0 -0
- package/dist/esm/HeaderSearchInput.js +181 -0
- package/dist/esm/HeaderSearchInput.js.map +1 -0
- package/dist/{types → esm}/HumanNameDisplay.d.ts +0 -0
- package/dist/esm/HumanNameDisplay.js +13 -0
- package/dist/esm/HumanNameDisplay.js.map +1 -0
- package/dist/{types → esm}/HumanNameInput.d.ts +0 -0
- package/dist/esm/HumanNameInput.js +49 -0
- package/dist/esm/HumanNameInput.js.map +1 -0
- package/dist/{types → esm}/IdentifierDisplay.d.ts +0 -0
- package/dist/esm/IdentifierDisplay.js +12 -0
- package/dist/esm/IdentifierDisplay.js.map +1 -0
- package/dist/{types → esm}/IdentifierInput.d.ts +0 -0
- package/dist/esm/IdentifierInput.js +19 -0
- package/dist/esm/IdentifierInput.js.map +1 -0
- package/dist/{types → esm}/Input.d.ts +0 -0
- package/dist/esm/Input.js +26 -0
- package/dist/esm/Input.js.map +1 -0
- package/dist/{types → esm}/InputRow.d.ts +0 -0
- package/dist/esm/InputRow.js +8 -0
- package/dist/esm/InputRow.js.map +1 -0
- package/dist/{types → esm}/Loading.d.ts +0 -0
- package/dist/esm/Loading.js +11 -0
- package/dist/esm/Loading.js.map +1 -0
- package/dist/{types → esm}/Logo.d.ts +0 -0
- package/dist/esm/Logo.js +14 -0
- package/dist/esm/Logo.js.map +1 -0
- package/dist/{types → esm}/MedplumLink.d.ts +0 -0
- package/dist/esm/MedplumLink.js +34 -0
- package/dist/esm/MedplumLink.js.map +1 -0
- package/dist/{types → esm}/MedplumProvider.d.ts +0 -0
- package/dist/esm/MedplumProvider.js +50 -0
- package/dist/esm/MedplumProvider.js.map +1 -0
- package/dist/{types → esm}/MenuItem.d.ts +0 -0
- package/dist/esm/MenuItem.js +8 -0
- package/dist/esm/MenuItem.js.map +1 -0
- package/dist/{types → esm}/MenuSeparator.d.ts +0 -0
- package/dist/esm/MenuSeparator.js +8 -0
- package/dist/esm/MenuSeparator.js.map +1 -0
- package/dist/{types → esm}/PatientTimeline.d.ts +0 -0
- package/dist/esm/PatientTimeline.js +40 -0
- package/dist/esm/PatientTimeline.js.map +1 -0
- package/dist/{types → esm}/PeriodDisplay.d.ts +0 -0
- package/dist/esm/PeriodDisplay.js +16 -0
- package/dist/esm/PeriodDisplay.js.map +1 -0
- package/dist/{types → esm}/PeriodInput.d.ts +0 -0
- package/dist/esm/PeriodInput.js +19 -0
- package/dist/esm/PeriodInput.js.map +1 -0
- package/dist/{types → esm}/PlanDefinitionBuilder.d.ts +0 -0
- package/dist/esm/PlanDefinitionBuilder.js +155 -0
- package/dist/esm/PlanDefinitionBuilder.js.map +1 -0
- package/dist/{types → esm}/Popup.d.ts +0 -0
- package/dist/esm/Popup.js +64 -0
- package/dist/esm/Popup.js.map +1 -0
- package/dist/{types → esm}/QuantityDisplay.d.ts +0 -0
- package/dist/esm/QuantityDisplay.js +28 -0
- package/dist/esm/QuantityDisplay.js.map +1 -0
- package/dist/{types → esm}/QuantityInput.d.ts +0 -0
- package/dist/esm/QuantityInput.js +33 -0
- package/dist/esm/QuantityInput.js.map +1 -0
- package/dist/{types → esm}/QuestionnaireBuilder.d.ts +0 -0
- package/dist/esm/QuestionnaireBuilder.js +217 -0
- package/dist/esm/QuestionnaireBuilder.js.map +1 -0
- package/dist/{types → esm}/QuestionnaireForm.d.ts +0 -0
- package/dist/esm/QuestionnaireForm.js +215 -0
- package/dist/esm/QuestionnaireForm.js.map +1 -0
- package/dist/{types → esm}/QuestionnaireUtils.d.ts +0 -0
- package/dist/esm/QuestionnaireUtils.js +103 -0
- package/dist/esm/QuestionnaireUtils.js.map +1 -0
- package/dist/{types → esm}/RangeDisplay.d.ts +0 -0
- package/dist/esm/RangeDisplay.js +21 -0
- package/dist/esm/RangeDisplay.js.map +1 -0
- package/dist/{types → esm}/RangeInput.d.ts +0 -0
- package/dist/esm/RangeInput.js +25 -0
- package/dist/esm/RangeInput.js.map +1 -0
- package/dist/{types → esm}/RatioDisplay.d.ts +0 -0
- package/dist/esm/RatioDisplay.js +16 -0
- package/dist/esm/RatioDisplay.js.map +1 -0
- package/dist/{types → esm}/RatioInput.d.ts +0 -0
- package/dist/esm/RatioInput.js +25 -0
- package/dist/esm/RatioInput.js.map +1 -0
- package/dist/{types → esm}/ReferenceDisplay.d.ts +0 -0
- package/dist/esm/ReferenceDisplay.js +21 -0
- package/dist/esm/ReferenceDisplay.js.map +1 -0
- package/dist/{types → esm}/ReferenceInput.d.ts +0 -0
- package/dist/esm/ReferenceInput.js +42 -0
- package/dist/esm/ReferenceInput.js.map +1 -0
- package/dist/{types → esm}/RegisterForm.d.ts +1 -0
- package/dist/esm/RegisterForm.js +121 -0
- package/dist/esm/RegisterForm.js.map +1 -0
- package/dist/{types → esm}/RequestGroupDisplay.d.ts +0 -0
- package/dist/esm/RequestGroupDisplay.js +73 -0
- package/dist/esm/RequestGroupDisplay.js.map +1 -0
- package/dist/{types → esm}/ResourceArrayDisplay.d.ts +0 -0
- package/dist/esm/ResourceArrayDisplay.js +14 -0
- package/dist/esm/ResourceArrayDisplay.js.map +1 -0
- package/dist/{types → esm}/ResourceArrayInput.d.ts +0 -0
- package/dist/esm/ResourceArrayInput.js +48 -0
- package/dist/esm/ResourceArrayInput.js.map +1 -0
- package/dist/{types → esm}/ResourceBadge.d.ts +0 -0
- package/dist/esm/ResourceBadge.js +13 -0
- package/dist/esm/ResourceBadge.js.map +1 -0
- package/dist/{types → esm}/ResourceBlame.d.ts +0 -0
- package/dist/esm/ResourceBlame.js +65 -0
- package/dist/esm/ResourceBlame.js.map +1 -0
- package/dist/{types → esm}/ResourceDiff.d.ts +0 -0
- package/dist/esm/ResourceDiff.js +28 -0
- package/dist/esm/ResourceDiff.js.map +1 -0
- package/dist/{types → esm}/ResourceDiffTable.d.ts +0 -0
- package/dist/esm/ResourceDiffTable.js +58 -0
- package/dist/esm/ResourceDiffTable.js.map +1 -0
- package/dist/{types → esm}/ResourceForm.d.ts +0 -0
- package/dist/esm/ResourceForm.js +55 -0
- package/dist/esm/ResourceForm.js.map +1 -0
- package/dist/{types → esm}/ResourceHistoryTable.d.ts +0 -0
- package/dist/esm/ResourceHistoryTable.js +46 -0
- package/dist/esm/ResourceHistoryTable.js.map +1 -0
- package/dist/{types → esm}/ResourceInput.d.ts +0 -0
- package/dist/esm/ResourceInput.js +40 -0
- package/dist/esm/ResourceInput.js.map +1 -0
- package/dist/{types → esm}/ResourceName.d.ts +0 -0
- package/dist/esm/ResourceName.js +16 -0
- package/dist/esm/ResourceName.js.map +1 -0
- package/dist/{types → esm}/ResourcePropertyDisplay.d.ts +0 -0
- package/dist/esm/ResourcePropertyDisplay.js +107 -0
- package/dist/esm/ResourcePropertyDisplay.js.map +1 -0
- package/dist/{types → esm}/ResourcePropertyInput.d.ts +0 -0
- package/dist/esm/ResourcePropertyInput.js +151 -0
- package/dist/esm/ResourcePropertyInput.js.map +1 -0
- package/dist/{types → esm}/ResourceTable.d.ts +0 -0
- package/dist/esm/ResourceTable.js +22 -0
- package/dist/esm/ResourceTable.js.map +1 -0
- package/dist/{types → esm}/ResourceTimeline.d.ts +0 -0
- package/dist/esm/ResourceTimeline.js +221 -0
- package/dist/esm/ResourceTimeline.js.map +1 -0
- package/dist/{types → esm}/Scheduler.d.ts +0 -0
- package/dist/esm/Scheduler.js +82 -0
- package/dist/esm/Scheduler.js.map +1 -0
- package/dist/{types → esm}/Scrollable.d.ts +0 -0
- package/dist/esm/Scrollable.js +12 -0
- package/dist/esm/Scrollable.js.map +1 -0
- package/dist/{types → esm}/SearchControl.d.ts +0 -0
- package/dist/esm/SearchControl.js +268 -0
- package/dist/esm/SearchControl.js.map +1 -0
- package/dist/{types → esm}/SearchControlField.d.ts +0 -0
- package/dist/esm/SearchControlField.js +98 -0
- package/dist/esm/SearchControlField.js.map +1 -0
- package/dist/{types → esm}/SearchFieldEditor.d.ts +0 -0
- package/dist/esm/SearchFieldEditor.js +192 -0
- package/dist/esm/SearchFieldEditor.js.map +1 -0
- package/dist/{types → esm}/SearchFilterEditor.d.ts +0 -0
- package/dist/esm/SearchFilterEditor.js +103 -0
- package/dist/esm/SearchFilterEditor.js.map +1 -0
- package/dist/{types → esm}/SearchFilterValueDialog.d.ts +0 -0
- package/dist/esm/SearchFilterValueDialog.js +22 -0
- package/dist/esm/SearchFilterValueDialog.js.map +1 -0
- package/dist/{types → esm}/SearchFilterValueDisplay.d.ts +0 -0
- package/dist/esm/SearchFilterValueDisplay.js +22 -0
- package/dist/esm/SearchFilterValueDisplay.js.map +1 -0
- package/dist/{types → esm}/SearchFilterValueInput.d.ts +0 -0
- package/dist/esm/SearchFilterValueInput.js +59 -0
- package/dist/esm/SearchFilterValueInput.js.map +1 -0
- package/dist/{types → esm}/SearchPopupMenu.d.ts +0 -0
- package/dist/esm/SearchPopupMenu.js +135 -0
- package/dist/esm/SearchPopupMenu.js.map +1 -0
- package/dist/{types → esm}/SearchUtils.d.ts +0 -0
- package/dist/esm/SearchUtils.js +488 -0
- package/dist/esm/SearchUtils.js.map +1 -0
- package/dist/{types → esm}/Select.d.ts +0 -0
- package/dist/esm/Select.js +16 -0
- package/dist/esm/Select.js.map +1 -0
- package/dist/{types → esm}/ServiceRequestTimeline.d.ts +0 -0
- package/dist/esm/ServiceRequestTimeline.js +53 -0
- package/dist/esm/ServiceRequestTimeline.js.map +1 -0
- package/dist/{types → esm}/SignInForm.d.ts +0 -0
- package/dist/esm/SignInForm.js +130 -0
- package/dist/esm/SignInForm.js.map +1 -0
- package/dist/{types → esm}/StatusBadge.d.ts +0 -0
- package/dist/esm/StatusBadge.js +8 -0
- package/dist/esm/StatusBadge.js.map +1 -0
- package/dist/{types → esm}/SubMenu.d.ts +0 -0
- package/dist/esm/SubMenu.js +38 -0
- package/dist/esm/SubMenu.js.map +1 -0
- package/dist/{types → esm}/Tab.d.ts +0 -0
- package/dist/esm/Tab.js +19 -0
- package/dist/esm/Tab.js.map +1 -0
- package/dist/{types → esm}/TabList.d.ts +0 -0
- package/dist/esm/TabList.js +23 -0
- package/dist/esm/TabList.js.map +1 -0
- package/dist/{types → esm}/TabPanel.d.ts +0 -0
- package/dist/esm/TabPanel.js +8 -0
- package/dist/esm/TabPanel.js.map +1 -0
- package/dist/{types → esm}/TabSwitch.d.ts +0 -0
- package/dist/esm/TabSwitch.js +16 -0
- package/dist/esm/TabSwitch.js.map +1 -0
- package/dist/{types → esm}/TextArea.d.ts +0 -0
- package/dist/esm/TextArea.js +16 -0
- package/dist/esm/TextArea.js.map +1 -0
- package/dist/{types → esm}/Timeline.d.ts +0 -0
- package/dist/esm/Timeline.js +50 -0
- package/dist/esm/Timeline.js.map +1 -0
- package/dist/{types → esm}/TitleBar.d.ts +0 -0
- package/dist/esm/TitleBar.js +8 -0
- package/dist/esm/TitleBar.js.map +1 -0
- package/dist/{types → esm}/UploadButton.d.ts +0 -0
- package/dist/esm/UploadButton.js +55 -0
- package/dist/esm/UploadButton.js.map +1 -0
- package/dist/{types → esm}/constants.d.ts +0 -0
- package/dist/esm/constants.js +12 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/{types → esm}/index.d.ts +1 -0
- package/dist/esm/index.js +87 -5811
- 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/node_modules/tslib/tslib.es6.js +27 -0
- package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -0
- package/dist/{types → esm}/stories/AddressInput.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/AttachmentArrayInput.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/AttachmentInput.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/Autocomplete.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/Avatar.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/Button.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/DiagnosticReportDisplay.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/Dialog.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/EncounterTimeline.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/FhirPathDisplay.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/FormSection.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/Header.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/Input.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/Loading.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/Logo.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/PatientTimeline.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/PlanDefinitionBuilder.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/QuestionnaireBuilder.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/QuestionnaireForm.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/ReferenceInput.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/RegisterForm.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/RequestGroupDisplay.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/ResourceBlame.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/ResourceForm.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/ResourceHistoryTable.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/ResourceTable.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/Scheduler.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/SearchControl.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/Select.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/SignInForm.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/StatusBadge.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/Tabs.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/Timeline.stories.d.ts +0 -0
- package/dist/{types → esm}/stories/UploadButton.stories.d.ts +0 -0
- package/dist/{types → esm}/test.setup.d.ts +0 -0
- package/dist/{types → esm}/useResource.d.ts +0 -0
- package/dist/esm/useResource.js +65 -0
- package/dist/esm/useResource.js.map +1 -0
- package/dist/{types → esm}/utils/blame.d.ts +0 -0
- package/dist/esm/utils/blame.js +74 -0
- package/dist/esm/utils/blame.js.map +1 -0
- package/dist/{types → esm}/utils/date.d.ts +0 -0
- package/dist/esm/utils/date.js +48 -0
- package/dist/esm/utils/date.js.map +1 -0
- package/dist/{types → esm}/utils/diff.d.ts +0 -0
- package/dist/esm/utils/diff.js +118 -0
- package/dist/esm/utils/diff.js.map +1 -0
- package/dist/{types → esm}/utils/dom.d.ts +0 -0
- package/dist/esm/utils/dom.js +34 -0
- package/dist/esm/utils/dom.js.map +1 -0
- package/dist/{types → esm}/utils/outcomes.d.ts +0 -0
- package/dist/esm/utils/outcomes.js +7 -0
- package/dist/esm/utils/outcomes.js.map +1 -0
- package/dist/esm/utils/recaptcha.d.ts +12 -0
- package/dist/esm/utils/recaptcha.js +27 -0
- package/dist/esm/utils/recaptcha.js.map +1 -0
- package/dist/{types → esm}/utils.d.ts +0 -0
- package/dist/esm/utils.js +15 -0
- package/dist/esm/utils.js.map +1 -0
- package/package.json +11 -11
- package/dist/types/utils/recaptcha.d.ts +0 -10
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { Operator } from '@medplum/core';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { MenuItem } from './MenuItem.js';
|
|
4
|
+
import { MenuSeparator } from './MenuSeparator.js';
|
|
5
|
+
import { Popup } from './Popup.js';
|
|
6
|
+
import { buildFieldNameString, addTomorrowFilter, addTodayFilter, addYesterdayFilter, addNextMonthFilter, addThisMonthFilter, addLastMonthFilter, addYearToDateFilter, addMissingFilter, setSort, clearFiltersOnField } from './SearchUtils.js';
|
|
7
|
+
import { SubMenu } from './SubMenu.js';
|
|
8
|
+
|
|
9
|
+
function SearchPopupMenu(props) {
|
|
10
|
+
if (!props.searchParams) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
function onSort(searchParam, desc) {
|
|
14
|
+
onChange(setSort(props.search, searchParam.code, desc));
|
|
15
|
+
}
|
|
16
|
+
function onClear(searchParam) {
|
|
17
|
+
onChange(clearFiltersOnField(props.search, searchParam.code));
|
|
18
|
+
}
|
|
19
|
+
function onPrompt(searchParam, operator) {
|
|
20
|
+
props.onPrompt(searchParam, { code: searchParam.code, operator, value: '' });
|
|
21
|
+
}
|
|
22
|
+
function onChange(definition) {
|
|
23
|
+
props.onChange(definition);
|
|
24
|
+
}
|
|
25
|
+
const anchor = { left: props.x, right: props.x, top: props.y, bottom: props.y };
|
|
26
|
+
// If there is only one search parameter, then show it directly
|
|
27
|
+
if (props.searchParams.length === 1) {
|
|
28
|
+
return (React.createElement(Popup, { visible: props.visible, anchor: anchor, autoClose: true, onClose: props.onClose },
|
|
29
|
+
React.createElement(SearchParameterSubMenu, { search: props.search, searchParam: props.searchParams[0], onSort: onSort, onPrompt: onPrompt, onChange: onChange, onClear: onClear })));
|
|
30
|
+
}
|
|
31
|
+
// Otherwise, show a menu, with each search parameter as a sub menu
|
|
32
|
+
return (React.createElement(Popup, { visible: props.visible, anchor: anchor, autoClose: true, onClose: props.onClose }, props.searchParams.map((searchParam) => (React.createElement(SubMenu, { key: searchParam.code, title: buildFieldNameString(searchParam.code) },
|
|
33
|
+
React.createElement(SearchParameterSubMenu, { search: props.search, searchParam: searchParam, onSort: onSort, onPrompt: onPrompt, onChange: onChange, onClear: onClear }))))));
|
|
34
|
+
}
|
|
35
|
+
function SearchParameterSubMenu(props) {
|
|
36
|
+
switch (props.searchParam.type) {
|
|
37
|
+
case 'date':
|
|
38
|
+
return React.createElement(DateFilterSubMenu, Object.assign({}, props));
|
|
39
|
+
case 'number':
|
|
40
|
+
case 'quantity':
|
|
41
|
+
return React.createElement(NumericFilterSubMenu, Object.assign({}, props));
|
|
42
|
+
case 'reference':
|
|
43
|
+
return React.createElement(ReferenceFilterSubMenu, Object.assign({}, props));
|
|
44
|
+
case 'string':
|
|
45
|
+
case 'token':
|
|
46
|
+
case 'uri':
|
|
47
|
+
return React.createElement(TextFilterSubMenu, Object.assign({}, props));
|
|
48
|
+
default:
|
|
49
|
+
return React.createElement(React.Fragment, null,
|
|
50
|
+
"Unknown search param type: ",
|
|
51
|
+
props.searchParam.type);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function DateFilterSubMenu(props) {
|
|
55
|
+
const { searchParam } = props;
|
|
56
|
+
const code = searchParam.code;
|
|
57
|
+
return (React.createElement(React.Fragment, null,
|
|
58
|
+
React.createElement(MenuItem, { onClick: () => props.onSort(searchParam, false) }, "Sort Oldest to Newest"),
|
|
59
|
+
React.createElement(MenuItem, { onClick: () => props.onSort(searchParam, true) }, "Sort Newest to Oldest"),
|
|
60
|
+
React.createElement(MenuSeparator, null),
|
|
61
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.EQUALS) }, "Equals..."),
|
|
62
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.NOT_EQUALS) }, "Does not equal..."),
|
|
63
|
+
React.createElement(MenuSeparator, null),
|
|
64
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.ENDS_BEFORE) }, "Before..."),
|
|
65
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.STARTS_AFTER) }, "After..."),
|
|
66
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.EQUALS) }, "Between..."),
|
|
67
|
+
React.createElement(MenuSeparator, null),
|
|
68
|
+
React.createElement(MenuItem, { onClick: () => props.onChange(addTomorrowFilter(props.search, code)) }, "Tomorrow"),
|
|
69
|
+
React.createElement(MenuItem, { onClick: () => props.onChange(addTodayFilter(props.search, code)) }, "Today"),
|
|
70
|
+
React.createElement(MenuItem, { onClick: () => props.onChange(addYesterdayFilter(props.search, code)) }, "Yesterday"),
|
|
71
|
+
React.createElement(MenuSeparator, null),
|
|
72
|
+
React.createElement(MenuItem, { onClick: () => props.onChange(addNextMonthFilter(props.search, code)) }, "Next Month"),
|
|
73
|
+
React.createElement(MenuItem, { onClick: () => props.onChange(addThisMonthFilter(props.search, code)) }, "This Month"),
|
|
74
|
+
React.createElement(MenuItem, { onClick: () => props.onChange(addLastMonthFilter(props.search, code)) }, "Last Month"),
|
|
75
|
+
React.createElement(MenuSeparator, null),
|
|
76
|
+
React.createElement(MenuItem, { onClick: () => props.onChange(addYearToDateFilter(props.search, code)) }, "Year to date"),
|
|
77
|
+
React.createElement(MenuSeparator, null),
|
|
78
|
+
React.createElement(MenuItem, { onClick: () => props.onChange(addMissingFilter(props.search, code)) }, "Missing"),
|
|
79
|
+
React.createElement(MenuItem, { onClick: () => props.onChange(addMissingFilter(props.search, code, false)) }, "Not missing"),
|
|
80
|
+
React.createElement(MenuSeparator, null),
|
|
81
|
+
React.createElement(MenuItem, { onClick: () => props.onClear(searchParam) }, "Clear filters")));
|
|
82
|
+
}
|
|
83
|
+
function NumericFilterSubMenu(props) {
|
|
84
|
+
const { searchParam } = props;
|
|
85
|
+
const code = searchParam.code;
|
|
86
|
+
return (React.createElement(React.Fragment, null,
|
|
87
|
+
React.createElement(MenuItem, { onClick: () => props.onSort(searchParam, false) }, "Sort Smallest to Largest"),
|
|
88
|
+
React.createElement(MenuItem, { onClick: () => props.onSort(searchParam, true) }, "Sort Largest to Smallest"),
|
|
89
|
+
React.createElement(MenuSeparator, null),
|
|
90
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.EQUALS) }, "Equals..."),
|
|
91
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.NOT_EQUALS) }, "Does not equal..."),
|
|
92
|
+
React.createElement(MenuSeparator, null),
|
|
93
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.GREATER_THAN) }, "Greater than..."),
|
|
94
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.GREATER_THAN_OR_EQUALS) }, "Greater than or equal to..."),
|
|
95
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.LESS_THAN) }, "Less than..."),
|
|
96
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.LESS_THAN_OR_EQUALS) }, "Less than or equal to..."),
|
|
97
|
+
React.createElement(MenuSeparator, null),
|
|
98
|
+
React.createElement(MenuItem, { onClick: () => props.onChange(addMissingFilter(props.search, code)) }, "Missing"),
|
|
99
|
+
React.createElement(MenuItem, { onClick: () => props.onChange(addMissingFilter(props.search, code, false)) }, "Not missing"),
|
|
100
|
+
React.createElement(MenuSeparator, null),
|
|
101
|
+
React.createElement(MenuItem, { onClick: () => props.onClear(searchParam) }, "Clear filters")));
|
|
102
|
+
}
|
|
103
|
+
function ReferenceFilterSubMenu(props) {
|
|
104
|
+
const { searchParam } = props;
|
|
105
|
+
const code = searchParam.code;
|
|
106
|
+
return (React.createElement(React.Fragment, null,
|
|
107
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.EQUALS) }, "Equals..."),
|
|
108
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.NOT) }, "Does not equal..."),
|
|
109
|
+
React.createElement(MenuSeparator, null),
|
|
110
|
+
React.createElement(MenuItem, { onClick: () => props.onChange(addMissingFilter(props.search, code)) }, "Missing"),
|
|
111
|
+
React.createElement(MenuItem, { onClick: () => props.onChange(addMissingFilter(props.search, code, false)) }, "Not missing"),
|
|
112
|
+
React.createElement(MenuSeparator, null),
|
|
113
|
+
React.createElement(MenuItem, { onClick: () => props.onClear(searchParam) }, "Clear filters")));
|
|
114
|
+
}
|
|
115
|
+
function TextFilterSubMenu(props) {
|
|
116
|
+
const { searchParam } = props;
|
|
117
|
+
const code = searchParam.code;
|
|
118
|
+
return (React.createElement(React.Fragment, null,
|
|
119
|
+
React.createElement(MenuItem, { onClick: () => props.onSort(searchParam, false) }, "Sort A to Z"),
|
|
120
|
+
React.createElement(MenuItem, { onClick: () => props.onSort(searchParam, true) }, "Sort Z to A"),
|
|
121
|
+
React.createElement(MenuSeparator, null),
|
|
122
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.EQUALS) }, "Equals..."),
|
|
123
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.NOT) }, "Does not equal..."),
|
|
124
|
+
React.createElement(MenuSeparator, null),
|
|
125
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.CONTAINS) }, "Contains..."),
|
|
126
|
+
React.createElement(MenuItem, { onClick: () => props.onPrompt(searchParam, Operator.EQUALS) }, "Does not contain..."),
|
|
127
|
+
React.createElement(MenuSeparator, null),
|
|
128
|
+
React.createElement(MenuItem, { onClick: () => props.onChange(addMissingFilter(props.search, code)) }, "Missing"),
|
|
129
|
+
React.createElement(MenuItem, { onClick: () => props.onChange(addMissingFilter(props.search, code, false)) }, "Not missing"),
|
|
130
|
+
React.createElement(MenuSeparator, null),
|
|
131
|
+
React.createElement(MenuItem, { onClick: () => props.onClear(searchParam) }, "Clear filters")));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export { SearchPopupMenu };
|
|
135
|
+
//# sourceMappingURL=SearchPopupMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchPopupMenu.js","sources":["../../src/SearchPopupMenu.tsx"],"sourcesContent":["import { Filter, IndexedStructureDefinition, Operator, SearchRequest } from '@medplum/core';\nimport { SearchParameter } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { MenuItem } from './MenuItem';\nimport { MenuSeparator } from './MenuSeparator';\nimport { Popup } from './Popup';\nimport {\n addLastMonthFilter,\n addMissingFilter,\n addNextMonthFilter,\n addThisMonthFilter,\n addTodayFilter,\n addTomorrowFilter,\n addYearToDateFilter,\n addYesterdayFilter,\n buildFieldNameString,\n clearFiltersOnField,\n setSort,\n} from './SearchUtils';\nimport { SubMenu } from './SubMenu';\n\nexport interface SearchPopupMenuProps {\n schema: IndexedStructureDefinition;\n search: SearchRequest;\n visible: boolean;\n x: number;\n y: number;\n searchParams?: SearchParameter[];\n onPrompt: (searchParam: SearchParameter, filter: Filter) => void;\n onChange: (definition: SearchRequest) => void;\n onClose: () => void;\n}\n\nexport function SearchPopupMenu(props: SearchPopupMenuProps): JSX.Element | null {\n if (!props.searchParams) {\n return null;\n }\n\n function onSort(searchParam: SearchParameter, desc: boolean): void {\n onChange(setSort(props.search, searchParam.code as string, desc));\n }\n\n function onClear(searchParam: SearchParameter): void {\n onChange(clearFiltersOnField(props.search, searchParam.code as string));\n }\n\n function onPrompt(searchParam: SearchParameter, operator: Operator): void {\n props.onPrompt(searchParam, { code: searchParam.code as string, operator, value: '' });\n }\n\n function onChange(definition: SearchRequest): void {\n props.onChange(definition);\n }\n\n const anchor = { left: props.x, right: props.x, top: props.y, bottom: props.y } as DOMRectReadOnly;\n\n // If there is only one search parameter, then show it directly\n if (props.searchParams.length === 1) {\n return (\n <Popup visible={props.visible} anchor={anchor} autoClose={true} onClose={props.onClose}>\n <SearchParameterSubMenu\n search={props.search}\n searchParam={props.searchParams[0]}\n onSort={onSort}\n onPrompt={onPrompt}\n onChange={onChange}\n onClear={onClear}\n />\n </Popup>\n );\n }\n\n // Otherwise, show a menu, with each search parameter as a sub menu\n return (\n <Popup visible={props.visible} anchor={anchor} autoClose={true} onClose={props.onClose}>\n {props.searchParams.map((searchParam) => (\n <SubMenu key={searchParam.code as string} title={buildFieldNameString(searchParam.code as string)}>\n <SearchParameterSubMenu\n search={props.search}\n searchParam={searchParam}\n onSort={onSort}\n onPrompt={onPrompt}\n onChange={onChange}\n onClear={onClear}\n />\n </SubMenu>\n ))}\n </Popup>\n );\n}\n\ninterface SearchPopupSubMenuProps {\n search: SearchRequest;\n searchParam: SearchParameter;\n onSort: (searchParam: SearchParameter, descending: boolean) => void;\n onPrompt: (searchParam: SearchParameter, operator: Operator) => void;\n onChange: (search: SearchRequest) => void;\n onClear: (searchParam: SearchParameter) => void;\n}\n\nfunction SearchParameterSubMenu(props: SearchPopupSubMenuProps): JSX.Element {\n switch (props.searchParam.type) {\n case 'date':\n return <DateFilterSubMenu {...props} />;\n case 'number':\n case 'quantity':\n return <NumericFilterSubMenu {...props} />;\n case 'reference':\n return <ReferenceFilterSubMenu {...props} />;\n case 'string':\n case 'token':\n case 'uri':\n return <TextFilterSubMenu {...props} />;\n default:\n return <>Unknown search param type: {props.searchParam.type}</>;\n }\n}\n\nfunction DateFilterSubMenu(props: SearchPopupSubMenuProps): JSX.Element {\n const { searchParam } = props;\n const code = searchParam.code as string;\n return (\n <>\n <MenuItem onClick={() => props.onSort(searchParam, false)}>Sort Oldest to Newest</MenuItem>\n <MenuItem onClick={() => props.onSort(searchParam, true)}>Sort Newest to Oldest</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.EQUALS)}>Equals...</MenuItem>\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.NOT_EQUALS)}>Does not equal...</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.ENDS_BEFORE)}>Before...</MenuItem>\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.STARTS_AFTER)}>After...</MenuItem>\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.EQUALS)}>Between...</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onChange(addTomorrowFilter(props.search, code))}>Tomorrow</MenuItem>\n <MenuItem onClick={() => props.onChange(addTodayFilter(props.search, code))}>Today</MenuItem>\n <MenuItem onClick={() => props.onChange(addYesterdayFilter(props.search, code))}>Yesterday</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onChange(addNextMonthFilter(props.search, code))}>Next Month</MenuItem>\n <MenuItem onClick={() => props.onChange(addThisMonthFilter(props.search, code))}>This Month</MenuItem>\n <MenuItem onClick={() => props.onChange(addLastMonthFilter(props.search, code))}>Last Month</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onChange(addYearToDateFilter(props.search, code))}>Year to date</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onChange(addMissingFilter(props.search, code))}>Missing</MenuItem>\n <MenuItem onClick={() => props.onChange(addMissingFilter(props.search, code, false))}>Not missing</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onClear(searchParam)}>Clear filters</MenuItem>\n </>\n );\n}\n\nfunction NumericFilterSubMenu(props: SearchPopupSubMenuProps): JSX.Element {\n const { searchParam } = props;\n const code = searchParam.code as string;\n return (\n <>\n <MenuItem onClick={() => props.onSort(searchParam, false)}>Sort Smallest to Largest</MenuItem>\n <MenuItem onClick={() => props.onSort(searchParam, true)}>Sort Largest to Smallest</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.EQUALS)}>Equals...</MenuItem>\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.NOT_EQUALS)}>Does not equal...</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.GREATER_THAN)}>Greater than...</MenuItem>\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.GREATER_THAN_OR_EQUALS)}>\n Greater than or equal to...\n </MenuItem>\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.LESS_THAN)}>Less than...</MenuItem>\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.LESS_THAN_OR_EQUALS)}>\n Less than or equal to...\n </MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onChange(addMissingFilter(props.search, code))}>Missing</MenuItem>\n <MenuItem onClick={() => props.onChange(addMissingFilter(props.search, code, false))}>Not missing</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onClear(searchParam)}>Clear filters</MenuItem>\n </>\n );\n}\n\nfunction ReferenceFilterSubMenu(props: SearchPopupSubMenuProps): JSX.Element {\n const { searchParam } = props;\n const code = searchParam.code as string;\n return (\n <>\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.EQUALS)}>Equals...</MenuItem>\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.NOT)}>Does not equal...</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onChange(addMissingFilter(props.search, code))}>Missing</MenuItem>\n <MenuItem onClick={() => props.onChange(addMissingFilter(props.search, code, false))}>Not missing</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onClear(searchParam)}>Clear filters</MenuItem>\n </>\n );\n}\n\nfunction TextFilterSubMenu(props: SearchPopupSubMenuProps): JSX.Element {\n const { searchParam } = props;\n const code = searchParam.code as string;\n return (\n <>\n <MenuItem onClick={() => props.onSort(searchParam, false)}>Sort A to Z</MenuItem>\n <MenuItem onClick={() => props.onSort(searchParam, true)}>Sort Z to A</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.EQUALS)}>Equals...</MenuItem>\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.NOT)}>Does not equal...</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.CONTAINS)}>Contains...</MenuItem>\n <MenuItem onClick={() => props.onPrompt(searchParam, Operator.EQUALS)}>Does not contain...</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onChange(addMissingFilter(props.search, code))}>Missing</MenuItem>\n <MenuItem onClick={() => props.onChange(addMissingFilter(props.search, code, false))}>Not missing</MenuItem>\n <MenuSeparator />\n <MenuItem onClick={() => props.onClear(searchParam)}>Clear filters</MenuItem>\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
import { Operator, capitalize, evalFhirPathTyped } from '@medplum/core';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { DateTimeDisplay } from './DateTimeDisplay.js';
|
|
4
|
+
import { getValueAndType, ResourcePropertyDisplay } from './ResourcePropertyDisplay.js';
|
|
5
|
+
|
|
6
|
+
const searchParamToOperators = {
|
|
7
|
+
string: [Operator.EQUALS, Operator.NOT, Operator.CONTAINS, Operator.EXACT],
|
|
8
|
+
fulltext: [Operator.EQUALS, Operator.NOT, Operator.CONTAINS, Operator.EXACT],
|
|
9
|
+
token: [Operator.EQUALS, Operator.NOT],
|
|
10
|
+
reference: [Operator.EQUALS, Operator.NOT],
|
|
11
|
+
numeric: [
|
|
12
|
+
Operator.EQUALS,
|
|
13
|
+
Operator.NOT_EQUALS,
|
|
14
|
+
Operator.GREATER_THAN,
|
|
15
|
+
Operator.LESS_THAN,
|
|
16
|
+
Operator.GREATER_THAN_OR_EQUALS,
|
|
17
|
+
Operator.LESS_THAN_OR_EQUALS,
|
|
18
|
+
],
|
|
19
|
+
quantity: [
|
|
20
|
+
Operator.EQUALS,
|
|
21
|
+
Operator.NOT_EQUALS,
|
|
22
|
+
Operator.GREATER_THAN,
|
|
23
|
+
Operator.LESS_THAN,
|
|
24
|
+
Operator.GREATER_THAN_OR_EQUALS,
|
|
25
|
+
Operator.LESS_THAN_OR_EQUALS,
|
|
26
|
+
],
|
|
27
|
+
date: [
|
|
28
|
+
Operator.EQUALS,
|
|
29
|
+
Operator.NOT_EQUALS,
|
|
30
|
+
Operator.GREATER_THAN,
|
|
31
|
+
Operator.LESS_THAN,
|
|
32
|
+
Operator.GREATER_THAN_OR_EQUALS,
|
|
33
|
+
Operator.LESS_THAN_OR_EQUALS,
|
|
34
|
+
Operator.STARTS_AFTER,
|
|
35
|
+
Operator.ENDS_BEFORE,
|
|
36
|
+
Operator.APPROXIMATELY,
|
|
37
|
+
],
|
|
38
|
+
datetime: [
|
|
39
|
+
Operator.EQUALS,
|
|
40
|
+
Operator.NOT_EQUALS,
|
|
41
|
+
Operator.GREATER_THAN,
|
|
42
|
+
Operator.LESS_THAN,
|
|
43
|
+
Operator.GREATER_THAN_OR_EQUALS,
|
|
44
|
+
Operator.LESS_THAN_OR_EQUALS,
|
|
45
|
+
Operator.STARTS_AFTER,
|
|
46
|
+
Operator.ENDS_BEFORE,
|
|
47
|
+
Operator.APPROXIMATELY,
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
const operatorNames = {
|
|
51
|
+
eq: 'equals',
|
|
52
|
+
ne: 'not equals',
|
|
53
|
+
gt: 'greater than',
|
|
54
|
+
lt: 'less than',
|
|
55
|
+
ge: 'greater than or equals',
|
|
56
|
+
le: 'less than or equals',
|
|
57
|
+
sa: 'starts after',
|
|
58
|
+
eb: 'ends before',
|
|
59
|
+
ap: 'approximately',
|
|
60
|
+
contains: 'contains',
|
|
61
|
+
exact: 'exact',
|
|
62
|
+
text: 'text',
|
|
63
|
+
not: 'not',
|
|
64
|
+
above: 'above',
|
|
65
|
+
below: 'below',
|
|
66
|
+
in: 'in',
|
|
67
|
+
'not-in': 'not in',
|
|
68
|
+
'of-type': 'of type',
|
|
69
|
+
missing: 'missing',
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Sets the array of filters.
|
|
73
|
+
*
|
|
74
|
+
* @param {Array} filters The new filters.
|
|
75
|
+
*/
|
|
76
|
+
function setFilters(definition, filters) {
|
|
77
|
+
return Object.assign(Object.assign({}, definition), { filters: filters, offset: 0, name: undefined });
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Clears all of the filters.
|
|
81
|
+
*/
|
|
82
|
+
function clearFilters(definition) {
|
|
83
|
+
return setFilters(definition, []);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Clears all of the filters on a certain field.
|
|
87
|
+
*
|
|
88
|
+
* @param {string} code The field key name to clear filters.
|
|
89
|
+
*/
|
|
90
|
+
function clearFiltersOnField(definition, code) {
|
|
91
|
+
return setFilters(definition, (definition.filters || []).filter((f) => f.code !== code));
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Adds a filter.
|
|
95
|
+
*
|
|
96
|
+
* @param {string} field The field key name.
|
|
97
|
+
* @param {Operator} op The operation key name.
|
|
98
|
+
* @param {?string} value The filter value.
|
|
99
|
+
* @param {boolean=} opt_clear Optional flag to clear filters on the field.
|
|
100
|
+
*/
|
|
101
|
+
function addFilter(definition, field, op, value, opt_clear) {
|
|
102
|
+
if (opt_clear) {
|
|
103
|
+
definition = clearFiltersOnField(definition, field);
|
|
104
|
+
}
|
|
105
|
+
const nextFilters = [];
|
|
106
|
+
if (definition.filters) {
|
|
107
|
+
nextFilters.push(...definition.filters);
|
|
108
|
+
}
|
|
109
|
+
nextFilters.push({ code: field, operator: op, value: value || '' });
|
|
110
|
+
return setFilters(definition, nextFilters);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Adds a field.
|
|
114
|
+
*
|
|
115
|
+
* @param {string} field The field key name.
|
|
116
|
+
*/
|
|
117
|
+
function addField(definition, field) {
|
|
118
|
+
if (definition.fields && definition.fields.includes(field)) {
|
|
119
|
+
return definition;
|
|
120
|
+
}
|
|
121
|
+
const newFields = [];
|
|
122
|
+
if (definition.fields) {
|
|
123
|
+
newFields.push(...definition.fields);
|
|
124
|
+
}
|
|
125
|
+
newFields.push(field);
|
|
126
|
+
return Object.assign(Object.assign({}, definition), { fields: newFields, name: undefined });
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Deletes a filter at the specified index.
|
|
130
|
+
*
|
|
131
|
+
* @param {number} index The filter index.
|
|
132
|
+
*/
|
|
133
|
+
function deleteFilter(definition, index) {
|
|
134
|
+
if (!definition.filters) {
|
|
135
|
+
return definition;
|
|
136
|
+
}
|
|
137
|
+
const newFilters = [...definition.filters];
|
|
138
|
+
newFilters.splice(index, 1);
|
|
139
|
+
return Object.assign(Object.assign({}, definition), { filters: newFilters, name: undefined });
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Adds a filter that constrains the specified field to "yesterday".
|
|
143
|
+
*
|
|
144
|
+
* @param {string} field The field key name.
|
|
145
|
+
*/
|
|
146
|
+
function addYesterdayFilter(definition, field) {
|
|
147
|
+
return addDayFilter(definition, field, -1);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Adds a filter that constrains the specified field to "today".
|
|
151
|
+
*
|
|
152
|
+
* @param {string} field The field key name.
|
|
153
|
+
*/
|
|
154
|
+
function addTodayFilter(definition, field) {
|
|
155
|
+
return addDayFilter(definition, field, 0);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Adds a filter that constrains the specified field to "tomorrow".
|
|
159
|
+
*
|
|
160
|
+
* @param {string} field The field key name.
|
|
161
|
+
*/
|
|
162
|
+
function addTomorrowFilter(definition, field) {
|
|
163
|
+
return addDayFilter(definition, field, 1);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Adds a filter that constrains the specified field to a day.
|
|
167
|
+
* The day is specified as a delta from the current day.
|
|
168
|
+
* "Today" would be 0.
|
|
169
|
+
* "Yesterday" would be -1.
|
|
170
|
+
* "Tomorrow" would be 1.
|
|
171
|
+
*
|
|
172
|
+
* @param {string} field The field key name.
|
|
173
|
+
* @param {number} delta The number of days from this day.
|
|
174
|
+
*/
|
|
175
|
+
function addDayFilter(definition, field, delta) {
|
|
176
|
+
const startTime = new Date();
|
|
177
|
+
startTime.setDate(startTime.getDate() + delta);
|
|
178
|
+
startTime.setHours(0, 0, 0, 0);
|
|
179
|
+
const endTime = new Date(startTime.getTime());
|
|
180
|
+
endTime.setDate(endTime.getDate() + 1);
|
|
181
|
+
endTime.setTime(endTime.getTime() - 1);
|
|
182
|
+
return addDateFilterBetween(definition, field, startTime, endTime);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Adds a filter that constrains the specified field to "last month".
|
|
186
|
+
*
|
|
187
|
+
* @param {string} field The field key name.
|
|
188
|
+
*/
|
|
189
|
+
function addLastMonthFilter(definition, field) {
|
|
190
|
+
return addMonthFilter(definition, field, -1);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Adds a filter that constrains the specified field to "this month".
|
|
194
|
+
*
|
|
195
|
+
* @param {string} field The field key name.
|
|
196
|
+
*/
|
|
197
|
+
function addThisMonthFilter(definition, field) {
|
|
198
|
+
return addMonthFilter(definition, field, 0);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Adds a filter that constrains the specified field to "next month".
|
|
202
|
+
*
|
|
203
|
+
* @param {string} field The field key name.
|
|
204
|
+
*/
|
|
205
|
+
function addNextMonthFilter(definition, field) {
|
|
206
|
+
return addMonthFilter(definition, field, 1);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Adds a filter that constrains the specified field to a month.
|
|
210
|
+
* The month is specified as a delta from the current month.
|
|
211
|
+
* "This month" would be 0.
|
|
212
|
+
* "Last month" would be -1.
|
|
213
|
+
* "Next month" would be 1.
|
|
214
|
+
*
|
|
215
|
+
* @param {string} field The field key name.
|
|
216
|
+
* @param {number} delta The number of months from this month.
|
|
217
|
+
*/
|
|
218
|
+
function addMonthFilter(definition, field, delta) {
|
|
219
|
+
const startTime = new Date();
|
|
220
|
+
startTime.setMonth(startTime.getMonth() + delta);
|
|
221
|
+
startTime.setDate(1);
|
|
222
|
+
startTime.setHours(0, 0, 0, 0);
|
|
223
|
+
const endTime = new Date(startTime.getTime());
|
|
224
|
+
endTime.setMonth(endTime.getMonth() + 1);
|
|
225
|
+
endTime.setDate(1);
|
|
226
|
+
endTime.setHours(0, 0, 0, 0);
|
|
227
|
+
endTime.setTime(endTime.getTime() - 1);
|
|
228
|
+
return addDateFilterBetween(definition, field, startTime, endTime);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Adds a filter that constrains the specified field to the year to date.
|
|
232
|
+
*
|
|
233
|
+
* @param {string} field The field key name.
|
|
234
|
+
*/
|
|
235
|
+
function addYearToDateFilter(definition, field) {
|
|
236
|
+
const startTime = new Date();
|
|
237
|
+
startTime.setMonth(0);
|
|
238
|
+
startTime.setDate(1);
|
|
239
|
+
startTime.setHours(0, 0, 0, 0);
|
|
240
|
+
const endTime = new Date();
|
|
241
|
+
return addDateFilterBetween(definition, field, startTime, endTime);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Adds a filter for a field equaling a specified date.
|
|
245
|
+
*
|
|
246
|
+
* @param {string} field The field key name.
|
|
247
|
+
* @param {Date} value The date.
|
|
248
|
+
*/
|
|
249
|
+
function addDateEqualsFilter(definition, field, value) {
|
|
250
|
+
return addDateFilterBetween(definition, field, value, value);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Adds a filter for a date before a certain date/time.
|
|
254
|
+
*
|
|
255
|
+
* @param {string} field The field key name.
|
|
256
|
+
* @param {Operator} op The date/time operation.
|
|
257
|
+
* @param {Date} value The date.
|
|
258
|
+
*/
|
|
259
|
+
function addDateFilter(definition, field, op, value) {
|
|
260
|
+
definition = clearFiltersOnField(definition, field);
|
|
261
|
+
return addDateFilterImpl(definition, field, op, value);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Adds a filter for a date between two dates (inclusive of both dates).
|
|
265
|
+
*
|
|
266
|
+
* @param {string} field The field key name.
|
|
267
|
+
* @param {Date} d1 The start date.
|
|
268
|
+
* @param {Date} d2 The end date.
|
|
269
|
+
*/
|
|
270
|
+
function addDateFilterBetween(definition, field, d1, d2) {
|
|
271
|
+
definition = clearFiltersOnField(definition, field);
|
|
272
|
+
definition = addDateFilterImpl(definition, field, Operator.GREATER_THAN_OR_EQUALS, d1);
|
|
273
|
+
definition = addDateFilterImpl(definition, field, Operator.LESS_THAN_OR_EQUALS, d2);
|
|
274
|
+
return definition;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Adds a filter for a date before a certain date/time.
|
|
278
|
+
*
|
|
279
|
+
* @param {string} field The field key name.
|
|
280
|
+
* @param {Operator} op The date/time operation.
|
|
281
|
+
* @param {Date} value The date.
|
|
282
|
+
*/
|
|
283
|
+
function addDateFilterImpl(definition, field, op, value) {
|
|
284
|
+
return addFilter(definition, field, op, value.toISOString());
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Adds a filter that constrains the specified field to "missing".
|
|
288
|
+
*
|
|
289
|
+
* @param {string} field The field key name.
|
|
290
|
+
*/
|
|
291
|
+
function addMissingFilter(definition, field, value = true) {
|
|
292
|
+
return addFilter(definition, field, Operator.MISSING, value.toString());
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Returns true if the search has any filters on the specified field.
|
|
296
|
+
*
|
|
297
|
+
* @param {string} code The field key name.
|
|
298
|
+
*/
|
|
299
|
+
function hasFilterOnField(definition, code) {
|
|
300
|
+
if (!definition.filters) {
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
return definition.filters.find((f) => f.code === code) !== undefined;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Sets the offset (starting at zero).
|
|
307
|
+
*
|
|
308
|
+
* @param {number} offset The offset number.
|
|
309
|
+
*/
|
|
310
|
+
function setOffset(definition, offset) {
|
|
311
|
+
if (definition.offset === offset) {
|
|
312
|
+
return definition;
|
|
313
|
+
}
|
|
314
|
+
return Object.assign(Object.assign({}, definition), { offset, name: undefined });
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Moves the page forward or backward.
|
|
318
|
+
*
|
|
319
|
+
* @param {number} delta The delta to the page number.
|
|
320
|
+
* @return {boolean} True if the page actually moved; false otherwise.
|
|
321
|
+
*/
|
|
322
|
+
function movePage(definition, delta) {
|
|
323
|
+
var _a, _b;
|
|
324
|
+
const count = (_a = definition.count) !== null && _a !== void 0 ? _a : 20;
|
|
325
|
+
const currOffset = (_b = definition.offset) !== null && _b !== void 0 ? _b : 0;
|
|
326
|
+
const newOffset = currOffset + delta * count;
|
|
327
|
+
return setOffset(definition, Math.max(newOffset, 0));
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Sorts the search by the specified key, and optional direction.
|
|
331
|
+
* Direction defaults to ascending ('asc') if not specified.
|
|
332
|
+
*
|
|
333
|
+
* @param {string} sortField The sort key.
|
|
334
|
+
*/
|
|
335
|
+
function setSort(definition, sort, desc) {
|
|
336
|
+
if (sort === getSortField(definition) && desc !== undefined && desc === isSortDescending(definition)) {
|
|
337
|
+
return definition;
|
|
338
|
+
}
|
|
339
|
+
return Object.assign(Object.assign({}, definition), { sortRules: [
|
|
340
|
+
{
|
|
341
|
+
code: sort,
|
|
342
|
+
descending: !!desc,
|
|
343
|
+
},
|
|
344
|
+
], name: undefined });
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Toggles the sort of the search by key.
|
|
348
|
+
* If the search is already sorted by the key, reverses the direction.
|
|
349
|
+
* If the search is not sorted by the key, sort in ascending order.
|
|
350
|
+
*
|
|
351
|
+
* @param {string} key The field key name.
|
|
352
|
+
*/
|
|
353
|
+
function toggleSort(definition, key) {
|
|
354
|
+
let desc = false;
|
|
355
|
+
if (getSortField(definition) === key) {
|
|
356
|
+
desc = !isSortDescending(definition);
|
|
357
|
+
}
|
|
358
|
+
return setSort(definition, key, desc);
|
|
359
|
+
}
|
|
360
|
+
function getSortField(definition) {
|
|
361
|
+
const sortRules = definition.sortRules;
|
|
362
|
+
if (!sortRules || sortRules.length === 0) {
|
|
363
|
+
return undefined;
|
|
364
|
+
}
|
|
365
|
+
const field = sortRules[0].code;
|
|
366
|
+
return field.startsWith('-') ? field.substr(1) : field;
|
|
367
|
+
}
|
|
368
|
+
function isSortDescending(definition) {
|
|
369
|
+
const sortRules = definition.sortRules;
|
|
370
|
+
if (!sortRules || sortRules.length === 0) {
|
|
371
|
+
return false;
|
|
372
|
+
}
|
|
373
|
+
return !!sortRules[0].descending;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Returns a list of operators for a search parameter.
|
|
377
|
+
* @param searchParam The search parameter.
|
|
378
|
+
* @returns The list of operators that can be used for the search parameter.
|
|
379
|
+
*/
|
|
380
|
+
function getSearchOperators(searchParam) {
|
|
381
|
+
return searchParamToOperators[searchParam.type];
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Returns a string representing the operation.
|
|
385
|
+
*
|
|
386
|
+
* @param {string} op The operation code.
|
|
387
|
+
* @return {string} A display string for the operation.
|
|
388
|
+
*/
|
|
389
|
+
function getOpString(op) {
|
|
390
|
+
var _a;
|
|
391
|
+
return (_a = operatorNames[op]) !== null && _a !== void 0 ? _a : '';
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Returns a field display name.
|
|
395
|
+
* @param key The field key.
|
|
396
|
+
* @returns The field display name.
|
|
397
|
+
*/
|
|
398
|
+
function buildFieldNameString(key) {
|
|
399
|
+
let tmp = key;
|
|
400
|
+
// If dot separated, only the last part
|
|
401
|
+
if (tmp.includes('.')) {
|
|
402
|
+
tmp = tmp.split('.').pop();
|
|
403
|
+
}
|
|
404
|
+
// Special case for ID
|
|
405
|
+
if (tmp === 'id') {
|
|
406
|
+
return 'ID';
|
|
407
|
+
}
|
|
408
|
+
// Special case for Version ID
|
|
409
|
+
if (tmp === 'versionId') {
|
|
410
|
+
return 'Version ID';
|
|
411
|
+
}
|
|
412
|
+
// Remove choice of type
|
|
413
|
+
tmp = tmp.replace('[x]', '');
|
|
414
|
+
// Convert camel case to space separated
|
|
415
|
+
tmp = tmp.replace(/([A-Z])/g, ' $1');
|
|
416
|
+
// Convert dashes and underscores to spaces
|
|
417
|
+
tmp = tmp.replace(/[-_]/g, ' ');
|
|
418
|
+
// Normalize whitespace to single space character
|
|
419
|
+
tmp = tmp.replace(/\s+/g, ' ');
|
|
420
|
+
// Trim
|
|
421
|
+
tmp = tmp.trim();
|
|
422
|
+
// Capitalize the first letter of each word
|
|
423
|
+
return tmp.split(/\s/).map(capitalize).join(' ');
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Returns a fragment to be displayed in the search table for the value.
|
|
427
|
+
* @param resource The parent resource.
|
|
428
|
+
* @param key The search code or FHIRPath expression.
|
|
429
|
+
* @returns The fragment to display.
|
|
430
|
+
*/
|
|
431
|
+
function renderValue(resource, field) {
|
|
432
|
+
var _a, _b;
|
|
433
|
+
const key = field.name;
|
|
434
|
+
if (key === 'id') {
|
|
435
|
+
return resource.id;
|
|
436
|
+
}
|
|
437
|
+
if (key === 'meta.versionId') {
|
|
438
|
+
return (_a = resource.meta) === null || _a === void 0 ? void 0 : _a.versionId;
|
|
439
|
+
}
|
|
440
|
+
if (key === '_lastUpdated') {
|
|
441
|
+
return React.createElement(DateTimeDisplay, { value: (_b = resource.meta) === null || _b === void 0 ? void 0 : _b.lastUpdated });
|
|
442
|
+
}
|
|
443
|
+
// Priority 1: ElementDefinition by exact match
|
|
444
|
+
if (field.elementDefinition && `${resource.resourceType}.${field.name}` === field.elementDefinition.path) {
|
|
445
|
+
return renderPropertyValue(resource, field.elementDefinition);
|
|
446
|
+
}
|
|
447
|
+
// Priority 2: SearchParameter by exact match
|
|
448
|
+
if (field.searchParams && field.searchParams.length === 1 && field.name === field.searchParams[0].code) {
|
|
449
|
+
return renderSearchParameterValue(resource, field.searchParams[0], field.elementDefinition);
|
|
450
|
+
}
|
|
451
|
+
// We don't know how to render this field definition
|
|
452
|
+
return null;
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Returns a fragment to be displayed in the search table for a resource property.
|
|
456
|
+
* @param resource The parent resource.
|
|
457
|
+
* @param elementDefinition The property element definition.
|
|
458
|
+
* @returns A React element or null.
|
|
459
|
+
*/
|
|
460
|
+
function renderPropertyValue(resource, elementDefinition) {
|
|
461
|
+
var _a, _b, _c;
|
|
462
|
+
const path = ((_c = (_b = (_a = elementDefinition.path) === null || _a === void 0 ? void 0 : _a.split('.')) === null || _b === void 0 ? void 0 : _b.pop()) === null || _c === void 0 ? void 0 : _c.replaceAll('[x]', '')) || '';
|
|
463
|
+
const [value, propertyType] = getValueAndType({ type: resource.resourceType, value: resource }, path);
|
|
464
|
+
if (!value) {
|
|
465
|
+
return null;
|
|
466
|
+
}
|
|
467
|
+
return (React.createElement(ResourcePropertyDisplay, { property: elementDefinition, propertyType: propertyType, value: value, maxWidth: 200, ignoreMissingValues: true, link: false }));
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Returns a fragment to be displayed in the search table for a search parameter.
|
|
471
|
+
* @param resource The parent resource.
|
|
472
|
+
* @param searchParam The search parameter.
|
|
473
|
+
* @param elementDefinition Optional element definition.
|
|
474
|
+
* @returns A React element or null.
|
|
475
|
+
*/
|
|
476
|
+
function renderSearchParameterValue(resource, searchParam, elementDefinition) {
|
|
477
|
+
const value = evalFhirPathTyped(searchParam.expression, [{ type: resource.resourceType, value: resource }]);
|
|
478
|
+
if (!value || value.length === 0) {
|
|
479
|
+
return null;
|
|
480
|
+
}
|
|
481
|
+
if (elementDefinition) {
|
|
482
|
+
return (React.createElement(ResourcePropertyDisplay, { propertyType: value[0].type, value: value[0].value, maxWidth: 200, ignoreMissingValues: true, link: false }));
|
|
483
|
+
}
|
|
484
|
+
return (React.createElement(React.Fragment, null, value.map((v, index) => (React.createElement("span", { key: `${index}-${value.length}` }, typeof v === 'object' ? JSON.stringify(v) : v)))));
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
export { addDateEqualsFilter, addDateFilter, addDateFilterBetween, addField, addFilter, addLastMonthFilter, addMissingFilter, addNextMonthFilter, addThisMonthFilter, addTodayFilter, addTomorrowFilter, addYearToDateFilter, addYesterdayFilter, buildFieldNameString, clearFilters, clearFiltersOnField, deleteFilter, getOpString, getSearchOperators, getSortField, hasFilterOnField, isSortDescending, movePage, renderValue, setFilters, setOffset, setSort, toggleSort };
|
|
488
|
+
//# sourceMappingURL=SearchUtils.js.map
|