@aehrc/smart-forms-renderer 0.7.2 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/Alert.styles.d.ts +2 -7
- package/lib/components/Box.styles.d.ts +6 -21
- package/lib/components/FormComponents/BooleanItem/BooleanItem.d.ts +2 -2
- package/lib/components/FormComponents/BooleanItem/BooleanItem.js +5 -4
- package/lib/components/FormComponents/BooleanItem/BooleanItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js +6 -6
- package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.d.ts +12 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.js +39 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.js.map +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.d.ts +3 -3
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +17 -29
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.d.ts +13 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.js +42 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.js.map +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.d.ts +4 -3
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +17 -24
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.d.ts +3 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js +8 -8
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.d.ts +12 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js +27 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js.map +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.d.ts +3 -3
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +14 -29
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.d.ts +14 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js +42 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js.map +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.d.ts +3 -3
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +14 -26
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.d.ts +11 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js +41 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js.map +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +12 -27
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.d.ts +13 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js +42 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js.map +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js +13 -22
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/DateItem/DateItem.d.ts +2 -1
- package/lib/components/FormComponents/DateItem/DateItem.js +5 -4
- package/lib/components/FormComponents/DateItem/DateItem.js.map +1 -1
- package/lib/components/FormComponents/DateItem/DatePicker.d.ts +2 -0
- package/lib/components/FormComponents/DateItem/DatePicker.js +42 -0
- package/lib/components/FormComponents/DateItem/DatePicker.js.map +1 -0
- package/lib/components/FormComponents/DateItem/DatePickerField.d.ts +8 -0
- package/{src/components/FormComponents/Typography.styles.ts → lib/components/FormComponents/DateItem/DatePickerField.js} +8 -9
- package/lib/components/FormComponents/DateItem/DatePickerField.js.map +1 -0
- package/lib/components/FormComponents/DateTimeItem/DateTimeItem.d.ts +2 -2
- package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js +5 -4
- package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js.map +1 -1
- package/lib/components/FormComponents/DecimalItem/DecimalItem.d.ts +2 -2
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js +5 -4
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.d.ts +1 -0
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js +2 -2
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js.map +1 -1
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.d.ts +2 -7
- package/lib/components/FormComponents/DisplayItem/DisplayItem.js +2 -2
- package/lib/components/FormComponents/DisplayItem/DisplayItem.js.map +1 -1
- package/lib/components/FormComponents/GridGroup/GridGroup.d.ts +2 -2
- package/lib/components/FormComponents/GridGroup/GridGroup.js +6 -4
- package/lib/components/FormComponents/GridGroup/GridGroup.js.map +1 -1
- package/lib/components/FormComponents/GridGroup/GridRow.d.ts +2 -1
- package/lib/components/FormComponents/GridGroup/GridRow.js +2 -2
- package/lib/components/FormComponents/GridGroup/GridRow.js.map +1 -1
- package/lib/components/FormComponents/GridGroup/GridTable.d.ts +2 -1
- package/lib/components/FormComponents/GridGroup/GridTable.js +2 -2
- package/lib/components/FormComponents/GridGroup/GridTable.js.map +1 -1
- package/lib/components/FormComponents/GroupItem/GroupHeading.d.ts +1 -0
- package/lib/components/FormComponents/GroupItem/GroupHeading.js +6 -5
- package/lib/components/FormComponents/GroupItem/GroupHeading.js.map +1 -1
- package/lib/components/FormComponents/GroupItem/GroupItem.d.ts +2 -3
- package/lib/components/FormComponents/GroupItem/GroupItem.js +5 -3
- package/lib/components/FormComponents/GroupItem/GroupItem.js.map +1 -1
- package/lib/components/FormComponents/GroupItem/GroupItem.styles.d.ts +2 -6
- package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.d.ts +2 -2
- package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +12 -12
- package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/IntegerItem/IntegerItem.d.ts +2 -2
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js +5 -4
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
- package/lib/components/FormComponents/Item.styles.d.ts +2 -6
- package/lib/components/FormComponents/Item.styles.js +2 -6
- package/lib/components/FormComponents/Item.styles.js.map +1 -1
- package/lib/components/FormComponents/ItemParts/ItemFieldGrid.d.ts +1 -0
- package/lib/components/FormComponents/ItemParts/ItemFieldGrid.js +3 -3
- package/lib/components/FormComponents/ItemParts/ItemFieldGrid.js.map +1 -1
- package/lib/components/FormComponents/ItemParts/ItemLabelText.d.ts +1 -0
- package/lib/components/FormComponents/ItemParts/ItemLabelText.js +4 -6
- package/lib/components/FormComponents/ItemParts/ItemLabelText.js.map +1 -1
- package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.d.ts +1 -0
- package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.js +2 -2
- package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.js.map +1 -1
- package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.d.ts +8 -0
- package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.js +37 -0
- package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.js.map +1 -0
- package/lib/components/FormComponents/ItemParts/RadioButtons.d.ts +8 -0
- package/lib/components/FormComponents/ItemParts/RadioButtons.js +37 -0
- package/lib/components/FormComponents/ItemParts/RadioButtons.js.map +1 -0
- package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.d.ts +8 -0
- package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.js +37 -0
- package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.js.map +1 -0
- package/lib/components/FormComponents/Lists.styles.d.ts +2 -9
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.d.ts +21 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js +48 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js.map +1 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.d.ts +0 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.js +2 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.js.map +1 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.d.ts +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js +16 -39
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.d.ts +17 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.js +42 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.js.map +1 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.d.ts +3 -3
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js +27 -39
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.d.ts +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js +6 -6
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.d.ts +15 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.js +29 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.js.map +1 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.d.ts +3 -3
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js +10 -29
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.d.ts +12 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js +14 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js.map +1 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.d.ts +0 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.js +2 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.js.map +1 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.d.ts +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js +23 -27
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.d.ts +13 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js +16 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js.map +1 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.d.ts +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js +13 -18
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/RepeatGroup/AddItemButton.d.ts +1 -0
- package/lib/components/FormComponents/RepeatGroup/AddItemButton.js +2 -2
- package/lib/components/FormComponents/RepeatGroup/AddItemButton.js.map +1 -1
- package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.d.ts +1 -0
- package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.js +2 -2
- package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.js.map +1 -1
- package/lib/components/FormComponents/RepeatGroup/RepeatGroup.d.ts +2 -2
- package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js +8 -6
- package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js.map +1 -1
- package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.d.ts +2 -2
- package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js +5 -3
- package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js.map +1 -1
- package/lib/components/FormComponents/RepeatItem/AddItemButton.d.ts +1 -0
- package/lib/components/FormComponents/RepeatItem/AddItemButton.js +2 -2
- package/lib/components/FormComponents/RepeatItem/AddItemButton.js.map +1 -1
- package/lib/components/FormComponents/RepeatItem/DeleteItemButton.d.ts +1 -0
- package/lib/components/FormComponents/RepeatItem/DeleteItemButton.js +2 -2
- package/lib/components/FormComponents/RepeatItem/DeleteItemButton.js.map +1 -1
- package/lib/components/FormComponents/RepeatItem/RepeatField.d.ts +2 -2
- package/lib/components/FormComponents/RepeatItem/RepeatField.js +5 -3
- package/lib/components/FormComponents/RepeatItem/RepeatField.js.map +1 -1
- package/lib/components/FormComponents/RepeatItem/RepeatItem.d.ts +2 -2
- package/lib/components/FormComponents/RepeatItem/RepeatItem.js +6 -5
- package/lib/components/FormComponents/RepeatItem/RepeatItem.js.map +1 -1
- package/lib/components/FormComponents/RepeatItem/RepeatItem.styles.d.ts +4 -18
- package/lib/components/FormComponents/SingleItem/SingleItem.d.ts +2 -2
- package/lib/components/FormComponents/SingleItem/SingleItem.js +4 -2
- package/lib/components/FormComponents/SingleItem/SingleItem.js.map +1 -1
- package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.d.ts +2 -2
- package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js +12 -12
- package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/StringItem/StringItem.d.ts +2 -2
- package/lib/components/FormComponents/StringItem/StringItem.js +5 -4
- package/lib/components/FormComponents/StringItem/StringItem.js.map +1 -1
- package/lib/components/FormComponents/Tables/AddItemButton.d.ts +8 -0
- package/lib/components/FormComponents/Tables/AddItemButton.js +28 -0
- package/lib/components/FormComponents/Tables/AddItemButton.js.map +1 -0
- package/lib/components/FormComponents/Tables/AddRowButton.d.ts +9 -0
- package/lib/components/FormComponents/Tables/AddRowButton.js +28 -0
- package/lib/components/FormComponents/Tables/AddRowButton.js.map +1 -0
- package/lib/components/FormComponents/Tables/DeleteRowButton.d.ts +1 -0
- package/lib/components/FormComponents/Tables/DeleteRowButton.js +2 -2
- package/lib/components/FormComponents/Tables/DeleteRowButton.js.map +1 -1
- package/lib/components/FormComponents/Tables/GroupTable.d.ts +10 -0
- package/lib/components/FormComponents/Tables/GroupTable.js +110 -0
- package/lib/components/FormComponents/Tables/GroupTable.js.map +1 -0
- package/lib/components/FormComponents/Tables/GroupTableRow.d.ts +11 -0
- package/lib/components/FormComponents/Tables/GroupTableRow.js +46 -0
- package/lib/components/FormComponents/Tables/GroupTableRow.js.map +1 -0
- package/lib/components/FormComponents/Tables/QItemGroupTable.js +5 -7
- package/lib/components/FormComponents/Tables/QItemGroupTable.js.map +1 -1
- package/lib/components/FormComponents/Tables/QItemGroupTableRow.js +2 -2
- package/lib/components/FormComponents/Tables/QItemGroupTableRow.js.map +1 -1
- package/lib/components/FormComponents/Tables/index.d.ts +1 -1
- package/lib/components/FormComponents/Tables/index.js +1 -1
- package/lib/components/FormComponents/Tables/index.js.map +1 -1
- package/lib/components/FormComponents/TextItem/TextItem.d.ts +2 -2
- package/lib/components/FormComponents/TextItem/TextItem.js +5 -4
- package/lib/components/FormComponents/TextItem/TextItem.js.map +1 -1
- package/lib/components/FormComponents/TimeItem/TimeItem.d.ts +2 -2
- package/lib/components/FormComponents/TimeItem/TimeItem.js +5 -4
- package/lib/components/FormComponents/TimeItem/TimeItem.js.map +1 -1
- package/lib/components/FormComponents/UrlItem/UrlItem.d.ts +2 -2
- package/lib/components/FormComponents/UrlItem/UrlItem.js +5 -4
- package/lib/components/FormComponents/UrlItem/UrlItem.js.map +1 -1
- package/lib/components/Lists.styles.d.ts +2 -9
- package/lib/components/Renderer/FormBodyTabbed.js +1 -1
- package/lib/components/Renderer/FormBodyTabbed.js.map +1 -1
- package/lib/components/Renderer/FormTopLevelItem.js +7 -5
- package/lib/components/Renderer/FormTopLevelItem.js.map +1 -1
- package/lib/components/Tabs/FormBodySingleTab.js +1 -1
- package/lib/components/Tabs/FormBodyTabList.d.ts +1 -0
- package/lib/components/Tabs/FormBodyTabList.js +3 -4
- package/lib/components/Tabs/FormBodyTabList.js.map +1 -1
- package/lib/components/Tabs/FormBodyTabListWrapper.d.ts +1 -1
- package/lib/components/Tabs/FormBodyTabListWrapper.js +6 -13
- package/lib/components/Tabs/FormBodyTabListWrapper.js.map +1 -1
- package/lib/components/Tabs/ShowCompletedTabsSection.d.ts +7 -0
- package/lib/components/Tabs/ShowCompletedTabsSection.js +34 -0
- package/lib/components/Tabs/ShowCompletedTabsSection.js.map +1 -0
- package/lib/hooks/useContextDisplayItems.d.ts +6 -0
- package/lib/hooks/useContextDisplayItems.js +30 -0
- package/lib/hooks/useContextDisplayItems.js.map +1 -0
- package/lib/hooks/useInitialiseRenderer.js +2 -2
- package/lib/hooks/useInitialiseRenderer.js.map +1 -1
- package/lib/hooks/useInitialiseRepeatGroups.d.ts +1 -1
- package/lib/hooks/useMinimalStringCalculatedExpression.d.ts +11 -0
- package/lib/hooks/useMinimalStringCalculatedExpression.js +37 -0
- package/lib/hooks/useMinimalStringCalculatedExpression.js.map +1 -0
- package/lib/hooks/useNumberInput.d.ts +1 -1
- package/lib/hooks/useNumberInput.js.map +1 -1
- package/lib/hooks/useReadOnly.d.ts +3 -0
- package/lib/hooks/useReadOnly.js +26 -0
- package/lib/hooks/useReadOnly.js.map +1 -0
- package/lib/hooks/useStringInput.d.ts +1 -1
- package/lib/hooks/useStringInput.js.map +1 -1
- package/lib/hooks/useTerminologyServerQuery.js +3 -6
- package/lib/hooks/useTerminologyServerQuery.js.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/interfaces/calculatedExpression.interface.d.ts +1 -1
- package/lib/interfaces/renderProps.interface.d.ts +6 -0
- package/lib/stores/useQuestionnaireResponseStore.d.ts +2 -1
- package/lib/stores/useQuestionnaireResponseStore.js +5 -3
- package/lib/stores/useQuestionnaireResponseStore.js.map +1 -1
- 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/typography.d.ts +0 -2
- package/lib/theme/typography.js +3 -5
- package/lib/theme/typography.js.map +1 -1
- package/lib/utils/calculatedExpression.d.ts +12 -0
- package/lib/utils/calculatedExpression.js +54 -8
- package/lib/utils/calculatedExpression.js.map +1 -1
- package/lib/utils/qrItem.d.ts +2 -3
- package/lib/utils/qrItem.js +2 -3
- package/lib/utils/qrItem.js.map +1 -1
- package/lib/utils/repopulateIntoResponse.d.ts +2 -2
- package/lib/utils/repopulateItems.js +0 -1
- package/lib/utils/repopulateItems.js.map +1 -1
- package/package.json +15 -15
- package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +8 -5
- package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +9 -7
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.tsx +85 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +48 -60
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.tsx +79 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +50 -52
- package/src/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.tsx +24 -9
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.tsx +48 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +32 -59
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.tsx +83 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +37 -56
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +82 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +30 -60
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.tsx +98 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +33 -66
- package/src/components/FormComponents/DateItem/DateItem.tsx +8 -6
- package/src/components/FormComponents/DateTimeItem/DateTimeItem.tsx +8 -6
- package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +7 -5
- package/src/components/FormComponents/DisplayItem/DisplayInstructions.tsx +6 -2
- package/src/components/FormComponents/DisplayItem/DisplayItem.tsx +2 -2
- package/src/components/FormComponents/GridGroup/GridGroup.tsx +13 -5
- package/src/components/FormComponents/GridGroup/GridRow.tsx +6 -2
- package/src/components/FormComponents/GridGroup/GridTable.tsx +6 -2
- package/src/components/FormComponents/GroupItem/GroupHeading.tsx +12 -6
- package/src/components/FormComponents/GroupItem/GroupItem.tsx +8 -2
- package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +31 -8
- package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +7 -5
- package/src/components/FormComponents/Item.styles.ts +2 -7
- package/src/components/FormComponents/ItemParts/ItemFieldGrid.tsx +4 -3
- package/src/components/FormComponents/ItemParts/ItemLabelText.tsx +10 -5
- package/src/components/FormComponents/ItemParts/ItemLabelWrapper.tsx +3 -2
- package/src/components/FormComponents/ItemParts/RadioAnswerOptionButtons.tsx +72 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.tsx +137 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +50 -99
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.tsx +112 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +72 -80
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.tsx +17 -5
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.tsx +72 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +23 -67
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx +60 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +50 -69
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.tsx +69 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +33 -56
- package/src/components/FormComponents/RepeatGroup/AddItemButton.tsx +3 -2
- package/src/components/FormComponents/RepeatGroup/DeleteItemButton.tsx +3 -2
- package/src/components/FormComponents/RepeatGroup/RepeatGroup.tsx +17 -9
- package/src/components/FormComponents/RepeatGroup/RepeatGroupItem.tsx +13 -2
- package/src/components/FormComponents/RepeatItem/AddItemButton.tsx +3 -2
- package/src/components/FormComponents/RepeatItem/DeleteItemButton.tsx +3 -2
- package/src/components/FormComponents/RepeatItem/RepeatField.tsx +21 -3
- package/src/components/FormComponents/RepeatItem/RepeatItem.tsx +13 -6
- package/src/components/FormComponents/SingleItem/SingleItem.tsx +12 -3
- package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +21 -3
- package/src/components/FormComponents/StringItem/StringItem.tsx +7 -5
- package/src/components/FormComponents/Tables/AddRowButton.tsx +50 -0
- package/src/components/FormComponents/Tables/DeleteRowButton.tsx +3 -2
- package/src/components/FormComponents/Tables/{QItemGroupTable.tsx → GroupTable.tsx} +22 -22
- package/src/components/FormComponents/Tables/{QItemGroupTableRow.tsx → GroupTableRow.tsx} +8 -4
- package/src/components/FormComponents/Tables/index.ts +1 -1
- package/src/components/FormComponents/TextItem/TextItem.tsx +7 -5
- package/src/components/FormComponents/TimeItem/TimeItem.tsx +8 -6
- package/src/components/FormComponents/UrlItem/UrlItem.tsx +7 -5
- package/src/components/Renderer/FormBodyTabbed.tsx +1 -1
- package/src/components/Renderer/FormTopLevelItem.tsx +9 -4
- package/src/components/Tabs/FormBodySingleTab.tsx +1 -1
- package/src/components/Tabs/FormBodyTabList.tsx +5 -8
- package/src/components/Tabs/FormBodyTabListWrapper.tsx +15 -26
- package/src/components/Tabs/ShowCompletedTabsSection.tsx +52 -0
- package/src/hooks/useContextDisplayItems.ts +40 -0
- package/src/hooks/useInitialiseRenderer.ts +2 -2
- package/src/hooks/useInitialiseRepeatGroups.ts +1 -1
- package/src/hooks/useNumberInput.ts +2 -1
- package/src/hooks/useReadOnly.ts +30 -0
- package/src/hooks/useStringInput.ts +2 -1
- package/src/hooks/useTerminologyServerQuery.ts +3 -6
- package/src/index.ts +2 -2
- package/src/interfaces/calculatedExpression.interface.ts +1 -1
- package/src/interfaces/renderProps.interface.ts +8 -0
- package/src/stores/useQuestionnaireResponseStore.ts +5 -4
- package/src/theme/typography.ts +3 -5
- package/src/utils/calculatedExpression.ts +68 -12
- package/src/utils/qrItem.ts +4 -3
- package/src/utils/repopulateIntoResponse.ts +2 -2
- package/src/utils/repopulateItems.ts +0 -1
|
@@ -29,6 +29,7 @@ import FormBodyCollapsible from './FormBodyCollapsible';
|
|
|
29
29
|
import useResponsive from '../../hooks/useResponsive';
|
|
30
30
|
import useHidden from '../../hooks/useHidden';
|
|
31
31
|
import GroupItemSwitcher from '../FormComponents/GroupItem/GroupItemSwitcher';
|
|
32
|
+
import useReadOnly from '../../hooks/useReadOnly';
|
|
32
33
|
|
|
33
34
|
interface FormTopLevelItemProps
|
|
34
35
|
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
@@ -43,10 +44,11 @@ function FormTopLevelItem(props: FormTopLevelItemProps) {
|
|
|
43
44
|
const itemIsTabContainer = isTabContainer(topLevelQItem);
|
|
44
45
|
const itemContainsTabs = containsTabs(topLevelQItem);
|
|
45
46
|
|
|
46
|
-
const
|
|
47
|
+
const isTablet = useResponsive('up', 'md');
|
|
47
48
|
|
|
48
49
|
const itemIsGroup = topLevelQItem.type === 'group';
|
|
49
50
|
|
|
51
|
+
const readOnly = useReadOnly(topLevelQItem, false);
|
|
50
52
|
const itemIsHidden = useHidden(topLevelQItem);
|
|
51
53
|
if (itemIsHidden) {
|
|
52
54
|
return null;
|
|
@@ -60,6 +62,7 @@ function FormTopLevelItem(props: FormTopLevelItemProps) {
|
|
|
60
62
|
qItem={topLevelQItem}
|
|
61
63
|
qrItemOrItems={topLevelQRItemOrItems}
|
|
62
64
|
groupCardElevation={1}
|
|
65
|
+
parentIsReadOnly={readOnly}
|
|
63
66
|
onQrItemChange={onQrItemChange}
|
|
64
67
|
onQrRepeatGroupChange={onQrRepeatGroupChange}
|
|
65
68
|
/>
|
|
@@ -71,7 +74,7 @@ function FormTopLevelItem(props: FormTopLevelItemProps) {
|
|
|
71
74
|
|
|
72
75
|
// If form is tabbed, it is rendered as a tabbed form
|
|
73
76
|
if (itemContainsTabs || itemIsTabContainer) {
|
|
74
|
-
if (
|
|
77
|
+
if (isTablet) {
|
|
75
78
|
return (
|
|
76
79
|
<FormBodyTabbed
|
|
77
80
|
key={topLevelQItem.linkId}
|
|
@@ -100,8 +103,9 @@ function FormTopLevelItem(props: FormTopLevelItemProps) {
|
|
|
100
103
|
qItem={topLevelQItem}
|
|
101
104
|
qrItem={topLevelQRItem}
|
|
102
105
|
groupCardElevation={1}
|
|
103
|
-
onQrItemChange={onQrItemChange}
|
|
104
106
|
isRepeated={false}
|
|
107
|
+
parentIsReadOnly={readOnly}
|
|
108
|
+
onQrItemChange={onQrItemChange}
|
|
105
109
|
/>
|
|
106
110
|
);
|
|
107
111
|
}
|
|
@@ -112,9 +116,10 @@ function FormTopLevelItem(props: FormTopLevelItemProps) {
|
|
|
112
116
|
key={topLevelQItem.linkId}
|
|
113
117
|
qItem={topLevelQItem}
|
|
114
118
|
qrItem={topLevelQRItem}
|
|
119
|
+
isRepeated={false}
|
|
115
120
|
isTabled={false}
|
|
121
|
+
parentIsReadOnly={readOnly}
|
|
116
122
|
onQrItemChange={onQrItemChange}
|
|
117
|
-
isRepeated={false}
|
|
118
123
|
/>
|
|
119
124
|
);
|
|
120
125
|
}
|
|
@@ -46,7 +46,7 @@ const FormBodySingleTab = memo(function FormBodySingleTab(props: FormBodySingleT
|
|
|
46
46
|
<>
|
|
47
47
|
<ListItemButton
|
|
48
48
|
selected={selected}
|
|
49
|
-
sx={{ my: 0.
|
|
49
|
+
sx={{ my: 0.1, minHeight: '36px' }}
|
|
50
50
|
onClick={handleTabClick}>
|
|
51
51
|
<ListItemText
|
|
52
52
|
primary={
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import React, { memo
|
|
18
|
+
import React, { memo } from 'react';
|
|
19
19
|
import Collapse from '@mui/material/Collapse';
|
|
20
20
|
import { TransitionGroup } from 'react-transition-group';
|
|
21
21
|
import { getShortText } from '../../utils/itemControl';
|
|
@@ -23,27 +23,24 @@ import type { QuestionnaireItem } from 'fhir/r4';
|
|
|
23
23
|
import FormBodySingleTab from './FormBodySingleTab';
|
|
24
24
|
import type { Tabs } from '../../interfaces/tab.interface';
|
|
25
25
|
import useQuestionnaireStore from '../../stores/useQuestionnaireStore';
|
|
26
|
-
import {
|
|
26
|
+
import { isTabHidden } from '../../utils/tabs';
|
|
27
27
|
|
|
28
28
|
interface FormBodyTabListProps {
|
|
29
29
|
topLevelItems: QuestionnaireItem[];
|
|
30
30
|
currentTabIndex: number;
|
|
31
31
|
tabs: Tabs;
|
|
32
32
|
completedTabsCollapsed: boolean;
|
|
33
|
+
allContextDisplayItems: QuestionnaireItem[][];
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
const FormBodyTabList = memo(function FormBodyTabList(props: FormBodyTabListProps) {
|
|
36
|
-
const { topLevelItems, currentTabIndex, tabs, completedTabsCollapsed } =
|
|
37
|
+
const { topLevelItems, currentTabIndex, tabs, completedTabsCollapsed, allContextDisplayItems } =
|
|
38
|
+
props;
|
|
37
39
|
|
|
38
40
|
const enableWhenIsActivated = useQuestionnaireStore((state) => state.enableWhenIsActivated);
|
|
39
41
|
const enableWhenItems = useQuestionnaireStore((state) => state.enableWhenItems);
|
|
40
42
|
const enableWhenExpressions = useQuestionnaireStore((state) => state.enableWhenExpressions);
|
|
41
43
|
|
|
42
|
-
const allContextDisplayItems = useMemo(
|
|
43
|
-
() => topLevelItems.map((topLevelItem) => getContextDisplays(topLevelItem)),
|
|
44
|
-
[topLevelItems]
|
|
45
|
-
);
|
|
46
|
-
|
|
47
44
|
return (
|
|
48
45
|
<TransitionGroup>
|
|
49
46
|
{topLevelItems.map((qItem, i) => {
|
|
@@ -21,15 +21,13 @@ import Card from '@mui/material/Card';
|
|
|
21
21
|
import { PrimarySelectableList } from '../Lists.styles';
|
|
22
22
|
import type { QuestionnaireItem } from 'fhir/r4';
|
|
23
23
|
import type { Tabs } from '../../interfaces/tab.interface';
|
|
24
|
-
import { IconButton } from '@mui/material';
|
|
25
|
-
import ExpandLess from '@mui/icons-material/ExpandLess';
|
|
26
|
-
import ExpandMore from '@mui/icons-material/ExpandMore';
|
|
27
|
-
import Typography from '@mui/material/Typography';
|
|
28
24
|
import Divider from '@mui/material/Divider';
|
|
29
25
|
import FormBodyTabList from './FormBodyTabList';
|
|
26
|
+
import ShowCompletedTabsSection from './ShowCompletedTabsSection';
|
|
27
|
+
import useContextDisplayItems from '../../hooks/useContextDisplayItems';
|
|
30
28
|
|
|
31
29
|
interface FormBodyTabListWrapperProps {
|
|
32
|
-
|
|
30
|
+
topLevelItems: QuestionnaireItem[];
|
|
33
31
|
currentTabIndex: number;
|
|
34
32
|
tabs: Tabs;
|
|
35
33
|
}
|
|
@@ -37,39 +35,30 @@ interface FormBodyTabListWrapperProps {
|
|
|
37
35
|
const FormBodyTabListWrapper = memo(function FormBodyTabListWrapper(
|
|
38
36
|
props: FormBodyTabListWrapperProps
|
|
39
37
|
) {
|
|
40
|
-
const {
|
|
38
|
+
const { topLevelItems, currentTabIndex, tabs } = props;
|
|
41
39
|
|
|
42
40
|
const [completedTabsExpanded, setCompletedTabsExpanded] = useState(true);
|
|
43
41
|
|
|
42
|
+
const { allContextDisplayItems, completedDisplayItemExists } =
|
|
43
|
+
useContextDisplayItems(topLevelItems);
|
|
44
|
+
|
|
44
45
|
return (
|
|
45
46
|
<Card sx={{ p: 0.75, mb: 2 }}>
|
|
46
47
|
<Box sx={{ flexGrow: 1 }}>
|
|
47
48
|
<PrimarySelectableList dense disablePadding sx={{ mb: 1 }} data-test="renderer-tab-list">
|
|
48
|
-
|
|
49
|
-
<
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
</Typography>
|
|
55
|
-
<IconButton
|
|
56
|
-
size="small"
|
|
57
|
-
onClick={() => {
|
|
58
|
-
setCompletedTabsExpanded(!completedTabsExpanded);
|
|
59
|
-
}}>
|
|
60
|
-
{completedTabsExpanded ? (
|
|
61
|
-
<ExpandLess fontSize="small" />
|
|
62
|
-
) : (
|
|
63
|
-
<ExpandMore fontSize="small" />
|
|
64
|
-
)}
|
|
65
|
-
</IconButton>
|
|
66
|
-
</Box>
|
|
49
|
+
{completedDisplayItemExists ? (
|
|
50
|
+
<ShowCompletedTabsSection
|
|
51
|
+
completedTabsExpanded={completedTabsExpanded}
|
|
52
|
+
setCompletedTabsExpanded={setCompletedTabsExpanded}
|
|
53
|
+
/>
|
|
54
|
+
) : null}
|
|
67
55
|
<Divider sx={{ mx: 1 }} light />
|
|
68
56
|
<FormBodyTabList
|
|
69
|
-
topLevelItems={
|
|
57
|
+
topLevelItems={topLevelItems}
|
|
70
58
|
currentTabIndex={currentTabIndex}
|
|
71
59
|
tabs={tabs}
|
|
72
60
|
completedTabsCollapsed={!completedTabsExpanded}
|
|
61
|
+
allContextDisplayItems={allContextDisplayItems}
|
|
73
62
|
/>
|
|
74
63
|
</PrimarySelectableList>
|
|
75
64
|
</Box>
|
|
@@ -0,0 +1,52 @@
|
|
|
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 React from 'react';
|
|
19
|
+
import Box from '@mui/material/Box';
|
|
20
|
+
import Typography from '@mui/material/Typography';
|
|
21
|
+
import { IconButton } from '@mui/material';
|
|
22
|
+
import ExpandLess from '@mui/icons-material/ExpandLess';
|
|
23
|
+
import ExpandMore from '@mui/icons-material/ExpandMore';
|
|
24
|
+
|
|
25
|
+
interface ShowCompletedTabsSectionProps {
|
|
26
|
+
completedTabsExpanded: boolean;
|
|
27
|
+
setCompletedTabsExpanded: (newExpanded: boolean) => void;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function ShowCompletedTabsSection(props: ShowCompletedTabsSectionProps) {
|
|
31
|
+
const { completedTabsExpanded, setCompletedTabsExpanded } = props;
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<Box display="flex" justifyContent="center" alignItems="center" mx={2} columnGap={0.5}>
|
|
35
|
+
<Typography
|
|
36
|
+
variant="overline"
|
|
37
|
+
fontSize={8.5}
|
|
38
|
+
color={completedTabsExpanded ? 'text.secondary' : 'text.disabled'}>
|
|
39
|
+
Completed tabs {completedTabsExpanded ? 'shown' : 'hidden'}
|
|
40
|
+
</Typography>
|
|
41
|
+
<IconButton
|
|
42
|
+
size="small"
|
|
43
|
+
onClick={() => {
|
|
44
|
+
setCompletedTabsExpanded(!completedTabsExpanded);
|
|
45
|
+
}}>
|
|
46
|
+
{completedTabsExpanded ? <ExpandLess fontSize="small" /> : <ExpandMore fontSize="small" />}
|
|
47
|
+
</IconButton>
|
|
48
|
+
</Box>
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export default ShowCompletedTabsSection;
|
|
@@ -0,0 +1,40 @@
|
|
|
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 { useMemo } from 'react';
|
|
19
|
+
import { getContextDisplays } from '../utils/tabs';
|
|
20
|
+
import type { QuestionnaireItem } from 'fhir/r4';
|
|
21
|
+
|
|
22
|
+
function useContextDisplayItems(topLevelItems: QuestionnaireItem[]) {
|
|
23
|
+
return useMemo(() => {
|
|
24
|
+
let completedDisplayItemExists = false;
|
|
25
|
+
|
|
26
|
+
const allContextDisplayItems = topLevelItems.map((topLevelItem) =>
|
|
27
|
+
getContextDisplays(topLevelItem)
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
completedDisplayItemExists = allContextDisplayItems.some((contextDisplayItems) => {
|
|
31
|
+
return contextDisplayItems.some(
|
|
32
|
+
(contextDisplayItem) => contextDisplayItem.text === 'Complete'
|
|
33
|
+
);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
return { allContextDisplayItems, completedDisplayItemExists };
|
|
37
|
+
}, [topLevelItems]);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default useContextDisplayItems;
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
import type { Questionnaire, QuestionnaireResponse } from 'fhir/r4';
|
|
19
19
|
import { useLayoutEffect, useState } from 'react';
|
|
20
|
-
import {
|
|
20
|
+
import { createEmptyQuestionnaireResponse } from '../utils/qrItem';
|
|
21
21
|
import useQuestionnaireStore from '../stores/useQuestionnaireStore';
|
|
22
22
|
import useQuestionnaireResponseStore from '../stores/useQuestionnaireResponseStore';
|
|
23
23
|
import type Client from 'fhirclient/lib/Client';
|
|
@@ -80,7 +80,7 @@ function useInitialiseRenderer(
|
|
|
80
80
|
additionalVariables,
|
|
81
81
|
terminologyServerUrl
|
|
82
82
|
).then(() => {
|
|
83
|
-
buildSourceResponse(
|
|
83
|
+
buildSourceResponse(createEmptyQuestionnaireResponse(questionnaire));
|
|
84
84
|
|
|
85
85
|
if (questionnaireResponse) {
|
|
86
86
|
const updatedResponse = updatePopulatedProperties(questionnaireResponse);
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import type { QuestionnaireResponseItem } from 'fhir/r4';
|
|
19
|
-
import { QuestionnaireItem } from 'fhir/r4';
|
|
19
|
+
import type { QuestionnaireItem } from 'fhir/r4';
|
|
20
20
|
import { nanoid } from 'nanoid';
|
|
21
21
|
import type { RepeatGroupSingle } from '../interfaces/repeatGroup.interface';
|
|
22
22
|
import { useMemo } from 'react';
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { Dispatch, SetStateAction
|
|
18
|
+
import type { Dispatch, SetStateAction } from 'react';
|
|
19
|
+
import { useEffect, useState } from 'react';
|
|
19
20
|
|
|
20
21
|
function useNumberInput(valueFromProps: number): [number, Dispatch<SetStateAction<number>>] {
|
|
21
22
|
const [value, setValue] = useState(valueFromProps);
|
|
@@ -0,0 +1,30 @@
|
|
|
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 } from 'fhir/r4';
|
|
19
|
+
import useRenderingExtensions from './useRenderingExtensions';
|
|
20
|
+
|
|
21
|
+
function useReadOnly(qItem: QuestionnaireItem, parentIsReadOnly: boolean | undefined): boolean {
|
|
22
|
+
let { readOnly } = useRenderingExtensions(qItem);
|
|
23
|
+
if (typeof parentIsReadOnly === 'boolean' && parentIsReadOnly) {
|
|
24
|
+
readOnly = parentIsReadOnly;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return readOnly;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export default useReadOnly;
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { Dispatch, SetStateAction
|
|
18
|
+
import type { Dispatch, SetStateAction } from 'react';
|
|
19
|
+
import { useEffect, useState } from 'react';
|
|
19
20
|
|
|
20
21
|
function useStringInput(valueFromProps: string): [string, Dispatch<SetStateAction<string>>] {
|
|
21
22
|
const [input, setInput] = useState(valueFromProps);
|
|
@@ -34,7 +34,6 @@ function useTerminologyServerQuery(
|
|
|
34
34
|
|
|
35
35
|
let fullUrl = '';
|
|
36
36
|
let options: Coding[] = [];
|
|
37
|
-
let loading = false;
|
|
38
37
|
let feedback: { message: string; color: AlertColor } | undefined;
|
|
39
38
|
|
|
40
39
|
if (input.length === 0) {
|
|
@@ -64,7 +63,7 @@ function useTerminologyServerQuery(
|
|
|
64
63
|
|
|
65
64
|
// Perform query
|
|
66
65
|
const terminologyServerUrl = getTerminologyServerUrl(qItem) ?? defaultTerminologyServerUrl;
|
|
67
|
-
const {
|
|
66
|
+
const { isFetching, error, data } = useQuery<ValueSet>(
|
|
68
67
|
['expandValueSet', fullUrl],
|
|
69
68
|
() => getValueSetPromise(fullUrl, terminologyServerUrl),
|
|
70
69
|
{
|
|
@@ -72,9 +71,7 @@ function useTerminologyServerQuery(
|
|
|
72
71
|
}
|
|
73
72
|
);
|
|
74
73
|
|
|
75
|
-
|
|
76
|
-
loading = true;
|
|
77
|
-
}
|
|
74
|
+
console.log(isFetching);
|
|
78
75
|
|
|
79
76
|
if (error) {
|
|
80
77
|
console.warn('Ontoserver query failed. Details below: \n' + error);
|
|
@@ -95,6 +92,6 @@ function useTerminologyServerQuery(
|
|
|
95
92
|
}
|
|
96
93
|
}
|
|
97
94
|
|
|
98
|
-
return { options, loading, feedback };
|
|
95
|
+
return { options, loading: isFetching, feedback };
|
|
99
96
|
}
|
|
100
97
|
export default useTerminologyServerQuery;
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import useQuestionnaireStore from './stores/useQuestionnaireStore';
|
|
2
2
|
import type { Questionnaire, QuestionnaireResponse } from 'fhir/r4';
|
|
3
|
-
import {
|
|
3
|
+
import { createEmptyQuestionnaireResponse } from './utils/qrItem';
|
|
4
4
|
import useQuestionnaireResponseStore from './stores/useQuestionnaireResponseStore';
|
|
5
5
|
import { removeHiddenAnswers } from './utils/removeHidden';
|
|
6
6
|
import type { ItemToRepopulate } from './utils/repopulateItems';
|
|
@@ -28,7 +28,7 @@ export async function buildForm(
|
|
|
28
28
|
if (!questionnaireResponse) {
|
|
29
29
|
useQuestionnaireResponseStore
|
|
30
30
|
.getState()
|
|
31
|
-
.buildSourceResponse(
|
|
31
|
+
.buildSourceResponse(createEmptyQuestionnaireResponse(questionnaire));
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -32,3 +32,11 @@ export interface PropsWithIsRepeatedAttribute {
|
|
|
32
32
|
export interface PropsWithIsTabledAttribute {
|
|
33
33
|
isTabled: boolean;
|
|
34
34
|
}
|
|
35
|
+
|
|
36
|
+
export interface PropsWithTextShownAttribute {
|
|
37
|
+
textShown?: boolean;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface PropsWithParentIsReadOnlyAttribute {
|
|
41
|
+
parentIsReadOnly?: boolean;
|
|
42
|
+
}
|
|
@@ -2,12 +2,13 @@ import { create } from 'zustand';
|
|
|
2
2
|
import type { QuestionnaireResponse } from 'fhir/r4';
|
|
3
3
|
import { emptyResponse } from '../utils/emptyResource';
|
|
4
4
|
import cloneDeep from 'lodash.clonedeep';
|
|
5
|
-
import {
|
|
5
|
+
import type { Diff } from 'deep-diff';
|
|
6
|
+
import { diff } from 'deep-diff';
|
|
6
7
|
|
|
7
8
|
export interface UseQuestionnaireResponseStoreType {
|
|
8
9
|
sourceResponse: QuestionnaireResponse;
|
|
9
10
|
updatableResponse: QuestionnaireResponse;
|
|
10
|
-
formChangesHistory:
|
|
11
|
+
formChangesHistory: (Diff<QuestionnaireResponse, QuestionnaireResponse>[] | null)[];
|
|
11
12
|
buildSourceResponse: (response: QuestionnaireResponse) => void;
|
|
12
13
|
setUpdatableResponseAsPopulated: (populatedResponse: QuestionnaireResponse) => void;
|
|
13
14
|
updateResponse: (updatedResponse: QuestionnaireResponse) => void;
|
|
@@ -27,14 +28,14 @@ const useQuestionnaireResponseStore = create<UseQuestionnaireResponseStoreType>(
|
|
|
27
28
|
}));
|
|
28
29
|
},
|
|
29
30
|
setUpdatableResponseAsPopulated: (populatedResponse: QuestionnaireResponse) => {
|
|
30
|
-
const formChanges = diff(get().updatableResponse, populatedResponse
|
|
31
|
+
const formChanges = diff(get().updatableResponse, populatedResponse) ?? null;
|
|
31
32
|
set(() => ({
|
|
32
33
|
updatableResponse: populatedResponse,
|
|
33
34
|
formChangesHistory: [...get().formChangesHistory, formChanges]
|
|
34
35
|
}));
|
|
35
36
|
},
|
|
36
37
|
updateResponse: (updatedResponse: QuestionnaireResponse) => {
|
|
37
|
-
const formChanges = diff(get().updatableResponse, updatedResponse
|
|
38
|
+
const formChanges = diff(get().updatableResponse, updatedResponse) ?? null;
|
|
38
39
|
set(() => ({
|
|
39
40
|
updatableResponse: updatedResponse,
|
|
40
41
|
formChangesHistory: [...get().formChangesHistory, formChanges]
|
package/src/theme/typography.ts
CHANGED
|
@@ -38,9 +38,7 @@ export function responsiveFontSizes(props: { sm: number; md: number; lg: number
|
|
|
38
38
|
|
|
39
39
|
const typography = {
|
|
40
40
|
fontFamily: ['Inter', 'sans-serif', 'Roboto', 'Arial', '"Helvetica Neue"', 'Helvetica'].join(','),
|
|
41
|
-
fontWeightRegular:
|
|
42
|
-
fontWeightMedium: 600,
|
|
43
|
-
fontWeightBold: 700,
|
|
41
|
+
fontWeightRegular: 500,
|
|
44
42
|
h1: {
|
|
45
43
|
fontWeight: 800,
|
|
46
44
|
lineHeight: 80 / 64,
|
|
@@ -85,11 +83,11 @@ const typography = {
|
|
|
85
83
|
subtitle2: {
|
|
86
84
|
fontWeight: 600,
|
|
87
85
|
lineHeight: 22 / 14,
|
|
88
|
-
fontSize: pxToRem(11)
|
|
86
|
+
fontSize: pxToRem(11.5)
|
|
89
87
|
},
|
|
90
88
|
body1: {
|
|
91
89
|
lineHeight: 1.5,
|
|
92
|
-
fontSize: pxToRem(12)
|
|
90
|
+
fontSize: pxToRem(12.25)
|
|
93
91
|
},
|
|
94
92
|
body2: {
|
|
95
93
|
lineHeight: 22 / 14,
|
|
@@ -22,6 +22,7 @@ import type {
|
|
|
22
22
|
Expression,
|
|
23
23
|
Questionnaire,
|
|
24
24
|
QuestionnaireItem,
|
|
25
|
+
QuestionnaireItemAnswerOption,
|
|
25
26
|
QuestionnaireResponse,
|
|
26
27
|
QuestionnaireResponseItem,
|
|
27
28
|
QuestionnaireResponseItemAnswer
|
|
@@ -32,6 +33,8 @@ import { createFhirPathContext } from './fhirpath';
|
|
|
32
33
|
import { getQrItemsIndex, mapQItemsIndex } from './mapItem';
|
|
33
34
|
import { updateQrItemsInGroup } from './qrItem';
|
|
34
35
|
import cloneDeep from 'lodash.clonedeep';
|
|
36
|
+
import dayjs from 'dayjs';
|
|
37
|
+
import moment from 'moment';
|
|
35
38
|
|
|
36
39
|
interface EvaluateInitialCalculatedExpressionsParams {
|
|
37
40
|
initialResponse: QuestionnaireResponse;
|
|
@@ -49,15 +52,17 @@ export function evaluateInitialCalculatedExpressions(
|
|
|
49
52
|
return calculatedExpressions;
|
|
50
53
|
}
|
|
51
54
|
|
|
52
|
-
const
|
|
55
|
+
const initialCalculatedExpressions: Record<string, CalculatedExpression> = {
|
|
56
|
+
...calculatedExpressions
|
|
57
|
+
};
|
|
53
58
|
|
|
54
|
-
if (Object.keys(
|
|
59
|
+
if (Object.keys(initialCalculatedExpressions).length > 0) {
|
|
55
60
|
const fhirPathContext: Record<string, any> = createFhirPathContext(
|
|
56
61
|
initialResponse,
|
|
57
62
|
variablesFhirPath
|
|
58
63
|
);
|
|
59
64
|
|
|
60
|
-
for (const linkId in
|
|
65
|
+
for (const linkId in initialCalculatedExpressions) {
|
|
61
66
|
try {
|
|
62
67
|
const result = fhirpath.evaluate(
|
|
63
68
|
initialResponse,
|
|
@@ -66,8 +71,8 @@ export function evaluateInitialCalculatedExpressions(
|
|
|
66
71
|
fhirpath_r4_model
|
|
67
72
|
);
|
|
68
73
|
|
|
69
|
-
if (calculatedExpressions[linkId].value
|
|
70
|
-
|
|
74
|
+
if (!_isEqual(calculatedExpressions[linkId].value, result[0])) {
|
|
75
|
+
initialCalculatedExpressions[linkId].value = result[0];
|
|
71
76
|
}
|
|
72
77
|
} catch (e) {
|
|
73
78
|
console.warn(
|
|
@@ -77,7 +82,7 @@ export function evaluateInitialCalculatedExpressions(
|
|
|
77
82
|
}
|
|
78
83
|
}
|
|
79
84
|
}
|
|
80
|
-
return
|
|
85
|
+
return initialCalculatedExpressions;
|
|
81
86
|
}
|
|
82
87
|
|
|
83
88
|
export function evaluateCalculatedExpressions(
|
|
@@ -102,7 +107,7 @@ export function evaluateCalculatedExpressions(
|
|
|
102
107
|
);
|
|
103
108
|
|
|
104
109
|
if (result.length > 0) {
|
|
105
|
-
if (calculatedExpressions[linkId].value
|
|
110
|
+
if (!_isEqual(calculatedExpressions[linkId].value, result[0])) {
|
|
106
111
|
isUpdated = true;
|
|
107
112
|
updatedCalculatedExpressions[linkId].value = result[0];
|
|
108
113
|
}
|
|
@@ -283,17 +288,68 @@ function constructSingleItem(
|
|
|
283
288
|
};
|
|
284
289
|
}
|
|
285
290
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
291
|
+
// duplicate functions in sdc-populate
|
|
292
|
+
function parseValueToAnswer(qItem: QuestionnaireItem, value: any): QuestionnaireResponseItemAnswer {
|
|
293
|
+
if (qItem.answerOption) {
|
|
294
|
+
const answerOption = qItem.answerOption.find(
|
|
295
|
+
(option: QuestionnaireItemAnswerOption) => option.valueCoding?.code === value?.code
|
|
296
|
+
);
|
|
297
|
+
|
|
298
|
+
if (answerOption) {
|
|
299
|
+
return answerOption;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
if (typeof value === 'boolean' && qItem.type === 'boolean') {
|
|
304
|
+
return { valueBoolean: value };
|
|
305
|
+
}
|
|
306
|
+
|
|
290
307
|
if (typeof value === 'number') {
|
|
308
|
+
if (qItem.type === 'decimal') {
|
|
309
|
+
return { valueDecimal: value };
|
|
310
|
+
}
|
|
291
311
|
if (qItem.type === 'integer') {
|
|
292
312
|
return { valueInteger: value };
|
|
293
313
|
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if (typeof value === 'object') {
|
|
317
|
+
return { valueCoding: value };
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Value is string at this point
|
|
321
|
+
if (qItem.type === 'date' && checkIsDateTime(value)) {
|
|
322
|
+
return { valueDate: value };
|
|
323
|
+
}
|
|
294
324
|
|
|
295
|
-
|
|
325
|
+
if (qItem.type === 'dateTime' && checkIsDateTime(value)) {
|
|
326
|
+
return { valueDateTime: value };
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
if (qItem.type === 'time' && checkIsTime(value)) {
|
|
330
|
+
return { valueTime: value };
|
|
296
331
|
}
|
|
297
332
|
|
|
298
333
|
return { valueString: value };
|
|
299
334
|
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* Check if an answer is a datetime in the format YYYY, YYYY-MM, YYYY-MM-DD, YYYY-MM-DDThh:mm:ss+zz:zz
|
|
338
|
+
*
|
|
339
|
+
* @author Sean Fong
|
|
340
|
+
*/
|
|
341
|
+
export function checkIsDateTime(value: string): boolean {
|
|
342
|
+
const acceptedFormats = ['YYYY', 'YYYY-MM', 'YYYY-MM-DD', 'YYYY-MM-DDTHH:mm:ssZ'];
|
|
343
|
+
const formattedDate = dayjs(value).format();
|
|
344
|
+
return moment(formattedDate, acceptedFormats, true).isValid();
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Check if an answer is in a time format - Regex: ([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]+)?
|
|
349
|
+
*
|
|
350
|
+
* @author Sean Fong
|
|
351
|
+
*/
|
|
352
|
+
export function checkIsTime(value: string): boolean {
|
|
353
|
+
const timeRegex = /^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]+)?$/;
|
|
354
|
+
return timeRegex.test(value);
|
|
355
|
+
}
|
package/src/utils/qrItem.ts
CHANGED
|
@@ -25,12 +25,13 @@ import type {
|
|
|
25
25
|
import type { QrRepeatGroup } from '../interfaces/repeatGroup.interface';
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
|
-
* Create
|
|
29
|
-
* A questionnaire form item is the first item of a questionnaire
|
|
28
|
+
* Create an empty questionnaireResponse from a given questionnaire
|
|
30
29
|
*
|
|
31
30
|
* @author Sean Fong
|
|
32
31
|
*/
|
|
33
|
-
export function
|
|
32
|
+
export function createEmptyQuestionnaireResponse(
|
|
33
|
+
questionnaire: Questionnaire
|
|
34
|
+
): QuestionnaireResponse {
|
|
34
35
|
const questionnaireResponse: QuestionnaireResponse = {
|
|
35
36
|
resourceType: 'QuestionnaireResponse',
|
|
36
37
|
status: 'in-progress'
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type {
|
|
2
2
|
Questionnaire,
|
|
3
3
|
QuestionnaireItem,
|
|
4
4
|
QuestionnaireResponse,
|
|
5
5
|
QuestionnaireResponseItem
|
|
6
6
|
} from 'fhir/r4';
|
|
7
|
-
import { ItemToRepopulate } from './repopulateItems';
|
|
7
|
+
import type { ItemToRepopulate } from './repopulateItems';
|
|
8
8
|
import { getQrItemsIndex, mapQItemsIndex } from './mapItem';
|
|
9
9
|
import { updateQrItemsInGroup } from './qrItem';
|
|
10
10
|
|