@medplum/react 1.0.0 → 1.0.1
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 → AddressDisplay/AddressDisplay.d.ts} +0 -0
- package/dist/cjs/{AddressInput.d.ts → AddressInput/AddressInput.d.ts} +0 -0
- package/dist/cjs/{stories → AddressInput}/AddressInput.stories.d.ts +0 -0
- package/dist/cjs/{AnnotationInput.d.ts → AnnotationInput/AnnotationInput.d.ts} +0 -0
- package/dist/cjs/{AttachmentArrayDisplay.d.ts → AttachmentArrayDisplay/AttachmentArrayDisplay.d.ts} +0 -0
- package/dist/cjs/{AttachmentArrayInput.d.ts → AttachmentArrayInput/AttachmentArrayInput.d.ts} +0 -0
- package/dist/cjs/{stories → AttachmentArrayInput}/AttachmentArrayInput.stories.d.ts +0 -0
- package/dist/cjs/{AttachmentButton.d.ts → AttachmentButton/AttachmentButton.d.ts} +0 -0
- package/dist/cjs/{stories → AttachmentButton}/AttachmentButton.stories.d.ts +0 -0
- package/dist/cjs/{AttachmentDisplay.d.ts → AttachmentDisplay/AttachmentDisplay.d.ts} +0 -0
- package/dist/cjs/{AttachmentInput.d.ts → AttachmentInput/AttachmentInput.d.ts} +0 -0
- package/dist/cjs/{stories → AttachmentInput}/AttachmentInput.stories.d.ts +0 -0
- package/dist/cjs/{BackboneElementDisplay.d.ts → BackboneElementDisplay/BackboneElementDisplay.d.ts} +0 -0
- package/dist/cjs/{BackboneElementInput.d.ts → BackboneElementInput/BackboneElementInput.d.ts} +0 -0
- package/dist/cjs/{CalendarInput.d.ts → CalendarInput/CalendarInput.d.ts} +0 -0
- package/dist/cjs/{CheckboxFormSection.d.ts → CheckboxFormSection/CheckboxFormSection.d.ts} +0 -0
- package/dist/cjs/{CodeInput.d.ts → CodeInput/CodeInput.d.ts} +0 -0
- package/dist/cjs/{stories → CodeInput}/CodeInput.stories.d.ts +0 -0
- package/dist/cjs/{CodeableConceptDisplay.d.ts → CodeableConceptDisplay/CodeableConceptDisplay.d.ts} +0 -0
- package/dist/cjs/{stories → CodeableConceptDisplay}/CodeableConceptDisplay.stories.d.ts +0 -0
- package/dist/cjs/{CodeableConceptInput.d.ts → CodeableConceptInput/CodeableConceptInput.d.ts} +0 -0
- package/dist/cjs/{stories → CodeableConceptInput}/CodeableConceptInput.stories.d.ts +0 -0
- package/dist/cjs/{CodingDisplay.d.ts → CodingDisplay/CodingDisplay.d.ts} +0 -0
- package/dist/cjs/{CodingInput.d.ts → CodingInput/CodingInput.d.ts} +0 -0
- package/dist/cjs/{ContactDetailDisplay.d.ts → ContactDetailDisplay/ContactDetailDisplay.d.ts} +0 -0
- package/dist/cjs/{ContactDetailInput.d.ts → ContactDetailInput/ContactDetailInput.d.ts} +0 -0
- package/dist/cjs/{ContactPointDisplay.d.ts → ContactPointDisplay/ContactPointDisplay.d.ts} +0 -0
- package/dist/cjs/{ContactPointInput.d.ts → ContactPointInput/ContactPointInput.d.ts} +0 -0
- package/dist/cjs/{DateTimeInput.d.ts → DateTimeInput/DateTimeInput.d.ts} +0 -0
- package/dist/cjs/{DefaultResourceTimeline.d.ts → DefaultResourceTimeline/DefaultResourceTimeline.d.ts} +0 -0
- package/dist/cjs/{DescriptionList.d.ts → DescriptionList/DescriptionList.d.ts} +0 -0
- package/dist/cjs/{stories → DescriptionList}/DescriptionList.stories.d.ts +0 -0
- package/dist/cjs/{DiagnosticReportDisplay.d.ts → DiagnosticReportDisplay/DiagnosticReportDisplay.d.ts} +0 -0
- package/dist/cjs/{stories → DiagnosticReportDisplay}/DiagnosticReportDisplay.stories.d.ts +0 -0
- package/dist/cjs/{Document.d.ts → Document/Document.d.ts} +0 -0
- package/dist/cjs/{EncounterTimeline.d.ts → EncounterTimeline/EncounterTimeline.d.ts} +0 -0
- package/dist/cjs/{stories → EncounterTimeline}/EncounterTimeline.stories.d.ts +0 -0
- package/dist/cjs/{ErrorBoundary.d.ts → ErrorBoundary/ErrorBoundary.d.ts} +0 -0
- package/dist/cjs/{ExtensionInput.d.ts → ExtensionInput/ExtensionInput.d.ts} +0 -0
- package/dist/cjs/{FhirPathDisplay.d.ts → FhirPathDisplay/FhirPathDisplay.d.ts} +0 -0
- package/dist/cjs/{stories → FhirPathDisplay}/FhirPathDisplay.stories.d.ts +1 -1
- package/dist/cjs/{FhirPathTable.d.ts → FhirPathTable/FhirPathTable.d.ts} +1 -1
- package/dist/cjs/{Form.d.ts → Form/Form.d.ts} +0 -0
- package/dist/cjs/{FormUtils.d.ts → Form/FormUtils.d.ts} +0 -0
- package/dist/cjs/{FormSection.d.ts → FormSection/FormSection.d.ts} +0 -0
- package/dist/cjs/{GoogleButton.d.ts → GoogleButton/GoogleButton.d.ts} +0 -0
- package/dist/cjs/{HumanNameDisplay.d.ts → HumanNameDisplay/HumanNameDisplay.d.ts} +0 -0
- package/dist/cjs/{HumanNameInput.d.ts → HumanNameInput/HumanNameInput.d.ts} +0 -0
- package/dist/cjs/{IdentifierDisplay.d.ts → IdentifierDisplay/IdentifierDisplay.d.ts} +0 -0
- package/dist/cjs/{IdentifierInput.d.ts → IdentifierInput/IdentifierInput.d.ts} +0 -0
- package/dist/cjs/{Logo.d.ts → Logo/Logo.d.ts} +0 -0
- package/dist/cjs/{stories → Logo}/Logo.stories.d.ts +0 -0
- package/dist/cjs/{MedplumLink.d.ts → MedplumLink/MedplumLink.d.ts} +0 -0
- package/dist/cjs/{MedplumProvider.d.ts → MedplumProvider/MedplumProvider.d.ts} +0 -0
- package/dist/cjs/{PatientTimeline.d.ts → PatientTimeline/PatientTimeline.d.ts} +0 -0
- package/dist/cjs/{stories → PatientTimeline}/PatientTimeline.stories.d.ts +0 -0
- package/dist/cjs/{PeriodInput.d.ts → PeriodInput/PeriodInput.d.ts} +0 -0
- package/dist/cjs/{stories → PeriodInput}/PeriodInput.stories.d.ts +0 -0
- package/dist/cjs/{PlanDefinitionBuilder.d.ts → PlanDefinitionBuilder/PlanDefinitionBuilder.d.ts} +0 -0
- package/dist/cjs/{stories → PlanDefinitionBuilder}/PlanDefinitionBuilder.stories.d.ts +0 -0
- package/dist/cjs/{QuantityDisplay.d.ts → QuantityDisplay/QuantityDisplay.d.ts} +0 -1
- package/dist/cjs/{QuantityInput.d.ts → QuantityInput/QuantityInput.d.ts} +0 -0
- package/dist/cjs/{QuestionnaireBuilder.d.ts → QuestionnaireBuilder/QuestionnaireBuilder.d.ts} +0 -0
- package/dist/cjs/{stories → QuestionnaireBuilder}/QuestionnaireBuilder.stories.d.ts +0 -0
- package/dist/cjs/{QuestionnaireForm.d.ts → QuestionnaireForm/QuestionnaireForm.d.ts} +0 -0
- package/dist/cjs/{stories → QuestionnaireForm}/QuestionnaireForm.stories.d.ts +0 -0
- package/dist/cjs/{RangeDisplay.d.ts → RangeDisplay/RangeDisplay.d.ts} +0 -1
- package/dist/cjs/{RangeInput.d.ts → RangeInput/RangeInput.d.ts} +0 -0
- package/dist/cjs/{RatioDisplay.d.ts → RatioDisplay/RatioDisplay.d.ts} +0 -0
- package/dist/cjs/{RatioInput.d.ts → RatioInput/RatioInput.d.ts} +0 -0
- package/dist/cjs/{ReferenceDisplay.d.ts → ReferenceDisplay/ReferenceDisplay.d.ts} +0 -0
- package/dist/cjs/{ReferenceInput.d.ts → ReferenceInput/ReferenceInput.d.ts} +0 -0
- package/dist/cjs/{stories → ReferenceInput}/ReferenceInput.stories.d.ts +0 -0
- package/dist/cjs/ReferenceRangeEditor/ReferenceRangeEditor.d.ts +27 -0
- package/dist/cjs/ReferenceRangeEditor/ReferenceRangeEditor.stories.d.ts +7 -0
- package/dist/cjs/{RequestGroupDisplay.d.ts → RequestGroupDisplay/RequestGroupDisplay.d.ts} +0 -0
- package/dist/cjs/{stories → RequestGroupDisplay}/RequestGroupDisplay.stories.d.ts +0 -0
- package/dist/cjs/{ResourceArrayDisplay.d.ts → ResourceArrayDisplay/ResourceArrayDisplay.d.ts} +0 -0
- package/dist/cjs/{ResourceArrayInput.d.ts → ResourceArrayInput/ResourceArrayInput.d.ts} +0 -0
- package/dist/cjs/{ResourceAvatar.d.ts → ResourceAvatar/ResourceAvatar.d.ts} +0 -0
- package/dist/cjs/{stories → ResourceAvatar}/ResourceAvatar.stories.d.ts +0 -0
- package/dist/cjs/{ResourceBadge.d.ts → ResourceBadge/ResourceBadge.d.ts} +0 -0
- package/dist/cjs/{ResourceBlame.d.ts → ResourceBlame/ResourceBlame.d.ts} +0 -0
- package/dist/cjs/{stories → ResourceBlame}/ResourceBlame.stories.d.ts +0 -0
- package/dist/cjs/{ResourceDiff.d.ts → ResourceDiff/ResourceDiff.d.ts} +0 -0
- package/dist/cjs/{ResourceDiffTable.d.ts → ResourceDiffTable/ResourceDiffTable.d.ts} +0 -0
- package/dist/cjs/ResourceDiffTable/ResourceDiffTable.stories.d.ts +5 -0
- package/dist/cjs/{ResourceForm.d.ts → ResourceForm/ResourceForm.d.ts} +0 -0
- package/dist/cjs/{stories → ResourceForm}/ResourceForm.stories.d.ts +0 -0
- package/dist/cjs/{ResourceHistoryTable.d.ts → ResourceHistoryTable/ResourceHistoryTable.d.ts} +0 -0
- package/dist/cjs/{stories → ResourceHistoryTable}/ResourceHistoryTable.stories.d.ts +0 -0
- package/dist/cjs/{ResourceInput.d.ts → ResourceInput/ResourceInput.d.ts} +0 -0
- package/dist/cjs/{stories → ResourceInput}/ResourceInput.stories.d.ts +0 -0
- package/dist/cjs/{ResourceName.d.ts → ResourceName/ResourceName.d.ts} +0 -0
- package/dist/cjs/{ResourcePropertyDisplay.d.ts → ResourcePropertyDisplay/ResourcePropertyDisplay.d.ts} +0 -0
- package/dist/cjs/{ResourcePropertyInput.d.ts → ResourcePropertyInput/ResourcePropertyInput.d.ts} +0 -0
- package/dist/cjs/{ResourceTable.d.ts → ResourceTable/ResourceTable.d.ts} +0 -0
- package/dist/cjs/{stories → ResourceTable}/ResourceTable.stories.d.ts +0 -0
- package/dist/cjs/{ResourceTimeline.d.ts → ResourceTimeline/ResourceTimeline.d.ts} +0 -0
- package/dist/cjs/{Scheduler.d.ts → Scheduler/Scheduler.d.ts} +0 -0
- package/dist/cjs/{stories → Scheduler}/Scheduler.stories.d.ts +0 -0
- package/dist/cjs/{SearchControl.d.ts → SearchControl/SearchControl.d.ts} +0 -0
- package/dist/cjs/{stories → SearchControl}/SearchControl.stories.d.ts +0 -0
- package/dist/cjs/{SearchControlField.d.ts → SearchControl/SearchControlField.d.ts} +0 -0
- package/dist/cjs/{SearchUtils.d.ts → SearchControl/SearchUtils.d.ts} +0 -21
- package/dist/cjs/{SearchFieldEditor.d.ts → SearchFieldEditor/SearchFieldEditor.d.ts} +0 -0
- package/dist/cjs/{SearchFilterEditor.d.ts → SearchFilterEditor/SearchFilterEditor.d.ts} +0 -0
- package/dist/cjs/{SearchFilterValueDialog.d.ts → SearchFilterValueDialog/SearchFilterValueDialog.d.ts} +0 -0
- package/dist/cjs/{SearchFilterValueDisplay.d.ts → SearchFilterValueDisplay/SearchFilterValueDisplay.d.ts} +0 -0
- package/dist/cjs/{SearchFilterValueInput.d.ts → SearchFilterValueInput/SearchFilterValueInput.d.ts} +0 -0
- package/dist/cjs/{SearchPopupMenu.d.ts → SearchPopupMenu/SearchPopupMenu.d.ts} +0 -0
- package/dist/cjs/{ServiceRequestTimeline.d.ts → ServiceRequestTimeline/ServiceRequestTimeline.d.ts} +0 -0
- package/dist/cjs/{StatusBadge.d.ts → StatusBadge/StatusBadge.d.ts} +0 -0
- package/dist/cjs/{stories → StatusBadge}/StatusBadge.stories.d.ts +0 -0
- package/dist/cjs/{Timeline.d.ts → Timeline/Timeline.d.ts} +0 -0
- package/dist/cjs/{stories → Timeline}/Timeline.stories.d.ts +0 -0
- package/dist/cjs/{TimingInput.d.ts → TimingInput/TimingInput.d.ts} +0 -0
- package/dist/cjs/{stories → TimingInput}/TimingInput.stories.d.ts +0 -0
- package/dist/cjs/{ValueSetAutocomplete.d.ts → ValueSetAutocomplete/ValueSetAutocomplete.d.ts} +0 -0
- package/dist/cjs/auth/AuthenticationForm.d.ts +2 -10
- package/dist/cjs/auth/ChooseScopeForm.d.ts +7 -0
- package/dist/cjs/{stories → auth}/RegisterForm.stories.d.ts +0 -0
- package/dist/cjs/auth/SignInForm.d.ts +3 -10
- package/dist/cjs/{stories → auth}/SignInForm.stories.d.ts +0 -0
- package/dist/cjs/index.d.ts +66 -65
- package/dist/cjs/index.js +444 -230
- 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/referenceLab.d.ts +3 -0
- package/dist/cjs/{useResource.d.ts → useResource/useResource.d.ts} +0 -0
- package/dist/cjs/{QuestionnaireUtils.d.ts → utils/questionnaire.d.ts} +0 -0
- package/dist/cjs/{utils.d.ts → utils/script.d.ts} +0 -0
- package/dist/esm/{AddressDisplay.d.ts → AddressDisplay/AddressDisplay.d.ts} +0 -0
- package/dist/esm/{AddressDisplay.js → AddressDisplay/AddressDisplay.js} +0 -0
- package/dist/esm/AddressDisplay/AddressDisplay.js.map +1 -0
- package/dist/esm/{AddressInput.d.ts → AddressInput/AddressInput.d.ts} +0 -0
- package/dist/esm/{AddressInput.js → AddressInput/AddressInput.js} +0 -0
- package/dist/esm/AddressInput/AddressInput.js.map +1 -0
- package/dist/esm/{stories → AddressInput}/AddressInput.stories.d.ts +0 -0
- package/dist/esm/{AnnotationInput.d.ts → AnnotationInput/AnnotationInput.d.ts} +0 -0
- package/dist/esm/{AnnotationInput.js → AnnotationInput/AnnotationInput.js} +1 -1
- package/dist/esm/AnnotationInput/AnnotationInput.js.map +1 -0
- package/dist/esm/{AttachmentArrayDisplay.d.ts → AttachmentArrayDisplay/AttachmentArrayDisplay.d.ts} +0 -0
- package/dist/esm/{AttachmentArrayDisplay.js → AttachmentArrayDisplay/AttachmentArrayDisplay.js} +1 -1
- package/dist/esm/AttachmentArrayDisplay/AttachmentArrayDisplay.js.map +1 -0
- package/dist/esm/{AttachmentArrayInput.d.ts → AttachmentArrayInput/AttachmentArrayInput.d.ts} +0 -0
- package/dist/esm/{AttachmentArrayInput.js → AttachmentArrayInput/AttachmentArrayInput.js} +3 -3
- package/dist/esm/AttachmentArrayInput/AttachmentArrayInput.js.map +1 -0
- package/dist/esm/{stories → AttachmentArrayInput}/AttachmentArrayInput.stories.d.ts +0 -0
- package/dist/esm/{AttachmentButton.d.ts → AttachmentButton/AttachmentButton.d.ts} +0 -0
- package/dist/esm/{AttachmentButton.js → AttachmentButton/AttachmentButton.js} +2 -2
- package/dist/esm/AttachmentButton/AttachmentButton.js.map +1 -0
- package/dist/esm/{stories → AttachmentButton}/AttachmentButton.stories.d.ts +0 -0
- package/dist/esm/{AttachmentDisplay.d.ts → AttachmentDisplay/AttachmentDisplay.d.ts} +0 -0
- package/dist/esm/{AttachmentDisplay.js → AttachmentDisplay/AttachmentDisplay.js} +0 -0
- package/dist/esm/AttachmentDisplay/AttachmentDisplay.js.map +1 -0
- package/dist/esm/{AttachmentInput.d.ts → AttachmentInput/AttachmentInput.d.ts} +0 -0
- package/dist/esm/{AttachmentInput.js → AttachmentInput/AttachmentInput.js} +3 -3
- package/dist/esm/AttachmentInput/AttachmentInput.js.map +1 -0
- package/dist/esm/{stories → AttachmentInput}/AttachmentInput.stories.d.ts +0 -0
- package/dist/esm/{BackboneElementDisplay.d.ts → BackboneElementDisplay/BackboneElementDisplay.d.ts} +0 -0
- package/dist/esm/{BackboneElementDisplay.js → BackboneElementDisplay/BackboneElementDisplay.js} +7 -4
- package/dist/esm/BackboneElementDisplay/BackboneElementDisplay.js.map +1 -0
- package/dist/esm/{BackboneElementInput.d.ts → BackboneElementInput/BackboneElementInput.d.ts} +0 -0
- package/dist/esm/{BackboneElementInput.js → BackboneElementInput/BackboneElementInput.js} +6 -6
- package/dist/esm/BackboneElementInput/BackboneElementInput.js.map +1 -0
- package/dist/esm/{CalendarInput.d.ts → CalendarInput/CalendarInput.d.ts} +0 -0
- package/dist/esm/{CalendarInput.js → CalendarInput/CalendarInput.js} +0 -0
- package/dist/esm/CalendarInput/CalendarInput.js.map +1 -0
- package/dist/esm/{CheckboxFormSection.d.ts → CheckboxFormSection/CheckboxFormSection.d.ts} +0 -0
- package/dist/esm/{CheckboxFormSection.js → CheckboxFormSection/CheckboxFormSection.js} +0 -0
- package/dist/esm/CheckboxFormSection/CheckboxFormSection.js.map +1 -0
- package/dist/esm/{CodeInput.d.ts → CodeInput/CodeInput.d.ts} +0 -0
- package/dist/esm/{CodeInput.js → CodeInput/CodeInput.js} +1 -1
- package/dist/esm/CodeInput/CodeInput.js.map +1 -0
- package/dist/esm/{stories → CodeInput}/CodeInput.stories.d.ts +0 -0
- package/dist/esm/{CodeableConceptDisplay.d.ts → CodeableConceptDisplay/CodeableConceptDisplay.d.ts} +0 -0
- package/dist/esm/{CodeableConceptDisplay.js → CodeableConceptDisplay/CodeableConceptDisplay.js} +1 -1
- package/dist/esm/CodeableConceptDisplay/CodeableConceptDisplay.js.map +1 -0
- package/dist/esm/{stories → CodeableConceptDisplay}/CodeableConceptDisplay.stories.d.ts +0 -0
- package/dist/esm/{CodeableConceptInput.d.ts → CodeableConceptInput/CodeableConceptInput.d.ts} +0 -0
- package/dist/esm/{CodeableConceptInput.js → CodeableConceptInput/CodeableConceptInput.js} +1 -1
- package/dist/esm/CodeableConceptInput/CodeableConceptInput.js.map +1 -0
- package/dist/esm/{stories → CodeableConceptInput}/CodeableConceptInput.stories.d.ts +0 -0
- package/dist/esm/{CodingDisplay.d.ts → CodingDisplay/CodingDisplay.d.ts} +0 -0
- package/dist/esm/{CodingDisplay.js → CodingDisplay/CodingDisplay.js} +0 -0
- package/dist/esm/CodingDisplay/CodingDisplay.js.map +1 -0
- package/dist/esm/{CodingInput.d.ts → CodingInput/CodingInput.d.ts} +0 -0
- package/dist/esm/{CodingInput.js → CodingInput/CodingInput.js} +1 -1
- package/dist/esm/CodingInput/CodingInput.js.map +1 -0
- package/dist/esm/{ContactDetailDisplay.d.ts → ContactDetailDisplay/ContactDetailDisplay.d.ts} +0 -0
- package/dist/esm/{ContactDetailDisplay.js → ContactDetailDisplay/ContactDetailDisplay.js} +1 -1
- package/dist/esm/ContactDetailDisplay/ContactDetailDisplay.js.map +1 -0
- package/dist/esm/{ContactDetailInput.d.ts → ContactDetailInput/ContactDetailInput.d.ts} +0 -0
- package/dist/esm/{ContactDetailInput.js → ContactDetailInput/ContactDetailInput.js} +1 -1
- package/dist/esm/ContactDetailInput/ContactDetailInput.js.map +1 -0
- package/dist/esm/{ContactPointDisplay.d.ts → ContactPointDisplay/ContactPointDisplay.d.ts} +0 -0
- package/dist/esm/{ContactPointDisplay.js → ContactPointDisplay/ContactPointDisplay.js} +0 -0
- package/dist/esm/ContactPointDisplay/ContactPointDisplay.js.map +1 -0
- package/dist/esm/{ContactPointInput.d.ts → ContactPointInput/ContactPointInput.d.ts} +0 -0
- package/dist/esm/{ContactPointInput.js → ContactPointInput/ContactPointInput.js} +0 -0
- package/dist/esm/ContactPointInput/ContactPointInput.js.map +1 -0
- package/dist/esm/{DateTimeInput.d.ts → DateTimeInput/DateTimeInput.d.ts} +0 -0
- package/dist/esm/{DateTimeInput.js → DateTimeInput/DateTimeInput.js} +1 -1
- package/dist/esm/DateTimeInput/DateTimeInput.js.map +1 -0
- package/dist/esm/{DefaultResourceTimeline.d.ts → DefaultResourceTimeline/DefaultResourceTimeline.d.ts} +0 -0
- package/dist/esm/{DefaultResourceTimeline.js → DefaultResourceTimeline/DefaultResourceTimeline.js} +1 -1
- package/dist/esm/DefaultResourceTimeline/DefaultResourceTimeline.js.map +1 -0
- package/dist/esm/{DescriptionList.d.ts → DescriptionList/DescriptionList.d.ts} +0 -0
- package/dist/esm/{DescriptionList.js → DescriptionList/DescriptionList.js} +0 -0
- package/dist/esm/DescriptionList/DescriptionList.js.map +1 -0
- package/dist/esm/{stories → DescriptionList}/DescriptionList.stories.d.ts +0 -0
- package/dist/esm/{DiagnosticReportDisplay.d.ts → DiagnosticReportDisplay/DiagnosticReportDisplay.d.ts} +0 -0
- package/dist/esm/{DiagnosticReportDisplay.js → DiagnosticReportDisplay/DiagnosticReportDisplay.js} +7 -7
- package/dist/esm/DiagnosticReportDisplay/DiagnosticReportDisplay.js.map +1 -0
- package/dist/esm/{stories → DiagnosticReportDisplay}/DiagnosticReportDisplay.stories.d.ts +0 -0
- package/dist/esm/{Document.d.ts → Document/Document.d.ts} +0 -0
- package/dist/esm/{Document.js → Document/Document.js} +0 -0
- package/dist/esm/Document/Document.js.map +1 -0
- package/dist/esm/{EncounterTimeline.d.ts → EncounterTimeline/EncounterTimeline.d.ts} +0 -0
- package/dist/esm/{EncounterTimeline.js → EncounterTimeline/EncounterTimeline.js} +1 -1
- package/dist/esm/EncounterTimeline/EncounterTimeline.js.map +1 -0
- package/dist/esm/{stories → EncounterTimeline}/EncounterTimeline.stories.d.ts +0 -0
- package/dist/esm/{ErrorBoundary.d.ts → ErrorBoundary/ErrorBoundary.d.ts} +0 -0
- package/dist/esm/{ErrorBoundary.js → ErrorBoundary/ErrorBoundary.js} +4 -2
- package/dist/esm/ErrorBoundary/ErrorBoundary.js.map +1 -0
- package/dist/esm/{ExtensionInput.d.ts → ExtensionInput/ExtensionInput.d.ts} +0 -0
- package/dist/esm/{ExtensionInput.js → ExtensionInput/ExtensionInput.js} +0 -0
- package/dist/esm/ExtensionInput/ExtensionInput.js.map +1 -0
- package/dist/esm/{FhirPathDisplay.d.ts → FhirPathDisplay/FhirPathDisplay.d.ts} +0 -0
- package/dist/esm/{FhirPathDisplay.js → FhirPathDisplay/FhirPathDisplay.js} +1 -1
- package/dist/esm/FhirPathDisplay/FhirPathDisplay.js.map +1 -0
- package/dist/esm/{stories → FhirPathDisplay}/FhirPathDisplay.stories.d.ts +1 -1
- package/dist/esm/{FhirPathTable.d.ts → FhirPathTable/FhirPathTable.d.ts} +1 -1
- package/dist/esm/{FhirPathTable.js → FhirPathTable/FhirPathTable.js} +4 -4
- package/dist/esm/FhirPathTable/FhirPathTable.js.map +1 -0
- package/dist/esm/{Form.d.ts → Form/Form.d.ts} +0 -0
- package/dist/esm/{Form.js → Form/Form.js} +0 -0
- package/dist/esm/Form/Form.js.map +1 -0
- package/dist/esm/{FormUtils.d.ts → Form/FormUtils.d.ts} +0 -0
- package/dist/esm/{FormUtils.js → Form/FormUtils.js} +0 -0
- package/dist/esm/Form/FormUtils.js.map +1 -0
- package/dist/esm/{FormSection.d.ts → FormSection/FormSection.d.ts} +0 -0
- package/dist/esm/{FormSection.js → FormSection/FormSection.js} +1 -1
- package/dist/esm/FormSection/FormSection.js.map +1 -0
- package/dist/esm/{GoogleButton.d.ts → GoogleButton/GoogleButton.d.ts} +0 -0
- package/dist/esm/{GoogleButton.js → GoogleButton/GoogleButton.js} +2 -2
- package/dist/esm/GoogleButton/GoogleButton.js.map +1 -0
- package/dist/esm/{HumanNameDisplay.d.ts → HumanNameDisplay/HumanNameDisplay.d.ts} +0 -0
- package/dist/esm/{HumanNameDisplay.js → HumanNameDisplay/HumanNameDisplay.js} +0 -0
- package/dist/esm/HumanNameDisplay/HumanNameDisplay.js.map +1 -0
- package/dist/esm/{HumanNameInput.d.ts → HumanNameInput/HumanNameInput.d.ts} +0 -0
- package/dist/esm/{HumanNameInput.js → HumanNameInput/HumanNameInput.js} +0 -0
- package/dist/esm/HumanNameInput/HumanNameInput.js.map +1 -0
- package/dist/esm/{IdentifierDisplay.d.ts → IdentifierDisplay/IdentifierDisplay.d.ts} +0 -0
- package/dist/esm/{IdentifierDisplay.js → IdentifierDisplay/IdentifierDisplay.js} +0 -0
- package/dist/esm/IdentifierDisplay/IdentifierDisplay.js.map +1 -0
- package/dist/esm/{IdentifierInput.d.ts → IdentifierInput/IdentifierInput.d.ts} +0 -0
- package/dist/esm/{IdentifierInput.js → IdentifierInput/IdentifierInput.js} +0 -0
- package/dist/esm/IdentifierInput/IdentifierInput.js.map +1 -0
- package/dist/esm/{Logo.d.ts → Logo/Logo.d.ts} +0 -0
- package/dist/esm/{Logo.js → Logo/Logo.js} +0 -0
- package/dist/esm/Logo/Logo.js.map +1 -0
- package/dist/esm/{stories → Logo}/Logo.stories.d.ts +0 -0
- package/dist/esm/{MedplumLink.d.ts → MedplumLink/MedplumLink.d.ts} +0 -0
- package/dist/esm/{MedplumLink.js → MedplumLink/MedplumLink.js} +2 -2
- package/dist/esm/MedplumLink/MedplumLink.js.map +1 -0
- package/dist/esm/{MedplumProvider.d.ts → MedplumProvider/MedplumProvider.d.ts} +0 -0
- package/dist/esm/{MedplumProvider.js → MedplumProvider/MedplumProvider.js} +0 -0
- package/dist/esm/MedplumProvider/MedplumProvider.js.map +1 -0
- package/dist/esm/{PatientTimeline.d.ts → PatientTimeline/PatientTimeline.d.ts} +0 -0
- package/dist/esm/{PatientTimeline.js → PatientTimeline/PatientTimeline.js} +1 -1
- package/dist/esm/PatientTimeline/PatientTimeline.js.map +1 -0
- package/dist/esm/{stories → PatientTimeline}/PatientTimeline.stories.d.ts +0 -0
- package/dist/esm/{PeriodInput.d.ts → PeriodInput/PeriodInput.d.ts} +0 -0
- package/dist/esm/{PeriodInput.js → PeriodInput/PeriodInput.js} +1 -1
- package/dist/esm/PeriodInput/PeriodInput.js.map +1 -0
- package/dist/esm/{stories → PeriodInput}/PeriodInput.stories.d.ts +0 -0
- package/dist/esm/{PlanDefinitionBuilder.d.ts → PlanDefinitionBuilder/PlanDefinitionBuilder.d.ts} +0 -0
- package/dist/esm/{PlanDefinitionBuilder.js → PlanDefinitionBuilder/PlanDefinitionBuilder.js} +10 -10
- package/dist/esm/PlanDefinitionBuilder/PlanDefinitionBuilder.js.map +1 -0
- package/dist/esm/{stories → PlanDefinitionBuilder}/PlanDefinitionBuilder.stories.d.ts +0 -0
- package/dist/esm/{QuantityDisplay.d.ts → QuantityDisplay/QuantityDisplay.d.ts} +0 -1
- package/dist/esm/QuantityDisplay/QuantityDisplay.js +9 -0
- package/dist/esm/QuantityDisplay/QuantityDisplay.js.map +1 -0
- package/dist/esm/{QuantityInput.d.ts → QuantityInput/QuantityInput.d.ts} +0 -0
- package/dist/esm/{QuantityInput.js → QuantityInput/QuantityInput.js} +2 -2
- package/dist/esm/QuantityInput/QuantityInput.js.map +1 -0
- package/dist/esm/{QuestionnaireBuilder.d.ts → QuestionnaireBuilder/QuestionnaireBuilder.d.ts} +0 -0
- package/dist/esm/{QuestionnaireBuilder.js → QuestionnaireBuilder/QuestionnaireBuilder.js} +8 -8
- package/dist/esm/QuestionnaireBuilder/QuestionnaireBuilder.js.map +1 -0
- package/dist/esm/{stories → QuestionnaireBuilder}/QuestionnaireBuilder.stories.d.ts +0 -0
- package/dist/esm/{QuestionnaireForm.d.ts → QuestionnaireForm/QuestionnaireForm.d.ts} +0 -0
- package/dist/esm/{QuestionnaireForm.js → QuestionnaireForm/QuestionnaireForm.js} +11 -11
- package/dist/esm/QuestionnaireForm/QuestionnaireForm.js.map +1 -0
- package/dist/esm/{stories → QuestionnaireForm}/QuestionnaireForm.stories.d.ts +0 -0
- package/dist/esm/{RangeDisplay.d.ts → RangeDisplay/RangeDisplay.d.ts} +0 -1
- package/dist/esm/RangeDisplay/RangeDisplay.js +9 -0
- package/dist/esm/RangeDisplay/RangeDisplay.js.map +1 -0
- package/dist/esm/{RangeInput.d.ts → RangeInput/RangeInput.d.ts} +0 -0
- package/dist/esm/{RangeInput.js → RangeInput/RangeInput.js} +1 -1
- package/dist/esm/RangeInput/RangeInput.js.map +1 -0
- package/dist/esm/{RatioDisplay.d.ts → RatioDisplay/RatioDisplay.d.ts} +0 -0
- package/dist/esm/{RatioDisplay.js → RatioDisplay/RatioDisplay.js} +1 -1
- package/dist/esm/RatioDisplay/RatioDisplay.js.map +1 -0
- package/dist/esm/{RatioInput.d.ts → RatioInput/RatioInput.d.ts} +0 -0
- package/dist/esm/{RatioInput.js → RatioInput/RatioInput.js} +1 -1
- package/dist/esm/RatioInput/RatioInput.js.map +1 -0
- package/dist/esm/{ReferenceDisplay.d.ts → ReferenceDisplay/ReferenceDisplay.d.ts} +0 -0
- package/dist/esm/{ReferenceDisplay.js → ReferenceDisplay/ReferenceDisplay.js} +1 -1
- package/dist/esm/ReferenceDisplay/ReferenceDisplay.js.map +1 -0
- package/dist/esm/{ReferenceInput.d.ts → ReferenceInput/ReferenceInput.d.ts} +0 -0
- package/dist/esm/{ReferenceInput.js → ReferenceInput/ReferenceInput.js} +1 -1
- package/dist/esm/ReferenceInput/ReferenceInput.js.map +1 -0
- package/dist/esm/{stories → ReferenceInput}/ReferenceInput.stories.d.ts +0 -0
- package/dist/esm/ReferenceRangeEditor/ReferenceRangeEditor.d.ts +27 -0
- package/dist/esm/ReferenceRangeEditor/ReferenceRangeEditor.js +269 -0
- package/dist/esm/ReferenceRangeEditor/ReferenceRangeEditor.js.map +1 -0
- package/dist/esm/ReferenceRangeEditor/ReferenceRangeEditor.stories.d.ts +7 -0
- package/dist/esm/{RequestGroupDisplay.d.ts → RequestGroupDisplay/RequestGroupDisplay.d.ts} +0 -0
- package/dist/esm/{RequestGroupDisplay.js → RequestGroupDisplay/RequestGroupDisplay.js} +4 -4
- package/dist/esm/RequestGroupDisplay/RequestGroupDisplay.js.map +1 -0
- package/dist/esm/{stories → RequestGroupDisplay}/RequestGroupDisplay.stories.d.ts +0 -0
- package/dist/esm/{ResourceArrayDisplay.d.ts → ResourceArrayDisplay/ResourceArrayDisplay.d.ts} +0 -0
- package/dist/esm/{ResourceArrayDisplay.js → ResourceArrayDisplay/ResourceArrayDisplay.js} +1 -1
- package/dist/esm/ResourceArrayDisplay/ResourceArrayDisplay.js.map +1 -0
- package/dist/esm/{ResourceArrayInput.d.ts → ResourceArrayInput/ResourceArrayInput.d.ts} +0 -0
- package/dist/esm/{ResourceArrayInput.js → ResourceArrayInput/ResourceArrayInput.js} +2 -2
- package/dist/esm/ResourceArrayInput/ResourceArrayInput.js.map +1 -0
- package/dist/esm/{ResourceAvatar.d.ts → ResourceAvatar/ResourceAvatar.d.ts} +0 -0
- package/dist/esm/{ResourceAvatar.js → ResourceAvatar/ResourceAvatar.js} +2 -2
- package/dist/esm/ResourceAvatar/ResourceAvatar.js.map +1 -0
- package/dist/esm/{stories → ResourceAvatar}/ResourceAvatar.stories.d.ts +0 -0
- package/dist/esm/{ResourceBadge.d.ts → ResourceBadge/ResourceBadge.d.ts} +0 -0
- package/dist/esm/{ResourceBadge.js → ResourceBadge/ResourceBadge.js} +2 -2
- package/dist/esm/ResourceBadge/ResourceBadge.js.map +1 -0
- package/dist/esm/{ResourceBlame.d.ts → ResourceBlame/ResourceBlame.d.ts} +0 -0
- package/dist/esm/{ResourceBlame.js → ResourceBlame/ResourceBlame.js} +4 -4
- package/dist/esm/ResourceBlame/ResourceBlame.js.map +1 -0
- package/dist/esm/{stories → ResourceBlame}/ResourceBlame.stories.d.ts +0 -0
- package/dist/esm/{ResourceDiff.d.ts → ResourceDiff/ResourceDiff.d.ts} +0 -0
- package/dist/esm/{ResourceDiff.js → ResourceDiff/ResourceDiff.js} +1 -1
- package/dist/esm/ResourceDiff/ResourceDiff.js.map +1 -0
- package/dist/esm/{ResourceDiffTable.d.ts → ResourceDiffTable/ResourceDiffTable.d.ts} +0 -0
- package/dist/esm/{ResourceDiffTable.js → ResourceDiffTable/ResourceDiffTable.js} +2 -2
- package/dist/esm/ResourceDiffTable/ResourceDiffTable.js.map +1 -0
- package/dist/esm/ResourceDiffTable/ResourceDiffTable.stories.d.ts +5 -0
- package/dist/esm/{ResourceForm.d.ts → ResourceForm/ResourceForm.d.ts} +0 -0
- package/dist/esm/{ResourceForm.js → ResourceForm/ResourceForm.js} +5 -5
- package/dist/esm/ResourceForm/ResourceForm.js.map +1 -0
- package/dist/esm/{stories → ResourceForm}/ResourceForm.stories.d.ts +0 -0
- package/dist/esm/{ResourceHistoryTable.d.ts → ResourceHistoryTable/ResourceHistoryTable.d.ts} +0 -0
- package/dist/esm/{ResourceHistoryTable.js → ResourceHistoryTable/ResourceHistoryTable.js} +3 -3
- package/dist/esm/ResourceHistoryTable/ResourceHistoryTable.js.map +1 -0
- package/dist/esm/{stories → ResourceHistoryTable}/ResourceHistoryTable.stories.d.ts +0 -0
- package/dist/esm/{ResourceInput.d.ts → ResourceInput/ResourceInput.d.ts} +0 -0
- package/dist/esm/{ResourceInput.js → ResourceInput/ResourceInput.js} +4 -4
- package/dist/esm/ResourceInput/ResourceInput.js.map +1 -0
- package/dist/esm/{stories → ResourceInput}/ResourceInput.stories.d.ts +0 -0
- package/dist/esm/{ResourceName.d.ts → ResourceName/ResourceName.d.ts} +0 -0
- package/dist/esm/{ResourceName.js → ResourceName/ResourceName.js} +3 -3
- package/dist/esm/ResourceName/ResourceName.js.map +1 -0
- package/dist/esm/{ResourcePropertyDisplay.d.ts → ResourcePropertyDisplay/ResourcePropertyDisplay.d.ts} +0 -0
- package/dist/esm/{ResourcePropertyDisplay.js → ResourcePropertyDisplay/ResourcePropertyDisplay.js} +15 -15
- package/dist/esm/ResourcePropertyDisplay/ResourcePropertyDisplay.js.map +1 -0
- package/dist/esm/{ResourcePropertyInput.d.ts → ResourcePropertyInput/ResourcePropertyInput.d.ts} +0 -0
- package/dist/esm/{ResourcePropertyInput.js → ResourcePropertyInput/ResourcePropertyInput.js} +22 -22
- package/dist/esm/ResourcePropertyInput/ResourcePropertyInput.js.map +1 -0
- package/dist/esm/{ResourceTable.d.ts → ResourceTable/ResourceTable.d.ts} +0 -0
- package/dist/esm/{ResourceTable.js → ResourceTable/ResourceTable.js} +3 -3
- package/dist/esm/ResourceTable/ResourceTable.js.map +1 -0
- package/dist/esm/{stories → ResourceTable}/ResourceTable.stories.d.ts +0 -0
- package/dist/esm/{ResourceTimeline.d.ts → ResourceTimeline/ResourceTimeline.d.ts} +0 -0
- package/dist/esm/{ResourceTimeline.js → ResourceTimeline/ResourceTimeline.js} +14 -13
- package/dist/esm/ResourceTimeline/ResourceTimeline.js.map +1 -0
- package/dist/esm/{Scheduler.d.ts → Scheduler/Scheduler.d.ts} +0 -0
- package/dist/esm/{Scheduler.js → Scheduler/Scheduler.js} +6 -6
- package/dist/esm/Scheduler/Scheduler.js.map +1 -0
- package/dist/esm/{stories → Scheduler}/Scheduler.stories.d.ts +0 -0
- package/dist/esm/{SearchControl.d.ts → SearchControl/SearchControl.d.ts} +0 -0
- package/dist/esm/{SearchControl.js → SearchControl/SearchControl.js} +12 -11
- package/dist/esm/SearchControl/SearchControl.js.map +1 -0
- package/dist/esm/{stories → SearchControl}/SearchControl.stories.d.ts +0 -0
- package/dist/esm/{SearchControlField.d.ts → SearchControl/SearchControlField.d.ts} +0 -0
- package/dist/esm/{SearchControlField.js → SearchControl/SearchControlField.js} +0 -0
- package/dist/esm/SearchControl/SearchControlField.js.map +1 -0
- package/dist/esm/{SearchUtils.d.ts → SearchControl/SearchUtils.d.ts} +0 -21
- package/dist/esm/{SearchUtils.js → SearchControl/SearchUtils.js} +2 -33
- package/dist/esm/SearchControl/SearchUtils.js.map +1 -0
- package/dist/esm/{SearchFieldEditor.d.ts → SearchFieldEditor/SearchFieldEditor.d.ts} +0 -0
- package/dist/esm/{SearchFieldEditor.js → SearchFieldEditor/SearchFieldEditor.js} +1 -1
- package/dist/esm/SearchFieldEditor/SearchFieldEditor.js.map +1 -0
- package/dist/esm/{SearchFilterEditor.d.ts → SearchFilterEditor/SearchFilterEditor.d.ts} +0 -0
- package/dist/esm/{SearchFilterEditor.js → SearchFilterEditor/SearchFilterEditor.js} +3 -3
- package/dist/esm/SearchFilterEditor/SearchFilterEditor.js.map +1 -0
- package/dist/esm/{SearchFilterValueDialog.d.ts → SearchFilterValueDialog/SearchFilterValueDialog.d.ts} +0 -0
- package/dist/esm/{SearchFilterValueDialog.js → SearchFilterValueDialog/SearchFilterValueDialog.js} +2 -2
- package/dist/esm/SearchFilterValueDialog/SearchFilterValueDialog.js.map +1 -0
- package/dist/esm/{SearchFilterValueDisplay.d.ts → SearchFilterValueDisplay/SearchFilterValueDisplay.d.ts} +0 -0
- package/dist/esm/{SearchFilterValueDisplay.js → SearchFilterValueDisplay/SearchFilterValueDisplay.js} +1 -1
- package/dist/esm/SearchFilterValueDisplay/SearchFilterValueDisplay.js.map +1 -0
- package/dist/esm/{SearchFilterValueInput.d.ts → SearchFilterValueInput/SearchFilterValueInput.d.ts} +0 -0
- package/dist/esm/{SearchFilterValueInput.js → SearchFilterValueInput/SearchFilterValueInput.js} +3 -3
- package/dist/esm/SearchFilterValueInput/SearchFilterValueInput.js.map +1 -0
- package/dist/esm/{SearchPopupMenu.d.ts → SearchPopupMenu/SearchPopupMenu.d.ts} +0 -0
- package/dist/esm/{SearchPopupMenu.js → SearchPopupMenu/SearchPopupMenu.js} +1 -1
- package/dist/esm/SearchPopupMenu/SearchPopupMenu.js.map +1 -0
- package/dist/esm/{ServiceRequestTimeline.d.ts → ServiceRequestTimeline/ServiceRequestTimeline.d.ts} +0 -0
- package/dist/esm/{ServiceRequestTimeline.js → ServiceRequestTimeline/ServiceRequestTimeline.js} +1 -1
- package/dist/esm/ServiceRequestTimeline/ServiceRequestTimeline.js.map +1 -0
- package/dist/esm/{StatusBadge.d.ts → StatusBadge/StatusBadge.d.ts} +0 -0
- package/dist/esm/{StatusBadge.js → StatusBadge/StatusBadge.js} +0 -0
- package/dist/esm/StatusBadge/StatusBadge.js.map +1 -0
- package/dist/esm/{stories → StatusBadge}/StatusBadge.stories.d.ts +0 -0
- package/dist/esm/{Timeline.d.ts → Timeline/Timeline.d.ts} +0 -0
- package/dist/esm/{Timeline.js → Timeline/Timeline.js} +4 -4
- package/dist/esm/Timeline/Timeline.js.map +1 -0
- package/dist/esm/{stories → Timeline}/Timeline.stories.d.ts +0 -0
- package/dist/esm/{TimingInput.d.ts → TimingInput/TimingInput.d.ts} +0 -0
- package/dist/esm/{TimingInput.js → TimingInput/TimingInput.js} +2 -2
- package/dist/esm/TimingInput/TimingInput.js.map +1 -0
- package/dist/esm/{stories → TimingInput}/TimingInput.stories.d.ts +0 -0
- package/dist/esm/{ValueSetAutocomplete.d.ts → ValueSetAutocomplete/ValueSetAutocomplete.d.ts} +0 -0
- package/dist/esm/{ValueSetAutocomplete.js → ValueSetAutocomplete/ValueSetAutocomplete.js} +5 -5
- package/dist/esm/ValueSetAutocomplete/ValueSetAutocomplete.js.map +1 -0
- package/dist/esm/auth/AuthenticationForm.d.ts +2 -10
- package/dist/esm/auth/AuthenticationForm.js +13 -33
- package/dist/esm/auth/AuthenticationForm.js.map +1 -1
- package/dist/esm/auth/ChooseProfileForm.js +2 -2
- package/dist/esm/auth/ChooseProfileForm.js.map +1 -1
- package/dist/esm/auth/ChooseScopeForm.d.ts +7 -0
- package/dist/esm/auth/ChooseScopeForm.js +28 -0
- package/dist/esm/auth/ChooseScopeForm.js.map +1 -0
- package/dist/esm/auth/NewProjectForm.js +3 -3
- package/dist/esm/auth/NewProjectForm.js.map +1 -1
- package/dist/esm/auth/NewUserForm.js +3 -3
- package/dist/esm/auth/NewUserForm.js.map +1 -1
- package/dist/esm/auth/RegisterForm.js +2 -2
- package/dist/esm/auth/RegisterForm.js.map +1 -1
- package/dist/esm/{stories → auth}/RegisterForm.stories.d.ts +0 -0
- package/dist/esm/auth/SignInForm.d.ts +3 -10
- package/dist/esm/auth/SignInForm.js +30 -13
- package/dist/esm/auth/SignInForm.js.map +1 -1
- package/dist/esm/{stories → auth}/SignInForm.stories.d.ts +0 -0
- package/dist/esm/index.d.ts +66 -65
- package/dist/esm/index.js +66 -65
- 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/referenceLab.d.ts +3 -0
- package/dist/esm/{useResource.d.ts → useResource/useResource.d.ts} +0 -0
- package/dist/esm/{useResource.js → useResource/useResource.js} +1 -1
- package/dist/esm/useResource/useResource.js.map +1 -0
- package/dist/esm/{QuestionnaireUtils.d.ts → utils/questionnaire.d.ts} +0 -0
- package/dist/esm/{QuestionnaireUtils.js → utils/questionnaire.js} +1 -1
- package/dist/esm/utils/questionnaire.js.map +1 -0
- package/dist/esm/utils/recaptcha.js +1 -1
- package/dist/esm/utils/recaptcha.js.map +1 -1
- package/dist/esm/{utils.d.ts → utils/script.d.ts} +0 -0
- package/dist/esm/{utils.js → utils/script.js} +1 -1
- package/dist/esm/utils/script.js.map +1 -0
- package/package.json +23 -23
- package/rollup.config.mjs +1 -1
- package/dist/esm/AddressDisplay.js.map +0 -1
- package/dist/esm/AddressInput.js.map +0 -1
- package/dist/esm/AnnotationInput.js.map +0 -1
- package/dist/esm/AttachmentArrayDisplay.js.map +0 -1
- package/dist/esm/AttachmentArrayInput.js.map +0 -1
- package/dist/esm/AttachmentButton.js.map +0 -1
- package/dist/esm/AttachmentDisplay.js.map +0 -1
- package/dist/esm/AttachmentInput.js.map +0 -1
- package/dist/esm/BackboneElementDisplay.js.map +0 -1
- package/dist/esm/BackboneElementInput.js.map +0 -1
- package/dist/esm/CalendarInput.js.map +0 -1
- package/dist/esm/CheckboxFormSection.js.map +0 -1
- package/dist/esm/CodeInput.js.map +0 -1
- package/dist/esm/CodeableConceptDisplay.js.map +0 -1
- package/dist/esm/CodeableConceptInput.js.map +0 -1
- package/dist/esm/CodingDisplay.js.map +0 -1
- package/dist/esm/CodingInput.js.map +0 -1
- package/dist/esm/ContactDetailDisplay.js.map +0 -1
- package/dist/esm/ContactDetailInput.js.map +0 -1
- package/dist/esm/ContactPointDisplay.js.map +0 -1
- package/dist/esm/ContactPointInput.js.map +0 -1
- package/dist/esm/DateTimeInput.js.map +0 -1
- package/dist/esm/DefaultResourceTimeline.js.map +0 -1
- package/dist/esm/DescriptionList.js.map +0 -1
- package/dist/esm/DiagnosticReportDisplay.js.map +0 -1
- package/dist/esm/Document.js.map +0 -1
- package/dist/esm/EncounterTimeline.js.map +0 -1
- package/dist/esm/ErrorBoundary.js.map +0 -1
- package/dist/esm/ExtensionInput.js.map +0 -1
- package/dist/esm/FhirPathDisplay.js.map +0 -1
- package/dist/esm/FhirPathTable.js.map +0 -1
- package/dist/esm/Form.js.map +0 -1
- package/dist/esm/FormSection.js.map +0 -1
- package/dist/esm/FormUtils.js.map +0 -1
- package/dist/esm/GoogleButton.js.map +0 -1
- package/dist/esm/HumanNameDisplay.js.map +0 -1
- package/dist/esm/HumanNameInput.js.map +0 -1
- package/dist/esm/IdentifierDisplay.js.map +0 -1
- package/dist/esm/IdentifierInput.js.map +0 -1
- package/dist/esm/Logo.js.map +0 -1
- package/dist/esm/MedplumLink.js.map +0 -1
- package/dist/esm/MedplumProvider.js.map +0 -1
- package/dist/esm/PatientTimeline.js.map +0 -1
- package/dist/esm/PeriodInput.js.map +0 -1
- package/dist/esm/PlanDefinitionBuilder.js.map +0 -1
- package/dist/esm/QuantityDisplay.js +0 -28
- package/dist/esm/QuantityDisplay.js.map +0 -1
- package/dist/esm/QuantityInput.js.map +0 -1
- package/dist/esm/QuestionnaireBuilder.js.map +0 -1
- package/dist/esm/QuestionnaireForm.js.map +0 -1
- package/dist/esm/QuestionnaireUtils.js.map +0 -1
- package/dist/esm/RangeDisplay.js +0 -21
- package/dist/esm/RangeDisplay.js.map +0 -1
- package/dist/esm/RangeInput.js.map +0 -1
- package/dist/esm/RatioDisplay.js.map +0 -1
- package/dist/esm/RatioInput.js.map +0 -1
- package/dist/esm/ReferenceDisplay.js.map +0 -1
- package/dist/esm/ReferenceInput.js.map +0 -1
- package/dist/esm/RequestGroupDisplay.js.map +0 -1
- package/dist/esm/ResourceArrayDisplay.js.map +0 -1
- package/dist/esm/ResourceArrayInput.js.map +0 -1
- package/dist/esm/ResourceAvatar.js.map +0 -1
- package/dist/esm/ResourceBadge.js.map +0 -1
- package/dist/esm/ResourceBlame.js.map +0 -1
- package/dist/esm/ResourceDiff.js.map +0 -1
- package/dist/esm/ResourceDiffTable.js.map +0 -1
- package/dist/esm/ResourceForm.js.map +0 -1
- package/dist/esm/ResourceHistoryTable.js.map +0 -1
- package/dist/esm/ResourceInput.js.map +0 -1
- package/dist/esm/ResourceName.js.map +0 -1
- package/dist/esm/ResourcePropertyDisplay.js.map +0 -1
- package/dist/esm/ResourcePropertyInput.js.map +0 -1
- package/dist/esm/ResourceTable.js.map +0 -1
- package/dist/esm/ResourceTimeline.js.map +0 -1
- package/dist/esm/Scheduler.js.map +0 -1
- package/dist/esm/SearchControl.js.map +0 -1
- package/dist/esm/SearchControlField.js.map +0 -1
- package/dist/esm/SearchFieldEditor.js.map +0 -1
- package/dist/esm/SearchFilterEditor.js.map +0 -1
- package/dist/esm/SearchFilterValueDialog.js.map +0 -1
- package/dist/esm/SearchFilterValueDisplay.js.map +0 -1
- package/dist/esm/SearchFilterValueInput.js.map +0 -1
- package/dist/esm/SearchPopupMenu.js.map +0 -1
- package/dist/esm/SearchUtils.js.map +0 -1
- package/dist/esm/ServiceRequestTimeline.js.map +0 -1
- package/dist/esm/StatusBadge.js.map +0 -1
- package/dist/esm/Timeline.js.map +0 -1
- package/dist/esm/TimingInput.js.map +0 -1
- package/dist/esm/ValueSetAutocomplete.js.map +0 -1
- package/dist/esm/useResource.js.map +0 -1
- package/dist/esm/utils.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchControl.js","sources":["../../../src/SearchControl/SearchControl.tsx"],"sourcesContent":["import {\n Button,\n Center,\n Container,\n createStyles,\n Group,\n Loader,\n Menu,\n Pagination,\n Table,\n Text,\n UnstyledButton,\n} from '@mantine/core';\nimport { DEFAULT_SEARCH_COUNT, Filter, formatSearchQuery, globalSchema, SearchRequest } from '@medplum/core';\nimport {\n Bundle,\n OperationOutcome,\n Resource,\n ResourceType,\n SearchParameter,\n UserConfiguration,\n} from '@medplum/fhirtypes';\nimport {\n IconAdjustmentsHorizontal,\n IconBoxMultiple,\n IconColumns,\n IconFilePlus,\n IconFilter,\n IconTableExport,\n IconTrash,\n} from '@tabler/icons';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useMedplum } from '../MedplumProvider/MedplumProvider';\nimport { SearchFieldEditor } from '../SearchFieldEditor/SearchFieldEditor';\nimport { SearchFilterEditor } from '../SearchFilterEditor/SearchFilterEditor';\nimport { SearchFilterValueDialog } from '../SearchFilterValueDialog/SearchFilterValueDialog';\nimport { SearchFilterValueDisplay } from '../SearchFilterValueDisplay/SearchFilterValueDisplay';\nimport { SearchPopupMenu } from '../SearchPopupMenu/SearchPopupMenu';\nimport { isCheckboxCell, killEvent } from '../utils/dom';\nimport { getFieldDefinitions } from './SearchControlField';\nimport { addFilter, buildFieldNameString, getOpString, renderValue, setPage } from './SearchUtils';\n\nexport class SearchChangeEvent extends Event {\n readonly definition: SearchRequest;\n\n constructor(definition: SearchRequest) {\n super('change');\n this.definition = definition;\n }\n}\n\nexport class SearchLoadEvent extends Event {\n readonly response: Bundle;\n\n constructor(response: Bundle) {\n super('load');\n this.response = response;\n }\n}\n\nexport class SearchClickEvent extends Event {\n readonly resource: Resource;\n readonly browserEvent: React.MouseEvent;\n\n constructor(resource: Resource, browserEvent: React.MouseEvent) {\n super('click');\n this.resource = resource;\n this.browserEvent = browserEvent;\n }\n}\n\nexport interface SearchControlProps {\n search: SearchRequest;\n userConfig?: UserConfiguration;\n checkboxesEnabled?: boolean;\n hideToolbar?: boolean;\n hideFilters?: boolean;\n onLoad?: (e: SearchLoadEvent) => void;\n onChange?: (e: SearchChangeEvent) => void;\n onClick?: (e: SearchClickEvent) => void;\n onAuxClick?: (e: SearchClickEvent) => void;\n onNew?: () => void;\n onExport?: () => void;\n onDelete?: (ids: string[]) => void;\n onPatch?: (ids: string[]) => void;\n onBulk?: (ids: string[]) => void;\n}\n\ninterface SearchControlState {\n searchResponse?: Bundle;\n selected: { [id: string]: boolean };\n fieldEditorVisible: boolean;\n filterEditorVisible: boolean;\n filterDialogVisible: boolean;\n filterDialogFilter?: Filter;\n filterDialogSearchParam?: SearchParameter;\n}\n\nconst useStyles = createStyles((theme) => ({\n root: {\n maxWidth: '100%',\n overflow: 'auto',\n textAlign: 'left',\n marginBottom: '20px',\n },\n\n table: {\n cursor: 'pointer',\n },\n\n tr: {\n '&:hover': {\n backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark[7] : theme.colors.gray[0],\n },\n },\n\n th: {\n padding: '0 !important',\n },\n\n control: {\n width: '100%',\n padding: `${theme.spacing.xs}px ${theme.spacing.md}px`,\n\n '&:hover': {\n backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark[6] : theme.colors.gray[0],\n },\n },\n\n icon: {\n width: 21,\n height: 21,\n borderRadius: 21,\n },\n}));\n\n/**\n * The SearchControl component represents the embeddable search table control.\n * It includes the table, rows, headers, sorting, etc.\n * It does not include the field editor, filter editor, pagination buttons.\n */\nexport function SearchControl(props: SearchControlProps): JSX.Element {\n const { classes } = useStyles();\n const medplum = useMedplum();\n const [schemaLoaded, setSchemaLoaded] = useState<boolean>(false);\n const [outcome, setOutcome] = useState<OperationOutcome | undefined>();\n const { search, onLoad } = props;\n\n const [state, setState] = useState<SearchControlState>({\n selected: {},\n fieldEditorVisible: false,\n filterEditorVisible: false,\n filterDialogVisible: false,\n });\n\n const stateRef = useRef<SearchControlState>(state);\n stateRef.current = state;\n\n useEffect(() => {\n setOutcome(undefined);\n medplum\n .search(\n search.resourceType as ResourceType,\n formatSearchQuery({ ...search, total: 'accurate', fields: undefined })\n )\n .then((response) => {\n setState({ ...stateRef.current, searchResponse: response });\n if (onLoad) {\n onLoad(new SearchLoadEvent(response));\n }\n })\n .catch((reason) => {\n setState({ ...stateRef.current, searchResponse: undefined });\n setOutcome(reason);\n });\n }, [medplum, search, onLoad]);\n\n function handleSingleCheckboxClick(e: React.ChangeEvent, id: string): void {\n e.stopPropagation();\n\n const el = e.target as HTMLInputElement;\n const checked = el.checked;\n const newSelected = { ...stateRef.current.selected };\n if (checked) {\n newSelected[id] = true;\n } else {\n delete newSelected[id];\n }\n setState({ ...stateRef.current, selected: newSelected });\n }\n\n function handleAllCheckboxClick(e: React.ChangeEvent): void {\n e.stopPropagation();\n\n const el = e.target as HTMLInputElement;\n const checked = el.checked;\n const newSelected = {} as { [id: string]: boolean };\n const searchResponse = stateRef.current?.searchResponse;\n if (checked && searchResponse?.entry) {\n searchResponse.entry.forEach((entry) => {\n if (entry.resource?.id) {\n newSelected[entry.resource.id] = true;\n }\n });\n }\n setState({ ...stateRef.current, selected: newSelected });\n }\n\n function isAllSelected(): boolean {\n const state = stateRef.current;\n if (!state.searchResponse?.entry || state.searchResponse.entry.length === 0) {\n return false;\n }\n for (const e of state.searchResponse.entry) {\n if (e.resource?.id && !state.selected[e.resource.id]) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Emits a change event to the optional change listener.\n * @param newSearch The new search definition.\n */\n function emitSearchChange(newSearch: SearchRequest): void {\n if (props.onChange) {\n props.onChange(new SearchChangeEvent(newSearch));\n }\n }\n\n /**\n * Handles a click on a order row.\n *\n * @param e The click event.\n * @param resource The FHIR resource.\n */\n function handleRowClick(e: React.MouseEvent, resource: Resource): void {\n if (isCheckboxCell(e.target as Element)) {\n // Ignore clicks on checkboxes\n return;\n }\n\n if (e.button === 2) {\n // Ignore right clicks\n return;\n }\n\n killEvent(e);\n\n if (e.button !== 1 && props.onClick) {\n props.onClick(new SearchClickEvent(resource, e));\n }\n\n if (e.button === 1 && props.onAuxClick) {\n props.onAuxClick(new SearchClickEvent(resource, e));\n }\n }\n\n useEffect(() => {\n setSchemaLoaded(false);\n medplum\n .requestSchema(props.search.resourceType as ResourceType)\n .then(() => setSchemaLoaded(true))\n .catch(console.log);\n }, [medplum, props.search.resourceType]);\n\n const typeSchema = schemaLoaded && globalSchema?.types?.[props.search.resourceType];\n if (!typeSchema) {\n return (\n <Center style={{ width: '100%', height: '100%' }}>\n <Loader />\n </Center>\n );\n }\n\n const checkboxColumn = props.checkboxesEnabled;\n const fields = getFieldDefinitions(search);\n const resourceType = search.resourceType;\n const lastResult = state.searchResponse;\n const entries = lastResult?.entry;\n const resources = entries?.map((e) => e.resource);\n\n const buttonVariant = 'subtle';\n const buttonColor = 'gray';\n const iconSize = 16;\n const isMobile = window.innerWidth < 768;\n\n return (\n <div className={classes.root} data-testid=\"search-control\">\n {!props.hideToolbar && (\n <Group position=\"apart\" mb=\"xl\">\n <Group spacing={2}>\n <Button\n compact\n variant={buttonVariant}\n color={buttonColor}\n leftIcon={<IconFilter size={iconSize} />}\n onClick={() => setState({ ...stateRef.current, fieldEditorVisible: true })}\n >\n Fields\n </Button>\n <Button\n compact\n variant={buttonVariant}\n color={buttonColor}\n leftIcon={<IconColumns size={iconSize} />}\n onClick={() => setState({ ...stateRef.current, filterEditorVisible: true })}\n >\n Filters\n </Button>\n {props.onNew && (\n <Button\n compact\n variant={buttonVariant}\n color={buttonColor}\n leftIcon={<IconFilePlus size={iconSize} />}\n onClick={props.onNew}\n >\n New...\n </Button>\n )}\n {!isMobile && props.onExport && (\n <Button\n compact\n variant={buttonVariant}\n color={buttonColor}\n leftIcon={<IconTableExport size={iconSize} />}\n onClick={props.onExport}\n >\n Export...\n </Button>\n )}\n {!isMobile && props.onDelete && (\n <Button\n compact\n variant={buttonVariant}\n color={buttonColor}\n leftIcon={<IconTrash size={iconSize} />}\n onClick={() => (props.onDelete as (ids: string[]) => any)(Object.keys(state.selected))}\n >\n Delete...\n </Button>\n )}\n {!isMobile && props.onBulk && (\n <Button\n compact\n variant={buttonVariant}\n color={buttonColor}\n leftIcon={<IconBoxMultiple size={iconSize} />}\n onClick={() => (props.onBulk as (ids: string[]) => any)(Object.keys(state.selected))}\n >\n Bulk...\n </Button>\n )}\n </Group>\n {lastResult && (\n <Text size=\"xs\" color=\"dimmed\">\n {getStart(search, lastResult.total as number)}-{getEnd(search, lastResult.total as number)} of{' '}\n {lastResult.total?.toLocaleString()}\n </Text>\n )}\n </Group>\n )}\n <Table className={classes.table}>\n <thead>\n <tr>\n {checkboxColumn && (\n <th>\n <input\n type=\"checkbox\"\n value=\"checked\"\n aria-label=\"all-checkbox\"\n data-testid=\"all-checkbox\"\n checked={isAllSelected()}\n onChange={(e) => handleAllCheckboxClick(e)}\n />\n </th>\n )}\n {fields.map((field) => (\n <th key={field.name}>\n <Menu shadow=\"md\" width={240} position=\"bottom-end\">\n <Menu.Target>\n <UnstyledButton className={classes.control}>\n <Group position=\"apart\" noWrap>\n <Text weight={500} size=\"sm\">\n {buildFieldNameString(field.name)}\n </Text>\n <Center className={classes.icon}>\n <IconAdjustmentsHorizontal size={14} stroke={1.5} />\n </Center>\n </Group>\n </UnstyledButton>\n </Menu.Target>\n <SearchPopupMenu\n search={props.search}\n searchParams={field.searchParams}\n onPrompt={(searchParam, filter) => {\n setState({\n ...stateRef.current,\n filterDialogVisible: true,\n filterDialogSearchParam: searchParam,\n filterDialogFilter: filter,\n });\n }}\n onChange={(result) => {\n emitSearchChange(result);\n }}\n />\n </Menu>\n </th>\n ))}\n </tr>\n {!props.hideFilters && (\n <tr>\n {checkboxColumn && <th />}\n {fields.map((field) => (\n <th key={field.name}>\n {field.searchParams && (\n <FilterDescription\n resourceType={resourceType}\n searchParams={field.searchParams}\n filters={props.search.filters}\n />\n )}\n </th>\n ))}\n </tr>\n )}\n </thead>\n <tbody>\n {resources?.map(\n (resource) =>\n resource && (\n <tr\n key={resource.id}\n className={classes.tr}\n data-testid=\"search-control-row\"\n onClick={(e) => handleRowClick(e, resource)}\n onAuxClick={(e) => handleRowClick(e, resource)}\n >\n {checkboxColumn && (\n <td>\n <input\n type=\"checkbox\"\n value=\"checked\"\n data-testid=\"row-checkbox\"\n aria-label={`Checkbox for ${resource.id}`}\n checked={!!state.selected[resource.id as string]}\n onChange={(e) => handleSingleCheckboxClick(e, resource.id as string)}\n />\n </td>\n )}\n {fields.map((field) => (\n <td key={field.name}>{renderValue(resource, field)}</td>\n ))}\n </tr>\n )\n )}\n </tbody>\n </Table>\n {resources?.length === 0 && (\n <Container>\n <Center>\n <Text size=\"xl\" color=\"dimmed\">\n No results\n </Text>\n </Center>\n </Container>\n )}\n {lastResult?.total !== undefined && lastResult.total > 0 && (\n <Center m=\"md\" p=\"md\">\n <Pagination\n page={getPage(search)}\n total={getTotalPages(search, lastResult.total)}\n onChange={(newPage) => emitSearchChange(setPage(search, newPage))}\n getItemAriaLabel={(page) => {\n switch (page) {\n case 'prev':\n return 'Previous page';\n case 'next':\n return 'Next page';\n default:\n return undefined;\n }\n }}\n />\n </Center>\n )}\n {outcome && (\n <div data-testid=\"search-error\">\n <pre style={{ textAlign: 'left' }}>{JSON.stringify(outcome, undefined, 2)}</pre>\n </div>\n )}\n <SearchFieldEditor\n search={props.search}\n visible={stateRef.current.fieldEditorVisible}\n onOk={(result) => {\n emitSearchChange(result);\n setState({\n ...stateRef.current,\n fieldEditorVisible: false,\n });\n }}\n onCancel={() => {\n setState({\n ...stateRef.current,\n fieldEditorVisible: false,\n });\n }}\n />\n <SearchFilterEditor\n search={props.search}\n visible={stateRef.current.filterEditorVisible}\n onOk={(result) => {\n emitSearchChange(result);\n setState({\n ...stateRef.current,\n filterEditorVisible: false,\n });\n }}\n onCancel={() => {\n setState({\n ...stateRef.current,\n filterEditorVisible: false,\n });\n }}\n />\n <SearchFilterValueDialog\n key={state.filterDialogSearchParam?.code}\n visible={stateRef.current.filterDialogVisible}\n title={'Input'}\n resourceType={resourceType}\n searchParam={state.filterDialogSearchParam}\n filter={state.filterDialogFilter}\n defaultValue={''}\n onOk={(filter) => {\n emitSearchChange(addFilter(props.search, filter.code, filter.operator, filter.value));\n setState({\n ...stateRef.current,\n filterDialogVisible: false,\n });\n }}\n onCancel={() => {\n setState({\n ...stateRef.current,\n filterDialogVisible: false,\n });\n }}\n />\n </div>\n );\n}\n\nexport const MemoizedSearchControl = React.memo(SearchControl);\n\ninterface FilterDescriptionProps {\n readonly resourceType: string;\n readonly searchParams: SearchParameter[];\n readonly filters?: Filter[];\n}\n\nfunction FilterDescription(props: FilterDescriptionProps): JSX.Element {\n const filters = (props.filters ?? []).filter((f) => props.searchParams.find((p) => p.code === f.code));\n if (filters.length === 0) {\n return <span>no filters</span>;\n }\n\n return (\n <>\n {filters.map((filter: Filter, index: number) => (\n <div key={`filter-${index}-${filters.length}`}>\n {getOpString(filter.operator)}\n \n <SearchFilterValueDisplay resourceType={props.resourceType} filter={filter} />\n </div>\n ))}\n </>\n );\n}\n\nfunction getPage(search: SearchRequest): number {\n return Math.floor((search.offset || 0) / (search.count || DEFAULT_SEARCH_COUNT)) + 1;\n}\n\nfunction getTotalPages(search: SearchRequest, total: number): number {\n const pageSize = search.count || DEFAULT_SEARCH_COUNT;\n return Math.ceil(total / pageSize);\n}\n\nfunction getStart(search: SearchRequest, total: number): number {\n return Math.min(total, (search.offset ?? 0) + 1);\n}\n\nfunction getEnd(search: SearchRequest, total: number): number {\n return Math.min(total, ((search.offset ?? 0) + 1) * (search.count ?? DEFAULT_SEARCH_COUNT));\n}\n"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchControlField.js","sources":["../../../src/SearchControl/SearchControlField.ts"],"sourcesContent":["import { getSearchParameterDetails, globalSchema, SearchRequest } from '@medplum/core';\nimport { ElementDefinition, ResourceType, SearchParameter } from '@medplum/fhirtypes';\n\n/**\n * The SearchControlField type describes a field in the search control.\n *\n * In a SearchRequest, a field is a simple string. Strings can be one of the following:\n * 1) Simple property names, which refer to ElementDefinition objects\n * 2) Search parameter names, which refer to SearchParameter resources\n *\n * Consider a few examples of how this becomes complicated.\n *\n * \"name\" (easy)\n * - element definition path=\"Patient.name\"\n * - search parameter code=\"name\"\n *\n * \"birthDate\" (medium)\n * - refers to the element definition path=\"Patient.birthDate\"\n * - refers to the search parameter code=\"birthdate\" (note the capitalization)\n *\n * \"email\" (hard)\n * - refers to the search parameter code=\"email\"\n * - refers to the element definition path=\"Patient.telecom\"\n *\n * In the last case, we start with the search parameter, and walk backwards to the\n * element definition in order to get type details for rendering.\n *\n * Overall, we want columns, fields, properties, and search parameters to feel seamless,\n * so we try our darndest to make this work.\n */\nexport interface SearchControlField {\n readonly name: string;\n readonly elementDefinition?: ElementDefinition;\n readonly searchParams?: SearchParameter[];\n}\n\n/**\n * Returns the collection of field definitions for the search request.\n * @param search The search request definition.\n * @returns An array of field definitions.\n */\nexport function getFieldDefinitions(search: SearchRequest): SearchControlField[] {\n const resourceType = search.resourceType;\n const fields = [] as SearchControlField[];\n\n for (const name of search.fields || ['id', '_lastUpdated']) {\n fields.push(getFieldDefinition(resourceType, name));\n }\n return fields;\n}\n\n/**\n * Return the field definition for a given field name.\n * Field names can be either property names or search parameter codes.\n * @param resourceType The resource type.\n * @param name The search field name (either property name or search parameter code).\n * @returns The field definition.\n */\nfunction getFieldDefinition(resourceType: string, name: string): SearchControlField {\n if (name === '_lastUpdated') {\n return {\n name: '_lastUpdated',\n searchParams: [\n {\n resourceType: 'SearchParameter',\n base: ['Resource' as ResourceType],\n code: '_lastUpdated',\n name: '_lastUpdated',\n type: 'date',\n expression: 'Resource.meta.lastUpdated',\n },\n ],\n };\n }\n\n if (name === 'meta.versionId') {\n return {\n name: 'meta.versionId',\n searchParams: [\n {\n resourceType: 'SearchParameter',\n base: ['Resource' as ResourceType],\n code: '_versionId',\n name: '_versionId',\n type: 'token',\n expression: 'Resource.meta.versionId',\n },\n ],\n };\n }\n\n const typeSchema = globalSchema.types[resourceType];\n const exactElementDefinition: ElementDefinition | undefined = typeSchema.properties[name];\n const exactSearchParam: SearchParameter | undefined = typeSchema.searchParams?.[name.toLowerCase()];\n\n // Best case: Exact match of element definition or search parameter.\n // Examples: ServiceRequest.subject, Patient.name, Patient.birthDate\n // In this case, we only show the one search parameter.\n if (exactElementDefinition && exactSearchParam) {\n return { name, elementDefinition: exactElementDefinition, searchParams: [exactSearchParam] };\n }\n\n // Next best case: Exact match of element definition\n // Examples: Observation.value\n // In this case, there could be zero or more search parameters that are a function of the element definition.\n // So search for those search parameters.\n if (exactElementDefinition) {\n let searchParams: SearchParameter[] | undefined = undefined;\n if (typeSchema.searchParams) {\n const path = `${resourceType}.${name.replaceAll('[x]', '')}`;\n searchParams = Object.values(typeSchema.searchParams).filter((p) => p.expression?.includes(path));\n if (searchParams.length === 0) {\n searchParams = undefined;\n }\n }\n return { name, elementDefinition: exactElementDefinition, searchParams };\n }\n\n // Search parameter case: Exact match of search parameter\n // Examples: Observation.value-quantity, Patient.email\n // Here we have a search parameter, but no element definition.\n // Observation.value-quantity is a search parameter for the Observation.value element.\n // Patient.email is a search parameter for the Patient.telecom element.\n // So we need to walk backwards to find the element definition.\n if (exactSearchParam) {\n const details = getSearchParameterDetails(resourceType, exactSearchParam);\n return { name, elementDefinition: details.elementDefinition, searchParams: [exactSearchParam] };\n }\n\n // Worst case: no element definition and no search parameter.\n // This is probably a malformed URL that includes an unknown field.\n // We will render the column header, but all cells will be empty.\n return { name };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -81,21 +81,6 @@ export declare function addNextMonthFilter(definition: SearchRequest, field: str
|
|
|
81
81
|
* @param {string} field The field key name.
|
|
82
82
|
*/
|
|
83
83
|
export declare function addYearToDateFilter(definition: SearchRequest, field: string): SearchRequest;
|
|
84
|
-
/**
|
|
85
|
-
* Adds a filter for a field equaling a specified date.
|
|
86
|
-
*
|
|
87
|
-
* @param {string} field The field key name.
|
|
88
|
-
* @param {Date} value The date.
|
|
89
|
-
*/
|
|
90
|
-
export declare function addDateEqualsFilter(definition: SearchRequest, field: string, value: Date): SearchRequest;
|
|
91
|
-
/**
|
|
92
|
-
* Adds a filter for a date before a certain date/time.
|
|
93
|
-
*
|
|
94
|
-
* @param {string} field The field key name.
|
|
95
|
-
* @param {Operator} op The date/time operation.
|
|
96
|
-
* @param {Date} value The date.
|
|
97
|
-
*/
|
|
98
|
-
export declare function addDateFilter(definition: SearchRequest, field: string, op: Operator, value: Date): SearchRequest;
|
|
99
84
|
/**
|
|
100
85
|
* Adds a filter for a date between two dates (inclusive of both dates).
|
|
101
86
|
*
|
|
@@ -110,12 +95,6 @@ export declare function addDateFilterBetween(definition: SearchRequest, field: s
|
|
|
110
95
|
* @param {string} field The field key name.
|
|
111
96
|
*/
|
|
112
97
|
export declare function addMissingFilter(definition: SearchRequest, field: string, value?: boolean): SearchRequest;
|
|
113
|
-
/**
|
|
114
|
-
* Returns true if the search has any filters on the specified field.
|
|
115
|
-
*
|
|
116
|
-
* @param {string} code The field key name.
|
|
117
|
-
*/
|
|
118
|
-
export declare function hasFilterOnField(definition: SearchRequest, code: string): boolean;
|
|
119
98
|
/**
|
|
120
99
|
* Sets the offset (starting at zero).
|
|
121
100
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Operator, DEFAULT_SEARCH_COUNT, capitalize, formatDateTime, evalFhirPathTyped } from '@medplum/core';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { getValueAndType, ResourcePropertyDisplay } from '
|
|
3
|
+
import { getValueAndType, ResourcePropertyDisplay } from '../ResourcePropertyDisplay/ResourcePropertyDisplay.js';
|
|
4
4
|
|
|
5
5
|
const searchParamToOperators = {
|
|
6
6
|
string: [Operator.EQUALS, Operator.NOT, Operator.CONTAINS, Operator.EXACT],
|
|
@@ -239,26 +239,6 @@ function addYearToDateFilter(definition, field) {
|
|
|
239
239
|
const endTime = new Date();
|
|
240
240
|
return addDateFilterBetween(definition, field, startTime, endTime);
|
|
241
241
|
}
|
|
242
|
-
/**
|
|
243
|
-
* Adds a filter for a field equaling a specified date.
|
|
244
|
-
*
|
|
245
|
-
* @param {string} field The field key name.
|
|
246
|
-
* @param {Date} value The date.
|
|
247
|
-
*/
|
|
248
|
-
function addDateEqualsFilter(definition, field, value) {
|
|
249
|
-
return addDateFilterBetween(definition, field, value, value);
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Adds a filter for a date before a certain date/time.
|
|
253
|
-
*
|
|
254
|
-
* @param {string} field The field key name.
|
|
255
|
-
* @param {Operator} op The date/time operation.
|
|
256
|
-
* @param {Date} value The date.
|
|
257
|
-
*/
|
|
258
|
-
function addDateFilter(definition, field, op, value) {
|
|
259
|
-
definition = clearFiltersOnField(definition, field);
|
|
260
|
-
return addDateFilterImpl(definition, field, op, value);
|
|
261
|
-
}
|
|
262
242
|
/**
|
|
263
243
|
* Adds a filter for a date between two dates (inclusive of both dates).
|
|
264
244
|
*
|
|
@@ -290,17 +270,6 @@ function addDateFilterImpl(definition, field, op, value) {
|
|
|
290
270
|
function addMissingFilter(definition, field, value = true) {
|
|
291
271
|
return addFilter(definition, field, Operator.MISSING, value.toString());
|
|
292
272
|
}
|
|
293
|
-
/**
|
|
294
|
-
* Returns true if the search has any filters on the specified field.
|
|
295
|
-
*
|
|
296
|
-
* @param {string} code The field key name.
|
|
297
|
-
*/
|
|
298
|
-
function hasFilterOnField(definition, code) {
|
|
299
|
-
if (!definition.filters) {
|
|
300
|
-
return false;
|
|
301
|
-
}
|
|
302
|
-
return definition.filters.find((f) => f.code === code) !== undefined;
|
|
303
|
-
}
|
|
304
273
|
/**
|
|
305
274
|
* Sets the offset (starting at zero).
|
|
306
275
|
*
|
|
@@ -482,5 +451,5 @@ function renderSearchParameterValue(resource, searchParam, elementDefinition) {
|
|
|
482
451
|
return (React.createElement(React.Fragment, null, value.map((v, index) => (React.createElement("span", { key: `${index}-${value.length}` }, typeof v === 'object' ? JSON.stringify(v) : v)))));
|
|
483
452
|
}
|
|
484
453
|
|
|
485
|
-
export {
|
|
454
|
+
export { addDateFilterBetween, addField, addFilter, addLastMonthFilter, addMissingFilter, addNextMonthFilter, addThisMonthFilter, addTodayFilter, addTomorrowFilter, addYearToDateFilter, addYesterdayFilter, buildFieldNameString, clearFilters, clearFiltersOnField, deleteFilter, getOpString, getSearchOperators, getSortField, isSortDescending, renderValue, setFilters, setOffset, setPage, setSort, toggleSort };
|
|
486
455
|
//# sourceMappingURL=SearchUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchUtils.js","sources":["../../../src/SearchControl/SearchUtils.tsx"],"sourcesContent":["import {\n capitalize,\n DEFAULT_SEARCH_COUNT,\n evalFhirPathTyped,\n Filter,\n formatDateTime,\n Operator,\n PropertyType,\n SearchRequest,\n} from '@medplum/core';\nimport { ElementDefinition, Resource, SearchParameter } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { getValueAndType, ResourcePropertyDisplay } from '../ResourcePropertyDisplay/ResourcePropertyDisplay';\nimport { SearchControlField } from './SearchControlField';\n\nconst searchParamToOperators: Record<string, Operator[]> = {\n string: [Operator.EQUALS, Operator.NOT, Operator.CONTAINS, Operator.EXACT],\n fulltext: [Operator.EQUALS, Operator.NOT, Operator.CONTAINS, Operator.EXACT],\n token: [Operator.EQUALS, Operator.NOT],\n reference: [Operator.EQUALS, Operator.NOT],\n numeric: [\n Operator.EQUALS,\n Operator.NOT_EQUALS,\n Operator.GREATER_THAN,\n Operator.LESS_THAN,\n Operator.GREATER_THAN_OR_EQUALS,\n Operator.LESS_THAN_OR_EQUALS,\n ],\n quantity: [\n Operator.EQUALS,\n Operator.NOT_EQUALS,\n Operator.GREATER_THAN,\n Operator.LESS_THAN,\n Operator.GREATER_THAN_OR_EQUALS,\n Operator.LESS_THAN_OR_EQUALS,\n ],\n date: [\n Operator.EQUALS,\n Operator.NOT_EQUALS,\n Operator.GREATER_THAN,\n Operator.LESS_THAN,\n Operator.GREATER_THAN_OR_EQUALS,\n Operator.LESS_THAN_OR_EQUALS,\n Operator.STARTS_AFTER,\n Operator.ENDS_BEFORE,\n Operator.APPROXIMATELY,\n ],\n datetime: [\n Operator.EQUALS,\n Operator.NOT_EQUALS,\n Operator.GREATER_THAN,\n Operator.LESS_THAN,\n Operator.GREATER_THAN_OR_EQUALS,\n Operator.LESS_THAN_OR_EQUALS,\n Operator.STARTS_AFTER,\n Operator.ENDS_BEFORE,\n Operator.APPROXIMATELY,\n ],\n};\n\nconst operatorNames: Record<Operator, string> = {\n eq: 'equals',\n ne: 'not equals',\n gt: 'greater than',\n lt: 'less than',\n ge: 'greater than or equals',\n le: 'less than or equals',\n sa: 'starts after',\n eb: 'ends before',\n ap: 'approximately',\n contains: 'contains',\n exact: 'exact',\n text: 'text',\n not: 'not',\n above: 'above',\n below: 'below',\n in: 'in',\n 'not-in': 'not in',\n 'of-type': 'of type',\n missing: 'missing',\n};\n\n/**\n * Sets the array of filters.\n *\n * @param {Array} filters The new filters.\n */\nexport function setFilters(definition: SearchRequest, filters: Filter[]): SearchRequest {\n return {\n ...definition,\n filters: filters,\n offset: 0,\n name: undefined,\n };\n}\n\n/**\n * Clears all of the filters.\n */\nexport function clearFilters(definition: SearchRequest): SearchRequest {\n return setFilters(definition, []);\n}\n\n/**\n * Clears all of the filters on a certain field.\n *\n * @param {string} code The field key name to clear filters.\n */\nexport function clearFiltersOnField(definition: SearchRequest, code: string): SearchRequest {\n return setFilters(\n definition,\n (definition.filters || []).filter((f) => f.code !== code)\n );\n}\n\n/**\n * Adds a filter.\n *\n * @param {string} field The field key name.\n * @param {Operator} op The operation key name.\n * @param {?string} value The filter value.\n * @param {boolean=} opt_clear Optional flag to clear filters on the field.\n */\nexport function addFilter(\n definition: SearchRequest,\n field: string,\n op: Operator,\n value?: string,\n opt_clear?: boolean\n): SearchRequest {\n if (opt_clear) {\n definition = clearFiltersOnField(definition, field);\n }\n\n const nextFilters: Filter[] = [];\n if (definition.filters) {\n nextFilters.push(...definition.filters);\n }\n nextFilters.push({ code: field, operator: op, value: value || '' });\n\n return setFilters(definition, nextFilters);\n}\n\n/**\n * Adds a field.\n *\n * @param {string} field The field key name.\n */\nexport function addField(definition: SearchRequest, field: string): SearchRequest {\n if (definition.fields && definition.fields.includes(field)) {\n return definition;\n }\n const newFields = [];\n if (definition.fields) {\n newFields.push(...definition.fields);\n }\n newFields.push(field);\n return {\n ...definition,\n fields: newFields,\n name: undefined,\n };\n}\n\n/**\n * Deletes a filter at the specified index.\n *\n * @param {number} index The filter index.\n */\nexport function deleteFilter(definition: SearchRequest, index: number): SearchRequest {\n if (!definition.filters) {\n return definition;\n }\n const newFilters = [...definition.filters];\n newFilters.splice(index, 1);\n return {\n ...definition,\n filters: newFilters,\n name: undefined,\n };\n}\n\n/**\n * Adds a filter that constrains the specified field to \"yesterday\".\n *\n * @param {string} field The field key name.\n */\nexport function addYesterdayFilter(definition: SearchRequest, field: string): SearchRequest {\n return addDayFilter(definition, field, -1);\n}\n\n/**\n * Adds a filter that constrains the specified field to \"today\".\n *\n * @param {string} field The field key name.\n */\nexport function addTodayFilter(definition: SearchRequest, field: string): SearchRequest {\n return addDayFilter(definition, field, 0);\n}\n\n/**\n * Adds a filter that constrains the specified field to \"tomorrow\".\n *\n * @param {string} field The field key name.\n */\nexport function addTomorrowFilter(definition: SearchRequest, field: string): SearchRequest {\n return addDayFilter(definition, field, 1);\n}\n\n/**\n * Adds a filter that constrains the specified field to a day.\n * The day is specified as a delta from the current day.\n * \"Today\" would be 0.\n * \"Yesterday\" would be -1.\n * \"Tomorrow\" would be 1.\n *\n * @param {string} field The field key name.\n * @param {number} delta The number of days from this day.\n */\nfunction addDayFilter(definition: SearchRequest, field: string, delta: number): SearchRequest {\n const startTime = new Date();\n startTime.setDate(startTime.getDate() + delta);\n startTime.setHours(0, 0, 0, 0);\n\n const endTime = new Date(startTime.getTime());\n endTime.setDate(endTime.getDate() + 1);\n endTime.setTime(endTime.getTime() - 1);\n\n return addDateFilterBetween(definition, field, startTime, endTime);\n}\n\n/**\n * Adds a filter that constrains the specified field to \"last month\".\n *\n * @param {string} field The field key name.\n */\nexport function addLastMonthFilter(definition: SearchRequest, field: string): SearchRequest {\n return addMonthFilter(definition, field, -1);\n}\n\n/**\n * Adds a filter that constrains the specified field to \"this month\".\n *\n * @param {string} field The field key name.\n */\nexport function addThisMonthFilter(definition: SearchRequest, field: string): SearchRequest {\n return addMonthFilter(definition, field, 0);\n}\n\n/**\n * Adds a filter that constrains the specified field to \"next month\".\n *\n * @param {string} field The field key name.\n */\nexport function addNextMonthFilter(definition: SearchRequest, field: string): SearchRequest {\n return addMonthFilter(definition, field, 1);\n}\n\n/**\n * Adds a filter that constrains the specified field to a month.\n * The month is specified as a delta from the current month.\n * \"This month\" would be 0.\n * \"Last month\" would be -1.\n * \"Next month\" would be 1.\n *\n * @param {string} field The field key name.\n * @param {number} delta The number of months from this month.\n */\nfunction addMonthFilter(definition: SearchRequest, field: string, delta: number): SearchRequest {\n const startTime = new Date();\n startTime.setMonth(startTime.getMonth() + delta);\n startTime.setDate(1);\n startTime.setHours(0, 0, 0, 0);\n\n const endTime = new Date(startTime.getTime());\n endTime.setMonth(endTime.getMonth() + 1);\n endTime.setDate(1);\n endTime.setHours(0, 0, 0, 0);\n endTime.setTime(endTime.getTime() - 1);\n\n return addDateFilterBetween(definition, field, startTime, endTime);\n}\n\n/**\n * Adds a filter that constrains the specified field to the year to date.\n *\n * @param {string} field The field key name.\n */\nexport function addYearToDateFilter(definition: SearchRequest, field: string): SearchRequest {\n const startTime = new Date();\n startTime.setMonth(0);\n startTime.setDate(1);\n startTime.setHours(0, 0, 0, 0);\n\n const endTime = new Date();\n\n return addDateFilterBetween(definition, field, startTime, endTime);\n}\n\n/**\n * Adds a filter for a date between two dates (inclusive of both dates).\n *\n * @param {string} field The field key name.\n * @param {Date} d1 The start date.\n * @param {Date} d2 The end date.\n */\nexport function addDateFilterBetween(definition: SearchRequest, field: string, d1: Date, d2: Date): SearchRequest {\n definition = clearFiltersOnField(definition, field);\n definition = addDateFilterImpl(definition, field, Operator.GREATER_THAN_OR_EQUALS, d1);\n definition = addDateFilterImpl(definition, field, Operator.LESS_THAN_OR_EQUALS, d2);\n return definition;\n}\n\n/**\n * Adds a filter for a date before a certain date/time.\n *\n * @param {string} field The field key name.\n * @param {Operator} op The date/time operation.\n * @param {Date} value The date.\n */\nfunction addDateFilterImpl(definition: SearchRequest, field: string, op: Operator, value: Date): SearchRequest {\n return addFilter(definition, field, op, value.toISOString());\n}\n\n/**\n * Adds a filter that constrains the specified field to \"missing\".\n *\n * @param {string} field The field key name.\n */\nexport function addMissingFilter(definition: SearchRequest, field: string, value = true): SearchRequest {\n return addFilter(definition, field, Operator.MISSING, value.toString());\n}\n\n/**\n * Sets the offset (starting at zero).\n *\n * @param {number} offset The offset number.\n */\nexport function setOffset(definition: SearchRequest, offset: number): SearchRequest {\n if (definition.offset === offset) {\n return definition;\n }\n return {\n ...definition,\n offset,\n name: undefined,\n };\n}\n\n/**\n * Creates a new search request with the search offset at the specified page.\n * @param definition The search definition.\n * @param page The new page number\n * @return The new search definition.\n */\nexport function setPage(definition: SearchRequest, page: number): SearchRequest {\n const count = definition.count ?? DEFAULT_SEARCH_COUNT;\n const newOffset = (page - 1) * count;\n return setOffset(definition, newOffset);\n}\n\n/**\n * Sorts the search by the specified key, and optional direction.\n * Direction defaults to ascending ('asc') if not specified.\n *\n * @param {string} sortField The sort key.\n */\nexport function setSort(definition: SearchRequest, sort: string, desc?: boolean): SearchRequest {\n if (sort === getSortField(definition) && desc !== undefined && desc === isSortDescending(definition)) {\n return definition;\n }\n return {\n ...definition,\n sortRules: [\n {\n code: sort,\n descending: !!desc,\n },\n ],\n name: undefined,\n };\n}\n\n/**\n * Toggles the sort of the search by key.\n * If the search is already sorted by the key, reverses the direction.\n * If the search is not sorted by the key, sort in ascending order.\n *\n * @param {string} key The field key name.\n */\nexport function toggleSort(definition: SearchRequest, key: string): SearchRequest {\n let desc = false;\n if (getSortField(definition) === key) {\n desc = !isSortDescending(definition);\n }\n return setSort(definition, key, desc);\n}\n\nexport function getSortField(definition: SearchRequest): string | undefined {\n const sortRules = definition.sortRules;\n if (!sortRules || sortRules.length === 0) {\n return undefined;\n }\n const field = sortRules[0].code;\n return field.startsWith('-') ? field.substr(1) : field;\n}\n\nexport function isSortDescending(definition: SearchRequest): boolean {\n const sortRules = definition.sortRules;\n if (!sortRules || sortRules.length === 0) {\n return false;\n }\n return !!sortRules[0].descending;\n}\n\n/**\n * Returns a list of operators for a search parameter.\n * @param searchParam The search parameter.\n * @returns The list of operators that can be used for the search parameter.\n */\nexport function getSearchOperators(searchParam: SearchParameter): Operator[] | undefined {\n return searchParamToOperators[searchParam.type as string];\n}\n\n/**\n * Returns a string representing the operation.\n *\n * @param {string} op The operation code.\n * @return {string} A display string for the operation.\n */\nexport function getOpString(op: Operator): string {\n return operatorNames[op] ?? '';\n}\n\n/**\n * Returns a field display name.\n * @param key The field key.\n * @returns The field display name.\n */\nexport function buildFieldNameString(key: string): string {\n let tmp = key;\n\n // If dot separated, only the last part\n if (tmp.includes('.')) {\n tmp = tmp.split('.').pop() as string;\n }\n\n // Special case for ID\n if (tmp === 'id') {\n return 'ID';\n }\n\n // Special case for Version ID\n if (tmp === 'versionId') {\n return 'Version ID';\n }\n\n // Remove choice of type\n tmp = tmp.replace('[x]', '');\n\n // Convert camel case to space separated\n tmp = tmp.replace(/([A-Z])/g, ' $1');\n\n // Convert dashes and underscores to spaces\n tmp = tmp.replace(/[-_]/g, ' ');\n\n // Normalize whitespace to single space character\n tmp = tmp.replace(/\\s+/g, ' ');\n\n // Trim\n tmp = tmp.trim();\n\n // Capitalize the first letter of each word\n return tmp.split(/\\s/).map(capitalize).join(' ');\n}\n\n/**\n * Returns a fragment to be displayed in the search table for the value.\n * @param resource The parent resource.\n * @param key The search code or FHIRPath expression.\n * @returns The fragment to display.\n */\nexport function renderValue(resource: Resource, field: SearchControlField): string | JSX.Element | null | undefined {\n const key = field.name;\n if (key === 'id') {\n return resource.id;\n }\n\n if (key === 'meta.versionId') {\n return resource.meta?.versionId;\n }\n\n if (key === '_lastUpdated') {\n return formatDateTime(resource.meta?.lastUpdated);\n }\n\n // Priority 1: ElementDefinition by exact match\n if (field.elementDefinition && `${resource.resourceType}.${field.name}` === field.elementDefinition.path) {\n return renderPropertyValue(resource, field.elementDefinition);\n }\n\n // Priority 2: SearchParameter by exact match\n if (field.searchParams && field.searchParams.length === 1 && field.name === field.searchParams[0].code) {\n return renderSearchParameterValue(resource, field.searchParams[0], field.elementDefinition);\n }\n\n // We don't know how to render this field definition\n return null;\n}\n\n/**\n * Returns a fragment to be displayed in the search table for a resource property.\n * @param resource The parent resource.\n * @param elementDefinition The property element definition.\n * @returns A React element or null.\n */\nfunction renderPropertyValue(resource: Resource, elementDefinition: ElementDefinition): JSX.Element | null {\n const path = elementDefinition.path?.split('.')?.pop()?.replaceAll('[x]', '') || '';\n const [value, propertyType] = getValueAndType({ type: resource.resourceType, value: resource }, path);\n if (!value) {\n return null;\n }\n\n return (\n <ResourcePropertyDisplay\n property={elementDefinition}\n propertyType={propertyType}\n value={value}\n maxWidth={200}\n ignoreMissingValues={true}\n link={false}\n />\n );\n}\n\n/**\n * Returns a fragment to be displayed in the search table for a search parameter.\n * @param resource The parent resource.\n * @param searchParam The search parameter.\n * @param elementDefinition Optional element definition.\n * @returns A React element or null.\n */\nfunction renderSearchParameterValue(\n resource: Resource,\n searchParam: SearchParameter,\n elementDefinition: ElementDefinition | undefined\n): JSX.Element | null {\n const value = evalFhirPathTyped(searchParam.expression as string, [{ type: resource.resourceType, value: resource }]);\n if (!value || value.length === 0) {\n return null;\n }\n\n if (elementDefinition) {\n return (\n <ResourcePropertyDisplay\n propertyType={value[0].type as PropertyType}\n value={value[0].value}\n maxWidth={200}\n ignoreMissingValues={true}\n link={false}\n />\n );\n }\n\n return (\n <>\n {value.map((v, index) => (\n <span key={`${index}-${value.length}`}>\n {typeof v === 'object' ? JSON.stringify(v) : (v as string | number)}\n </span>\n ))}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Modal, Button } from '@mantine/core';
|
|
2
2
|
import { stringify, globalSchema } from '@medplum/core';
|
|
3
3
|
import React, { useState, useRef, useEffect } from 'react';
|
|
4
|
-
import { buildFieldNameString } from '
|
|
4
|
+
import { buildFieldNameString } from '../SearchControl/SearchUtils.js';
|
|
5
5
|
|
|
6
6
|
function SearchFieldEditor(props) {
|
|
7
7
|
var _a;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchFieldEditor.js","sources":["../../../src/SearchFieldEditor/SearchFieldEditor.tsx"],"sourcesContent":["import { Button, Modal } from '@mantine/core';\nimport { globalSchema, SearchRequest, stringify, TypeSchema } from '@medplum/core';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { buildFieldNameString } from '../SearchControl/SearchUtils';\n\ninterface SearchFieldEditorProps {\n visible: boolean;\n search: SearchRequest;\n onOk: (search: SearchRequest) => void;\n onCancel: () => void;\n}\n\nexport function SearchFieldEditor(props: SearchFieldEditorProps): JSX.Element | null {\n const [state, setState] = useState({\n search: JSON.parse(stringify(props.search)) as SearchRequest,\n });\n\n const availableRef = useRef<HTMLSelectElement>(null);\n const selectedRef = useRef<HTMLSelectElement>(null);\n\n useEffect(() => {\n setState({ search: props.search });\n }, [props.search]);\n\n /**\n * Handles a key down event on the \"available\" field.\n * If the user presses enter, it is a shortcut for the \"Add\" button.\n *\n * @param {KeyboardEvent} e The keyboard event.\n */\n function handleAvailableKeyDown(e: React.KeyboardEvent): void {\n if (e.key === 'Enter') {\n onAddField();\n }\n }\n\n /**\n * Handles a double click on the \"available\" field.\n * If the user double clicks an entry, it is a shortcut for the \"Add\" button.\n */\n function handleAvailableDoubleClick(): void {\n onAddField();\n }\n\n /**\n * Handles a key down event on the \"available\" field.\n * If the user presses enter, it is a shortcut for the \"Add\" button.\n *\n * @param {KeyboardEvent} e The keyboard event.\n */\n function handleSelectedKeyDown(e: React.KeyboardEvent): void {\n if (e.key === 'Enter') {\n onRemoveField();\n }\n }\n\n /**\n * Handles a double click on the \"available\" field.\n * If the user double clicks an entry, it is a shortcut for the \"Add\" button.\n */\n function handleSelectedDoubleClick(): void {\n onRemoveField();\n }\n\n /**\n * Handles a click on the \"Add\" button.\n * Moves the \"available\" selection into the \"selected\" list.\n */\n function onAddField(): void {\n const currentField = state.search.fields ?? [];\n const key = availableRef.current?.value;\n if (key) {\n const newFields = [...currentField, key];\n setState({\n search: {\n ...state.search,\n fields: newFields,\n },\n });\n }\n }\n\n /**\n * Handles a click on the \"Remove\" button.\n * Moves the \"selected\" selection into the \"available\" list.\n */\n function onRemoveField(): void {\n const currentField = state.search.fields ?? [];\n const key = selectedRef.current?.value;\n if (key) {\n const newFields = [...currentField];\n newFields.splice(newFields.indexOf(key), 1);\n setState({\n search: {\n ...state.search,\n fields: newFields,\n },\n });\n }\n }\n\n /**\n * Handles a click on the \"Up\" button.\n * Moves the selection up one position in the list.\n */\n function onMoveUp(): void {\n const currentField = state.search.fields ?? [];\n const field = selectedRef.current?.value;\n if (field) {\n const newFields = [...currentField];\n const index = newFields.indexOf(field);\n swapFields(newFields, index, index - 1);\n\n setState({\n search: {\n ...state.search,\n fields: newFields,\n },\n });\n }\n }\n\n /**\n * Handles a click on the \"Down\" button.\n * Moves the selection down one position in the list.\n */\n function onMoveDown(): void {\n const currentField = state.search.fields ?? [];\n const field = selectedRef.current?.value;\n if (field) {\n const newFields = [...currentField];\n const index = newFields.indexOf(field);\n swapFields(newFields, index, index + 1);\n\n setState({\n search: {\n ...state.search,\n fields: newFields,\n },\n });\n }\n }\n\n /**\n * Swaps two fields in the search.\n *\n * @param {number} i The index of the first field.\n * @param {number} j The index of the second field.\n */\n function swapFields(fields: string[], i: number, j: number): void {\n const temp = fields[i];\n fields[i] = fields[j];\n fields[j] = temp;\n }\n\n if (!props.visible) {\n return null;\n }\n\n const resourceType = props.search.resourceType;\n const typeDef = globalSchema.types[resourceType];\n\n const selected = state.search.fields ?? [];\n const available = getFieldsList(typeDef)\n .filter((field) => !selected?.includes(field))\n .sort();\n\n return (\n <Modal title=\"Fields\" closeButtonLabel=\"Close\" opened={props.visible} onClose={props.onCancel}>\n <div>\n <table style={{ margin: 'auto' }}>\n <thead>\n <tr>\n <th colSpan={2} align=\"center\">\n Available\n </th>\n <th colSpan={2} align=\"center\">\n Selected\n </th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td colSpan={2} align=\"center\">\n <select\n ref={availableRef}\n size={15}\n tabIndex={1}\n style={{ width: '200px' }}\n onKeyDown={(e) => handleAvailableKeyDown(e)}\n onDoubleClick={() => handleAvailableDoubleClick()}\n data-testid=\"available\"\n >\n {available.map((key) => (\n <option key={key} value={key}>\n {buildFieldNameString(key)}\n </option>\n ))}\n </select>\n </td>\n <td colSpan={2} align=\"center\">\n <select\n ref={selectedRef}\n size={15}\n tabIndex={4}\n style={{ width: '200px' }}\n onKeyDown={(e) => handleSelectedKeyDown(e)}\n onDoubleClick={() => handleSelectedDoubleClick()}\n data-testid=\"selected\"\n >\n {selected.map((key) => (\n <option key={key} value={key}>\n {buildFieldNameString(key)}\n </option>\n ))}\n </select>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td align=\"center\">\n <Button compact variant=\"outline\" onClick={onAddField}>\n Add\n </Button>\n </td>\n <td align=\"center\">\n <Button compact variant=\"outline\" onClick={onRemoveField}>\n Remove\n </Button>\n </td>\n <td align=\"center\">\n <Button compact variant=\"outline\" onClick={onMoveUp}>\n Up\n </Button>\n </td>\n <td align=\"center\">\n <Button compact variant=\"outline\" onClick={onMoveDown}>\n Down\n </Button>\n </td>\n </tr>\n </tfoot>\n </table>\n </div>\n <Button onClick={() => props.onOk(state.search)}>OK</Button>\n </Modal>\n );\n}\n\n/**\n * Returns a list of fields/columns available for a type.\n * The result is the union of properties and search parameters.\n * @param typeSchema The type definition.\n */\nfunction getFieldsList(typeSchema: TypeSchema): string[] {\n const result = [] as string[];\n const keys = new Set<string>();\n const names = new Set<string>();\n\n // Add properties first\n for (const key of Object.keys(typeSchema.properties)) {\n result.push(key);\n keys.add(key.toLowerCase());\n names.add(buildFieldNameString(key));\n }\n\n // Add search parameters if unique\n if (typeSchema.searchParams) {\n for (const code of Object.keys(typeSchema.searchParams)) {\n const name = buildFieldNameString(code);\n if (!keys.has(code) && !names.has(name)) {\n result.push(code);\n keys.add(code);\n names.add(buildFieldNameString(code));\n }\n }\n }\n\n return result;\n}\n"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Modal, Group, Button, NativeSelect } from '@mantine/core';
|
|
2
2
|
import { stringify, globalSchema } from '@medplum/core';
|
|
3
3
|
import React, { useState, useRef, useEffect } from 'react';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { setFilters, deleteFilter, buildFieldNameString, getOpString, getSearchOperators, addFilter } from '../SearchControl/SearchUtils.js';
|
|
5
|
+
import { SearchFilterValueDisplay } from '../SearchFilterValueDisplay/SearchFilterValueDisplay.js';
|
|
6
|
+
import { SearchFilterValueInput } from '../SearchFilterValueInput/SearchFilterValueInput.js';
|
|
7
7
|
|
|
8
8
|
function SearchFilterEditor(props) {
|
|
9
9
|
const [search, setSearch] = useState(JSON.parse(stringify(props.search)));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchFilterEditor.js","sources":["../../../src/SearchFilterEditor/SearchFilterEditor.tsx"],"sourcesContent":["import { Button, Group, Modal, NativeSelect } from '@mantine/core';\nimport { Filter, globalSchema, Operator, SearchRequest, stringify } from '@medplum/core';\nimport { SearchParameter } from '@medplum/fhirtypes';\nimport React, { useEffect, useRef, useState } from 'react';\nimport {\n addFilter,\n buildFieldNameString,\n deleteFilter,\n getOpString,\n getSearchOperators,\n setFilters,\n} from '../SearchControl/SearchUtils';\nimport { SearchFilterValueDisplay } from '../SearchFilterValueDisplay/SearchFilterValueDisplay';\nimport { SearchFilterValueInput } from '../SearchFilterValueInput/SearchFilterValueInput';\n\nexport interface SearchFilterEditorProps {\n visible: boolean;\n search: SearchRequest;\n onOk: (search: SearchRequest) => void;\n onCancel: () => void;\n}\n\nexport function SearchFilterEditor(props: SearchFilterEditorProps): JSX.Element | null {\n const [search, setSearch] = useState<SearchRequest>(JSON.parse(stringify(props.search)) as SearchRequest);\n const [editingIndex, setEditingIndex] = useState<number>(-1);\n\n const searchRef = useRef<SearchRequest>(search);\n searchRef.current = search;\n\n useEffect(() => {\n setSearch(JSON.parse(stringify(props.search)) as SearchRequest);\n }, [props.search]);\n\n function onAddFilter(filter: Filter): void {\n setSearch(addFilter(searchRef.current, filter.code, filter.operator, filter.value));\n }\n\n if (!props.visible) {\n return null;\n }\n\n const resourceType = props.search.resourceType;\n const searchParams = globalSchema.types[resourceType].searchParams as Record<string, SearchParameter>;\n const filters = search.filters || [];\n\n return (\n <Modal title=\"Filters\" closeButtonLabel=\"Close\" size={900} opened={props.visible} onClose={props.onCancel}>\n <div>\n <table>\n <colgroup>\n <col style={{ width: 200 }} />\n <col style={{ width: 200 }} />\n <col style={{ width: 380 }} />\n <col style={{ width: 120 }} />\n </colgroup>\n <thead>\n <tr>\n <th>Field</th>\n <th>Operation</th>\n <th>Value</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n {filters.map((filter: Filter, index: number) => {\n if (index === editingIndex) {\n return (\n <FilterRowInput\n key={`filter-${index}-${filters.length}-input`}\n resourceType={resourceType}\n searchParams={searchParams}\n defaultValue={filter}\n okText=\"Save\"\n onOk={(newFilter: Filter) => {\n const newFilters = [...filters];\n newFilters[index] = newFilter;\n setSearch(setFilters(searchRef.current, newFilters));\n setEditingIndex(-1);\n }}\n onCancel={() => setEditingIndex(-1)}\n />\n );\n } else {\n return (\n <FilterRowDisplay\n key={`filter-${index}-${filters.length}-display`}\n resourceType={resourceType}\n searchParams={searchParams}\n filter={filter}\n onEdit={() => setEditingIndex(index)}\n onDelete={() => setSearch(deleteFilter(searchRef.current, index))}\n />\n );\n }\n })}\n <FilterRowInput resourceType={resourceType} searchParams={searchParams} okText=\"Add\" onOk={onAddFilter} />\n </tbody>\n </table>\n </div>\n <Group position=\"right\" mt=\"xl\">\n <Button onClick={() => props.onOk(searchRef.current)}>OK</Button>\n </Group>\n </Modal>\n );\n}\n\ninterface FilterRowDisplayProps {\n readonly searchParams: Record<string, SearchParameter>;\n readonly resourceType: string;\n readonly filter: Filter;\n readonly onEdit: () => void;\n readonly onDelete: () => void;\n}\n\nfunction FilterRowDisplay(props: FilterRowDisplayProps): JSX.Element | null {\n const { filter } = props;\n return (\n <tr>\n <td>{buildFieldNameString(filter.code)}</td>\n <td>{getOpString(filter.operator)}</td>\n <td>\n <SearchFilterValueDisplay resourceType={props.resourceType} filter={filter} />\n </td>\n <td>\n <Button compact variant=\"outline\" onClick={props.onEdit}>\n Edit\n </Button>\n <Button compact variant=\"outline\" onClick={props.onDelete}>\n Delete\n </Button>\n </td>\n </tr>\n );\n}\n\ninterface FilterRowInputProps {\n resourceType: string;\n searchParams: Record<string, SearchParameter>;\n defaultValue?: Filter;\n okText: string;\n onOk: (value: Filter) => void;\n onCancel?: () => void;\n}\n\nfunction FilterRowInput(props: FilterRowInputProps): JSX.Element {\n const [value, setValue] = useState<Filter>(props.defaultValue ?? ({} as Filter));\n const valueRef = useRef<Filter>(value);\n valueRef.current = value;\n\n function setFilterCode(newCode: string): void {\n setValue({ ...valueRef.current, code: newCode });\n }\n\n function setFilterOperator(newOperator: Operator): void {\n setValue({ ...valueRef.current, operator: newOperator });\n }\n\n function setFilterValue(newFilterValue: string): void {\n setValue({ ...valueRef.current, value: newFilterValue });\n }\n\n const searchParam = props.searchParams[value.code];\n const operators = searchParam && getSearchOperators(searchParam);\n\n return (\n <tr>\n <td>\n <NativeSelect\n data-testid=\"filter-field\"\n defaultValue={valueRef.current.code}\n onChange={(e) => setFilterCode(e.currentTarget.value)}\n data={Object.keys(props.searchParams).map((param) => ({ value: param, label: buildFieldNameString(param) }))}\n />\n </td>\n <td>\n {operators && (\n <NativeSelect\n data-testid=\"filter-operation\"\n defaultValue={value.operator}\n onChange={(e) => setFilterOperator(e.currentTarget.value as Operator)}\n data={['', ...operators.map((op) => ({ value: op, label: getOpString(op) }))]}\n />\n )}\n </td>\n <td>\n {searchParam && value.operator && (\n <SearchFilterValueInput\n resourceType={props.resourceType}\n searchParam={searchParam}\n defaultValue={value.value}\n onChange={setFilterValue}\n />\n )}\n </td>\n <td>\n {value.code && value.operator && value.value && (\n <Button\n compact\n variant=\"outline\"\n onClick={() => {\n props.onOk(valueRef.current);\n setValue({} as Filter);\n }}\n >\n {props.okText}\n </Button>\n )}\n {props.onCancel && (\n <Button compact variant=\"outline\" onClick={props.onCancel}>\n Cancel\n </Button>\n )}\n </td>\n </tr>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
File without changes
|
package/dist/esm/{SearchFilterValueDialog.js → SearchFilterValueDialog/SearchFilterValueDialog.js}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Modal, Button } from '@mantine/core';
|
|
2
2
|
import React, { useState } from 'react';
|
|
3
|
-
import { Form } from '
|
|
4
|
-
import { SearchFilterValueInput } from '
|
|
3
|
+
import { Form } from '../Form/Form.js';
|
|
4
|
+
import { SearchFilterValueInput } from '../SearchFilterValueInput/SearchFilterValueInput.js';
|
|
5
5
|
|
|
6
6
|
function SearchFilterValueDialog(props) {
|
|
7
7
|
var _a;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchFilterValueDialog.js","sources":["../../../src/SearchFilterValueDialog/SearchFilterValueDialog.tsx"],"sourcesContent":["import { Button, Modal } from '@mantine/core';\nimport { Filter } from '@medplum/core';\nimport { SearchParameter } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\nimport { Form } from '../Form/Form';\nimport { SearchFilterValueInput } from '../SearchFilterValueInput/SearchFilterValueInput';\n\nexport interface SearchFilterValueDialogProps {\n title: string;\n visible: boolean;\n resourceType: string;\n searchParam?: SearchParameter;\n filter?: Filter;\n defaultValue?: string;\n onOk: (filter: Filter) => void;\n onCancel: () => void;\n}\n\nexport function SearchFilterValueDialog(props: SearchFilterValueDialogProps): JSX.Element | null {\n const [value, setValue] = useState<string>(props.defaultValue ?? '');\n\n if (!props.visible || !props.searchParam || !props.filter) {\n return null;\n }\n\n function onOk(): void {\n props.onOk({ ...(props.filter as Filter), value });\n }\n\n return (\n <Modal title={props.title} size=\"xl\" opened={props.visible} onClose={props.onCancel}>\n <div style={{ width: 500 }}>\n <Form onSubmit={onOk}>\n <SearchFilterValueInput\n resourceType={props.resourceType}\n searchParam={props.searchParam}\n defaultValue={value}\n autoFocus={true}\n onChange={setValue}\n />\n </Form>\n </div>\n <Button onClick={onOk}>OK</Button>\n </Modal>\n );\n}\n"],"names":[],"mappings":";;;;;AAkBM,SAAU,uBAAuB,CAAC,KAAmC,EAAA;;AACzE,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAS,CAAA,EAAA,GAAA,KAAK,CAAC,YAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC,CAAC;AAErE,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACzD,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;AAED,IAAA,SAAS,IAAI,GAAA;QACX,KAAK,CAAC,IAAI,CAAO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,CAAC,MAAiB,CAAA,EAAA,EAAE,KAAK,EAAA,CAAA,CAAG,CAAC;KACpD;IAED,QACE,KAAC,CAAA,aAAA,CAAA,KAAK,EAAC,EAAA,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAC,IAAI,EAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAA;AACjF,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAA;AACxB,YAAA,KAAA,CAAA,aAAA,CAAC,IAAI,EAAA,EAAC,QAAQ,EAAE,IAAI,EAAA;gBAClB,KAAC,CAAA,aAAA,CAAA,sBAAsB,EACrB,EAAA,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,YAAY,EAAE,KAAK,EACnB,SAAS,EAAE,IAAI,EACf,QAAQ,EAAE,QAAQ,EAClB,CAAA,CACG,CACH;QACN,KAAC,CAAA,aAAA,CAAA,MAAM,IAAC,OAAO,EAAE,IAAI,EAAa,EAAA,IAAA,CAAA,CAC5B,EACR;AACJ;;;;"}
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { globalSchema, getSearchParameterDetails, SearchParameterType, formatDateTime } from '@medplum/core';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { ResourceName } from '
|
|
3
|
+
import { ResourceName } from '../ResourceName/ResourceName.js';
|
|
4
4
|
|
|
5
5
|
function SearchFilterValueDisplay(props) {
|
|
6
6
|
var _a, _b;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchFilterValueDisplay.js","sources":["../../../src/SearchFilterValueDisplay/SearchFilterValueDisplay.tsx"],"sourcesContent":["import { Filter, formatDateTime, getSearchParameterDetails, globalSchema, SearchParameterType } from '@medplum/core';\nimport React from 'react';\nimport { ResourceName } from '../ResourceName/ResourceName';\n\nexport interface SearchFilterValueDisplayProps {\n readonly resourceType: string;\n readonly filter: Filter;\n}\n\nexport function SearchFilterValueDisplay(props: SearchFilterValueDisplayProps): JSX.Element {\n const { resourceType, filter } = props;\n\n const searchParam = globalSchema.types[resourceType]?.searchParams?.[filter.code];\n if (searchParam) {\n if (searchParam.type === 'reference') {\n return <ResourceName value={{ reference: filter.value }} />;\n }\n\n const searchParamDetails = getSearchParameterDetails(resourceType, searchParam);\n if (filter.code === '_lastUpdated' || searchParamDetails.type === SearchParameterType.DATETIME) {\n return <>{formatDateTime(filter.value)}</>;\n }\n }\n\n return <>{filter.value}</>;\n}\n"],"names":[],"mappings":";;;;AASM,SAAU,wBAAwB,CAAC,KAAoC,EAAA;;AAC3E,IAAA,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;AAEvC,IAAA,MAAM,WAAW,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,0CAAE,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAClF,IAAA,IAAI,WAAW,EAAE;AACf,QAAA,IAAI,WAAW,CAAC,IAAI,KAAK,WAAW,EAAE;AACpC,YAAA,OAAO,KAAC,CAAA,aAAA,CAAA,YAAY,EAAC,EAAA,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,GAAI,CAAC;AAC7D,SAAA;QAED,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAChF,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,IAAI,kBAAkB,CAAC,IAAI,KAAK,mBAAmB,CAAC,QAAQ,EAAE;YAC9F,OAAO,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAI,CAAC;AAC5C,SAAA;AACF,KAAA;AAED,IAAA,OAAO,KAAG,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAM,CAAC,KAAK,CAAI,CAAC;AAC7B;;;;"}
|
package/dist/esm/{SearchFilterValueInput.d.ts → SearchFilterValueInput/SearchFilterValueInput.d.ts}
RENAMED
|
File without changes
|
package/dist/esm/{SearchFilterValueInput.js → SearchFilterValueInput/SearchFilterValueInput.js}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { TextInput, Checkbox } from '@mantine/core';
|
|
2
2
|
import { getSearchParameterDetails, SearchParameterType } from '@medplum/core';
|
|
3
3
|
import React from 'react';
|
|
4
|
-
import { DateTimeInput } from '
|
|
5
|
-
import { QuantityInput } from '
|
|
6
|
-
import { ReferenceInput } from '
|
|
4
|
+
import { DateTimeInput } from '../DateTimeInput/DateTimeInput.js';
|
|
5
|
+
import { QuantityInput } from '../QuantityInput/QuantityInput.js';
|
|
6
|
+
import { ReferenceInput } from '../ReferenceInput/ReferenceInput.js';
|
|
7
7
|
|
|
8
8
|
function SearchFilterValueInput(props) {
|
|
9
9
|
var _a;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchFilterValueInput.js","sources":["../../../src/SearchFilterValueInput/SearchFilterValueInput.tsx"],"sourcesContent":["import { Checkbox, TextInput } from '@mantine/core';\nimport { getSearchParameterDetails, SearchParameterType } from '@medplum/core';\nimport { Quantity, Reference, SearchParameter } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { DateTimeInput } from '../DateTimeInput/DateTimeInput';\nimport { QuantityInput } from '../QuantityInput/QuantityInput';\nimport { ReferenceInput } from '../ReferenceInput/ReferenceInput';\n\nexport interface SearchFilterValueInputProps {\n resourceType: string;\n searchParam: SearchParameter;\n defaultValue?: string;\n autoFocus?: boolean;\n onChange: (value: string) => void;\n}\n\nexport function SearchFilterValueInput(props: SearchFilterValueInputProps): JSX.Element | null {\n const details = getSearchParameterDetails(props.resourceType, props.searchParam);\n const name = 'filter-value';\n\n switch (details.type) {\n case SearchParameterType.REFERENCE:\n return (\n <ReferenceInput\n name={name}\n defaultValue={{ reference: props.defaultValue }}\n targetTypes={props.searchParam?.target}\n onChange={(newReference: Reference | undefined) => {\n if (newReference) {\n props.onChange(newReference.reference as string);\n } else {\n props.onChange('');\n }\n }}\n />\n );\n\n case SearchParameterType.BOOLEAN:\n return (\n <Checkbox\n name={name}\n data-testid={name}\n defaultChecked={props.defaultValue === 'true'}\n onChange={(e) => props.onChange(e.currentTarget.checked.toString())}\n />\n );\n\n case SearchParameterType.DATE:\n return (\n <TextInput\n type=\"date\"\n name={name}\n data-testid={name}\n defaultValue={props.defaultValue}\n onChange={(e) => props.onChange(e.currentTarget.value)}\n />\n );\n\n case SearchParameterType.DATETIME:\n return <DateTimeInput name={name} defaultValue={props.defaultValue} onChange={props.onChange} />;\n\n case SearchParameterType.NUMBER:\n return (\n <TextInput\n type=\"number\"\n name={name}\n data-testid={name}\n defaultValue={props.defaultValue}\n onChange={(e) => props.onChange(e.currentTarget.value)}\n />\n );\n\n case SearchParameterType.QUANTITY:\n return (\n <QuantityInput\n name={name}\n defaultValue={tryParseQuantity(props.defaultValue)}\n onChange={(newQuantity: Quantity | undefined) => {\n if (newQuantity) {\n props.onChange(`${newQuantity.value}`);\n } else {\n props.onChange('');\n }\n }}\n />\n );\n\n default:\n return (\n <TextInput\n name={name}\n data-testid={name}\n defaultValue={props.defaultValue}\n autoFocus={props.autoFocus}\n onChange={(e) => props.onChange(e.currentTarget.value)}\n placeholder=\"Search value\"\n />\n );\n }\n}\n\nfunction tryParseQuantity(value: string | undefined): Quantity | undefined {\n if (value) {\n const [valueString, systemString, unitString] = value.split('|');\n if (valueString) {\n return {\n value: parseFloat(valueString),\n system: systemString,\n unit: unitString,\n };\n }\n }\n return undefined;\n}\n"],"names":[],"mappings":";;;;;;;AAgBM,SAAU,sBAAsB,CAAC,KAAkC,EAAA;;AACvE,IAAA,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,cAAc,CAAC;IAE5B,QAAQ,OAAO,CAAC,IAAI;QAClB,KAAK,mBAAmB,CAAC,SAAS;AAChC,YAAA,QACE,KAAA,CAAA,aAAA,CAAC,cAAc,EAAA,EACb,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,YAAY,EAAE,EAC/C,WAAW,EAAE,CAAA,EAAA,GAAA,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EACtC,QAAQ,EAAE,CAAC,YAAmC,KAAI;AAChD,oBAAA,IAAI,YAAY,EAAE;AAChB,wBAAA,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAmB,CAAC,CAAC;AAClD,qBAAA;AAAM,yBAAA;AACL,wBAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpB,qBAAA;iBACF,EAAA,CACD,EACF;QAEJ,KAAK,mBAAmB,CAAC,OAAO;AAC9B,YAAA,QACE,KAAC,CAAA,aAAA,CAAA,QAAQ,IACP,IAAI,EAAE,IAAI,EACG,aAAA,EAAA,IAAI,EACjB,cAAc,EAAE,KAAK,CAAC,YAAY,KAAK,MAAM,EAC7C,QAAQ,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAA,CACnE,EACF;QAEJ,KAAK,mBAAmB,CAAC,IAAI;AAC3B,YAAA,QACE,KAAC,CAAA,aAAA,CAAA,SAAS,EACR,EAAA,IAAI,EAAC,MAAM,EACX,IAAI,EAAE,IAAI,EACG,aAAA,EAAA,IAAI,EACjB,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,QAAQ,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAA,CACtD,EACF;QAEJ,KAAK,mBAAmB,CAAC,QAAQ;AAC/B,YAAA,OAAO,oBAAC,aAAa,EAAA,EAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAI,CAAC;QAEnG,KAAK,mBAAmB,CAAC,MAAM;AAC7B,YAAA,QACE,KAAC,CAAA,aAAA,CAAA,SAAS,EACR,EAAA,IAAI,EAAC,QAAQ,EACb,IAAI,EAAE,IAAI,EACG,aAAA,EAAA,IAAI,EACjB,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,QAAQ,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAA,CACtD,EACF;QAEJ,KAAK,mBAAmB,CAAC,QAAQ;YAC/B,QACE,oBAAC,aAAa,EAAA,EACZ,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,EAClD,QAAQ,EAAE,CAAC,WAAiC,KAAI;AAC9C,oBAAA,IAAI,WAAW,EAAE;wBACf,KAAK,CAAC,QAAQ,CAAC,CAAA,EAAG,WAAW,CAAC,KAAK,CAAE,CAAA,CAAC,CAAC;AACxC,qBAAA;AAAM,yBAAA;AACL,wBAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpB,qBAAA;iBACF,EAAA,CACD,EACF;AAEJ,QAAA;YACE,QACE,oBAAC,SAAS,EAAA,EACR,IAAI,EAAE,IAAI,iBACG,IAAI,EACjB,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,QAAQ,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EACtD,WAAW,EAAC,cAAc,EAC1B,CAAA,EACF;AACL,KAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAyB,EAAA;AACjD,IAAA,IAAI,KAAK,EAAE;AACT,QAAA,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjE,QAAA,IAAI,WAAW,EAAE;YACf,OAAO;AACL,gBAAA,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC;AAC9B,gBAAA,MAAM,EAAE,YAAY;AACpB,gBAAA,IAAI,EAAE,UAAU;aACjB,CAAC;AACH,SAAA;AACF,KAAA;AACD,IAAA,OAAO,SAAS,CAAC;AACnB;;;;"}
|
|
File without changes
|
|
@@ -2,7 +2,7 @@ import { Menu } from '@mantine/core';
|
|
|
2
2
|
import { Operator } from '@medplum/core';
|
|
3
3
|
import { IconSortAscending, IconSortDescending, IconEqual, IconEqualNot, IconMathLower, IconMathGreater, IconBracketsContain, IconCalendar, IconSettings, IconBucket, IconBucketOff, IconBleach, IconBleachOff, IconX } from '@tabler/icons';
|
|
4
4
|
import React from 'react';
|
|
5
|
-
import { buildFieldNameString, addTomorrowFilter, addTodayFilter, addYesterdayFilter, addNextMonthFilter, addThisMonthFilter, addLastMonthFilter, addYearToDateFilter, addMissingFilter, setSort, clearFiltersOnField } from '
|
|
5
|
+
import { buildFieldNameString, addTomorrowFilter, addTodayFilter, addYesterdayFilter, addNextMonthFilter, addThisMonthFilter, addLastMonthFilter, addYearToDateFilter, addMissingFilter, setSort, clearFiltersOnField } from '../SearchControl/SearchUtils.js';
|
|
6
6
|
|
|
7
7
|
function SearchPopupMenu(props) {
|
|
8
8
|
if (!props.searchParams) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchPopupMenu.js","sources":["../../../src/SearchPopupMenu/SearchPopupMenu.tsx"],"sourcesContent":["import { Menu } from '@mantine/core';\nimport { Filter, Operator, SearchRequest } from '@medplum/core';\nimport { SearchParameter } from '@medplum/fhirtypes';\nimport {\n IconBleach,\n IconBleachOff,\n IconBracketsContain,\n IconBucket,\n IconBucketOff,\n IconCalendar,\n IconEqual,\n IconEqualNot,\n IconMathGreater,\n IconMathLower,\n IconSettings,\n IconSortAscending,\n IconSortDescending,\n IconX,\n} from '@tabler/icons';\nimport React from 'react';\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 '../SearchControl/SearchUtils';\n\nexport interface SearchPopupMenuProps {\n search: SearchRequest;\n searchParams?: SearchParameter[];\n onPrompt: (searchParam: SearchParameter, filter: Filter) => void;\n onChange: (definition: SearchRequest) => 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 // If there is only one search parameter, then show it directly\n if (props.searchParams.length === 1) {\n return (\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 );\n }\n\n // Otherwise, show a menu, with each search parameter as a sub menu\n return (\n <Menu.Dropdown>\n {props.searchParams.map((searchParam) => (\n <Menu.Item key={searchParam.code}>{buildFieldNameString(searchParam.code as string)}</Menu.Item>\n ))}\n </Menu.Dropdown>\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 <Menu.Dropdown>\n <Menu.Item icon={<IconSortAscending size={14} />} onClick={() => props.onSort(searchParam, false)}>\n Sort Oldest to Newest\n </Menu.Item>\n <Menu.Item icon={<IconSortDescending size={14} />} onClick={() => props.onSort(searchParam, true)}>\n Sort Newest to Oldest\n </Menu.Item>\n <Menu.Divider />\n <Menu.Item icon={<IconEqual size={14} />} onClick={() => props.onPrompt(searchParam, Operator.EQUALS)}>\n Equals...\n </Menu.Item>\n <Menu.Item icon={<IconEqualNot size={14} />} onClick={() => props.onPrompt(searchParam, Operator.NOT_EQUALS)}>\n Does not equal...\n </Menu.Item>\n <Menu.Divider />\n <Menu.Item icon={<IconMathLower size={14} />} onClick={() => props.onPrompt(searchParam, Operator.ENDS_BEFORE)}>\n Before...\n </Menu.Item>\n <Menu.Item\n icon={<IconMathGreater size={14} />}\n onClick={() => props.onPrompt(searchParam, Operator.STARTS_AFTER)}\n >\n After...\n </Menu.Item>\n <Menu.Item icon={<IconBracketsContain size={14} />} onClick={() => props.onPrompt(searchParam, Operator.EQUALS)}>\n Between...\n </Menu.Item>\n <Menu.Divider />\n <Menu.Item\n icon={<IconCalendar size={14} />}\n onClick={() => props.onChange(addTomorrowFilter(props.search, code))}\n >\n Tomorrow\n </Menu.Item>\n <Menu.Item icon={<IconCalendar size={14} />} onClick={() => props.onChange(addTodayFilter(props.search, code))}>\n Today\n </Menu.Item>\n <Menu.Item\n icon={<IconCalendar size={14} />}\n onClick={() => props.onChange(addYesterdayFilter(props.search, code))}\n >\n Yesterday\n </Menu.Item>\n <Menu.Divider />\n <Menu.Item\n icon={<IconCalendar size={14} />}\n onClick={() => props.onChange(addNextMonthFilter(props.search, code))}\n >\n Next Month\n </Menu.Item>\n <Menu.Item\n icon={<IconCalendar size={14} />}\n onClick={() => props.onChange(addThisMonthFilter(props.search, code))}\n >\n This Month\n </Menu.Item>\n <Menu.Item\n icon={<IconCalendar size={14} />}\n onClick={() => props.onChange(addLastMonthFilter(props.search, code))}\n >\n Last Month\n </Menu.Item>\n <Menu.Divider />\n <Menu.Item\n icon={<IconCalendar size={14} />}\n onClick={() => props.onChange(addYearToDateFilter(props.search, code))}\n >\n Year to date\n </Menu.Item>\n <CommonMenuItems {...props} />\n </Menu.Dropdown>\n );\n}\n\nfunction NumericFilterSubMenu(props: SearchPopupSubMenuProps): JSX.Element {\n const { searchParam } = props;\n return (\n <Menu.Dropdown>\n <Menu.Item icon={<IconSortAscending size={14} />} onClick={() => props.onSort(searchParam, false)}>\n Sort Smallest to Largest\n </Menu.Item>\n <Menu.Item icon={<IconSortDescending size={14} />} onClick={() => props.onSort(searchParam, true)}>\n Sort Largest to Smallest\n </Menu.Item>\n <Menu.Divider />\n <Menu.Item icon={<IconEqual size={14} />} onClick={() => props.onPrompt(searchParam, Operator.EQUALS)}>\n Equals...\n </Menu.Item>\n <Menu.Item icon={<IconEqualNot size={14} />} onClick={() => props.onPrompt(searchParam, Operator.NOT_EQUALS)}>\n Does not equal...\n </Menu.Item>\n <Menu.Divider />\n <Menu.Item\n icon={<IconMathGreater size={14} />}\n onClick={() => props.onPrompt(searchParam, Operator.GREATER_THAN)}\n >\n Greater than...\n </Menu.Item>\n <Menu.Item\n icon={<IconSettings size={14} />}\n onClick={() => props.onPrompt(searchParam, Operator.GREATER_THAN_OR_EQUALS)}\n >\n Greater than or equal to...\n </Menu.Item>\n <Menu.Item icon={<IconMathLower size={14} />} onClick={() => props.onPrompt(searchParam, Operator.LESS_THAN)}>\n Less than...\n </Menu.Item>\n <Menu.Item\n icon={<IconSettings size={14} />}\n onClick={() => props.onPrompt(searchParam, Operator.LESS_THAN_OR_EQUALS)}\n >\n Less than or equal to...\n </Menu.Item>\n <CommonMenuItems {...props} />\n </Menu.Dropdown>\n );\n}\n\nfunction ReferenceFilterSubMenu(props: SearchPopupSubMenuProps): JSX.Element {\n const { searchParam } = props;\n return (\n <Menu.Dropdown>\n <Menu.Item icon={<IconEqual size={14} />} onClick={() => props.onPrompt(searchParam, Operator.EQUALS)}>\n Equals...\n </Menu.Item>\n <Menu.Item icon={<IconEqualNot size={14} />} onClick={() => props.onPrompt(searchParam, Operator.NOT)}>\n Does not equal...\n </Menu.Item>\n <CommonMenuItems {...props} />\n </Menu.Dropdown>\n );\n}\n\nfunction TextFilterSubMenu(props: SearchPopupSubMenuProps): JSX.Element {\n const { searchParam } = props;\n return (\n <Menu.Dropdown>\n <Menu.Item icon={<IconSortAscending size={14} />} onClick={() => props.onSort(searchParam, false)}>\n Sort A to Z\n </Menu.Item>\n <Menu.Item icon={<IconSortDescending size={14} />} onClick={() => props.onSort(searchParam, true)}>\n Sort Z to A\n </Menu.Item>\n <Menu.Divider />\n <Menu.Item icon={<IconEqual size={14} />} onClick={() => props.onPrompt(searchParam, Operator.EQUALS)}>\n Equals...\n </Menu.Item>\n <Menu.Item icon={<IconEqualNot size={14} />} onClick={() => props.onPrompt(searchParam, Operator.NOT)}>\n Does not equal...\n </Menu.Item>\n <Menu.Divider />\n <Menu.Item icon={<IconBucket size={14} />} onClick={() => props.onPrompt(searchParam, Operator.CONTAINS)}>\n Contains...\n </Menu.Item>\n <Menu.Item icon={<IconBucketOff size={14} />} onClick={() => props.onPrompt(searchParam, Operator.EQUALS)}>\n Does not contain...\n </Menu.Item>\n <CommonMenuItems {...props} />\n </Menu.Dropdown>\n );\n}\n\nfunction CommonMenuItems(props: SearchPopupSubMenuProps): JSX.Element {\n const { searchParam } = props;\n const code = searchParam.code as string;\n return (\n <>\n <Menu.Divider />\n <Menu.Item icon={<IconBleach size={14} />} onClick={() => props.onChange(addMissingFilter(props.search, code))}>\n Missing\n </Menu.Item>\n <Menu.Item\n icon={<IconBleachOff size={14} />}\n onClick={() => props.onChange(addMissingFilter(props.search, code, false))}\n >\n Not missing\n </Menu.Item>\n <Menu.Divider />\n <Menu.Item icon={<IconX size={14} />} onClick={() => props.onClear(searchParam)}>\n Clear filters\n </Menu.Item>\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/{ServiceRequestTimeline.d.ts → ServiceRequestTimeline/ServiceRequestTimeline.d.ts}
RENAMED
|
File without changes
|
package/dist/esm/{ServiceRequestTimeline.js → ServiceRequestTimeline/ServiceRequestTimeline.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getReferenceString, createReference } from '@medplum/core';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { ResourceTimeline } from '
|
|
3
|
+
import { ResourceTimeline } from '../ResourceTimeline/ResourceTimeline.js';
|
|
4
4
|
|
|
5
5
|
function ServiceRequestTimeline(props) {
|
|
6
6
|
return (React.createElement(ResourceTimeline, { value: props.serviceRequest, buildSearchRequests: (resource) => ({
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceRequestTimeline.js","sources":["../../../src/ServiceRequestTimeline/ServiceRequestTimeline.tsx"],"sourcesContent":["import { createReference, getReferenceString, ProfileResource } from '@medplum/core';\nimport { Attachment, Group, Patient, Reference, Resource, ServiceRequest } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { ResourceTimeline } from '../ResourceTimeline/ResourceTimeline';\n\nexport interface ServiceRequestTimelineProps {\n serviceRequest: ServiceRequest | Reference<ServiceRequest>;\n}\n\nexport function ServiceRequestTimeline(props: ServiceRequestTimelineProps): JSX.Element {\n return (\n <ResourceTimeline\n value={props.serviceRequest}\n buildSearchRequests={(resource: Resource) => ({\n resourceType: 'Bundle',\n type: 'batch',\n entry: [\n {\n request: {\n method: 'GET',\n url: `${getReferenceString(resource)}/_history`,\n },\n },\n {\n request: {\n method: 'GET',\n url: `Communication?based-on=${getReferenceString(resource)}&_sort=-_lastUpdated`,\n },\n },\n {\n request: {\n method: 'GET',\n url: `Media?_count=100&based-on=${getReferenceString(resource)}&_sort=-_lastUpdated`,\n },\n },\n {\n request: {\n method: 'GET',\n url: `DiagnosticReport?based-on=${getReferenceString(resource)}&_sort=-_lastUpdated`,\n },\n },\n ],\n })}\n createCommunication={(resource: ServiceRequest, sender: ProfileResource, text: string) => ({\n resourceType: 'Communication',\n status: 'completed',\n basedOn: [createReference(resource)],\n subject: resource.subject as Reference<Group | Patient>,\n sender: createReference(sender),\n sent: new Date().toISOString(),\n payload: [{ contentString: text }],\n })}\n createMedia={(resource: ServiceRequest, operator: ProfileResource, content: Attachment) => ({\n resourceType: 'Media',\n status: 'completed',\n basedOn: [createReference(resource)],\n subject: resource.subject,\n operator: createReference(operator),\n issued: new Date().toISOString(),\n content,\n })}\n />\n );\n}\n"],"names":[],"mappings":";;;;AASM,SAAU,sBAAsB,CAAC,KAAkC,EAAA;AACvE,IAAA,QACE,KAAC,CAAA,aAAA,CAAA,gBAAgB,EACf,EAAA,KAAK,EAAE,KAAK,CAAC,cAAc,EAC3B,mBAAmB,EAAE,CAAC,QAAkB,MAAM;AAC5C,YAAA,YAAY,EAAE,QAAQ;AACtB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE;AACL,gBAAA;AACE,oBAAA,OAAO,EAAE;AACP,wBAAA,MAAM,EAAE,KAAK;AACb,wBAAA,GAAG,EAAE,CAAG,EAAA,kBAAkB,CAAC,QAAQ,CAAC,CAAW,SAAA,CAAA;AAChD,qBAAA;AACF,iBAAA;AACD,gBAAA;AACE,oBAAA,OAAO,EAAE;AACP,wBAAA,MAAM,EAAE,KAAK;AACb,wBAAA,GAAG,EAAE,CAA0B,uBAAA,EAAA,kBAAkB,CAAC,QAAQ,CAAC,CAAsB,oBAAA,CAAA;AAClF,qBAAA;AACF,iBAAA;AACD,gBAAA;AACE,oBAAA,OAAO,EAAE;AACP,wBAAA,MAAM,EAAE,KAAK;AACb,wBAAA,GAAG,EAAE,CAA6B,0BAAA,EAAA,kBAAkB,CAAC,QAAQ,CAAC,CAAsB,oBAAA,CAAA;AACrF,qBAAA;AACF,iBAAA;AACD,gBAAA;AACE,oBAAA,OAAO,EAAE;AACP,wBAAA,MAAM,EAAE,KAAK;AACb,wBAAA,GAAG,EAAE,CAA6B,0BAAA,EAAA,kBAAkB,CAAC,QAAQ,CAAC,CAAsB,oBAAA,CAAA;AACrF,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA,CAAC,EACF,mBAAmB,EAAE,CAAC,QAAwB,EAAE,MAAuB,EAAE,IAAY,MAAM;AACzF,YAAA,YAAY,EAAE,eAAe;AAC7B,YAAA,MAAM,EAAE,WAAW;AACnB,YAAA,OAAO,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACpC,OAAO,EAAE,QAAQ,CAAC,OAAqC;AACvD,YAAA,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;AAC/B,YAAA,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC9B,YAAA,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACnC,SAAA,CAAC,EACF,WAAW,EAAE,CAAC,QAAwB,EAAE,QAAyB,EAAE,OAAmB,MAAM;AAC1F,YAAA,YAAY,EAAE,OAAO;AACrB,YAAA,MAAM,EAAE,WAAW;AACnB,YAAA,OAAO,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACpC,OAAO,EAAE,QAAQ,CAAC,OAAO;AACzB,YAAA,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC;AACnC,YAAA,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAChC,OAAO;SACR,CAAC,EAAA,CACF,EACF;AACJ;;;;"}
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusBadge.js","sources":["../../../src/StatusBadge/StatusBadge.tsx"],"sourcesContent":["import { Badge, DefaultMantineColor } from '@mantine/core';\nimport React from 'react';\n\n/*\n * Request status: https://hl7.org/fhir/valueset-request-status.html\n * draft, active, on-hold, revoked, completed, entered-in-error, unknown\n *\n * Publication status: https://hl7.org/fhir/valueset-publication-status.html\n * draft, active, retired, unknown\n *\n * Observation status: https://www.hl7.org/fhir/valueset-observation-status.html\n * registered, preliminary, final, amended, cancelled, entered-in-error, unknown\n *\n * DiagnosticReport status: https://hl7.org/fhir/valueset-diagnostic-report-status.html\n * registered, preliminary, final, amended, corrected, appended, cancelled, entered-in-error, unknown\n *\n * Task status: https://hl7.org/fhir/valueset-task-status.html\n * draft, requested, received, accepted, rejected, ready, cancelled, in-progress, on-hold, failed, completed, entered-in-error\n *\n * Appointment status: https://www.hl7.org/fhir/valueset-appointmentstatus.html\n * proposed, pending, booked, arrived, fulfilled, cancelled, noshow, entered-in-error, chcked-in, waitlist\n */\n\nconst statusToColor: Record<string, DefaultMantineColor> = {\n draft: 'blue',\n active: 'blue',\n 'on-hold': 'yellow',\n revoked: 'red',\n completed: 'green',\n 'entered-in-error': 'red',\n unknown: 'gray',\n retired: 'gray',\n registered: 'blue',\n preliminary: 'blue',\n final: 'green',\n amended: 'yellow',\n cancelled: 'red',\n requested: 'blue',\n received: 'blue',\n accepted: 'blue',\n rejected: 'red',\n ready: 'blue',\n 'in-progress': 'blue',\n failed: 'red',\n proposed: 'blue',\n pending: 'blue',\n booked: 'blue',\n arrived: 'blue',\n fulfilled: 'green',\n noshow: 'red',\n 'checked-in': 'blue',\n waitlist: 'gray',\n routine: 'gray',\n urgent: 'red',\n asap: 'red',\n stat: 'red',\n};\n\nexport interface StatusBadgeProps {\n readonly status: string;\n}\n\nexport function StatusBadge(props: StatusBadgeProps): JSX.Element {\n return <Badge color={statusToColor[props.status]}>{props.status}</Badge>;\n}\n"],"names":[],"mappings":";;;AAGA;;;;;;;;;;;;;;;;;;AAkBG;AAEH,MAAM,aAAa,GAAwC;AACzD,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,MAAM,EAAE,MAAM;AACd,IAAA,SAAS,EAAE,QAAQ;AACnB,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,SAAS,EAAE,OAAO;AAClB,IAAA,kBAAkB,EAAE,KAAK;AACzB,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,WAAW,EAAE,MAAM;AACnB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,OAAO,EAAE,QAAQ;AACjB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,SAAS,EAAE,MAAM;AACjB,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,aAAa,EAAE,MAAM;AACrB,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,MAAM,EAAE,MAAM;AACd,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,SAAS,EAAE,OAAO;AAClB,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,YAAY,EAAE,MAAM;AACpB,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,IAAI,EAAE,KAAK;CACZ,CAAC;AAMI,SAAU,WAAW,CAAC,KAAuB,EAAA;AACjD,IAAA,OAAO,oBAAC,KAAK,EAAA,EAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,EAAG,EAAA,KAAK,CAAC,MAAM,CAAS,CAAC;AAC3E;;;;"}
|
|
File without changes
|
|
File without changes
|