@medplum/react 2.0.1 → 2.0.3
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/DiagnosticReportDisplay/DiagnosticReportDisplay.d.ts +2 -0
- package/dist/cjs/DiagnosticReportDisplay/DiagnosticReportDisplay.stories.d.ts +1 -0
- package/dist/cjs/MedplumProvider/MedplumProvider.d.ts +8 -0
- package/dist/cjs/NoteDisplay/NoteDisplay.d.ts +6 -0
- package/dist/cjs/NoteDisplay/NoteDisplay.stories.d.ts +7 -0
- package/dist/cjs/OperationOutcomeAlert/OperationOutcomeAlert.d.ts +2 -1
- package/dist/cjs/QuantityInput/QuantityInput.d.ts +1 -0
- package/dist/cjs/QuantityInput/QuantityInput.stories.d.ts +7 -0
- package/dist/cjs/ResourceTable/ResourceTable.d.ts +13 -0
- package/dist/cjs/ResourceTimeline/ResourceTimeline.d.ts +2 -2
- package/dist/cjs/index.cjs +917 -230
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.min.cjs +1 -1
- package/dist/cjs/useResource/useResource.d.ts +2 -2
- package/dist/cjs/utils/date.d.ts +2 -1
- package/dist/esm/AttachmentArrayInput/AttachmentArrayInput.mjs +2 -1
- package/dist/esm/AttachmentArrayInput/AttachmentArrayInput.mjs.map +1 -1
- package/dist/esm/DefaultResourceTimeline/DefaultResourceTimeline.mjs +2 -6
- package/dist/esm/DefaultResourceTimeline/DefaultResourceTimeline.mjs.map +1 -1
- package/dist/esm/DiagnosticReportDisplay/DiagnosticReportDisplay.d.ts +2 -0
- package/dist/esm/DiagnosticReportDisplay/DiagnosticReportDisplay.mjs +26 -22
- package/dist/esm/DiagnosticReportDisplay/DiagnosticReportDisplay.mjs.map +1 -1
- package/dist/esm/DiagnosticReportDisplay/DiagnosticReportDisplay.stories.d.ts +1 -0
- package/dist/esm/EncounterTimeline/EncounterTimeline.mjs +6 -6
- package/dist/esm/EncounterTimeline/EncounterTimeline.mjs.map +1 -1
- package/dist/esm/ErrorBoundary/ErrorBoundary.mjs +1 -1
- package/dist/esm/ErrorBoundary/ErrorBoundary.mjs.map +1 -1
- package/dist/esm/GoogleButton/GoogleButton.mjs +6 -4
- package/dist/esm/GoogleButton/GoogleButton.mjs.map +1 -1
- package/dist/esm/MedplumLink/MedplumLink.mjs +2 -2
- package/dist/esm/MedplumLink/MedplumLink.mjs.map +1 -1
- package/dist/esm/MedplumProvider/MedplumProvider.d.ts +8 -0
- package/dist/esm/MedplumProvider/MedplumProvider.mjs +17 -1
- package/dist/esm/MedplumProvider/MedplumProvider.mjs.map +1 -1
- package/dist/esm/MoneyInput/MoneyInput.mjs +1 -1
- package/dist/esm/MoneyInput/MoneyInput.mjs.map +1 -1
- package/dist/esm/NoteDisplay/NoteDisplay.d.ts +6 -0
- package/dist/esm/NoteDisplay/NoteDisplay.mjs +18 -0
- package/dist/esm/NoteDisplay/NoteDisplay.mjs.map +1 -0
- package/dist/esm/NoteDisplay/NoteDisplay.stories.d.ts +7 -0
- package/dist/esm/OperationOutcomeAlert/OperationOutcomeAlert.d.ts +2 -1
- package/dist/esm/OperationOutcomeAlert/OperationOutcomeAlert.mjs +4 -3
- package/dist/esm/OperationOutcomeAlert/OperationOutcomeAlert.mjs.map +1 -1
- package/dist/esm/PatientTimeline/PatientTimeline.mjs +10 -10
- package/dist/esm/PatientTimeline/PatientTimeline.mjs.map +1 -1
- package/dist/esm/QuantityInput/QuantityInput.d.ts +1 -0
- package/dist/esm/QuantityInput/QuantityInput.mjs +10 -4
- package/dist/esm/QuantityInput/QuantityInput.mjs.map +1 -1
- package/dist/esm/QuantityInput/QuantityInput.stories.d.ts +7 -0
- package/dist/esm/QuestionnaireForm/QuestionnaireForm.mjs +2 -2
- package/dist/esm/QuestionnaireForm/QuestionnaireForm.mjs.map +1 -1
- package/dist/esm/ReferenceRangeEditor/ReferenceRangeEditor.mjs +2 -1
- package/dist/esm/ReferenceRangeEditor/ReferenceRangeEditor.mjs.map +1 -1
- package/dist/esm/RequestGroupDisplay/RequestGroupDisplay.mjs +2 -1
- package/dist/esm/RequestGroupDisplay/RequestGroupDisplay.mjs.map +1 -1
- package/dist/esm/ResourceArrayInput/ResourceArrayInput.mjs +2 -1
- package/dist/esm/ResourceArrayInput/ResourceArrayInput.mjs.map +1 -1
- package/dist/esm/ResourceTable/ResourceTable.d.ts +13 -0
- package/dist/esm/ResourceTable/ResourceTable.mjs +4 -1
- package/dist/esm/ResourceTable/ResourceTable.mjs.map +1 -1
- package/dist/esm/ResourceTimeline/ResourceTimeline.d.ts +2 -2
- package/dist/esm/ResourceTimeline/ResourceTimeline.mjs +62 -34
- package/dist/esm/ResourceTimeline/ResourceTimeline.mjs.map +1 -1
- package/dist/esm/SearchControl/SearchControl.mjs +7 -1
- package/dist/esm/SearchControl/SearchControl.mjs.map +1 -1
- package/dist/esm/SearchPopupMenu/SearchPopupMenu.mjs +14 -1
- package/dist/esm/SearchPopupMenu/SearchPopupMenu.mjs.map +1 -1
- package/dist/esm/ServiceRequestTimeline/ServiceRequestTimeline.mjs +7 -7
- package/dist/esm/ServiceRequestTimeline/ServiceRequestTimeline.mjs.map +1 -1
- package/dist/esm/Timeline/Timeline.mjs +1 -1
- package/dist/esm/Timeline/Timeline.mjs.map +1 -1
- package/dist/esm/auth/AuthenticationForm.mjs +1 -1
- package/dist/esm/auth/AuthenticationForm.mjs.map +1 -1
- package/dist/esm/auth/MfaForm.mjs +1 -1
- package/dist/esm/auth/MfaForm.mjs.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.min.mjs +1 -1
- package/dist/esm/index.mjs +2 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/createReactComponent.mjs +69 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/createReactComponent.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.mjs +18 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconAdjustmentsHorizontal.mjs +24 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconAdjustmentsHorizontal.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs +14 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBleach.mjs +18 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBleach.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBleachOff.mjs +19 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBleachOff.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBoxMultiple.mjs +25 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBoxMultiple.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBracketsContain.mjs +16 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBracketsContain.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBucket.mjs +19 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBucket.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBucketOff.mjs +26 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBucketOff.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCalendar.mjs +23 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCalendar.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.mjs +12 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCheckbox.mjs +19 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCheckbox.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleMinus.mjs +13 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleMinus.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCirclePlus.mjs +14 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCirclePlus.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCloudUpload.mjs +20 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCloudUpload.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconColumns.mjs +19 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconColumns.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCurrencyDollar.mjs +19 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCurrencyDollar.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconDots.mjs +14 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconDots.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEdit.mjs +26 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEdit.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEqual.mjs +13 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEqual.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEqualNot.mjs +14 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEqualNot.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFileAlert.mjs +21 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFileAlert.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFilePlus.mjs +21 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFilePlus.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFilter.mjs +18 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFilter.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconListDetails.mjs +29 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconListDetails.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMathGreater.mjs +12 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMathGreater.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMathLower.mjs +12 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMathLower.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMessage.mjs +20 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMessage.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconPin.mjs +20 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconPin.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconPinnedOff.mjs +21 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconPinnedOff.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSettings.mjs +19 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSettings.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSortAscending.mjs +16 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSortAscending.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSortDescending.mjs +16 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSortDescending.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSquare.mjs +18 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSquare.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconTableExport.mjs +18 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconTableExport.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconTrash.mjs +19 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconTrash.mjs.map +1 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconX.mjs +13 -0
- package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconX.mjs.map +1 -0
- package/dist/esm/useResource/useResource.d.ts +2 -2
- package/dist/esm/useResource/useResource.mjs +62 -39
- package/dist/esm/useResource/useResource.mjs.map +1 -1
- package/dist/esm/utils/date.d.ts +2 -1
- package/dist/esm/utils/date.mjs +31 -25
- package/dist/esm/utils/date.mjs.map +1 -1
- package/icons-unique.txt +36 -0
- package/icons.txt +44 -0
- package/package.json +12 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchPopupMenu.mjs","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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"}
|
|
1
|
+
{"version":3,"file":"SearchPopupMenu.mjs","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-react';\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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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createReference } from '@medplum/core';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { ResourceTimeline } from '../ResourceTimeline/ResourceTimeline.mjs';
|
|
4
4
|
|
|
5
5
|
function ServiceRequestTimeline(props) {
|
|
6
|
-
return (React.createElement(ResourceTimeline, { value: props.serviceRequest, loadTimelineResources: async (medplum,
|
|
7
|
-
return Promise.
|
|
8
|
-
medplum.readHistory('ServiceRequest',
|
|
9
|
-
medplum.search('Communication', 'based-on=' +
|
|
10
|
-
medplum.search('Media', '_count=100&based-on=' +
|
|
11
|
-
medplum.search('DiagnosticReport', 'based-on=' +
|
|
6
|
+
return (React.createElement(ResourceTimeline, { value: props.serviceRequest, loadTimelineResources: async (medplum, _resourceType, id) => {
|
|
7
|
+
return Promise.allSettled([
|
|
8
|
+
medplum.readHistory('ServiceRequest', id),
|
|
9
|
+
medplum.search('Communication', 'based-on=ServiceRequest/' + id),
|
|
10
|
+
medplum.search('Media', '_count=100&based-on=ServiceRequest/' + id),
|
|
11
|
+
medplum.search('DiagnosticReport', 'based-on=ServiceRequest/' + id),
|
|
12
12
|
]);
|
|
13
13
|
}, createCommunication: (resource, sender, text) => ({
|
|
14
14
|
resourceType: 'Communication',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceRequestTimeline.mjs","sources":["../../../src/ServiceRequestTimeline/ServiceRequestTimeline.tsx"],"sourcesContent":["import { createReference,
|
|
1
|
+
{"version":3,"file":"ServiceRequestTimeline.mjs","sources":["../../../src/ServiceRequestTimeline/ServiceRequestTimeline.tsx"],"sourcesContent":["import { createReference, MedplumClient, ProfileResource } from '@medplum/core';\nimport { Attachment, Group, Patient, Reference, ResourceType, 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 loadTimelineResources={async (medplum: MedplumClient, _resourceType: ResourceType, id: string) => {\n return Promise.allSettled([\n medplum.readHistory('ServiceRequest', id),\n medplum.search('Communication', 'based-on=ServiceRequest/' + id),\n medplum.search('Media', '_count=100&based-on=ServiceRequest/' + id),\n medplum.search('DiagnosticReport', 'based-on=ServiceRequest/' + id),\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;IACvE,QACE,oBAAC,gBAAgB,EAAA,EACf,KAAK,EAAE,KAAK,CAAC,cAAc,EAC3B,qBAAqB,EAAE,OAAO,OAAsB,EAAE,aAA2B,EAAE,EAAU,KAAI;YAC/F,OAAO,OAAO,CAAC,UAAU,CAAC;AACxB,gBAAA,OAAO,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE,CAAC;gBACzC,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,0BAA0B,GAAG,EAAE,CAAC;gBAChE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,qCAAqC,GAAG,EAAE,CAAC;gBACnE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,0BAA0B,GAAG,EAAE,CAAC;AACpE,aAAA,CAAC,CAAC;AACL,SAAC,EACD,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;;;;"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Group, Text, Menu, ActionIcon } from '@mantine/core';
|
|
2
2
|
import { formatDateTime, getReferenceString } from '@medplum/core';
|
|
3
|
-
import { IconDots } from '@tabler/icons';
|
|
4
3
|
import React from 'react';
|
|
5
4
|
import { Container } from '../Container/Container.mjs';
|
|
6
5
|
import { ErrorBoundary } from '../ErrorBoundary/ErrorBoundary.mjs';
|
|
@@ -8,6 +7,7 @@ import { MedplumLink } from '../MedplumLink/MedplumLink.mjs';
|
|
|
8
7
|
import { Panel } from '../Panel/Panel.mjs';
|
|
9
8
|
import { ResourceAvatar } from '../ResourceAvatar/ResourceAvatar.mjs';
|
|
10
9
|
import { ResourceName } from '../ResourceName/ResourceName.mjs';
|
|
10
|
+
import IconDots from '../node_modules/@tabler/icons-react/dist/esm/icons/IconDots.mjs';
|
|
11
11
|
|
|
12
12
|
function Timeline(props) {
|
|
13
13
|
return React.createElement(Container, null, props.children);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Timeline.mjs","sources":["../../../src/Timeline/Timeline.tsx"],"sourcesContent":["import { ActionIcon, Group, Menu, Text } from '@mantine/core';\nimport { formatDateTime, getReferenceString } from '@medplum/core';\nimport { Reference, Resource } from '@medplum/fhirtypes';\nimport { IconDots } from '@tabler/icons';\nimport React from 'react';\nimport { Container } from '../Container/Container';\nimport { ErrorBoundary } from '../ErrorBoundary/ErrorBoundary';\nimport { MedplumLink } from '../MedplumLink/MedplumLink';\nimport { Panel, PanelProps } from '../Panel/Panel';\nimport { ResourceAvatar } from '../ResourceAvatar/ResourceAvatar';\nimport { ResourceName } from '../ResourceName/ResourceName';\n\nexport interface TimelineProps {\n children?: React.ReactNode;\n}\n\nexport function Timeline(props: TimelineProps): JSX.Element {\n return <Container>{props.children}</Container>;\n}\n\nexport interface TimelineItemProps extends PanelProps {\n resource: Resource;\n profile?: Reference;\n padding?: boolean;\n popupMenuItems?: React.ReactNode;\n}\n\nexport function TimelineItem(props: TimelineItemProps): JSX.Element {\n const { resource, profile, padding, popupMenuItems, ...others } = props;\n const author = profile ?? resource.meta?.author;\n\n return (\n <Panel data-testid=\"timeline-item\" fill={true} {...others}>\n <Group position=\"apart\" spacing={8} mx=\"xs\" my=\"sm\">\n <ResourceAvatar value={author} link={true} size=\"md\" />\n <div style={{ flex: 1 }}>\n <Text size=\"sm\">\n <ResourceName color=\"dark\" weight={500} value={author} link={true} />\n </Text>\n <Text size=\"xs\">\n <MedplumLink color=\"dimmed\" to={props.resource}>\n {formatDateTime(props.resource.meta?.lastUpdated)}\n </MedplumLink>\n <Text component=\"span\" color=\"dimmed\" mx={8}>\n ·\n </Text>\n <MedplumLink color=\"dimmed\" to={props.resource}>\n {props.resource.resourceType}\n </MedplumLink>\n </Text>\n </div>\n {popupMenuItems && (\n <Menu position=\"bottom-end\" shadow=\"md\" width={200}>\n <Menu.Target>\n <ActionIcon radius=\"xl\" aria-label={`Actions for ${getReferenceString(props.resource)}`}>\n <IconDots />\n </ActionIcon>\n </Menu.Target>\n {popupMenuItems}\n </Menu>\n )}\n </Group>\n <ErrorBoundary>\n {padding && <div style={{ padding: '0 16px 16px 16px' }}>{props.children}</div>}\n {!padding && <>{props.children}</>}\n </ErrorBoundary>\n </Panel>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Timeline.mjs","sources":["../../../src/Timeline/Timeline.tsx"],"sourcesContent":["import { ActionIcon, Group, Menu, Text } from '@mantine/core';\nimport { formatDateTime, getReferenceString } from '@medplum/core';\nimport { Reference, Resource } from '@medplum/fhirtypes';\nimport { IconDots } from '@tabler/icons-react';\nimport React from 'react';\nimport { Container } from '../Container/Container';\nimport { ErrorBoundary } from '../ErrorBoundary/ErrorBoundary';\nimport { MedplumLink } from '../MedplumLink/MedplumLink';\nimport { Panel, PanelProps } from '../Panel/Panel';\nimport { ResourceAvatar } from '../ResourceAvatar/ResourceAvatar';\nimport { ResourceName } from '../ResourceName/ResourceName';\n\nexport interface TimelineProps {\n children?: React.ReactNode;\n}\n\nexport function Timeline(props: TimelineProps): JSX.Element {\n return <Container>{props.children}</Container>;\n}\n\nexport interface TimelineItemProps extends PanelProps {\n resource: Resource;\n profile?: Reference;\n padding?: boolean;\n popupMenuItems?: React.ReactNode;\n}\n\nexport function TimelineItem(props: TimelineItemProps): JSX.Element {\n const { resource, profile, padding, popupMenuItems, ...others } = props;\n const author = profile ?? resource.meta?.author;\n\n return (\n <Panel data-testid=\"timeline-item\" fill={true} {...others}>\n <Group position=\"apart\" spacing={8} mx=\"xs\" my=\"sm\">\n <ResourceAvatar value={author} link={true} size=\"md\" />\n <div style={{ flex: 1 }}>\n <Text size=\"sm\">\n <ResourceName color=\"dark\" weight={500} value={author} link={true} />\n </Text>\n <Text size=\"xs\">\n <MedplumLink color=\"dimmed\" to={props.resource}>\n {formatDateTime(props.resource.meta?.lastUpdated)}\n </MedplumLink>\n <Text component=\"span\" color=\"dimmed\" mx={8}>\n ·\n </Text>\n <MedplumLink color=\"dimmed\" to={props.resource}>\n {props.resource.resourceType}\n </MedplumLink>\n </Text>\n </div>\n {popupMenuItems && (\n <Menu position=\"bottom-end\" shadow=\"md\" width={200}>\n <Menu.Target>\n <ActionIcon radius=\"xl\" aria-label={`Actions for ${getReferenceString(props.resource)}`}>\n <IconDots />\n </ActionIcon>\n </Menu.Target>\n {popupMenuItems}\n </Menu>\n )}\n </Group>\n <ErrorBoundary>\n {padding && <div style={{ padding: '0 16px 16px 16px' }}>{props.children}</div>}\n {!padding && <>{props.children}</>}\n </ErrorBoundary>\n </Panel>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -77,7 +77,7 @@ function PasswordForm(props) {
|
|
|
77
77
|
React.createElement(Center, { sx: { flexDirection: 'column' } }, children),
|
|
78
78
|
React.createElement(OperationOutcomeAlert, { issues: issues }),
|
|
79
79
|
React.createElement(Stack, { spacing: "xl" },
|
|
80
|
-
React.createElement(PasswordInput, { name: "password",
|
|
80
|
+
React.createElement(PasswordInput, { name: "password", label: "Password", autoComplete: "off", required: true, error: getErrorsForInput(outcome, 'password') })),
|
|
81
81
|
React.createElement(Group, { position: "apart", mt: "xl", spacing: 0, noWrap: true },
|
|
82
82
|
onForgotPassword && (React.createElement(Anchor, { component: "button", type: "button", color: "dimmed", onClick: onForgotPassword, size: "xs" }, "Forgot password")),
|
|
83
83
|
React.createElement(Checkbox, { id: "remember", name: "remember", label: "Remember me", size: "xs", sx: { lineHeight: 1 } }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthenticationForm.mjs","sources":["../../../src/auth/AuthenticationForm.tsx"],"sourcesContent":["import { Anchor, Button, Center, Checkbox, Divider, Group, PasswordInput, Stack, TextInput } from '@mantine/core';\nimport {\n BaseLoginRequest,\n GoogleCredentialResponse,\n GoogleLoginRequest,\n LoginAuthenticationResponse,\n} from '@medplum/core';\nimport { OperationOutcome } from '@medplum/fhirtypes';\nimport React, { useCallback, useState } from 'react';\nimport { Form } from '../Form/Form';\nimport { getGoogleClientId, GoogleButton } from '../GoogleButton/GoogleButton';\nimport { useMedplum } from '../MedplumProvider/MedplumProvider';\nimport { OperationOutcomeAlert } from '../OperationOutcomeAlert/OperationOutcomeAlert';\nimport { getErrorsForInput, getIssuesForExpression } from '../utils/outcomes';\n\nexport interface AuthenticationFormProps extends BaseLoginRequest {\n readonly onForgotPassword?: () => void;\n readonly onRegister?: () => void;\n readonly handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n readonly children?: React.ReactNode;\n}\n\nexport function AuthenticationForm(props: AuthenticationFormProps): JSX.Element {\n const [email, setEmail] = useState<string>();\n\n if (!email) {\n return <EmailForm setEmail={setEmail} {...props} />;\n } else {\n return <PasswordForm email={email} {...props} />;\n }\n}\n\nexport interface EmailFormProps extends BaseLoginRequest {\n readonly generatePkce?: boolean;\n readonly onRegister?: () => void;\n readonly handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n readonly setEmail: (email: string) => void;\n readonly children?: React.ReactNode;\n}\n\nexport function EmailForm(props: EmailFormProps): JSX.Element {\n const { setEmail, onRegister, handleAuthResponse, children, ...baseLoginRequest } = props;\n const medplum = useMedplum();\n const googleClientId = getGoogleClientId(props.googleClientId);\n\n const isExternalAuth = useCallback(\n async (authMethod: any): Promise<boolean> => {\n if (!authMethod.authorizeUrl) {\n return false;\n }\n\n const state = JSON.stringify({\n ...(await medplum.ensureCodeChallenge(baseLoginRequest)),\n domain: authMethod.domain,\n });\n const url = new URL(authMethod.authorizeUrl);\n url.searchParams.set('state', state);\n window.location.assign(url.toString());\n return true;\n },\n [medplum, baseLoginRequest]\n );\n\n const handleSubmit = useCallback(\n async (formData: Record<string, string>) => {\n const authMethod = await medplum.post('auth/method', { email: formData.email });\n if (!(await isExternalAuth(authMethod))) {\n setEmail(formData.email);\n }\n },\n [medplum, isExternalAuth, setEmail]\n );\n\n const handleGoogleCredential = useCallback(\n async (response: GoogleCredentialResponse) => {\n const authResponse = await medplum.startGoogleLogin({\n ...baseLoginRequest,\n googleCredential: response.credential,\n } as GoogleLoginRequest);\n if (!(await isExternalAuth(authResponse))) {\n handleAuthResponse(authResponse);\n }\n },\n [medplum, baseLoginRequest, isExternalAuth, handleAuthResponse]\n );\n\n return (\n <Form style={{ maxWidth: 400 }} onSubmit={handleSubmit}>\n <Center sx={{ flexDirection: 'column' }}>{children}</Center>\n {googleClientId && (\n <>\n <Group position=\"center\" p=\"xl\" style={{ height: 70 }}>\n <GoogleButton googleClientId={googleClientId} handleGoogleCredential={handleGoogleCredential} />\n </Group>\n <Divider label=\"or\" labelPosition=\"center\" my=\"lg\" />\n </>\n )}\n <TextInput\n name=\"email\"\n type=\"email\"\n label=\"Email\"\n placeholder=\"name@domain.com\"\n required={true}\n autoFocus={true}\n />\n <Group position=\"apart\" mt=\"xl\" spacing={0} noWrap>\n {onRegister && (\n <Anchor component=\"button\" type=\"button\" color=\"dimmed\" onClick={onRegister} size=\"xs\">\n Register\n </Anchor>\n )}\n <Button type=\"submit\">Next</Button>\n </Group>\n </Form>\n );\n}\n\nexport interface PasswordFormProps extends BaseLoginRequest {\n readonly email: string;\n readonly onForgotPassword?: () => void;\n readonly handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n readonly children?: React.ReactNode;\n}\n\nexport function PasswordForm(props: PasswordFormProps): JSX.Element {\n const { onForgotPassword, handleAuthResponse, children, ...baseLoginRequest } = props;\n const medplum = useMedplum();\n const [outcome, setOutcome] = useState<OperationOutcome>();\n const issues = getIssuesForExpression(outcome, undefined);\n\n const handleSubmit = useCallback(\n (formData: Record<string, string>) => {\n medplum\n .startLogin({\n ...baseLoginRequest,\n password: formData.password,\n remember: formData.remember === 'on',\n })\n .then(handleAuthResponse)\n .catch(setOutcome);\n },\n [medplum, baseLoginRequest, handleAuthResponse]\n );\n\n return (\n <Form style={{ maxWidth: 400 }} onSubmit={handleSubmit}>\n <Center sx={{ flexDirection: 'column' }}>{children}</Center>\n <OperationOutcomeAlert issues={issues} />\n <Stack spacing=\"xl\">\n <PasswordInput\n name=\"password\"\n type=\"password\"\n label=\"Password\"\n autoComplete=\"off\"\n required={true}\n error={getErrorsForInput(outcome, 'password')}\n />\n </Stack>\n <Group position=\"apart\" mt=\"xl\" spacing={0} noWrap>\n {onForgotPassword && (\n <Anchor component=\"button\" type=\"button\" color=\"dimmed\" onClick={onForgotPassword} size=\"xs\">\n Forgot password\n </Anchor>\n )}\n <Checkbox id=\"remember\" name=\"remember\" label=\"Remember me\" size=\"xs\" sx={{ lineHeight: 1 }} />\n <Button type=\"submit\">Sign in</Button>\n </Group>\n </Form>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AuthenticationForm.mjs","sources":["../../../src/auth/AuthenticationForm.tsx"],"sourcesContent":["import { Anchor, Button, Center, Checkbox, Divider, Group, PasswordInput, Stack, TextInput } from '@mantine/core';\nimport {\n BaseLoginRequest,\n GoogleCredentialResponse,\n GoogleLoginRequest,\n LoginAuthenticationResponse,\n} from '@medplum/core';\nimport { OperationOutcome } from '@medplum/fhirtypes';\nimport React, { useCallback, useState } from 'react';\nimport { Form } from '../Form/Form';\nimport { getGoogleClientId, GoogleButton } from '../GoogleButton/GoogleButton';\nimport { useMedplum } from '../MedplumProvider/MedplumProvider';\nimport { OperationOutcomeAlert } from '../OperationOutcomeAlert/OperationOutcomeAlert';\nimport { getErrorsForInput, getIssuesForExpression } from '../utils/outcomes';\n\nexport interface AuthenticationFormProps extends BaseLoginRequest {\n readonly onForgotPassword?: () => void;\n readonly onRegister?: () => void;\n readonly handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n readonly children?: React.ReactNode;\n}\n\nexport function AuthenticationForm(props: AuthenticationFormProps): JSX.Element {\n const [email, setEmail] = useState<string>();\n\n if (!email) {\n return <EmailForm setEmail={setEmail} {...props} />;\n } else {\n return <PasswordForm email={email} {...props} />;\n }\n}\n\nexport interface EmailFormProps extends BaseLoginRequest {\n readonly generatePkce?: boolean;\n readonly onRegister?: () => void;\n readonly handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n readonly setEmail: (email: string) => void;\n readonly children?: React.ReactNode;\n}\n\nexport function EmailForm(props: EmailFormProps): JSX.Element {\n const { setEmail, onRegister, handleAuthResponse, children, ...baseLoginRequest } = props;\n const medplum = useMedplum();\n const googleClientId = getGoogleClientId(props.googleClientId);\n\n const isExternalAuth = useCallback(\n async (authMethod: any): Promise<boolean> => {\n if (!authMethod.authorizeUrl) {\n return false;\n }\n\n const state = JSON.stringify({\n ...(await medplum.ensureCodeChallenge(baseLoginRequest)),\n domain: authMethod.domain,\n });\n const url = new URL(authMethod.authorizeUrl);\n url.searchParams.set('state', state);\n window.location.assign(url.toString());\n return true;\n },\n [medplum, baseLoginRequest]\n );\n\n const handleSubmit = useCallback(\n async (formData: Record<string, string>) => {\n const authMethod = await medplum.post('auth/method', { email: formData.email });\n if (!(await isExternalAuth(authMethod))) {\n setEmail(formData.email);\n }\n },\n [medplum, isExternalAuth, setEmail]\n );\n\n const handleGoogleCredential = useCallback(\n async (response: GoogleCredentialResponse) => {\n const authResponse = await medplum.startGoogleLogin({\n ...baseLoginRequest,\n googleCredential: response.credential,\n } as GoogleLoginRequest);\n if (!(await isExternalAuth(authResponse))) {\n handleAuthResponse(authResponse);\n }\n },\n [medplum, baseLoginRequest, isExternalAuth, handleAuthResponse]\n );\n\n return (\n <Form style={{ maxWidth: 400 }} onSubmit={handleSubmit}>\n <Center sx={{ flexDirection: 'column' }}>{children}</Center>\n {googleClientId && (\n <>\n <Group position=\"center\" p=\"xl\" style={{ height: 70 }}>\n <GoogleButton googleClientId={googleClientId} handleGoogleCredential={handleGoogleCredential} />\n </Group>\n <Divider label=\"or\" labelPosition=\"center\" my=\"lg\" />\n </>\n )}\n <TextInput\n name=\"email\"\n type=\"email\"\n label=\"Email\"\n placeholder=\"name@domain.com\"\n required={true}\n autoFocus={true}\n />\n <Group position=\"apart\" mt=\"xl\" spacing={0} noWrap>\n {onRegister && (\n <Anchor component=\"button\" type=\"button\" color=\"dimmed\" onClick={onRegister} size=\"xs\">\n Register\n </Anchor>\n )}\n <Button type=\"submit\">Next</Button>\n </Group>\n </Form>\n );\n}\n\nexport interface PasswordFormProps extends BaseLoginRequest {\n readonly email: string;\n readonly onForgotPassword?: () => void;\n readonly handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n readonly children?: React.ReactNode;\n}\n\nexport function PasswordForm(props: PasswordFormProps): JSX.Element {\n const { onForgotPassword, handleAuthResponse, children, ...baseLoginRequest } = props;\n const medplum = useMedplum();\n const [outcome, setOutcome] = useState<OperationOutcome>();\n const issues = getIssuesForExpression(outcome, undefined);\n\n const handleSubmit = useCallback(\n (formData: Record<string, string>) => {\n medplum\n .startLogin({\n ...baseLoginRequest,\n password: formData.password,\n remember: formData.remember === 'on',\n })\n .then(handleAuthResponse)\n .catch(setOutcome);\n },\n [medplum, baseLoginRequest, handleAuthResponse]\n );\n\n return (\n <Form style={{ maxWidth: 400 }} onSubmit={handleSubmit}>\n <Center sx={{ flexDirection: 'column' }}>{children}</Center>\n <OperationOutcomeAlert issues={issues} />\n <Stack spacing=\"xl\">\n <PasswordInput\n name=\"password\"\n label=\"Password\"\n autoComplete=\"off\"\n required={true}\n error={getErrorsForInput(outcome, 'password')}\n />\n </Stack>\n <Group position=\"apart\" mt=\"xl\" spacing={0} noWrap>\n {onForgotPassword && (\n <Anchor component=\"button\" type=\"button\" color=\"dimmed\" onClick={onForgotPassword} size=\"xs\">\n Forgot password\n </Anchor>\n )}\n <Checkbox id=\"remember\" name=\"remember\" label=\"Remember me\" size=\"xs\" sx={{ lineHeight: 1 }} />\n <Button type=\"submit\">Sign in</Button>\n </Group>\n </Form>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Stack, Center, Title, Alert, TextInput, Group, Button } from '@mantine/core';
|
|
2
2
|
import { normalizeErrorString } from '@medplum/core';
|
|
3
|
-
import { IconAlertCircle } from '@tabler/icons';
|
|
4
3
|
import React, { useState } from 'react';
|
|
5
4
|
import { Form } from '../Form/Form.mjs';
|
|
6
5
|
import { Logo } from '../Logo/Logo.mjs';
|
|
7
6
|
import { useMedplum } from '../MedplumProvider/MedplumProvider.mjs';
|
|
7
|
+
import IconAlertCircle from '../node_modules/@tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs';
|
|
8
8
|
|
|
9
9
|
function MfaForm(props) {
|
|
10
10
|
const medplum = useMedplum();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MfaForm.mjs","sources":["../../../src/auth/MfaForm.tsx"],"sourcesContent":["import { Alert, Button, Center, Group, Stack, TextInput, Title } from '@mantine/core';\nimport { LoginAuthenticationResponse, normalizeErrorString } from '@medplum/core';\nimport { IconAlertCircle } from '@tabler/icons';\nimport React, { useState } from 'react';\nimport { Form } from '../Form/Form';\nimport { Logo } from '../Logo/Logo';\nimport { useMedplum } from '../MedplumProvider/MedplumProvider';\n\nexport interface MfaFormProps {\n login: string;\n handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n}\n\nexport function MfaForm(props: MfaFormProps): JSX.Element {\n const medplum = useMedplum();\n const [errorMessage, setErrorMessage] = useState<string | undefined>(undefined);\n return (\n <Form\n style={{ maxWidth: 400 }}\n onSubmit={(formData: Record<string, string>) => {\n setErrorMessage(undefined);\n medplum\n .post('auth/mfa/verify', {\n login: props.login,\n token: formData.token,\n })\n .then(props.handleAuthResponse)\n .catch((err) => setErrorMessage(normalizeErrorString(err)));\n }}\n >\n <Stack>\n <Center sx={{ flexDirection: 'column' }}>\n <Logo size={32} />\n <Title>Enter MFA code</Title>\n </Center>\n {errorMessage && (\n <Alert icon={<IconAlertCircle size={16} />} title=\"Error\" color=\"red\">\n {errorMessage}\n </Alert>\n )}\n <Stack>\n <TextInput name=\"token\" label=\"MFA code\" required />\n </Stack>\n <Group position=\"right\" mt=\"xl\">\n <Button type=\"submit\">Submit code</Button>\n </Group>\n </Stack>\n </Form>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAaM,SAAU,OAAO,CAAC,KAAmB,EAAA;AACzC,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;AAChF,IAAA,QACE,KAAC,CAAA,aAAA,CAAA,IAAI,EACH,EAAA,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EACxB,QAAQ,EAAE,CAAC,QAAgC,KAAI;YAC7C,eAAe,CAAC,SAAS,CAAC,CAAC;YAC3B,OAAO;iBACJ,IAAI,CAAC,iBAAiB,EAAE;gBACvB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,EAAE,QAAQ,CAAC,KAAK;aACtB,CAAC;AACD,iBAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;AAC9B,iBAAA,KAAK,CAAC,CAAC,GAAG,KAAK,eAAe,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC/D,EAAA;AAED,QAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,IAAA;YACJ,KAAC,CAAA,aAAA,CAAA,MAAM,IAAC,EAAE,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAA;AACrC,gBAAA,KAAA,CAAA,aAAA,CAAC,IAAI,EAAA,EAAC,IAAI,EAAE,EAAE,EAAI,CAAA;gBAClB,KAAC,CAAA,aAAA,CAAA,KAAK,yBAAuB,CACtB;YACR,YAAY,KACX,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EAAC,IAAI,EAAE,KAAA,CAAA,aAAA,CAAC,eAAe,EAAA,EAAC,IAAI,EAAE,EAAE,EAAI,CAAA,EAAE,KAAK,EAAC,OAAO,EAAC,KAAK,EAAC,KAAK,EAAA,EAClE,YAAY,CACP,CACT;AACD,YAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,IAAA;AACJ,gBAAA,KAAA,CAAA,aAAA,CAAC,SAAS,EAAA,EAAC,IAAI,EAAC,OAAO,EAAC,KAAK,EAAC,UAAU,EAAC,QAAQ,EAAA,IAAA,EAAA,CAAG,CAC9C;YACR,KAAC,CAAA,aAAA,CAAA,KAAK,IAAC,QAAQ,EAAC,OAAO,EAAC,EAAE,EAAC,IAAI,EAAA;gBAC7B,KAAC,CAAA,aAAA,CAAA,MAAM,EAAC,EAAA,IAAI,EAAC,QAAQ,kBAAqB,CACpC,CACF,CACH,EACP;AACJ;;;;"}
|
|
1
|
+
{"version":3,"file":"MfaForm.mjs","sources":["../../../src/auth/MfaForm.tsx"],"sourcesContent":["import { Alert, Button, Center, Group, Stack, TextInput, Title } from '@mantine/core';\nimport { LoginAuthenticationResponse, normalizeErrorString } from '@medplum/core';\nimport { IconAlertCircle } from '@tabler/icons-react';\nimport React, { useState } from 'react';\nimport { Form } from '../Form/Form';\nimport { Logo } from '../Logo/Logo';\nimport { useMedplum } from '../MedplumProvider/MedplumProvider';\n\nexport interface MfaFormProps {\n login: string;\n handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n}\n\nexport function MfaForm(props: MfaFormProps): JSX.Element {\n const medplum = useMedplum();\n const [errorMessage, setErrorMessage] = useState<string | undefined>(undefined);\n return (\n <Form\n style={{ maxWidth: 400 }}\n onSubmit={(formData: Record<string, string>) => {\n setErrorMessage(undefined);\n medplum\n .post('auth/mfa/verify', {\n login: props.login,\n token: formData.token,\n })\n .then(props.handleAuthResponse)\n .catch((err) => setErrorMessage(normalizeErrorString(err)));\n }}\n >\n <Stack>\n <Center sx={{ flexDirection: 'column' }}>\n <Logo size={32} />\n <Title>Enter MFA code</Title>\n </Center>\n {errorMessage && (\n <Alert icon={<IconAlertCircle size={16} />} title=\"Error\" color=\"red\">\n {errorMessage}\n </Alert>\n )}\n <Stack>\n <TextInput name=\"token\" label=\"MFA code\" required />\n </Stack>\n <Group position=\"right\" mt=\"xl\">\n <Button type=\"submit\">Submit code</Button>\n </Group>\n </Stack>\n </Form>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAaM,SAAU,OAAO,CAAC,KAAmB,EAAA;AACzC,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;AAChF,IAAA,QACE,KAAC,CAAA,aAAA,CAAA,IAAI,EACH,EAAA,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EACxB,QAAQ,EAAE,CAAC,QAAgC,KAAI;YAC7C,eAAe,CAAC,SAAS,CAAC,CAAC;YAC3B,OAAO;iBACJ,IAAI,CAAC,iBAAiB,EAAE;gBACvB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,EAAE,QAAQ,CAAC,KAAK;aACtB,CAAC;AACD,iBAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;AAC9B,iBAAA,KAAK,CAAC,CAAC,GAAG,KAAK,eAAe,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC/D,EAAA;AAED,QAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,IAAA;YACJ,KAAC,CAAA,aAAA,CAAA,MAAM,IAAC,EAAE,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAA;AACrC,gBAAA,KAAA,CAAA,aAAA,CAAC,IAAI,EAAA,EAAC,IAAI,EAAE,EAAE,EAAI,CAAA;gBAClB,KAAC,CAAA,aAAA,CAAA,KAAK,yBAAuB,CACtB;YACR,YAAY,KACX,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EAAC,IAAI,EAAE,KAAA,CAAA,aAAA,CAAC,eAAe,EAAA,EAAC,IAAI,EAAE,EAAE,EAAI,CAAA,EAAE,KAAK,EAAC,OAAO,EAAC,KAAK,EAAC,KAAK,EAAA,EAClE,YAAY,CACP,CACT;AACD,YAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,IAAA;AACJ,gBAAA,KAAA,CAAA,aAAA,CAAC,SAAS,EAAA,EAAC,IAAI,EAAC,OAAO,EAAC,KAAK,EAAC,UAAU,EAAC,QAAQ,EAAA,IAAA,EAAA,CAAG,CAC9C;YACR,KAAC,CAAA,aAAA,CAAA,KAAK,IAAC,QAAQ,EAAC,OAAO,EAAC,EAAE,EAAC,IAAI,EAAA;gBAC7B,KAAC,CAAA,aAAA,CAAA,MAAM,EAAC,EAAA,IAAI,EAAC,QAAQ,kBAAqB,CACpC,CACF,CACH,EACP;AACJ;;;;"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -43,6 +43,7 @@ export * from './MedplumLink/MedplumLink';
|
|
|
43
43
|
export * from './MedplumProvider/MedplumProvider';
|
|
44
44
|
export * from './MoneyDisplay/MoneyDisplay';
|
|
45
45
|
export * from './MoneyInput/MoneyInput';
|
|
46
|
+
export * from './OperationOutcomeAlert/OperationOutcomeAlert';
|
|
46
47
|
export * from './Panel/Panel';
|
|
47
48
|
export * from './PatientTimeline/PatientTimeline';
|
|
48
49
|
export * from './PlanDefinitionBuilder/PlanDefinitionBuilder';
|