@aehrc/smart-forms-renderer 0.3.0 → 0.5.0
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/.storybook/main.ts +28 -0
- package/.storybook/preview.ts +34 -0
- package/__mocks__/zustand.ts +60 -0
- package/jest.config.ts +16 -0
- package/lib/api/populate.js +63 -0
- package/lib/api/populate.js.map +1 -0
- package/{dist → lib}/components/Alert.styles.d.ts +5 -5
- package/lib/components/Alert.styles.js +40 -0
- package/lib/components/Alert.styles.js.map +1 -0
- package/lib/components/BackToTopButton/BackToTopButton.js +32 -0
- package/lib/components/BackToTopButton/BackToTopButton.js.map +1 -0
- package/{dist → lib}/components/Box.styles.d.ts +15 -15
- package/lib/components/Box.styles.js +30 -0
- package/lib/components/Box.styles.js.map +1 -0
- package/lib/components/FormComponents/BooleanItem/BooleanField.js +24 -0
- package/lib/components/FormComponents/BooleanItem/BooleanField.js.map +1 -0
- package/lib/components/FormComponents/BooleanItem/BooleanItem.js +49 -0
- package/lib/components/FormComponents/BooleanItem/BooleanItem.js.map +1 -0
- package/lib/components/FormComponents/DateItem/DateField.js +31 -0
- package/lib/components/FormComponents/DateItem/DateField.js.map +1 -0
- package/lib/components/FormComponents/DateItem/DateItem.js +52 -0
- package/lib/components/FormComponents/DateItem/DateItem.js.map +1 -0
- package/lib/components/FormComponents/DateTimeItem/DateTimeField.js +33 -0
- package/lib/components/FormComponents/DateTimeItem/DateTimeField.js.map +1 -0
- package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js +52 -0
- package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js.map +1 -0
- package/lib/components/FormComponents/DecimalItem/DecimalField.js +30 -0
- package/lib/components/FormComponents/DecimalItem/DecimalField.js.map +1 -0
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js +80 -0
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -0
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js +26 -0
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js.map +1 -0
- package/{dist → lib}/components/FormComponents/DisplayItem/DisplayInstructions.styles.d.ts +5 -5
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.js +23 -0
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.js.map +1 -0
- package/lib/components/FormComponents/DisplayItem/DisplayItem.js +31 -0
- package/lib/components/FormComponents/DisplayItem/DisplayItem.js.map +1 -0
- package/{dist → lib}/components/FormComponents/GridGroup/GridGroup.d.ts +1 -1
- package/lib/components/FormComponents/GridGroup/GridGroup.js +58 -0
- package/lib/components/FormComponents/GridGroup/GridGroup.js.map +1 -0
- package/{dist → lib}/components/FormComponents/GridGroup/GridRow.d.ts +1 -1
- package/lib/components/FormComponents/GridGroup/GridRow.js +55 -0
- package/lib/components/FormComponents/GridGroup/GridRow.js.map +1 -0
- package/lib/components/FormComponents/GridGroup/GridTable.js +42 -0
- package/lib/components/FormComponents/GridGroup/GridTable.js.map +1 -0
- package/lib/components/FormComponents/GroupItem/GroupHeading.js +39 -0
- package/lib/components/FormComponents/GroupItem/GroupHeading.js.map +1 -0
- package/{dist → lib}/components/FormComponents/GroupItem/GroupItem.d.ts +1 -1
- package/lib/components/FormComponents/GroupItem/GroupItem.js +62 -0
- package/lib/components/FormComponents/GroupItem/GroupItem.js.map +1 -0
- package/{dist → lib}/components/FormComponents/GroupItem/GroupItem.styles.d.ts +5 -5
- package/lib/components/FormComponents/GroupItem/GroupItem.styles.js +27 -0
- package/lib/components/FormComponents/GroupItem/GroupItem.styles.js.map +1 -0
- package/{dist → lib}/components/FormComponents/GroupItem/GroupItemSwitcher.d.ts +1 -1
- package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +73 -0
- package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -0
- package/lib/components/FormComponents/GroupItem/NextTabButton.js +25 -0
- package/lib/components/FormComponents/GroupItem/NextTabButton.js.map +1 -0
- package/lib/components/FormComponents/GroupItem/NextTabButtonWrapper.js +55 -0
- package/lib/components/FormComponents/GroupItem/NextTabButtonWrapper.js.map +1 -0
- package/lib/components/FormComponents/IntegerItem/IntegerField.js +30 -0
- package/lib/components/FormComponents/IntegerItem/IntegerField.js.map +1 -0
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js +73 -0
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -0
- package/lib/components/FormComponents/Item.styles.d.ts +6 -0
- package/lib/components/FormComponents/Item.styles.js +27 -0
- package/lib/components/FormComponents/Item.styles.js.map +1 -0
- package/lib/components/FormComponents/ItemParts/ContextDisplayItem.js +29 -0
- package/lib/components/FormComponents/ItemParts/ContextDisplayItem.js.map +1 -0
- package/lib/components/FormComponents/ItemParts/FadingCheckIcon.js +26 -0
- package/lib/components/FormComponents/ItemParts/FadingCheckIcon.js.map +1 -0
- package/lib/components/FormComponents/ItemParts/ItemFieldGrid.js +31 -0
- package/lib/components/FormComponents/ItemParts/ItemFieldGrid.js.map +1 -0
- package/lib/components/FormComponents/ItemParts/ItemLabelText.js +45 -0
- package/lib/components/FormComponents/ItemParts/ItemLabelText.js.map +1 -0
- package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.js +32 -0
- package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.js.map +1 -0
- package/lib/components/FormComponents/ItemParts/QItemCheckboxSingle.js +24 -0
- package/lib/components/FormComponents/ItemParts/QItemCheckboxSingle.js.map +1 -0
- package/lib/components/FormComponents/ItemParts/QItemCheckboxSingleWithOpenLabel.js +33 -0
- package/lib/components/FormComponents/ItemParts/QItemCheckboxSingleWithOpenLabel.js.map +1 -0
- package/lib/components/FormComponents/ItemParts/QItemRadioButtonWithOpenLabel.js +31 -0
- package/lib/components/FormComponents/ItemParts/QItemRadioButtonWithOpenLabel.js.map +1 -0
- package/{dist → lib}/components/FormComponents/Lists.styles.d.ts +5 -5
- package/lib/components/FormComponents/Lists.styles.js +38 -0
- package/lib/components/FormComponents/Lists.styles.js.map +1 -0
- package/{dist → lib}/components/FormComponents/QItemChoice/QItemChoice.d.ts +1 -1
- package/lib/components/FormComponents/QItemChoice/QItemChoice.js +61 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoice.js.map +1 -0
- package/{dist → lib}/components/FormComponents/QItemChoice/QItemChoiceAutocomplete.d.ts +1 -1
- package/lib/components/FormComponents/QItemChoice/QItemChoiceAutocomplete.js +85 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoiceAutocomplete.js.map +1 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoiceCheckboxAnswerOption.js +70 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoiceCheckboxAnswerOption.js.map +1 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoiceCheckboxAnswerValueSet.js +66 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoiceCheckboxAnswerValueSet.js.map +1 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoiceRadioAnswerOption.js +70 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoiceRadioAnswerOption.js.map +1 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoiceRadioAnswerValueSet.js +70 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoiceRadioAnswerValueSet.js.map +1 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoiceRadioSingle.js +24 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoiceRadioSingle.js.map +1 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoiceSelectAnswerOption.js +70 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoiceSelectAnswerOption.js.map +1 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoiceSelectAnswerValueSet.js +80 -0
- package/lib/components/FormComponents/QItemChoice/QItemChoiceSelectAnswerValueSet.js.map +1 -0
- package/{dist → lib}/components/FormComponents/QItemOpenChoice/QItemOpenChoice.d.ts +1 -1
- package/lib/components/FormComponents/QItemOpenChoice/QItemOpenChoice.js +49 -0
- package/lib/components/FormComponents/QItemOpenChoice/QItemOpenChoice.js.map +1 -0
- package/{dist → lib}/components/FormComponents/QItemOpenChoice/QItemOpenChoiceAutocomplete.d.ts +1 -1
- package/lib/components/FormComponents/QItemOpenChoice/QItemOpenChoiceAutocomplete.js +104 -0
- package/lib/components/FormComponents/QItemOpenChoice/QItemOpenChoiceAutocomplete.js.map +1 -0
- package/lib/components/FormComponents/QItemOpenChoice/QItemOpenChoiceCheckboxAnswerOption.js +105 -0
- package/lib/components/FormComponents/QItemOpenChoice/QItemOpenChoiceCheckboxAnswerOption.js.map +1 -0
- package/lib/components/FormComponents/QItemOpenChoice/QItemOpenChoiceRadioAnswerOption.js +116 -0
- package/lib/components/FormComponents/QItemOpenChoice/QItemOpenChoiceRadioAnswerOption.js.map +1 -0
- package/{dist → lib}/components/FormComponents/QItemOpenChoice/QItemOpenChoiceSelectAnswerOption.d.ts +1 -1
- package/lib/components/FormComponents/QItemOpenChoice/QItemOpenChoiceSelectAnswerOption.js +74 -0
- package/lib/components/FormComponents/QItemOpenChoice/QItemOpenChoiceSelectAnswerOption.js.map +1 -0
- package/lib/components/FormComponents/QItemOpenChoice/QItemOpenChoiceSelectAnswerValueSet.js +66 -0
- package/lib/components/FormComponents/QItemOpenChoice/QItemOpenChoiceSelectAnswerValueSet.js.map +1 -0
- package/lib/components/FormComponents/RepeatGroup/AddItemButton.js +27 -0
- package/lib/components/FormComponents/RepeatGroup/AddItemButton.js.map +1 -0
- package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.js +30 -0
- package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.js.map +1 -0
- package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js +81 -0
- package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js.map +1 -0
- package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js +30 -0
- package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js.map +1 -0
- package/lib/components/FormComponents/RepeatItem/AddItemButton.js +27 -0
- package/lib/components/FormComponents/RepeatItem/AddItemButton.js.map +1 -0
- package/lib/components/FormComponents/RepeatItem/DeleteItemButton.js +30 -0
- package/lib/components/FormComponents/RepeatItem/DeleteItemButton.js.map +1 -0
- package/lib/components/FormComponents/RepeatItem/RepeatField.js +31 -0
- package/lib/components/FormComponents/RepeatItem/RepeatField.js.map +1 -0
- package/lib/components/FormComponents/RepeatItem/RepeatItem.js +69 -0
- package/lib/components/FormComponents/RepeatItem/RepeatItem.js.map +1 -0
- package/lib/components/FormComponents/RepeatItem/RepeatItem.styles.d.ts +22 -0
- package/lib/components/FormComponents/RepeatItem/RepeatItem.styles.js +29 -0
- package/lib/components/FormComponents/RepeatItem/RepeatItem.styles.js.map +1 -0
- package/lib/components/FormComponents/SingleItem/SingleItem.js +32 -0
- package/lib/components/FormComponents/SingleItem/SingleItem.js.map +1 -0
- package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js +63 -0
- package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -0
- package/lib/components/FormComponents/StringItem/StringField.js +30 -0
- package/lib/components/FormComponents/StringItem/StringField.js.map +1 -0
- package/lib/components/FormComponents/StringItem/StringItem.js +71 -0
- package/lib/components/FormComponents/StringItem/StringItem.js.map +1 -0
- package/lib/components/FormComponents/Tables/DeleteRowButton.js +31 -0
- package/lib/components/FormComponents/Tables/DeleteRowButton.js.map +1 -0
- package/{dist → lib}/components/FormComponents/Tables/QItemGroupTable.d.ts +1 -1
- package/lib/components/FormComponents/Tables/QItemGroupTable.js +99 -0
- package/lib/components/FormComponents/Tables/QItemGroupTable.js.map +1 -0
- package/{dist → lib}/components/FormComponents/Tables/QItemGroupTableRow.d.ts +1 -1
- package/lib/components/FormComponents/Tables/QItemGroupTableRow.js +46 -0
- package/lib/components/FormComponents/Tables/QItemGroupTableRow.js.map +1 -0
- package/lib/components/FormComponents/Tables/Table.styles.js +46 -0
- package/lib/components/FormComponents/Tables/Table.styles.js.map +1 -0
- package/lib/components/FormComponents/TextItem/TextField.js +29 -0
- package/lib/components/FormComponents/TextItem/TextField.js.map +1 -0
- package/lib/components/FormComponents/TextItem/TextItem.js +71 -0
- package/lib/components/FormComponents/TextItem/TextItem.js.map +1 -0
- package/{dist → lib}/components/FormComponents/Textfield.styles.d.ts +1 -1
- package/lib/components/FormComponents/Textfield.styles.js +27 -0
- package/lib/components/FormComponents/Textfield.styles.js.map +1 -0
- package/lib/components/FormComponents/TimeItem/TimeField.js +30 -0
- package/lib/components/FormComponents/TimeItem/TimeField.js.map +1 -0
- package/lib/components/FormComponents/TimeItem/TimeItem.js +52 -0
- package/lib/components/FormComponents/TimeItem/TimeItem.js.map +1 -0
- package/lib/components/FormComponents/Typography.styles.d.ts +6 -0
- package/lib/components/FormComponents/Typography.styles.js +23 -0
- package/lib/components/FormComponents/Typography.styles.js.map +1 -0
- package/lib/components/FormComponents/UrlItem/UrlField.js +25 -0
- package/lib/components/FormComponents/UrlItem/UrlField.js.map +1 -0
- package/lib/components/FormComponents/UrlItem/UrlItem.js +61 -0
- package/lib/components/FormComponents/UrlItem/UrlItem.js.map +1 -0
- package/lib/components/FormRenderer/BaseRenderer.js +54 -0
- package/lib/components/FormRenderer/BaseRenderer.js.map +1 -0
- package/lib/components/FormRenderer/FormBodyCollapsible.js +57 -0
- package/lib/components/FormRenderer/FormBodyCollapsible.js.map +1 -0
- package/lib/components/FormRenderer/FormBodySingleCollapsible.js +39 -0
- package/lib/components/FormRenderer/FormBodySingleCollapsible.js.map +1 -0
- package/{dist → lib}/components/FormRenderer/FormBodySingleCollapsibleWrapper.d.ts +1 -1
- package/lib/components/FormRenderer/FormBodySingleCollapsibleWrapper.js +31 -0
- package/lib/components/FormRenderer/FormBodySingleCollapsibleWrapper.js.map +1 -0
- package/lib/components/FormRenderer/FormBodyTabbed.js +60 -0
- package/lib/components/FormRenderer/FormBodyTabbed.js.map +1 -0
- package/lib/components/FormRenderer/FormRenderer.js +54 -0
- package/lib/components/FormRenderer/FormRenderer.js.map +1 -0
- package/lib/components/FormRenderer/FormTitle.js +30 -0
- package/lib/components/FormRenderer/FormTitle.js.map +1 -0
- package/lib/components/FormRenderer/FormTopLevelItem.js +45 -0
- package/lib/components/FormRenderer/FormTopLevelItem.js.map +1 -0
- package/lib/components/FormRenderer/SmartFormsRenderer.js +39 -0
- package/lib/components/FormRenderer/SmartFormsRenderer.js.map +1 -0
- package/lib/components/FormRenderer/index.js +19 -0
- package/lib/components/FormRenderer/index.js.map +1 -0
- package/lib/components/Iconify/Iconify.js +26 -0
- package/lib/components/Iconify/Iconify.js.map +1 -0
- package/{dist → lib}/components/Lists.styles.d.ts +6 -6
- package/lib/components/Lists.styles.js +38 -0
- package/lib/components/Lists.styles.js.map +1 -0
- package/lib/components/Tabs/CompleteTabButton.js +29 -0
- package/lib/components/Tabs/CompleteTabButton.js.map +1 -0
- package/lib/components/Tabs/FormBodySingleTab.js +39 -0
- package/lib/components/Tabs/FormBodySingleTab.js.map +1 -0
- package/lib/components/Tabs/FormBodyTabList.js +52 -0
- package/lib/components/Tabs/FormBodyTabList.js.map +1 -0
- package/lib/components/index.js +18 -0
- package/lib/components/index.js.map +1 -0
- package/lib/hooks/index.js +2 -0
- package/lib/hooks/index.js.map +1 -0
- package/lib/hooks/useBackToTop.js +26 -0
- package/lib/hooks/useBackToTop.js.map +1 -0
- package/lib/hooks/useDebounce.js +38 -0
- package/lib/hooks/useDebounce.js.map +1 -0
- package/lib/hooks/useDecimalCalculatedExpression.js +50 -0
- package/lib/hooks/useDecimalCalculatedExpression.js.map +1 -0
- package/lib/hooks/useHidden.js +35 -0
- package/lib/hooks/useHidden.js.map +1 -0
- package/lib/hooks/useInitialiseGroupTable.js +36 -0
- package/lib/hooks/useInitialiseGroupTable.js.map +1 -0
- package/lib/hooks/useInitialiseRenderer.js +49 -0
- package/lib/hooks/useInitialiseRenderer.js.map +1 -0
- package/lib/hooks/useInitialiseRepeatAnswers.js +36 -0
- package/lib/hooks/useInitialiseRepeatAnswers.js.map +1 -0
- package/lib/hooks/useInitialiseRepeatGroups.js +36 -0
- package/lib/hooks/useInitialiseRepeatGroups.js.map +1 -0
- package/lib/hooks/useIntegerCalculatedExpression.js +44 -0
- package/lib/hooks/useIntegerCalculatedExpression.js.map +1 -0
- package/lib/hooks/useQueryClient.js +29 -0
- package/lib/hooks/useQueryClient.js.map +1 -0
- package/lib/hooks/useRenderingExtensions.js +30 -0
- package/lib/hooks/useRenderingExtensions.js.map +1 -0
- package/lib/hooks/useResponsive.js +37 -0
- package/lib/hooks/useResponsive.js.map +1 -0
- package/lib/hooks/useStringCalculatedExpression.js +44 -0
- package/lib/hooks/useStringCalculatedExpression.js.map +1 -0
- package/lib/hooks/useTerminologyServerQuery.js +73 -0
- package/lib/hooks/useTerminologyServerQuery.js.map +1 -0
- package/lib/hooks/useValidationError.js +38 -0
- package/lib/hooks/useValidationError.js.map +1 -0
- package/{dist → lib}/hooks/useValueSetCodings.d.ts +1 -1
- package/lib/hooks/useValueSetCodings.js +125 -0
- package/lib/hooks/useValueSetCodings.js.map +1 -0
- package/lib/index.d.ts +89 -0
- package/lib/index.js +153 -0
- package/lib/index.js.map +1 -0
- package/lib/interfaces/answerExpression.interface.js +18 -0
- package/lib/interfaces/answerExpression.interface.js.map +1 -0
- package/lib/interfaces/calculatedExpression.interface.js +2 -0
- package/lib/interfaces/calculatedExpression.interface.js.map +1 -0
- package/lib/interfaces/choice.enum.js +41 -0
- package/lib/interfaces/choice.enum.js.map +1 -0
- package/lib/interfaces/enableWhen.interface.js +18 -0
- package/lib/interfaces/enableWhen.interface.js.map +1 -0
- package/lib/interfaces/groupTable.interface.js +18 -0
- package/lib/interfaces/groupTable.interface.js.map +1 -0
- package/lib/interfaces/populate.interface.js +18 -0
- package/lib/interfaces/populate.interface.js.map +1 -0
- package/lib/interfaces/questionnaireStore.interface.js +18 -0
- package/lib/interfaces/questionnaireStore.interface.js.map +1 -0
- package/lib/interfaces/regex.interface.js +18 -0
- package/lib/interfaces/regex.interface.js.map +1 -0
- package/{dist → lib}/interfaces/renderProps.interface.d.ts +1 -1
- package/lib/interfaces/renderProps.interface.js +18 -0
- package/lib/interfaces/renderProps.interface.js.map +1 -0
- package/lib/interfaces/repeatGroup.interface.js +18 -0
- package/lib/interfaces/repeatGroup.interface.js.map +1 -0
- package/lib/interfaces/repeatItem.interface.js +2 -0
- package/lib/interfaces/repeatItem.interface.js.map +1 -0
- package/lib/interfaces/tab.interface.js +2 -0
- package/lib/interfaces/tab.interface.js.map +1 -0
- package/lib/interfaces/valueSet.interface.js +18 -0
- package/lib/interfaces/valueSet.interface.js.map +1 -0
- package/lib/interfaces/variables.interface.js +18 -0
- package/lib/interfaces/variables.interface.js.map +1 -0
- package/lib/stores/useConfigStore.js +17 -0
- package/lib/stores/useConfigStore.js.map +1 -0
- package/lib/stores/useQuestionnaireResponseStore.js +39 -0
- package/lib/stores/useQuestionnaireResponseStore.js.map +1 -0
- package/lib/stores/useQuestionnaireStore.js +151 -0
- package/lib/stores/useQuestionnaireStore.js.map +1 -0
- package/lib/theme/Theme.d.ts +38 -0
- package/lib/theme/Theme.js +39 -0
- package/lib/theme/Theme.js.map +1 -0
- package/lib/theme/globalStyles.d.ts +2 -0
- package/lib/theme/globalStyles.js +64 -0
- package/lib/theme/globalStyles.js.map +1 -0
- package/lib/theme/overrides/Accordion.d.ts +14 -0
- package/lib/theme/overrides/Accordion.js +32 -0
- package/lib/theme/overrides/Accordion.js.map +1 -0
- package/lib/theme/overrides/Autocomplete.d.ts +10 -0
- package/lib/theme/overrides/Autocomplete.js +28 -0
- package/lib/theme/overrides/Autocomplete.js.map +1 -0
- package/lib/theme/overrides/Backdrop.d.ts +13 -0
- package/lib/theme/overrides/Backdrop.js +32 -0
- package/lib/theme/overrides/Backdrop.js.map +1 -0
- package/lib/theme/overrides/Button.d.ts +33 -0
- package/lib/theme/overrides/Button.js +52 -0
- package/lib/theme/overrides/Button.js.map +1 -0
- package/lib/theme/overrides/Card.d.ts +35 -0
- package/lib/theme/overrides/Card.js +49 -0
- package/lib/theme/overrides/Card.js.map +1 -0
- package/lib/theme/overrides/Input.d.ts +64 -0
- package/lib/theme/overrides/Input.js +81 -0
- package/lib/theme/overrides/Input.js.map +1 -0
- package/lib/theme/overrides/Overrides.d.ts +3 -0
- package/lib/theme/overrides/Overrides.js +31 -0
- package/lib/theme/overrides/Overrides.js.map +1 -0
- package/lib/theme/overrides/Paper.d.ts +12 -0
- package/lib/theme/overrides/Paper.js +31 -0
- package/lib/theme/overrides/Paper.js.map +1 -0
- package/lib/theme/overrides/SpeedDial.d.ts +16 -0
- package/lib/theme/overrides/SpeedDial.js +34 -0
- package/lib/theme/overrides/SpeedDial.js.map +1 -0
- package/lib/theme/overrides/Table.d.ts +11 -0
- package/lib/theme/overrides/Table.js +29 -0
- package/lib/theme/overrides/Table.js.map +1 -0
- package/lib/theme/overrides/Typography.d.ts +13 -0
- package/lib/theme/overrides/Typography.js +31 -0
- package/lib/theme/overrides/Typography.js.map +1 -0
- package/lib/theme/palette.d.ts +28 -0
- package/lib/theme/palette.js +67 -0
- package/lib/theme/palette.js.map +1 -0
- package/lib/theme/shadows.d.ts +2 -0
- package/lib/theme/shadows.js +52 -0
- package/lib/theme/shadows.js.map +1 -0
- package/lib/theme/typography.d.ts +139 -0
- package/lib/theme/typography.js +80 -0
- package/lib/theme/typography.js.map +1 -0
- package/lib/utils/calculatedExpression.js +180 -0
- package/lib/utils/calculatedExpression.js.map +1 -0
- package/lib/utils/choice.js +160 -0
- package/lib/utils/choice.js.map +1 -0
- package/lib/utils/debounce.js +19 -0
- package/lib/utils/debounce.js.map +1 -0
- package/lib/utils/emptyResource.js +25 -0
- package/lib/utils/emptyResource.js.map +1 -0
- package/lib/utils/enableWhen.js +228 -0
- package/lib/utils/enableWhen.js.map +1 -0
- package/lib/utils/enableWhenExpression.js +76 -0
- package/lib/utils/enableWhenExpression.js.map +1 -0
- package/lib/utils/fhirpath.js +98 -0
- package/lib/utils/fhirpath.js.map +1 -0
- package/lib/utils/initialiseForm.js +45 -0
- package/lib/utils/initialiseForm.js.map +1 -0
- package/lib/utils/itemControl.js +299 -0
- package/lib/utils/itemControl.js.map +1 -0
- package/lib/utils/mapItem.js +80 -0
- package/lib/utils/mapItem.js.map +1 -0
- package/lib/utils/openChoice.js +150 -0
- package/lib/utils/openChoice.js.map +1 -0
- package/lib/utils/parseInputs.js +49 -0
- package/lib/utils/parseInputs.js.map +1 -0
- package/lib/utils/populate.js +78 -0
- package/lib/utils/populate.js.map +1 -0
- package/lib/utils/populateCallback.js +40 -0
- package/lib/utils/populateCallback.js.map +1 -0
- package/lib/utils/populateContexts.js +76 -0
- package/lib/utils/populateContexts.js.map +1 -0
- package/lib/utils/populateInputParams.js +193 -0
- package/lib/utils/populateInputParams.js.map +1 -0
- package/lib/utils/qItem.js +73 -0
- package/lib/utils/qItem.js.map +1 -0
- package/lib/utils/qrItem.js +221 -0
- package/lib/utils/qrItem.js.map +1 -0
- package/lib/utils/questionnaireStoreUtils/addAdditionalVariables.js +43 -0
- package/lib/utils/questionnaireStoreUtils/addAdditionalVariables.js.map +1 -0
- package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +79 -0
- package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -0
- package/lib/utils/questionnaireStoreUtils/extractContainedValueSets.js +59 -0
- package/lib/utils/questionnaireStoreUtils/extractContainedValueSets.js.map +1 -0
- package/lib/utils/questionnaireStoreUtils/extractLaunchContext.js +18 -0
- package/lib/utils/questionnaireStoreUtils/extractLaunchContext.js.map +1 -0
- package/lib/utils/questionnaireStoreUtils/extractOtherExtensions.js +174 -0
- package/lib/utils/questionnaireStoreUtils/extractOtherExtensions.js.map +1 -0
- package/lib/utils/questionnaireStoreUtils/extractTabs.js +31 -0
- package/lib/utils/questionnaireStoreUtils/extractTabs.js.map +1 -0
- package/lib/utils/questionnaireStoreUtils/extractVariables.js +63 -0
- package/lib/utils/questionnaireStoreUtils/extractVariables.js.map +1 -0
- package/lib/utils/questionnaireStoreUtils/resolveValueSets.js +58 -0
- package/lib/utils/questionnaireStoreUtils/resolveValueSets.js.map +1 -0
- package/lib/utils/removeHidden.js +104 -0
- package/lib/utils/removeHidden.js.map +1 -0
- package/lib/utils/tabs.js +190 -0
- package/lib/utils/tabs.js.map +1 -0
- package/lib/utils/valueSet.js +126 -0
- package/lib/utils/valueSet.js.map +1 -0
- package/package.json +19 -27
- package/src/api/populate.ts +70 -0
- package/src/components/Alert.styles.ts +45 -0
- package/src/components/BackToTopButton/BackToTopButton.tsx +47 -0
- package/src/components/Box.styles.ts +33 -0
- package/src/components/FormComponents/BooleanItem/BooleanField.tsx +44 -0
- package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +82 -0
- package/src/components/FormComponents/DateItem/DateField.tsx +56 -0
- package/src/components/FormComponents/DateItem/DateItem.tsx +95 -0
- package/src/components/FormComponents/DateTimeItem/DateTimeField.tsx +58 -0
- package/src/components/FormComponents/DateTimeItem/DateTimeItem.tsx +94 -0
- package/src/components/FormComponents/DecimalItem/DecimalField.tsx +76 -0
- package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +152 -0
- package/src/components/FormComponents/DisplayItem/DisplayInstructions.styles.ts +24 -0
- package/src/components/FormComponents/DisplayItem/DisplayInstructions.tsx +38 -0
- package/src/components/FormComponents/DisplayItem/DisplayItem.tsx +43 -0
- package/src/components/FormComponents/GridGroup/GridGroup.tsx +92 -0
- package/src/components/FormComponents/GridGroup/GridRow.tsx +88 -0
- package/src/components/FormComponents/GridGroup/GridTable.tsx +77 -0
- package/src/components/FormComponents/GroupItem/GroupHeading.tsx +59 -0
- package/src/components/FormComponents/GroupItem/GroupItem.styles.ts +28 -0
- package/src/components/FormComponents/GroupItem/GroupItem.tsx +124 -0
- package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +150 -0
- package/src/components/FormComponents/GroupItem/NextTabButton.tsx +43 -0
- package/src/components/FormComponents/GroupItem/NextTabButtonWrapper.tsx +76 -0
- package/src/components/FormComponents/IntegerItem/IntegerField.tsx +76 -0
- package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +140 -0
- package/src/components/FormComponents/Item.styles.ts +30 -0
- package/src/components/FormComponents/ItemParts/ContextDisplayItem.tsx +38 -0
- package/src/components/FormComponents/ItemParts/FadingCheckIcon.tsx +36 -0
- package/src/components/FormComponents/ItemParts/ItemFieldGrid.tsx +47 -0
- package/src/components/FormComponents/ItemParts/ItemLabelText.tsx +58 -0
- package/src/components/FormComponents/ItemParts/ItemLabelWrapper.tsx +47 -0
- package/src/components/FormComponents/ItemParts/QItemCheckboxSingle.tsx +44 -0
- package/src/components/FormComponents/ItemParts/QItemCheckboxSingleWithOpenLabel.tsx +62 -0
- package/src/components/FormComponents/ItemParts/QItemRadioButtonWithOpenLabel.tsx +54 -0
- package/src/components/FormComponents/Lists.styles.ts +39 -0
- package/src/components/FormComponents/QItemChoice/QItemChoice.tsx +130 -0
- package/src/components/FormComponents/QItemChoice/QItemChoiceAutocomplete.tsx +178 -0
- package/src/components/FormComponents/QItemChoice/QItemChoiceCheckboxAnswerOption.tsx +131 -0
- package/src/components/FormComponents/QItemChoice/QItemChoiceCheckboxAnswerValueSet.tsx +126 -0
- package/src/components/FormComponents/QItemChoice/QItemChoiceRadioAnswerOption.tsx +125 -0
- package/src/components/FormComponents/QItemChoice/QItemChoiceRadioAnswerValueSet.tsx +129 -0
- package/src/components/FormComponents/QItemChoice/QItemChoiceRadioSingle.tsx +41 -0
- package/src/components/FormComponents/QItemChoice/QItemChoiceSelectAnswerOption.tsx +130 -0
- package/src/components/FormComponents/QItemChoice/QItemChoiceSelectAnswerValueSet.tsx +162 -0
- package/src/components/FormComponents/QItemOpenChoice/QItemOpenChoice.tsx +104 -0
- package/src/components/FormComponents/QItemOpenChoice/QItemOpenChoiceAutocomplete.tsx +207 -0
- package/src/components/FormComponents/QItemOpenChoice/QItemOpenChoiceCheckboxAnswerOption.tsx +194 -0
- package/src/components/FormComponents/QItemOpenChoice/QItemOpenChoiceRadioAnswerOption.tsx +190 -0
- package/src/components/FormComponents/QItemOpenChoice/QItemOpenChoiceSelectAnswerOption.tsx +149 -0
- package/src/components/FormComponents/QItemOpenChoice/QItemOpenChoiceSelectAnswerValueSet.tsx +138 -0
- package/src/components/FormComponents/RepeatGroup/AddItemButton.tsx +47 -0
- package/src/components/FormComponents/RepeatGroup/DeleteItemButton.tsx +46 -0
- package/src/components/FormComponents/RepeatGroup/RepeatGroup.tsx +125 -0
- package/src/components/FormComponents/RepeatGroup/RepeatGroupItem.tsx +66 -0
- package/src/components/FormComponents/RepeatItem/AddItemButton.tsx +47 -0
- package/src/components/FormComponents/RepeatItem/DeleteItemButton.tsx +46 -0
- package/src/components/FormComponents/RepeatItem/RepeatField.tsx +61 -0
- package/src/components/FormComponents/RepeatItem/RepeatItem.styles.tsx +32 -0
- package/src/components/FormComponents/RepeatItem/RepeatItem.tsx +116 -0
- package/src/components/FormComponents/SingleItem/SingleItem.tsx +62 -0
- package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +171 -0
- package/src/components/FormComponents/StringItem/StringField.tsx +76 -0
- package/src/components/FormComponents/StringItem/StringItem.tsx +131 -0
- package/src/components/FormComponents/Tables/DeleteRowButton.tsx +47 -0
- package/src/components/FormComponents/Tables/QItemGroupTable.tsx +171 -0
- package/src/components/FormComponents/Tables/QItemGroupTableRow.tsx +77 -0
- package/src/components/FormComponents/Tables/Table.styles.tsx +51 -0
- package/src/components/FormComponents/TextItem/TextField.tsx +74 -0
- package/src/components/FormComponents/TextItem/TextItem.tsx +128 -0
- package/src/components/FormComponents/Textfield.styles.ts +28 -0
- package/src/components/FormComponents/TimeItem/TimeField.tsx +54 -0
- package/src/components/FormComponents/TimeItem/TimeItem.tsx +94 -0
- package/src/components/FormComponents/Typography.styles.ts +24 -0
- package/src/components/FormComponents/UrlItem/UrlField.tsx +66 -0
- package/src/components/FormComponents/UrlItem/UrlItem.tsx +118 -0
- package/src/components/FormRenderer/BaseRenderer.tsx +82 -0
- package/src/components/FormRenderer/FormBodyCollapsible.tsx +96 -0
- package/src/components/FormRenderer/FormBodySingleCollapsible.tsx +76 -0
- package/src/components/FormRenderer/FormBodySingleCollapsibleWrapper.tsx +60 -0
- package/src/components/FormRenderer/FormBodyTabbed.tsx +106 -0
- package/src/components/FormRenderer/FormTitle.tsx +44 -0
- package/src/components/FormRenderer/FormTopLevelItem.tsx +93 -0
- package/src/components/FormRenderer/SmartFormsRenderer.tsx +62 -0
- package/src/components/FormRenderer/index.ts +19 -0
- package/src/components/Iconify/Iconify.tsx +38 -0
- package/src/components/Lists.styles.ts +39 -0
- package/src/components/Tabs/CompleteTabButton.tsx +42 -0
- package/src/components/Tabs/FormBodySingleTab.tsx +67 -0
- package/src/components/Tabs/FormBodyTabList.tsx +83 -0
- package/src/components/index.ts +18 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useBackToTop.ts +29 -0
- package/src/hooks/useDebounce.ts +45 -0
- package/src/hooks/useDecimalCalculatedExpression.ts +80 -0
- package/src/hooks/useHidden.ts +40 -0
- package/src/hooks/useInitialiseGroupTable.ts +42 -0
- package/src/hooks/useInitialiseRenderer.ts +62 -0
- package/src/hooks/useInitialiseRepeatAnswers.ts +42 -0
- package/src/hooks/useInitialiseRepeatGroups.ts +42 -0
- package/src/hooks/useIntegerCalculatedExpression.ts +72 -0
- package/src/hooks/useQueryClient.ts +31 -0
- package/src/hooks/useRenderingExtensions.ts +52 -0
- package/src/hooks/useResponsive.ts +51 -0
- package/src/hooks/useStringCalculatedExpression.ts +71 -0
- package/src/hooks/useTerminologyServerQuery.ts +98 -0
- package/src/hooks/useValidationError.ts +48 -0
- package/src/hooks/useValueSetCodings.ts +150 -0
- package/src/index.ts +163 -0
- package/src/interfaces/answerExpression.interface.ts +23 -0
- package/src/interfaces/calculatedExpression.interface.ts +4 -0
- package/src/interfaces/choice.enum.ts +40 -0
- package/src/interfaces/enableWhen.interface.ts +40 -0
- package/src/interfaces/groupTable.interface.ts +23 -0
- package/src/interfaces/populate.interface.ts +218 -0
- package/src/interfaces/questionnaireStore.interface.ts +36 -0
- package/src/interfaces/regex.interface.ts +21 -0
- package/src/interfaces/renderProps.interface.ts +34 -0
- package/src/interfaces/repeatGroup.interface.ts +28 -0
- package/src/interfaces/repeatItem.interface.ts +6 -0
- package/src/interfaces/tab.interface.ts +18 -0
- package/src/interfaces/valueSet.interface.ts +23 -0
- package/src/interfaces/variables.interface.ts +28 -0
- package/src/stores/useConfigStore.ts +36 -0
- package/src/stores/useQuestionnaireResponseStore.ts +58 -0
- package/src/stores/useQuestionnaireStore.ts +232 -0
- package/src/stories/SmartFormsRenderer.stories.ts +104 -0
- package/src/stories/assets/Q715.json +15086 -0
- package/src/stories/assets/QTestGrid.json +166 -0
- package/src/stories/assets/R715.json +311 -0
- package/src/stories/assets/RTestGrid.json +34 -0
- package/src/theme/Theme.tsx +107 -0
- package/src/theme/globalStyles.tsx +68 -0
- package/src/theme/overrides/Accordion.ts +34 -0
- package/src/theme/overrides/Autocomplete.ts +30 -0
- package/src/theme/overrides/Backdrop.ts +34 -0
- package/src/theme/overrides/Button.ts +54 -0
- package/src/theme/overrides/Card.ts +51 -0
- package/src/theme/overrides/Input.ts +83 -0
- package/src/theme/overrides/Overrides.ts +45 -0
- package/src/theme/overrides/Paper.ts +31 -0
- package/src/theme/overrides/SpeedDial.ts +36 -0
- package/src/theme/overrides/Table.ts +31 -0
- package/src/theme/overrides/Typography.ts +33 -0
- package/src/theme/palette.ts +100 -0
- package/src/theme/shadows.ts +54 -0
- package/src/theme/typography.ts +114 -0
- package/src/utils/calculatedExpression.ts +299 -0
- package/src/utils/choice.ts +194 -0
- package/src/utils/debounce.ts +20 -0
- package/src/utils/emptyResource.ts +28 -0
- package/src/utils/enableWhen.ts +303 -0
- package/src/utils/enableWhenExpression.ts +123 -0
- package/src/utils/fhirpath.ts +164 -0
- package/src/utils/initialiseForm.ts +81 -0
- package/src/utils/itemControl.ts +367 -0
- package/src/utils/mapItem.ts +97 -0
- package/src/utils/openChoice.ts +179 -0
- package/src/utils/parseInputs.ts +58 -0
- package/src/utils/populate.ts +117 -0
- package/src/utils/populateCallback.ts +53 -0
- package/src/utils/populateContexts.ts +112 -0
- package/src/utils/populateInputParams.ts +242 -0
- package/src/utils/qItem.ts +103 -0
- package/src/utils/qrItem.ts +250 -0
- package/src/utils/questionnaireStoreUtils/addAdditionalVariables.ts +52 -0
- package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +96 -0
- package/src/utils/questionnaireStoreUtils/extractContainedValueSets.ts +74 -0
- package/src/utils/questionnaireStoreUtils/extractLaunchContext.ts +21 -0
- package/src/utils/questionnaireStoreUtils/extractOtherExtensions.ts +239 -0
- package/src/utils/questionnaireStoreUtils/extractTabs.ts +37 -0
- package/src/utils/questionnaireStoreUtils/extractVariables.ts +77 -0
- package/src/utils/questionnaireStoreUtils/resolveValueSets.ts +68 -0
- package/src/utils/removeHidden.ts +162 -0
- package/src/utils/tabs.ts +255 -0
- package/src/utils/valueSet.ts +159 -0
- package/tsconfig.json +21 -0
- package/dist/components/FormComponents/Item.styles.d.ts +0 -6
- package/dist/components/FormComponents/RepeatItem/RepeatItem.styles.d.ts +0 -22
- package/dist/components/FormComponents/Typography.styles.d.ts +0 -6
- package/dist/components/FormRenderer/BaseFormRenderer.d.ts +0 -3
- package/dist/components/FormRenderer/Form.d.ts +0 -3
- package/dist/index.d.ts +0 -16
- package/dist/index.esm.js +0 -10650
- package/dist/index.esm.js.map +0 -1
- package/dist/index.js +0 -10710
- package/dist/index.js.map +0 -1
- package/dist/stories/SmartFormsRenderer.stories.d.ts +0 -14
- /package/{dist → lib}/api/populate.d.ts +0 -0
- /package/{dist → lib}/components/BackToTopButton/BackToTopButton.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/BooleanItem/BooleanField.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/BooleanItem/BooleanItem.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/DateItem/DateField.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/DateItem/DateItem.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/DateTimeItem/DateTimeField.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/DateTimeItem/DateTimeItem.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/DecimalItem/DecimalField.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/DecimalItem/DecimalItem.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/DisplayItem/DisplayInstructions.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/DisplayItem/DisplayItem.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/GridGroup/GridTable.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/GroupItem/GroupHeading.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/GroupItem/NextTabButton.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/GroupItem/NextTabButtonWrapper.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/IntegerItem/IntegerField.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/IntegerItem/IntegerItem.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/ItemParts/ContextDisplayItem.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/ItemParts/FadingCheckIcon.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/ItemParts/ItemFieldGrid.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/ItemParts/ItemLabelText.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/ItemParts/ItemLabelWrapper.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/ItemParts/QItemCheckboxSingle.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/ItemParts/QItemCheckboxSingleWithOpenLabel.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/ItemParts/QItemRadioButtonWithOpenLabel.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/QItemChoice/QItemChoiceCheckboxAnswerOption.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/QItemChoice/QItemChoiceCheckboxAnswerValueSet.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/QItemChoice/QItemChoiceRadioAnswerOption.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/QItemChoice/QItemChoiceRadioAnswerValueSet.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/QItemChoice/QItemChoiceRadioSingle.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/QItemChoice/QItemChoiceSelectAnswerOption.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/QItemChoice/QItemChoiceSelectAnswerValueSet.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/QItemOpenChoice/QItemOpenChoiceCheckboxAnswerOption.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/QItemOpenChoice/QItemOpenChoiceRadioAnswerOption.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/QItemOpenChoice/QItemOpenChoiceSelectAnswerValueSet.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/RepeatGroup/AddItemButton.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/RepeatGroup/DeleteItemButton.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/RepeatGroup/RepeatGroup.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/RepeatGroup/RepeatGroupItem.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/RepeatItem/AddItemButton.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/RepeatItem/DeleteItemButton.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/RepeatItem/RepeatField.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/RepeatItem/RepeatItem.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/SingleItem/SingleItem.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/SingleItem/SingleItemSwitcher.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/StringItem/StringField.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/StringItem/StringItem.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/Tables/DeleteRowButton.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/Tables/Table.styles.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/TextItem/TextField.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/TextItem/TextItem.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/TimeItem/TimeField.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/TimeItem/TimeItem.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/UrlItem/UrlField.d.ts +0 -0
- /package/{dist → lib}/components/FormComponents/UrlItem/UrlItem.d.ts +0 -0
- /package/{dist → lib}/components/FormRenderer/BaseRenderer.d.ts +0 -0
- /package/{dist → lib}/components/FormRenderer/FormBodyCollapsible.d.ts +0 -0
- /package/{dist → lib}/components/FormRenderer/FormBodySingleCollapsible.d.ts +0 -0
- /package/{dist → lib}/components/FormRenderer/FormBodyTabbed.d.ts +0 -0
- /package/{dist → lib}/components/FormRenderer/FormRenderer.d.ts +0 -0
- /package/{dist → lib}/components/FormRenderer/FormTitle.d.ts +0 -0
- /package/{dist → lib}/components/FormRenderer/FormTopLevelItem.d.ts +0 -0
- /package/{dist → lib}/components/FormRenderer/SmartFormsRenderer.d.ts +0 -0
- /package/{dist → lib}/components/FormRenderer/index.d.ts +0 -0
- /package/{dist → lib}/components/Iconify/Iconify.d.ts +0 -0
- /package/{dist → lib}/components/Tabs/CompleteTabButton.d.ts +0 -0
- /package/{dist → lib}/components/Tabs/FormBodySingleTab.d.ts +0 -0
- /package/{dist → lib}/components/Tabs/FormBodyTabList.d.ts +0 -0
- /package/{dist → lib}/components/index.d.ts +0 -0
- /package/{dist → lib}/hooks/index.d.ts +0 -0
- /package/{dist → lib}/hooks/useBackToTop.d.ts +0 -0
- /package/{dist → lib}/hooks/useDebounce.d.ts +0 -0
- /package/{dist → lib}/hooks/useDecimalCalculatedExpression.d.ts +0 -0
- /package/{dist → lib}/hooks/useHidden.d.ts +0 -0
- /package/{dist → lib}/hooks/useInitialiseGroupTable.d.ts +0 -0
- /package/{dist → lib}/hooks/useInitialiseRenderer.d.ts +0 -0
- /package/{dist → lib}/hooks/useInitialiseRepeatAnswers.d.ts +0 -0
- /package/{dist → lib}/hooks/useInitialiseRepeatGroups.d.ts +0 -0
- /package/{dist → lib}/hooks/useIntegerCalculatedExpression.d.ts +0 -0
- /package/{dist → lib}/hooks/useQueryClient.d.ts +0 -0
- /package/{dist → lib}/hooks/useRenderingExtensions.d.ts +0 -0
- /package/{dist → lib}/hooks/useResponsive.d.ts +0 -0
- /package/{dist → lib}/hooks/useStringCalculatedExpression.d.ts +0 -0
- /package/{dist → lib}/hooks/useTerminologyServerQuery.d.ts +0 -0
- /package/{dist → lib}/hooks/useValidationError.d.ts +0 -0
- /package/{dist → lib}/interfaces/answerExpression.interface.d.ts +0 -0
- /package/{dist → lib}/interfaces/calculatedExpression.interface.d.ts +0 -0
- /package/{dist → lib}/interfaces/choice.enum.d.ts +0 -0
- /package/{dist → lib}/interfaces/enableWhen.interface.d.ts +0 -0
- /package/{dist → lib}/interfaces/groupTable.interface.d.ts +0 -0
- /package/{dist → lib}/interfaces/populate.interface.d.ts +0 -0
- /package/{dist → lib}/interfaces/questionnaireStore.interface.d.ts +0 -0
- /package/{dist → lib}/interfaces/regex.interface.d.ts +0 -0
- /package/{dist → lib}/interfaces/repeatGroup.interface.d.ts +0 -0
- /package/{dist → lib}/interfaces/repeatItem.interface.d.ts +0 -0
- /package/{dist → lib}/interfaces/tab.interface.d.ts +0 -0
- /package/{dist → lib}/interfaces/valueSet.interface.d.ts +0 -0
- /package/{dist → lib}/interfaces/variables.interface.d.ts +0 -0
- /package/{dist → lib}/stores/useConfigStore.d.ts +0 -0
- /package/{dist → lib}/stores/useQuestionnaireResponseStore.d.ts +0 -0
- /package/{dist → lib}/stores/useQuestionnaireStore.d.ts +0 -0
- /package/{dist → lib}/utils/calculatedExpression.d.ts +0 -0
- /package/{dist → lib}/utils/choice.d.ts +0 -0
- /package/{dist → lib}/utils/debounce.d.ts +0 -0
- /package/{dist → lib}/utils/emptyResource.d.ts +0 -0
- /package/{dist → lib}/utils/enableWhen.d.ts +0 -0
- /package/{dist → lib}/utils/enableWhenExpression.d.ts +0 -0
- /package/{dist → lib}/utils/fhirpath.d.ts +0 -0
- /package/{dist → lib}/utils/initialiseForm.d.ts +0 -0
- /package/{dist → lib}/utils/itemControl.d.ts +0 -0
- /package/{dist → lib}/utils/mapItem.d.ts +0 -0
- /package/{dist → lib}/utils/openChoice.d.ts +0 -0
- /package/{dist → lib}/utils/parseInputs.d.ts +0 -0
- /package/{dist → lib}/utils/populate.d.ts +0 -0
- /package/{dist → lib}/utils/populateCallback.d.ts +0 -0
- /package/{dist → lib}/utils/populateContexts.d.ts +0 -0
- /package/{dist → lib}/utils/populateInputParams.d.ts +0 -0
- /package/{dist → lib}/utils/qItem.d.ts +0 -0
- /package/{dist → lib}/utils/qrItem.d.ts +0 -0
- /package/{dist → lib}/utils/questionnaireStoreUtils/addAdditionalVariables.d.ts +0 -0
- /package/{dist → lib}/utils/questionnaireStoreUtils/createQuestionaireModel.d.ts +0 -0
- /package/{dist → lib}/utils/questionnaireStoreUtils/extractContainedValueSets.d.ts +0 -0
- /package/{dist → lib}/utils/questionnaireStoreUtils/extractLaunchContext.d.ts +0 -0
- /package/{dist → lib}/utils/questionnaireStoreUtils/extractOtherExtensions.d.ts +0 -0
- /package/{dist → lib}/utils/questionnaireStoreUtils/extractTabs.d.ts +0 -0
- /package/{dist → lib}/utils/questionnaireStoreUtils/extractVariables.d.ts +0 -0
- /package/{dist → lib}/utils/questionnaireStoreUtils/resolveValueSets.d.ts +0 -0
- /package/{dist → lib}/utils/removeHidden.d.ts +0 -0
- /package/{dist → lib}/utils/tabs.d.ts +0 -0
- /package/{dist → lib}/utils/valueSet.d.ts +0 -0
- /package/{dist/setup-jest.d.ts → src/setup-jest.ts} +0 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import type {
|
|
19
|
+
Coding,
|
|
20
|
+
Expression,
|
|
21
|
+
Extension,
|
|
22
|
+
QuestionnaireItem,
|
|
23
|
+
QuestionnaireResponse
|
|
24
|
+
} from 'fhir/r4';
|
|
25
|
+
import type { RegexValidation } from '../interfaces/regex.interface';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Check if the extension has an itemControl code equal to the given itemControlCode
|
|
29
|
+
*
|
|
30
|
+
* @author Sean Fong
|
|
31
|
+
*/
|
|
32
|
+
export function isSpecificItemControl(qItem: QuestionnaireItem, itemControlCode: string): boolean {
|
|
33
|
+
const itemControl = qItem.extension?.find(
|
|
34
|
+
(extension: Extension) =>
|
|
35
|
+
extension.url === 'http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl'
|
|
36
|
+
);
|
|
37
|
+
if (itemControl) {
|
|
38
|
+
const code = itemControl.valueCodeableConcept?.coding?.find(
|
|
39
|
+
(coding: Coding) => coding.code === itemControlCode
|
|
40
|
+
);
|
|
41
|
+
if (code) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Check if the extension has an displayCategory code equal to the given displayCategory
|
|
50
|
+
*
|
|
51
|
+
* @author Sean Fong
|
|
52
|
+
*/
|
|
53
|
+
export function isSpecificDisplayCategory(
|
|
54
|
+
qItem: QuestionnaireItem,
|
|
55
|
+
itemControlCode: string
|
|
56
|
+
): boolean {
|
|
57
|
+
const displayCategory = qItem.extension?.find(
|
|
58
|
+
(extension: Extension) =>
|
|
59
|
+
extension.url === 'http://hl7.org/fhir/StructureDefinition/questionnaire-displayCategory'
|
|
60
|
+
);
|
|
61
|
+
if (displayCategory) {
|
|
62
|
+
const code = displayCategory.valueCodeableConcept?.coding?.find(
|
|
63
|
+
(coding: Coding) => coding.code === itemControlCode
|
|
64
|
+
);
|
|
65
|
+
if (code) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Check if the extension has url for items that use shortText
|
|
74
|
+
*
|
|
75
|
+
* @author Sean Fong
|
|
76
|
+
*/
|
|
77
|
+
export function getShortText(qItem: QuestionnaireItem): string | null {
|
|
78
|
+
const itemControl = qItem.extension?.find(
|
|
79
|
+
(extension: Extension) =>
|
|
80
|
+
extension.url === 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-shortText'
|
|
81
|
+
);
|
|
82
|
+
if (itemControl) {
|
|
83
|
+
if (itemControl.valueString) {
|
|
84
|
+
return itemControl.valueString;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Check if the extension has url for hidden questions
|
|
92
|
+
*
|
|
93
|
+
* @author Sean Fong
|
|
94
|
+
*/
|
|
95
|
+
export function hasHiddenExtension(qItem: QuestionnaireItem): boolean {
|
|
96
|
+
const itemControl = qItem.extension?.find(
|
|
97
|
+
(extension: Extension) =>
|
|
98
|
+
extension.url === 'http://hl7.org/fhir/StructureDefinition/questionnaire-hidden'
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
if (itemControl) {
|
|
102
|
+
if (itemControl.valueBoolean) {
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Check if an answerExpression extension is present
|
|
111
|
+
*
|
|
112
|
+
* @author Sean Fong
|
|
113
|
+
*/
|
|
114
|
+
export function getAnswerExpression(qItem: QuestionnaireItem): Expression | null {
|
|
115
|
+
const itemControl = qItem.extension?.find(
|
|
116
|
+
(extension: Extension) =>
|
|
117
|
+
extension.url ===
|
|
118
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-answerExpression' &&
|
|
119
|
+
extension.valueExpression?.language === 'text/fhirpath'
|
|
120
|
+
);
|
|
121
|
+
if (itemControl) {
|
|
122
|
+
if (itemControl.valueExpression) {
|
|
123
|
+
return itemControl.valueExpression;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Check if the extension has url for items that use open label
|
|
131
|
+
*
|
|
132
|
+
* @author Sean Fong
|
|
133
|
+
*/
|
|
134
|
+
export function getOpenLabelText(qItem: QuestionnaireItem): string | null {
|
|
135
|
+
const itemControl = qItem.extension?.find(
|
|
136
|
+
(extension: Extension) =>
|
|
137
|
+
extension.url === 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-openLabel'
|
|
138
|
+
);
|
|
139
|
+
if (itemControl) {
|
|
140
|
+
if (itemControl.valueString) {
|
|
141
|
+
return itemControl.valueString;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Check if the decimal value has a quantity precision for the decimal value
|
|
149
|
+
*
|
|
150
|
+
* @author Sean Fong
|
|
151
|
+
*/
|
|
152
|
+
export function getDecimalPrecision(qItem: QuestionnaireItem): number | null {
|
|
153
|
+
const itemControl = qItem.extension?.find(
|
|
154
|
+
(extension: Extension) =>
|
|
155
|
+
extension.url === 'http://hl7.org/fhir/StructureDefinition/quantity-precision'
|
|
156
|
+
);
|
|
157
|
+
if (itemControl) {
|
|
158
|
+
if (itemControl.valueInteger) {
|
|
159
|
+
return itemControl.valueInteger;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Check if the extension has a url for xhtml rendering
|
|
167
|
+
*
|
|
168
|
+
* @author Sean Fong
|
|
169
|
+
*/
|
|
170
|
+
export function getXHtmlString(qItem: QuestionnaireItem): string | null {
|
|
171
|
+
let xHtmlString = null;
|
|
172
|
+
if (qItem.extension) {
|
|
173
|
+
xHtmlString = getXHtmlStringFromExtension(qItem.extension);
|
|
174
|
+
if (xHtmlString) {
|
|
175
|
+
return xHtmlString;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (qItem._text?.extension) {
|
|
180
|
+
xHtmlString = getXHtmlStringFromExtension(qItem._text?.extension);
|
|
181
|
+
if (xHtmlString) {
|
|
182
|
+
return xHtmlString;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export function getXHtmlStringFromExtension(extensions: Extension[]): string | null {
|
|
190
|
+
const itemControl = extensions?.find(
|
|
191
|
+
(extension: Extension) =>
|
|
192
|
+
extension.url === 'http://hl7.org/fhir/StructureDefinition/rendering-xhtml'
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
if (itemControl) {
|
|
196
|
+
if (itemControl.valueString) {
|
|
197
|
+
return itemControl.valueString;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Check if the item label (text) has a valueMarkdown extension
|
|
206
|
+
*
|
|
207
|
+
* @author Sean Fong
|
|
208
|
+
*/
|
|
209
|
+
export function getMarkdownString(qItem: QuestionnaireItem): string | null {
|
|
210
|
+
const itemControl = qItem._text?.extension?.find(
|
|
211
|
+
(extension: Extension) =>
|
|
212
|
+
extension.url === 'http://hl7.org/fhir/StructureDefinition/rendering-markdown'
|
|
213
|
+
);
|
|
214
|
+
|
|
215
|
+
if (itemControl) {
|
|
216
|
+
if (itemControl.valueMarkdown) {
|
|
217
|
+
return itemControl.valueMarkdown;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Get questionnaire name from questionnaireResponse
|
|
225
|
+
* If questionnaireResponse does not have a name, fallback to questionnaireResponse questionnaireId
|
|
226
|
+
*
|
|
227
|
+
* @author Sean Fong
|
|
228
|
+
*/
|
|
229
|
+
export function getQuestionnaireNameFromResponse(
|
|
230
|
+
questionnaireResponse: QuestionnaireResponse
|
|
231
|
+
): string {
|
|
232
|
+
const itemControl = questionnaireResponse._questionnaire?.extension?.find(
|
|
233
|
+
(extension: Extension) => extension.url === 'http://hl7.org/fhir/StructureDefinition/display'
|
|
234
|
+
);
|
|
235
|
+
|
|
236
|
+
if (itemControl) {
|
|
237
|
+
if (itemControl.valueString) {
|
|
238
|
+
return itemControl.valueString.charAt(0).toUpperCase() + itemControl.valueString.slice(1);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return questionnaireResponse.id ?? 'Unnamed Response';
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Get text display prompt for items with itemControlCode prompt and has a prompt childItem
|
|
247
|
+
*
|
|
248
|
+
* @author Sean Fong
|
|
249
|
+
*/
|
|
250
|
+
export function getTextDisplayPrompt(qItem: QuestionnaireItem): string {
|
|
251
|
+
if (qItem.item) {
|
|
252
|
+
for (const childItem of qItem.item) {
|
|
253
|
+
if (childItem.type === 'display' && isSpecificItemControl(childItem, 'prompt')) {
|
|
254
|
+
const promptText = `${childItem.text}`;
|
|
255
|
+
return promptText[0].toUpperCase() + promptText.substring(1);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return '';
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Check if item is readonly
|
|
264
|
+
*
|
|
265
|
+
* @author Sean Fong
|
|
266
|
+
*/
|
|
267
|
+
export function getReadOnly(qItem: QuestionnaireItem): boolean {
|
|
268
|
+
return !!qItem.readOnly;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Get decimal text display unit for items with itemControlCode unit and has a unit childItem
|
|
273
|
+
*
|
|
274
|
+
* @author Sean Fong
|
|
275
|
+
*/
|
|
276
|
+
export function getTextDisplayUnit(qItem: QuestionnaireItem): string {
|
|
277
|
+
if (qItem.item) {
|
|
278
|
+
for (const childItem of qItem.item) {
|
|
279
|
+
if (childItem.type === 'display' && isSpecificItemControl(childItem, 'unit')) {
|
|
280
|
+
return `${childItem.text}`;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return '';
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Get text display instructions for items with itemControlCode instructions and has an instructions childItem
|
|
289
|
+
*
|
|
290
|
+
* @author Sean Fong
|
|
291
|
+
*/
|
|
292
|
+
export function getTextDisplayInstructions(qItem: QuestionnaireItem): string {
|
|
293
|
+
if (qItem.item) {
|
|
294
|
+
for (const childItem of qItem.item) {
|
|
295
|
+
if (childItem.type === 'display' && isSpecificDisplayCategory(childItem, 'instructions')) {
|
|
296
|
+
return `${childItem.text}`;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return '';
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Get entry format if its extension is present
|
|
305
|
+
* i.e. DD-MM-YYYY for dates, HH:MM for times etc.
|
|
306
|
+
*
|
|
307
|
+
* @author Sean Fong
|
|
308
|
+
*/
|
|
309
|
+
export function getEntryFormat(qItem: QuestionnaireItem): string {
|
|
310
|
+
const itemControl = qItem.extension?.find(
|
|
311
|
+
(extension: Extension) =>
|
|
312
|
+
extension.url === 'http://hl7.org/fhir/StructureDefinition/entryFormat'
|
|
313
|
+
);
|
|
314
|
+
|
|
315
|
+
if (itemControl) {
|
|
316
|
+
if (itemControl.valueString) {
|
|
317
|
+
return itemControl.valueString;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return '';
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Get entry format if its extension is present
|
|
325
|
+
* i.e. DD-MM-YYYY for dates, HH:MM for times etc.
|
|
326
|
+
*
|
|
327
|
+
* @author Sean Fong
|
|
328
|
+
*/
|
|
329
|
+
export function getRegexValidation(qItem: QuestionnaireItem): RegexValidation | null {
|
|
330
|
+
const itemControl = qItem.extension?.find(
|
|
331
|
+
(extension: Extension) => extension.url === 'http://hl7.org/fhir/StructureDefinition/regex'
|
|
332
|
+
);
|
|
333
|
+
|
|
334
|
+
// Get regex expression from extension
|
|
335
|
+
if (itemControl) {
|
|
336
|
+
const extensionString = itemControl.valueString;
|
|
337
|
+
if (extensionString) {
|
|
338
|
+
let regexString;
|
|
339
|
+
if (extensionString.includes('matches(')) {
|
|
340
|
+
regexString = extensionString.substring(
|
|
341
|
+
extensionString.indexOf("matches('") + "matches('".length,
|
|
342
|
+
extensionString.lastIndexOf("')")
|
|
343
|
+
);
|
|
344
|
+
} else {
|
|
345
|
+
regexString = extensionString;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
return { expression: new RegExp(regexString), feedback: null };
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// Get regex expression from item types if regex extensions not present
|
|
353
|
+
if (qItem.type === 'url') {
|
|
354
|
+
return { expression: new RegExp(/^\S*$/), feedback: 'URLs should not contain any whitespaces' };
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
return null;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Get maximum length of characters allowed if present
|
|
362
|
+
*
|
|
363
|
+
* @author Sean Fong
|
|
364
|
+
*/
|
|
365
|
+
export function getMaxLength(qItem: QuestionnaireItem): number | null {
|
|
366
|
+
return qItem.maxLength ?? null;
|
|
367
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
19
|
+
import { isRepeatItemAndNotCheckbox } from './qItem';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Generate an array of QuestionnaireResponseItems corresponding to its QuestionnaireItem indexes an array.
|
|
23
|
+
* QuestionnaireItems without a corresponding QuestionnaireResponseItem is set as undefined.
|
|
24
|
+
* i.e. QItems = [QItem0, QItem1, QItem2]. Only QItem0 and QItem2 have QrItems
|
|
25
|
+
* Generated array: [QrItem0, undefined, QrItem2]
|
|
26
|
+
*
|
|
27
|
+
* @author Sean Fong
|
|
28
|
+
*/
|
|
29
|
+
export function getQrItemsIndex(
|
|
30
|
+
qItems: QuestionnaireItem[],
|
|
31
|
+
qrItems: QuestionnaireResponseItem[],
|
|
32
|
+
qItemsIndexMap: Record<string, number>
|
|
33
|
+
): (QuestionnaireResponseItem | QuestionnaireResponseItem[])[] {
|
|
34
|
+
// Generate a <linkId, QrItem OR QrItems> dictionary
|
|
35
|
+
const qrItemsCollected: Record<string, QuestionnaireResponseItem | QuestionnaireResponseItem[]> =
|
|
36
|
+
{};
|
|
37
|
+
for (const qrItem of qrItems) {
|
|
38
|
+
const linkId = qrItem.linkId;
|
|
39
|
+
|
|
40
|
+
// If item already exists, it has multiple qrItems and is therefore a repeat group
|
|
41
|
+
if (qrItemsCollected[linkId]) {
|
|
42
|
+
let storedValue = qrItemsCollected[linkId];
|
|
43
|
+
|
|
44
|
+
// Create an array out of initial stored value if it is not an array initially
|
|
45
|
+
if (!Array.isArray(storedValue)) {
|
|
46
|
+
storedValue = [storedValue];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Push new qrItem into array
|
|
50
|
+
storedValue.push(qrItem);
|
|
51
|
+
qrItemsCollected[linkId] = storedValue;
|
|
52
|
+
} else {
|
|
53
|
+
const qItemIndex = qItemsIndexMap[linkId];
|
|
54
|
+
|
|
55
|
+
// Assign either a qrItem array or a single qrItem based on whether it is a repeatGroup or not
|
|
56
|
+
const isRepeatGroup =
|
|
57
|
+
isRepeatItemAndNotCheckbox(qItems[qItemIndex]) && qItems[qItemIndex].type === 'group';
|
|
58
|
+
|
|
59
|
+
qrItemsCollected[linkId] = isRepeatGroup ? [qrItem] : qrItem;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Generate an array of QuestionnaireResponseItems corresponding to its QuestionnaireItem indexes in sequence
|
|
64
|
+
// Qitems with no answers has a default value of undefined
|
|
65
|
+
return qItems.reduce(
|
|
66
|
+
(mapping: (QuestionnaireResponseItem | QuestionnaireResponseItem[])[], qItem, i) => {
|
|
67
|
+
const qrItemOrItems = qrItemsCollected[qItem.linkId];
|
|
68
|
+
// If qItem is a repeat group, default its value to an array instead of undefined
|
|
69
|
+
if (isRepeatItemAndNotCheckbox(qItem) && qItem.type === 'group') {
|
|
70
|
+
mapping[i] = qrItemOrItems ? qrItemsCollected[qItem.linkId] : [];
|
|
71
|
+
} else {
|
|
72
|
+
mapping[i] = qrItemsCollected[qItem.linkId];
|
|
73
|
+
}
|
|
74
|
+
return mapping;
|
|
75
|
+
},
|
|
76
|
+
[]
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Generate a dictionary of QuestionnaireItems linkIds mapped to their respective array indexes <linkId, QItemIndex>
|
|
82
|
+
* i.e. { ee2589d5: 0, f9aaa187: 1, 88cab112: 2 }
|
|
83
|
+
* where ee2589d5, f9aaa187 and 88cab112 are linkIds of QItem0, QItem1 and QItem2 respectively
|
|
84
|
+
*
|
|
85
|
+
* @author Sean Fong
|
|
86
|
+
*/
|
|
87
|
+
export function mapQItemsIndex(qGroup: QuestionnaireItem): Record<string, number> {
|
|
88
|
+
if (!qGroup.item) {
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// generate a <linkId, QItemIndex> dictionary
|
|
93
|
+
return qGroup.item.reduce((mapping: Record<string, number>, item, i) => {
|
|
94
|
+
mapping[item.linkId] = i;
|
|
95
|
+
return mapping;
|
|
96
|
+
}, {});
|
|
97
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import type {
|
|
19
|
+
Coding,
|
|
20
|
+
QuestionnaireItem,
|
|
21
|
+
QuestionnaireItemAnswerOption,
|
|
22
|
+
QuestionnaireResponseItem,
|
|
23
|
+
QuestionnaireResponseItemAnswer
|
|
24
|
+
} from 'fhir/r4';
|
|
25
|
+
import { CheckBoxOptionType, QItemOpenChoiceControl } from '../interfaces/choice.enum';
|
|
26
|
+
import { isSpecificItemControl } from './itemControl';
|
|
27
|
+
import { findInAnswerOptions, findInAnswerValueSetCodings } from './choice';
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Update open-choice checkbox group answers based on checkbox changes
|
|
31
|
+
*
|
|
32
|
+
* @author Sean Fong
|
|
33
|
+
*/
|
|
34
|
+
export function updateQrOpenChoiceCheckboxAnswers(
|
|
35
|
+
changedOptionAnswer: string | null,
|
|
36
|
+
changedOpenLabelAnswer: string | null,
|
|
37
|
+
answers: QuestionnaireResponseItemAnswer[],
|
|
38
|
+
answerOptions: QuestionnaireItemAnswerOption[] | Coding[],
|
|
39
|
+
qrChoiceCheckbox: QuestionnaireResponseItem,
|
|
40
|
+
checkboxOptionType: CheckBoxOptionType,
|
|
41
|
+
isMultiSelection: boolean
|
|
42
|
+
): QuestionnaireResponseItem | null {
|
|
43
|
+
if (changedOptionAnswer) {
|
|
44
|
+
const newAnswer =
|
|
45
|
+
checkboxOptionType === CheckBoxOptionType.AnswerOption
|
|
46
|
+
? findInAnswerOptions(answerOptions, changedOptionAnswer)
|
|
47
|
+
: findInAnswerValueSetCodings(answerOptions, changedOptionAnswer);
|
|
48
|
+
if (!newAnswer) return null;
|
|
49
|
+
|
|
50
|
+
if (isMultiSelection && answers.length > 0) {
|
|
51
|
+
// check if new answer exists in existing answers
|
|
52
|
+
const newAnswerInAnswers =
|
|
53
|
+
checkboxOptionType === CheckBoxOptionType.AnswerOption
|
|
54
|
+
? findInAnswerOptions(answers, changedOptionAnswer)
|
|
55
|
+
: findInAnswerValueSetCodings(answers, changedOptionAnswer);
|
|
56
|
+
|
|
57
|
+
if (newAnswerInAnswers) {
|
|
58
|
+
// remove new answer from qrAnswers
|
|
59
|
+
const newAnswers = [...answers].filter(
|
|
60
|
+
(answer) => JSON.stringify(answer) !== JSON.stringify(newAnswerInAnswers)
|
|
61
|
+
);
|
|
62
|
+
return { ...qrChoiceCheckbox, answer: newAnswers };
|
|
63
|
+
} else {
|
|
64
|
+
// add new answer to qrAnswers
|
|
65
|
+
return { ...qrChoiceCheckbox, answer: [...answers, newAnswer] };
|
|
66
|
+
}
|
|
67
|
+
} else {
|
|
68
|
+
return answers.some((answer) => JSON.stringify(answer) === JSON.stringify(newAnswer))
|
|
69
|
+
? { ...qrChoiceCheckbox, answer: [] }
|
|
70
|
+
: { ...qrChoiceCheckbox, answer: [newAnswer] };
|
|
71
|
+
}
|
|
72
|
+
} else if (changedOpenLabelAnswer !== null) {
|
|
73
|
+
const newOpenLabelAnswer = { valueString: changedOpenLabelAnswer };
|
|
74
|
+
const oldOpenLabelAnswer: QuestionnaireResponseItemAnswer | null = getOldOpenLabelAnswer(
|
|
75
|
+
answers,
|
|
76
|
+
answerOptions
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
if (answers.length === 0) {
|
|
80
|
+
if (changedOpenLabelAnswer === '') {
|
|
81
|
+
return { linkId: qrChoiceCheckbox.linkId, text: qrChoiceCheckbox.text };
|
|
82
|
+
} else {
|
|
83
|
+
return { ...qrChoiceCheckbox, answer: [newOpenLabelAnswer] };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (isMultiSelection) {
|
|
88
|
+
if (!oldOpenLabelAnswer) {
|
|
89
|
+
// append newOpenLabel if oldOpenLabel doesnt exist
|
|
90
|
+
return {
|
|
91
|
+
...qrChoiceCheckbox,
|
|
92
|
+
answer: [...answers, newOpenLabelAnswer]
|
|
93
|
+
};
|
|
94
|
+
} else {
|
|
95
|
+
// An oldOpenLabel already exists
|
|
96
|
+
// Remove oldOpenLabel from answers
|
|
97
|
+
const answersWithoutOpenLabel = [...answers].filter(
|
|
98
|
+
(answer) => JSON.stringify(answer) !== JSON.stringify(oldOpenLabelAnswer)
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
if (
|
|
102
|
+
JSON.stringify(newOpenLabelAnswer) === JSON.stringify(oldOpenLabelAnswer) ||
|
|
103
|
+
changedOpenLabelAnswer === ''
|
|
104
|
+
) {
|
|
105
|
+
// User unchecks openLabel checkbox or clears field
|
|
106
|
+
if (answersWithoutOpenLabel.length > 0) {
|
|
107
|
+
return { ...qrChoiceCheckbox, answer: answersWithoutOpenLabel };
|
|
108
|
+
} else {
|
|
109
|
+
return { linkId: qrChoiceCheckbox.linkId, text: qrChoiceCheckbox.text };
|
|
110
|
+
}
|
|
111
|
+
} else {
|
|
112
|
+
// User changes openLabel value
|
|
113
|
+
return {
|
|
114
|
+
...qrChoiceCheckbox,
|
|
115
|
+
answer: [...answersWithoutOpenLabel, newOpenLabelAnswer]
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
} else {
|
|
120
|
+
if (!oldOpenLabelAnswer || newOpenLabelAnswer !== oldOpenLabelAnswer) {
|
|
121
|
+
// set newOpenLabel as sole answer if oldOpenLabel doesnt exist OR if user changed openLabel value
|
|
122
|
+
return { ...qrChoiceCheckbox, answer: [newOpenLabelAnswer] };
|
|
123
|
+
} else {
|
|
124
|
+
// User unchecks openLabel checkbox
|
|
125
|
+
return { ...qrChoiceCheckbox, answer: [] };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
} else {
|
|
129
|
+
// Default condition which will not happen
|
|
130
|
+
return { ...qrChoiceCheckbox };
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export function getOldOpenLabelAnswer(
|
|
135
|
+
answers: QuestionnaireResponseItemAnswer[],
|
|
136
|
+
options: QuestionnaireItemAnswerOption[]
|
|
137
|
+
): QuestionnaireResponseItemAnswer | null {
|
|
138
|
+
const openLabelAnswers = answers.filter((answer) => options.indexOf(answer) === -1);
|
|
139
|
+
return openLabelAnswers.length > 0 ? openLabelAnswers[0] : null;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Get openChoice control type from qItem
|
|
144
|
+
* defaults to select if no control code is provided
|
|
145
|
+
*
|
|
146
|
+
* @author Sean Fong
|
|
147
|
+
*/
|
|
148
|
+
export function getOpenChoiceControlType(qItem: QuestionnaireItem) {
|
|
149
|
+
if (isSpecificItemControl(qItem, 'autocomplete')) {
|
|
150
|
+
return QItemOpenChoiceControl.Autocomplete;
|
|
151
|
+
} else if (isSpecificItemControl(qItem, 'check-box')) {
|
|
152
|
+
return QItemOpenChoiceControl.Checkbox;
|
|
153
|
+
} else if (isSpecificItemControl(qItem, 'radio-button')) {
|
|
154
|
+
return QItemOpenChoiceControl.Radio;
|
|
155
|
+
} else {
|
|
156
|
+
return QItemOpenChoiceControl.Select;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Get string label from given answerOption
|
|
162
|
+
*
|
|
163
|
+
* @author Sean Fong
|
|
164
|
+
*/
|
|
165
|
+
export function getAnswerOptionLabel(option: QuestionnaireItemAnswerOption | string): string {
|
|
166
|
+
if (typeof option === 'string') {
|
|
167
|
+
return option;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (option['valueCoding']) {
|
|
171
|
+
return `${option.valueCoding.display}`;
|
|
172
|
+
} else if (option['valueString']) {
|
|
173
|
+
return option.valueString;
|
|
174
|
+
} else if (option['valueInteger']) {
|
|
175
|
+
return option.valueInteger.toString();
|
|
176
|
+
} else {
|
|
177
|
+
return '';
|
|
178
|
+
}
|
|
179
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
export function parseValidInteger(input: string): number {
|
|
19
|
+
const validNumericString = parseValidNumericString(input);
|
|
20
|
+
|
|
21
|
+
return parseInt(validNumericString);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function parseValidNumericString(input: string): string {
|
|
25
|
+
const hasNumber = /\d/;
|
|
26
|
+
if (!hasNumber.test(input)) {
|
|
27
|
+
return '0';
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return input;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function parseDecimalStringWithPrecision(input: string, precision: number | null): string {
|
|
34
|
+
input = parseValidNumericString(input);
|
|
35
|
+
|
|
36
|
+
let parsedInput = parseFloat(input).toString();
|
|
37
|
+
|
|
38
|
+
// restore decimal digits if parseFloat() removes them
|
|
39
|
+
const decimalPoint = input.indexOf('.');
|
|
40
|
+
if (decimalPoint !== -1) {
|
|
41
|
+
const decimalDigits = input.slice(decimalPoint);
|
|
42
|
+
if (parsedInput.indexOf('.') === -1) {
|
|
43
|
+
parsedInput += decimalDigits;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// truncate decimal digits based on precision
|
|
48
|
+
const parsedDecimalPoint = input.indexOf('.');
|
|
49
|
+
if (precision && parsedDecimalPoint !== -1) {
|
|
50
|
+
parsedInput = parsedInput.substring(0, parsedDecimalPoint + precision + 1);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return parsedInput;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function parseDecimalStringToFloat(input: string, precision: number): number {
|
|
57
|
+
return parseFloat(parseFloat(input).toFixed(precision));
|
|
58
|
+
}
|