@aehrc/smart-forms-renderer 0.7.1 → 0.8.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/README.md +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js +1 -2
- 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 +14 -27
- 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 +14 -22
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js +3 -3
- 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 +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +9 -24
- 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 +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +8 -21
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.d.ts +10 -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.js +7 -23
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.d.ts +12 -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.js +8 -18
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js +3 -2
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
- package/lib/components/FormComponents/GridGroup/GridGroup.js +2 -2
- package/lib/components/FormComponents/GridGroup/GridGroup.js.map +1 -1
- package/lib/components/FormComponents/GridGroup/GridRow.js +2 -2
- package/lib/components/FormComponents/GridGroup/GridRow.js.map +1 -1
- package/lib/components/FormComponents/GroupItem/GroupChildItemSwitcher.d.ts +10 -0
- package/lib/components/FormComponents/GroupItem/GroupChildItemSwitcher.js +73 -0
- package/lib/components/FormComponents/GroupItem/GroupChildItemSwitcher.js.map +1 -0
- package/lib/components/FormComponents/GroupItem/GroupItem.js +3 -3
- package/lib/components/FormComponents/GroupItem/GroupItem.js.map +1 -1
- package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +4 -4
- package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/GroupItem/ItemSwitcher.d.ts +10 -0
- package/lib/components/FormComponents/GroupItem/ItemSwitcher.js +81 -0
- package/lib/components/FormComponents/GroupItem/ItemSwitcher.js.map +1 -0
- package/lib/components/FormComponents/GroupItem/TopLevelGroupItemSwitcher.d.ts +10 -0
- package/lib/components/FormComponents/GroupItem/TopLevelGroupItemSwitcher.js +45 -0
- package/lib/components/FormComponents/GroupItem/TopLevelGroupItemSwitcher.js.map +1 -0
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js +3 -2
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
- package/lib/components/FormComponents/Item.styles.d.ts +2 -2
- package/lib/components/FormComponents/Item.styles.js +2 -2
- package/lib/components/FormComponents/Item.styles.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/OpenChoiceItems/OpenChoiceAutocompleteField.d.ts +20 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js +49 -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.js +11 -35
- 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 +23 -36
- 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 +3 -3
- 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 +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js +3 -23
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.d.ts +11 -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.js +18 -23
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.d.ts +12 -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.js +8 -14
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js +4 -3
- package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js.map +1 -1
- package/lib/components/FormComponents/RepeatGroup/index.d.ts +1 -0
- package/lib/components/FormComponents/RepeatGroup/index.js +18 -0
- package/lib/components/FormComponents/RepeatGroup/index.js.map +1 -0
- package/lib/components/FormComponents/RepeatItem/RepeatItem.js +1 -1
- package/lib/components/FormComponents/RepeatItem/RepeatItem.js.map +1 -1
- package/lib/components/FormComponents/SingleItem/SingleItem.d.ts +2 -2
- package/lib/components/FormComponents/SingleItem/SingleItem.js +2 -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 +3 -3
- package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/SingleItem/index.d.ts +1 -0
- package/lib/components/FormComponents/SingleItem/index.js +18 -0
- package/lib/components/FormComponents/SingleItem/index.js.map +1 -0
- package/lib/components/FormComponents/StringItem/StringItem.js +3 -2
- 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 +8 -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/GroupTable.d.ts +10 -0
- package/lib/components/FormComponents/Tables/GroupTable.js +108 -0
- package/lib/components/FormComponents/Tables/GroupTable.js.map +1 -0
- package/lib/components/FormComponents/Tables/GroupTableRow.d.ts +10 -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 +7 -5
- 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 -0
- package/lib/components/FormComponents/Tables/index.js +18 -0
- package/lib/components/FormComponents/Tables/index.js.map +1 -0
- package/lib/components/FormComponents/TextItem/TextItem.js +3 -2
- package/lib/components/FormComponents/TextItem/TextItem.js.map +1 -1
- package/lib/components/FormComponents/index.d.ts +3 -0
- package/lib/components/FormComponents/index.js +20 -0
- package/lib/components/FormComponents/index.js.map +1 -0
- package/lib/components/Renderer/BaseRenderer.js +26 -14
- package/lib/components/Renderer/BaseRenderer.js.map +1 -1
- package/lib/components/Renderer/FormBodyCollapsible.js +2 -2
- package/lib/components/Renderer/FormBodyCollapsible.js.map +1 -1
- package/lib/components/Renderer/FormBodyTabbed.js +3 -3
- package/lib/components/Renderer/FormBodyTabbed.js.map +1 -1
- package/lib/components/Renderer/FormTopLevelItem.d.ts +4 -4
- package/lib/components/Renderer/FormTopLevelItem.js +14 -1
- package/lib/components/Renderer/FormTopLevelItem.js.map +1 -1
- package/lib/components/Tabs/FormBodySingleTab.js +1 -1
- package/lib/components/Tabs/FormBodySingleTab.js.map +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/components/index.d.ts +1 -0
- package/lib/components/index.js +1 -0
- package/lib/components/index.js.map +1 -1
- package/lib/hooks/index.d.ts +1 -0
- package/lib/hooks/index.js +2 -0
- package/lib/hooks/index.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/useDecimalUpdateFromProp.d.ts +2 -0
- package/lib/hooks/useDecimalUpdateFromProp.js +29 -0
- package/lib/hooks/useDecimalUpdateFromProp.js.map +1 -0
- package/lib/hooks/useInitialiseRenderer.js +2 -2
- package/lib/hooks/useInitialiseRenderer.js.map +1 -1
- package/lib/hooks/useInitialiseRepeatAnswers.d.ts +2 -2
- package/lib/hooks/useInitialiseRepeatAnswers.js +21 -15
- package/lib/hooks/useInitialiseRepeatAnswers.js.map +1 -1
- package/lib/hooks/useInitialiseRepeatGroups.d.ts +2 -1
- package/lib/hooks/useInitialiseRepeatGroups.js +21 -15
- package/lib/hooks/useInitialiseRepeatGroups.js.map +1 -1
- package/lib/hooks/useIntegerUpdateFromProp.d.ts +2 -0
- package/lib/hooks/useIntegerUpdateFromProp.js +29 -0
- package/lib/hooks/useIntegerUpdateFromProp.js.map +1 -0
- package/lib/hooks/useNumberInput.d.ts +3 -0
- package/lib/hooks/useNumberInput.js +31 -0
- package/lib/hooks/useNumberInput.js.map +1 -0
- package/lib/hooks/useNumberUpdateFromProp.d.ts +2 -0
- package/lib/hooks/useNumberUpdateFromProp.js +29 -0
- package/lib/hooks/useNumberUpdateFromProp.js.map +1 -0
- package/lib/hooks/useRepeatItemState.d.ts +5 -0
- package/lib/hooks/useRepeatItemState.js +35 -0
- package/lib/hooks/useRepeatItemState.js.map +1 -0
- package/lib/hooks/useRepeatItemUpdateFromProp.d.ts +2 -0
- package/lib/hooks/useRepeatItemUpdateFromProp.js +29 -0
- package/lib/hooks/useRepeatItemUpdateFromProp.js.map +1 -0
- package/lib/hooks/useStringField.d.ts +2 -0
- package/lib/hooks/useStringField.js +29 -0
- package/lib/hooks/useStringField.js.map +1 -0
- package/lib/hooks/useStringInput.d.ts +3 -0
- package/lib/hooks/useStringInput.js +31 -0
- package/lib/hooks/useStringInput.js.map +1 -0
- package/lib/hooks/useStringUpdateFromProp.d.ts +2 -0
- package/lib/hooks/useStringUpdateFromProp.js +29 -0
- package/lib/hooks/useStringUpdateFromProp.js.map +1 -0
- package/lib/hooks/useTerminologyServerQuery.js +3 -6
- package/lib/hooks/useTerminologyServerQuery.js.map +1 -1
- package/lib/index.d.ts +16 -0
- package/lib/index.js +29 -2
- package/lib/index.js.map +1 -1
- package/lib/interfaces/questionnaireStore.interface.d.ts +1 -0
- package/lib/interfaces/renderProps.interface.d.ts +3 -0
- package/lib/stores/useQuestionnaireResponseStore.d.ts +2 -1
- package/lib/stores/useQuestionnaireResponseStore.js +17 -10
- package/lib/stores/useQuestionnaireResponseStore.js.map +1 -1
- package/lib/stores/useQuestionnaireStore.d.ts +2 -1
- package/lib/stores/useQuestionnaireStore.js +5 -2
- package/lib/stores/useQuestionnaireStore.js.map +1 -1
- package/lib/theme/overrides/Overrides.js +1 -2
- package/lib/theme/overrides/Overrides.js.map +1 -1
- package/lib/utils/calculatedExpression.js +2 -2
- package/lib/utils/calculatedExpression.js.map +1 -1
- package/lib/utils/formChanges.d.ts +18 -0
- package/lib/utils/formChanges.js +91 -0
- package/lib/utils/formChanges.js.map +1 -0
- package/lib/utils/formChangesOld.d.ts +18 -0
- package/lib/utils/formChangesOld.js +91 -0
- package/lib/utils/formChangesOld.js.map +1 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js +18 -0
- package/lib/utils/index.js.map +1 -0
- package/lib/utils/mapItem.d.ts +2 -2
- package/lib/utils/mapItem.js +3 -3
- package/lib/utils/mapItem.js.map +1 -1
- package/lib/utils/qItem.d.ts +2 -0
- package/lib/utils/qItem.js +22 -0
- package/lib/utils/qItem.js.map +1 -1
- package/lib/utils/qrItem.d.ts +3 -4
- package/lib/utils/qrItem.js +94 -96
- package/lib/utils/qrItem.js.map +1 -1
- package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +4 -0
- package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -1
- package/lib/utils/repopulate.d.ts +9 -0
- package/lib/utils/repopulate.js +133 -0
- package/lib/utils/repopulate.js.map +1 -0
- package/lib/utils/repopulateGenerateItems.d.ts +9 -0
- package/lib/utils/repopulateGenerateItems.js +133 -0
- package/lib/utils/repopulateGenerateItems.js.map +1 -0
- package/lib/utils/repopulateIntoResponse.d.ts +3 -0
- package/lib/utils/repopulateIntoResponse.js +92 -0
- package/lib/utils/repopulateIntoResponse.js.map +1 -0
- package/lib/utils/repopulateItems.d.ts +9 -0
- package/lib/utils/repopulateItems.js +130 -0
- package/lib/utils/repopulateItems.js.map +1 -0
- package/lib/utils/repopulateRepeatGroup.d.ts +4 -0
- package/lib/utils/repopulateRepeatGroup.js +54 -0
- package/lib/utils/repopulateRepeatGroup.js.map +1 -0
- package/package.json +7 -5
- package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +1 -2
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.tsx +85 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +35 -58
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.tsx +79 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +37 -50
- package/src/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.tsx +10 -5
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.tsx +48 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +25 -53
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.tsx +83 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +27 -49
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +81 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +19 -54
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.tsx +97 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +22 -60
- package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +3 -2
- package/src/components/FormComponents/GridGroup/GridGroup.tsx +2 -2
- package/src/components/FormComponents/GridGroup/GridRow.tsx +2 -2
- package/src/components/FormComponents/GroupItem/GroupItem.tsx +3 -3
- package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +4 -4
- package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +3 -2
- package/src/components/FormComponents/Item.styles.ts +2 -2
- package/src/components/FormComponents/ItemParts/RadioAnswerOptionButtons.tsx +72 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.tsx +131 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +38 -93
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.tsx +112 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +57 -76
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.tsx +8 -5
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.tsx +72 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +12 -59
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx +54 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +40 -64
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.tsx +63 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +22 -50
- package/src/components/FormComponents/RepeatGroup/RepeatGroup.tsx +4 -3
- package/src/{theme/overrides/Backdrop.ts → components/FormComponents/RepeatGroup/index.ts} +1 -17
- package/src/components/FormComponents/RepeatItem/RepeatItem.tsx +1 -1
- package/src/components/FormComponents/SingleItem/SingleItem.tsx +6 -3
- package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +7 -3
- package/src/components/FormComponents/SingleItem/index.ts +18 -0
- package/src/components/FormComponents/StringItem/StringItem.tsx +3 -2
- package/src/components/FormComponents/Tables/AddRowButton.tsx +49 -0
- package/src/components/FormComponents/Tables/{QItemGroupTable.tsx → GroupTable.tsx} +21 -23
- package/src/components/FormComponents/Tables/{QItemGroupTableRow.tsx → GroupTableRow.tsx} +4 -4
- package/src/components/FormComponents/Tables/index.ts +18 -0
- package/src/components/FormComponents/TextItem/TextItem.tsx +3 -2
- package/src/components/FormComponents/index.ts +20 -0
- package/src/components/Renderer/BaseRenderer.tsx +39 -18
- package/src/components/Renderer/FormBodyCollapsible.tsx +2 -2
- package/src/components/Renderer/FormBodyTabbed.tsx +3 -3
- package/src/components/Renderer/FormTopLevelItem.tsx +33 -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/components/index.ts +1 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useContextDisplayItems.ts +40 -0
- package/src/hooks/useInitialiseRenderer.ts +2 -2
- package/src/hooks/useInitialiseRepeatAnswers.ts +28 -17
- package/src/hooks/useInitialiseRepeatGroups.ts +28 -17
- package/src/hooks/useNumberInput.ts +38 -0
- package/src/hooks/useStringInput.ts +38 -0
- package/src/hooks/useTerminologyServerQuery.ts +3 -6
- package/src/index.ts +45 -2
- package/src/interfaces/questionnaireStore.interface.ts +1 -0
- package/src/interfaces/renderProps.interface.ts +4 -0
- package/src/stores/useQuestionnaireResponseStore.ts +15 -10
- package/src/stores/useQuestionnaireStore.ts +10 -3
- package/src/theme/overrides/Overrides.ts +0 -2
- package/src/utils/calculatedExpression.ts +2 -2
- package/src/utils/formChanges.ts +141 -0
- package/src/utils/index.ts +18 -0
- package/src/utils/mapItem.ts +6 -4
- package/src/utils/qItem.ts +29 -0
- package/src/utils/qrItem.ts +108 -97
- package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +4 -0
- package/src/utils/repopulateIntoResponse.ts +153 -0
- package/src/utils/repopulateItems.ts +206 -0
- package/src/utils/repopulateRepeatGroup.ts +68 -0
|
@@ -15,19 +15,15 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import type { ChangeEvent } from 'react';
|
|
19
18
|
import React, { useState } from 'react';
|
|
20
19
|
import Grid from '@mui/material/Grid';
|
|
21
|
-
import { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
|
|
20
|
+
import type { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
|
|
22
21
|
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
23
22
|
import { createEmptyQrItem } from '../../../utils/qrItem';
|
|
24
23
|
import { getOpenLabelText } from '../../../utils/itemControl';
|
|
25
|
-
import { QRadioGroup } from '../Item.styles';
|
|
26
24
|
import { getOldOpenLabelAnswer } from '../../../utils/openChoice';
|
|
27
25
|
import { FullWidthFormComponentBox } from '../../Box.styles';
|
|
28
|
-
import ChoiceRadioSingle from '../ChoiceItems/ChoiceRadioSingle';
|
|
29
26
|
import { findInAnswerOptions, getQrChoiceValue } from '../../../utils/choice';
|
|
30
|
-
import RadioButtonWithOpenLabel from '../ItemParts/RadioButtonWithOpenLabel';
|
|
31
27
|
import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
|
|
32
28
|
import type {
|
|
33
29
|
PropsWithIsRepeatedAttribute,
|
|
@@ -35,6 +31,7 @@ import type {
|
|
|
35
31
|
} from '../../../interfaces/renderProps.interface';
|
|
36
32
|
import DisplayInstructions from '../DisplayItem/DisplayInstructions';
|
|
37
33
|
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
34
|
+
import OpenChoiceRadioAnswerOptionFields from './OpenChoiceRadioAnswerOptionFields';
|
|
38
35
|
|
|
39
36
|
interface OpenChoiceRadioAnswerOptionItemProps
|
|
40
37
|
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
@@ -119,59 +116,6 @@ function OpenChoiceRadioAnswerOptionItem(props: OpenChoiceRadioAnswerOptionItemP
|
|
|
119
116
|
}
|
|
120
117
|
}
|
|
121
118
|
|
|
122
|
-
const openChoiceRadio = (
|
|
123
|
-
<QRadioGroup
|
|
124
|
-
row={orientation === ChoiceItemOrientation.Horizontal}
|
|
125
|
-
name={qItem.text}
|
|
126
|
-
id={qItem.id}
|
|
127
|
-
onChange={(e: ChangeEvent<HTMLInputElement>) => handleValueChange(e.target.value, null)}
|
|
128
|
-
value={valueRadio}
|
|
129
|
-
data-test="q-item-radio-group">
|
|
130
|
-
{qItem.answerOption?.map((option) => {
|
|
131
|
-
if (option['valueCoding']) {
|
|
132
|
-
return (
|
|
133
|
-
<ChoiceRadioSingle
|
|
134
|
-
key={option.valueCoding.code ?? ''}
|
|
135
|
-
value={option.valueCoding.code ?? ''}
|
|
136
|
-
label={option.valueCoding.display ?? `${option.valueCoding.code}`}
|
|
137
|
-
readOnly={readOnly}
|
|
138
|
-
/>
|
|
139
|
-
);
|
|
140
|
-
} else if (option['valueString']) {
|
|
141
|
-
return (
|
|
142
|
-
<ChoiceRadioSingle
|
|
143
|
-
key={option.valueString}
|
|
144
|
-
value={option.valueString}
|
|
145
|
-
label={option.valueString}
|
|
146
|
-
readOnly={readOnly}
|
|
147
|
-
/>
|
|
148
|
-
);
|
|
149
|
-
} else if (option['valueInteger']) {
|
|
150
|
-
return (
|
|
151
|
-
<ChoiceRadioSingle
|
|
152
|
-
key={option.valueInteger}
|
|
153
|
-
value={option.valueInteger.toString()}
|
|
154
|
-
label={option.valueInteger.toString()}
|
|
155
|
-
readOnly={readOnly}
|
|
156
|
-
/>
|
|
157
|
-
);
|
|
158
|
-
} else {
|
|
159
|
-
return null;
|
|
160
|
-
}
|
|
161
|
-
})}
|
|
162
|
-
|
|
163
|
-
{openLabelText ? (
|
|
164
|
-
<RadioButtonWithOpenLabel
|
|
165
|
-
value={openLabelValue}
|
|
166
|
-
label={openLabelText}
|
|
167
|
-
readOnly={readOnly}
|
|
168
|
-
isSelected={openLabelSelected}
|
|
169
|
-
onInputChange={(input) => handleValueChange(null, input)}
|
|
170
|
-
/>
|
|
171
|
-
) : null}
|
|
172
|
-
</QRadioGroup>
|
|
173
|
-
);
|
|
174
|
-
|
|
175
119
|
return (
|
|
176
120
|
<FullWidthFormComponentBox data-test="q-item-open-choice-radio-answer-option-box">
|
|
177
121
|
<Grid container columnSpacing={6}>
|
|
@@ -179,7 +123,16 @@ function OpenChoiceRadioAnswerOptionItem(props: OpenChoiceRadioAnswerOptionItemP
|
|
|
179
123
|
<LabelWrapper qItem={qItem} />
|
|
180
124
|
</Grid>
|
|
181
125
|
<Grid item xs={7}>
|
|
182
|
-
|
|
126
|
+
<OpenChoiceRadioAnswerOptionFields
|
|
127
|
+
qItem={qItem}
|
|
128
|
+
valueRadio={valueRadio}
|
|
129
|
+
openLabelText={openLabelText}
|
|
130
|
+
openLabelValue={openLabelValue}
|
|
131
|
+
openLabelSelected={openLabelSelected}
|
|
132
|
+
orientation={orientation}
|
|
133
|
+
readOnly={readOnly}
|
|
134
|
+
onValueChange={handleValueChange}
|
|
135
|
+
/>
|
|
183
136
|
<DisplayInstructions displayInstructions={displayInstructions} />
|
|
184
137
|
</Grid>
|
|
185
138
|
</Grid>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { getAnswerOptionLabel } from '../../../utils/openChoice';
|
|
3
|
+
import { StandardTextField } from '../Textfield.styles';
|
|
4
|
+
import Autocomplete from '@mui/material/Autocomplete';
|
|
5
|
+
import type { QuestionnaireItem, QuestionnaireItemAnswerOption } from 'fhir/r4';
|
|
6
|
+
import type { PropsWithIsTabledAttribute } from '../../../interfaces/renderProps.interface';
|
|
7
|
+
import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
|
|
8
|
+
|
|
9
|
+
interface OpenChoiceSelectAnswerOptionFieldProps extends PropsWithIsTabledAttribute {
|
|
10
|
+
qItem: QuestionnaireItem;
|
|
11
|
+
options: QuestionnaireItemAnswerOption[];
|
|
12
|
+
valueSelect: QuestionnaireItemAnswerOption | null;
|
|
13
|
+
onChange: (newValue: QuestionnaireItemAnswerOption | string | null) => void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function OpenChoiceSelectAnswerOptionField(props: OpenChoiceSelectAnswerOptionFieldProps) {
|
|
17
|
+
const { qItem, options, valueSelect, isTabled, onChange } = props;
|
|
18
|
+
|
|
19
|
+
const { displayUnit, displayPrompt, readOnly, entryFormat } = useRenderingExtensions(qItem);
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<Autocomplete
|
|
23
|
+
id={qItem.id}
|
|
24
|
+
value={valueSelect ?? null}
|
|
25
|
+
options={options}
|
|
26
|
+
getOptionLabel={(option) => getAnswerOptionLabel(option)}
|
|
27
|
+
onChange={(_, newValue) => onChange(newValue)}
|
|
28
|
+
freeSolo
|
|
29
|
+
autoHighlight
|
|
30
|
+
sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 160, flexGrow: 1 }}
|
|
31
|
+
disabled={readOnly}
|
|
32
|
+
size="small"
|
|
33
|
+
placeholder={entryFormat}
|
|
34
|
+
renderInput={(params) => (
|
|
35
|
+
<StandardTextField
|
|
36
|
+
isTabled={isTabled}
|
|
37
|
+
label={displayPrompt}
|
|
38
|
+
{...params}
|
|
39
|
+
InputProps={{
|
|
40
|
+
...params.InputProps,
|
|
41
|
+
endAdornment: (
|
|
42
|
+
<>
|
|
43
|
+
{params.InputProps.endAdornment}
|
|
44
|
+
{displayUnit}
|
|
45
|
+
</>
|
|
46
|
+
)
|
|
47
|
+
}}
|
|
48
|
+
/>
|
|
49
|
+
)}
|
|
50
|
+
/>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export default OpenChoiceSelectAnswerOptionField;
|
|
@@ -15,18 +15,14 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import type { SyntheticEvent } from 'react';
|
|
19
18
|
import React from 'react';
|
|
20
|
-
import Autocomplete from '@mui/material/Autocomplete';
|
|
21
19
|
import Grid from '@mui/material/Grid';
|
|
22
20
|
import type {
|
|
23
21
|
QuestionnaireItem,
|
|
24
22
|
QuestionnaireItemAnswerOption,
|
|
25
23
|
QuestionnaireResponseItem
|
|
26
24
|
} from 'fhir/r4';
|
|
27
|
-
import { getAnswerOptionLabel } from '../../../utils/openChoice';
|
|
28
25
|
import { createEmptyQrItem } from '../../../utils/qrItem';
|
|
29
|
-
import { StandardTextField } from '../Textfield.styles';
|
|
30
26
|
import { FullWidthFormComponentBox } from '../../Box.styles';
|
|
31
27
|
import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
|
|
32
28
|
import type {
|
|
@@ -36,6 +32,7 @@ import type {
|
|
|
36
32
|
} from '../../../interfaces/renderProps.interface';
|
|
37
33
|
import DisplayInstructions from '../DisplayItem/DisplayInstructions';
|
|
38
34
|
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
35
|
+
import OpenChoiceSelectAnswerOptionField from './OpenChoiceSelectAnswerOptionField';
|
|
39
36
|
|
|
40
37
|
interface OpenChoiceSelectAnswerOptionItemProps
|
|
41
38
|
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
@@ -49,88 +46,61 @@ function OpenChoiceSelectAnswerOptionItem(props: OpenChoiceSelectAnswerOptionIte
|
|
|
49
46
|
const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
|
|
50
47
|
|
|
51
48
|
// Get additional rendering extensions
|
|
52
|
-
const {
|
|
53
|
-
useRenderingExtensions(qItem);
|
|
49
|
+
const { displayInstructions } = useRenderingExtensions(qItem);
|
|
54
50
|
|
|
55
51
|
// Init input value
|
|
56
52
|
const answerOptions = qItem.answerOption;
|
|
57
53
|
if (!answerOptions) return null;
|
|
58
54
|
|
|
59
55
|
const qrOpenChoice = qrItem ?? createEmptyQrItem(qItem);
|
|
60
|
-
let valueSelect: QuestionnaireItemAnswerOption |
|
|
56
|
+
let valueSelect: QuestionnaireItemAnswerOption | null = null;
|
|
61
57
|
if (qrOpenChoice.answer) {
|
|
62
|
-
valueSelect = qrOpenChoice.answer[0];
|
|
58
|
+
valueSelect = qrOpenChoice.answer[0] ?? null;
|
|
63
59
|
}
|
|
64
60
|
|
|
65
61
|
// Event handlers
|
|
66
|
-
function handleChange(
|
|
67
|
-
_: SyntheticEvent<Element, Event>,
|
|
68
|
-
newValue: QuestionnaireItemAnswerOption | string | null
|
|
69
|
-
) {
|
|
62
|
+
function handleChange(newValue: QuestionnaireItemAnswerOption | string | null) {
|
|
70
63
|
if (newValue) {
|
|
71
64
|
if (typeof newValue === 'string') {
|
|
72
65
|
onQrItemChange({
|
|
73
66
|
...qrOpenChoice,
|
|
74
67
|
answer: [{ valueString: newValue }]
|
|
75
68
|
});
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const option = newValue;
|
|
73
|
+
if (option['valueCoding']) {
|
|
74
|
+
onQrItemChange({
|
|
75
|
+
...qrOpenChoice,
|
|
76
|
+
answer: [{ valueCoding: option.valueCoding }]
|
|
77
|
+
});
|
|
78
|
+
} else if (option['valueString']) {
|
|
79
|
+
onQrItemChange({
|
|
80
|
+
...qrOpenChoice,
|
|
81
|
+
answer: [{ valueString: option.valueString }]
|
|
82
|
+
});
|
|
83
|
+
} else if (option['valueInteger']) {
|
|
84
|
+
onQrItemChange({
|
|
85
|
+
...qrOpenChoice,
|
|
86
|
+
answer: [{ valueInteger: option.valueInteger }]
|
|
87
|
+
});
|
|
94
88
|
}
|
|
95
89
|
return;
|
|
96
90
|
}
|
|
97
91
|
onQrItemChange(createEmptyQrItem(qItem));
|
|
98
92
|
}
|
|
99
93
|
|
|
100
|
-
const openOpenChoiceSelectAnswerOption = (
|
|
101
|
-
<Autocomplete
|
|
102
|
-
id={qItem.id}
|
|
103
|
-
value={valueSelect ?? null}
|
|
104
|
-
options={answerOptions}
|
|
105
|
-
getOptionLabel={(option) => getAnswerOptionLabel(option)}
|
|
106
|
-
onChange={handleChange}
|
|
107
|
-
freeSolo
|
|
108
|
-
autoHighlight
|
|
109
|
-
sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 160, flexGrow: 1 }}
|
|
110
|
-
disabled={readOnly}
|
|
111
|
-
size="small"
|
|
112
|
-
placeholder={entryFormat}
|
|
113
|
-
renderInput={(params) => (
|
|
114
|
-
<StandardTextField
|
|
115
|
-
isTabled={isTabled}
|
|
116
|
-
label={displayPrompt}
|
|
117
|
-
{...params}
|
|
118
|
-
InputProps={{
|
|
119
|
-
...params.InputProps,
|
|
120
|
-
endAdornment: (
|
|
121
|
-
<>
|
|
122
|
-
{params.InputProps.endAdornment}
|
|
123
|
-
{displayUnit}
|
|
124
|
-
</>
|
|
125
|
-
)
|
|
126
|
-
}}
|
|
127
|
-
/>
|
|
128
|
-
)}
|
|
129
|
-
/>
|
|
130
|
-
);
|
|
131
|
-
|
|
132
94
|
if (isRepeated) {
|
|
133
|
-
return
|
|
95
|
+
return (
|
|
96
|
+
<OpenChoiceSelectAnswerOptionField
|
|
97
|
+
qItem={qItem}
|
|
98
|
+
options={answerOptions}
|
|
99
|
+
valueSelect={valueSelect}
|
|
100
|
+
isTabled={isTabled}
|
|
101
|
+
onChange={handleChange}
|
|
102
|
+
/>
|
|
103
|
+
);
|
|
134
104
|
}
|
|
135
105
|
|
|
136
106
|
return (
|
|
@@ -140,7 +110,13 @@ function OpenChoiceSelectAnswerOptionItem(props: OpenChoiceSelectAnswerOptionIte
|
|
|
140
110
|
<LabelWrapper qItem={qItem} />
|
|
141
111
|
</Grid>
|
|
142
112
|
<Grid item xs={7}>
|
|
143
|
-
|
|
113
|
+
<OpenChoiceSelectAnswerOptionField
|
|
114
|
+
qItem={qItem}
|
|
115
|
+
options={answerOptions}
|
|
116
|
+
valueSelect={valueSelect}
|
|
117
|
+
isTabled={isTabled}
|
|
118
|
+
onChange={handleChange}
|
|
119
|
+
/>
|
|
144
120
|
<DisplayInstructions displayInstructions={displayInstructions} />
|
|
145
121
|
</Grid>
|
|
146
122
|
</Grid>
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Autocomplete from '@mui/material/Autocomplete';
|
|
3
|
+
import { StandardTextField } from '../Textfield.styles';
|
|
4
|
+
import Typography from '@mui/material/Typography';
|
|
5
|
+
import type { PropsWithIsTabledAttribute } from '../../../interfaces/renderProps.interface';
|
|
6
|
+
import type { Coding, QuestionnaireItem } from 'fhir/r4';
|
|
7
|
+
import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
|
|
8
|
+
|
|
9
|
+
interface OpenChoiceSelectAnswerValueSetFieldProps extends PropsWithIsTabledAttribute {
|
|
10
|
+
qItem: QuestionnaireItem;
|
|
11
|
+
options: Coding[];
|
|
12
|
+
valueSelect: Coding | null;
|
|
13
|
+
serverError: Error | null;
|
|
14
|
+
onValueChange: (newValue: Coding | string | null) => void;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function OpenChoiceSelectAnswerValueSetField(props: OpenChoiceSelectAnswerValueSetFieldProps) {
|
|
18
|
+
const { qItem, options, valueSelect, serverError, isTabled, onValueChange } = props;
|
|
19
|
+
|
|
20
|
+
const { displayUnit, displayPrompt, readOnly, entryFormat } = useRenderingExtensions(qItem);
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<>
|
|
24
|
+
<Autocomplete
|
|
25
|
+
id={qItem.id}
|
|
26
|
+
value={valueSelect ?? null}
|
|
27
|
+
options={options}
|
|
28
|
+
getOptionLabel={(option) => (typeof option === 'string' ? option : `${option.display}`)}
|
|
29
|
+
onChange={(_, newValue) => onValueChange(newValue)}
|
|
30
|
+
onInputChange={(_, newValue) => onValueChange(newValue)}
|
|
31
|
+
freeSolo
|
|
32
|
+
autoHighlight
|
|
33
|
+
sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 160, flexGrow: 1 }}
|
|
34
|
+
disabled={readOnly}
|
|
35
|
+
size="small"
|
|
36
|
+
placeholder={entryFormat}
|
|
37
|
+
renderInput={(params) => (
|
|
38
|
+
<StandardTextField
|
|
39
|
+
isTabled={isTabled}
|
|
40
|
+
label={displayPrompt}
|
|
41
|
+
{...params}
|
|
42
|
+
InputProps={{
|
|
43
|
+
...params.InputProps,
|
|
44
|
+
endAdornment: (
|
|
45
|
+
<>
|
|
46
|
+
{params.InputProps.endAdornment}
|
|
47
|
+
{displayUnit}
|
|
48
|
+
</>
|
|
49
|
+
)
|
|
50
|
+
}}
|
|
51
|
+
/>
|
|
52
|
+
)}
|
|
53
|
+
/>
|
|
54
|
+
{serverError ? (
|
|
55
|
+
<Typography variant="subtitle2">
|
|
56
|
+
There was an error fetching options from the terminology server.
|
|
57
|
+
</Typography>
|
|
58
|
+
) : null}
|
|
59
|
+
</>
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export default OpenChoiceSelectAnswerValueSetField;
|
package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx
CHANGED
|
@@ -15,14 +15,10 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import type { SyntheticEvent } from 'react';
|
|
19
18
|
import React from 'react';
|
|
20
|
-
import Autocomplete from '@mui/material/Autocomplete';
|
|
21
19
|
import Grid from '@mui/material/Grid';
|
|
22
|
-
import Typography from '@mui/material/Typography';
|
|
23
20
|
import type { Coding, QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
24
21
|
import { createEmptyQrItem } from '../../../utils/qrItem';
|
|
25
|
-
import { StandardTextField } from '../Textfield.styles';
|
|
26
22
|
import { FullWidthFormComponentBox } from '../../Box.styles';
|
|
27
23
|
import useValueSetCodings from '../../../hooks/useValueSetCodings';
|
|
28
24
|
import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
|
|
@@ -33,6 +29,7 @@ import type {
|
|
|
33
29
|
} from '../../../interfaces/renderProps.interface';
|
|
34
30
|
import DisplayInstructions from '../DisplayItem/DisplayInstructions';
|
|
35
31
|
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
32
|
+
import OpenChoiceSelectAnswerValueSetField from './OpenChoiceSelectAnswerValueSetField';
|
|
36
33
|
|
|
37
34
|
interface OpenChoiceSelectAnswerValueSetItemProps
|
|
38
35
|
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
@@ -47,20 +44,19 @@ function OpenChoiceSelectAnswerValueSetItem(props: OpenChoiceSelectAnswerValueSe
|
|
|
47
44
|
|
|
48
45
|
// Init input value
|
|
49
46
|
const qrOpenChoice = qrItem ?? createEmptyQrItem(qItem);
|
|
50
|
-
let valueSelect: Coding |
|
|
47
|
+
let valueSelect: Coding | null = null;
|
|
51
48
|
if (qrOpenChoice['answer']) {
|
|
52
|
-
valueSelect = qrOpenChoice['answer'][0].valueCoding;
|
|
49
|
+
valueSelect = qrOpenChoice['answer'][0].valueCoding ?? null;
|
|
53
50
|
}
|
|
54
51
|
|
|
55
52
|
// Get codings/options from valueSet
|
|
56
53
|
const { codings, serverError } = useValueSetCodings(qItem);
|
|
57
54
|
|
|
58
55
|
// Get additional rendering extensions
|
|
59
|
-
const {
|
|
60
|
-
useRenderingExtensions(qItem);
|
|
56
|
+
const { displayInstructions } = useRenderingExtensions(qItem);
|
|
61
57
|
|
|
62
58
|
// Event handlers
|
|
63
|
-
function handleValueChange(
|
|
59
|
+
function handleValueChange(newValue: Coding | string | null) {
|
|
64
60
|
if (newValue) {
|
|
65
61
|
if (typeof newValue === 'string') {
|
|
66
62
|
onQrItemChange({
|
|
@@ -78,48 +74,17 @@ function OpenChoiceSelectAnswerValueSetItem(props: OpenChoiceSelectAnswerValueSe
|
|
|
78
74
|
onQrItemChange(createEmptyQrItem(qItem));
|
|
79
75
|
}
|
|
80
76
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
<
|
|
84
|
-
|
|
85
|
-
value={valueSelect ?? null}
|
|
77
|
+
if (isRepeated) {
|
|
78
|
+
return (
|
|
79
|
+
<OpenChoiceSelectAnswerValueSetField
|
|
80
|
+
qItem={qItem}
|
|
86
81
|
options={codings}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
autoHighlight
|
|
92
|
-
sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 160, flexGrow: 1 }}
|
|
93
|
-
disabled={readOnly}
|
|
94
|
-
size="small"
|
|
95
|
-
placeholder={entryFormat}
|
|
96
|
-
renderInput={(params) => (
|
|
97
|
-
<StandardTextField
|
|
98
|
-
isTabled={isTabled}
|
|
99
|
-
label={displayPrompt}
|
|
100
|
-
{...params}
|
|
101
|
-
InputProps={{
|
|
102
|
-
...params.InputProps,
|
|
103
|
-
endAdornment: (
|
|
104
|
-
<>
|
|
105
|
-
{params.InputProps.endAdornment}
|
|
106
|
-
{displayUnit}
|
|
107
|
-
</>
|
|
108
|
-
)
|
|
109
|
-
}}
|
|
110
|
-
/>
|
|
111
|
-
)}
|
|
82
|
+
valueSelect={valueSelect}
|
|
83
|
+
serverError={serverError}
|
|
84
|
+
isTabled={isTabled}
|
|
85
|
+
onValueChange={handleValueChange}
|
|
112
86
|
/>
|
|
113
|
-
|
|
114
|
-
<Typography variant="subtitle2">
|
|
115
|
-
There was an error fetching options from the terminology server.
|
|
116
|
-
</Typography>
|
|
117
|
-
) : null}
|
|
118
|
-
</>
|
|
119
|
-
);
|
|
120
|
-
|
|
121
|
-
if (isRepeated) {
|
|
122
|
-
return <>{openChoiceSelectAnswerValueSet}</>;
|
|
87
|
+
);
|
|
123
88
|
}
|
|
124
89
|
|
|
125
90
|
return (
|
|
@@ -129,7 +94,14 @@ function OpenChoiceSelectAnswerValueSetItem(props: OpenChoiceSelectAnswerValueSe
|
|
|
129
94
|
<LabelWrapper qItem={qItem} />
|
|
130
95
|
</Grid>
|
|
131
96
|
<Grid item xs={7}>
|
|
132
|
-
|
|
97
|
+
<OpenChoiceSelectAnswerValueSetField
|
|
98
|
+
qItem={qItem}
|
|
99
|
+
options={codings}
|
|
100
|
+
valueSelect={valueSelect}
|
|
101
|
+
serverError={serverError}
|
|
102
|
+
isTabled={isTabled}
|
|
103
|
+
onValueChange={handleValueChange}
|
|
104
|
+
/>
|
|
133
105
|
<DisplayInstructions displayInstructions={displayInstructions} />
|
|
134
106
|
</Grid>
|
|
135
107
|
</Grid>
|
|
@@ -31,6 +31,7 @@ import { nanoid } from 'nanoid';
|
|
|
31
31
|
import RepeatGroupItem from './RepeatGroupItem';
|
|
32
32
|
import AddItemButton from './AddItemButton';
|
|
33
33
|
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
34
|
+
import cloneDeep from 'lodash.clonedeep';
|
|
34
35
|
|
|
35
36
|
interface RepeatGroupProps extends PropsWithQrRepeatGroupChangeHandler {
|
|
36
37
|
qItem: QuestionnaireItem;
|
|
@@ -41,7 +42,7 @@ interface RepeatGroupProps extends PropsWithQrRepeatGroupChangeHandler {
|
|
|
41
42
|
function RepeatGroup(props: RepeatGroupProps) {
|
|
42
43
|
const { qItem, qrItems, groupCardElevation, onQrRepeatGroupChange } = props;
|
|
43
44
|
|
|
44
|
-
const initialRepeatGroups = useInitialiseRepeatGroups(qrItems);
|
|
45
|
+
const initialRepeatGroups = useInitialiseRepeatGroups(qItem, qrItems);
|
|
45
46
|
|
|
46
47
|
const [repeatGroups, setRepeatGroups] = useState(initialRepeatGroups);
|
|
47
48
|
|
|
@@ -60,7 +61,7 @@ function RepeatGroup(props: RepeatGroupProps) {
|
|
|
60
61
|
onQrRepeatGroupChange({
|
|
61
62
|
linkId: qItem.linkId,
|
|
62
63
|
qrItems: updatedRepeatGroups.flatMap((singleGroup) =>
|
|
63
|
-
singleGroup.qrItem ? [singleGroup.qrItem] : []
|
|
64
|
+
singleGroup.qrItem ? [cloneDeep(singleGroup.qrItem)] : []
|
|
64
65
|
)
|
|
65
66
|
});
|
|
66
67
|
}
|
|
@@ -74,7 +75,7 @@ function RepeatGroup(props: RepeatGroupProps) {
|
|
|
74
75
|
onQrRepeatGroupChange({
|
|
75
76
|
linkId: qItem.linkId,
|
|
76
77
|
qrItems: updatedRepeatGroups.flatMap((singleGroup) =>
|
|
77
|
-
singleGroup.qrItem ? [singleGroup.qrItem] : []
|
|
78
|
+
singleGroup.qrItem ? [cloneDeep(singleGroup.qrItem)] : []
|
|
78
79
|
)
|
|
79
80
|
});
|
|
80
81
|
}
|
|
@@ -15,20 +15,4 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
import { alpha } from '@mui/material/styles';
|
|
20
|
-
|
|
21
|
-
export default function Backdrop(theme: Theme) {
|
|
22
|
-
return {
|
|
23
|
-
MuiBackdrop: {
|
|
24
|
-
styleOverrides: {
|
|
25
|
-
root: {
|
|
26
|
-
backgroundColor: alpha(theme.palette.grey[800], 0.8)
|
|
27
|
-
},
|
|
28
|
-
invisible: {
|
|
29
|
-
background: 'transparent'
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
}
|
|
18
|
+
export { default as RepeatGroup } from './RepeatGroup';
|
|
@@ -40,7 +40,7 @@ function RepeatItem(props: RepeatItemProps) {
|
|
|
40
40
|
// Get additional rendering extensions
|
|
41
41
|
const { displayInstructions } = useRenderingExtensions(qItem);
|
|
42
42
|
|
|
43
|
-
const initialRepeatAnswers = useInitialiseRepeatAnswers(qrItem);
|
|
43
|
+
const initialRepeatAnswers = useInitialiseRepeatAnswers(qItem, qrItem);
|
|
44
44
|
|
|
45
45
|
const [repeatAnswers, setRepeatAnswers] = useState(initialRepeatAnswers);
|
|
46
46
|
|
|
@@ -20,7 +20,8 @@ import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
|
20
20
|
import type {
|
|
21
21
|
PropsWithIsRepeatedAttribute,
|
|
22
22
|
PropsWithIsTabledAttribute,
|
|
23
|
-
PropsWithQrItemChangeHandler
|
|
23
|
+
PropsWithQrItemChangeHandler,
|
|
24
|
+
PropsWithTextShownAttribute
|
|
24
25
|
} from '../../../interfaces/renderProps.interface';
|
|
25
26
|
import useQuestionnaireStore from '../../../stores/useQuestionnaireStore';
|
|
26
27
|
import SingleItemSwitcher from './SingleItemSwitcher';
|
|
@@ -29,13 +30,14 @@ import useHidden from '../../../hooks/useHidden';
|
|
|
29
30
|
interface SingleItemProps
|
|
30
31
|
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
31
32
|
PropsWithIsRepeatedAttribute,
|
|
32
|
-
PropsWithIsTabledAttribute
|
|
33
|
+
PropsWithIsTabledAttribute,
|
|
34
|
+
PropsWithTextShownAttribute {
|
|
33
35
|
qItem: QuestionnaireItem;
|
|
34
36
|
qrItem: QuestionnaireResponseItem;
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
function SingleItem(props: SingleItemProps) {
|
|
38
|
-
const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
|
|
40
|
+
const { qItem, qrItem, isRepeated, isTabled, textShown, onQrItemChange } = props;
|
|
39
41
|
|
|
40
42
|
const updateEnableWhenItem = useQuestionnaireStore((state) => state.updateEnableWhenItem);
|
|
41
43
|
|
|
@@ -60,6 +62,7 @@ function SingleItem(props: SingleItemProps) {
|
|
|
60
62
|
qrItem={qrItem}
|
|
61
63
|
isRepeated={isRepeated}
|
|
62
64
|
isTabled={isTabled}
|
|
65
|
+
textShown={textShown}
|
|
63
66
|
onQrItemChange={handleQrItemChange}
|
|
64
67
|
/>
|
|
65
68
|
);
|
|
@@ -23,7 +23,8 @@ import Typography from '@mui/material/Typography';
|
|
|
23
23
|
import type {
|
|
24
24
|
PropsWithIsRepeatedAttribute,
|
|
25
25
|
PropsWithIsTabledAttribute,
|
|
26
|
-
PropsWithQrItemChangeHandler
|
|
26
|
+
PropsWithQrItemChangeHandler,
|
|
27
|
+
PropsWithTextShownAttribute
|
|
27
28
|
} from '../../../interfaces/renderProps.interface';
|
|
28
29
|
import StringItem from '../StringItem/StringItem';
|
|
29
30
|
import BooleanItem from '../BooleanItem/BooleanItem';
|
|
@@ -39,13 +40,14 @@ import UrlItem from '../UrlItem/UrlItem';
|
|
|
39
40
|
interface SingleItemSwitcherProps
|
|
40
41
|
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
41
42
|
PropsWithIsRepeatedAttribute,
|
|
42
|
-
PropsWithIsTabledAttribute
|
|
43
|
+
PropsWithIsTabledAttribute,
|
|
44
|
+
PropsWithTextShownAttribute {
|
|
43
45
|
qItem: QuestionnaireItem;
|
|
44
46
|
qrItem: QuestionnaireResponseItem;
|
|
45
47
|
}
|
|
46
48
|
|
|
47
49
|
function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
48
|
-
const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
|
|
50
|
+
const { qItem, qrItem, isRepeated, isTabled, textShown, onQrItemChange } = props;
|
|
49
51
|
|
|
50
52
|
switch (qItem.type) {
|
|
51
53
|
case 'string':
|
|
@@ -136,6 +138,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
136
138
|
qrItem={qrItem}
|
|
137
139
|
isRepeated={isRepeated}
|
|
138
140
|
isTabled={isTabled}
|
|
141
|
+
textShown={textShown}
|
|
139
142
|
onQrItemChange={onQrItemChange}
|
|
140
143
|
/>
|
|
141
144
|
);
|
|
@@ -146,6 +149,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
146
149
|
qrItem={qrItem}
|
|
147
150
|
isRepeated={isRepeated}
|
|
148
151
|
isTabled={isTabled}
|
|
152
|
+
textShown={textShown}
|
|
149
153
|
onQrItemChange={onQrItemChange}
|
|
150
154
|
/>
|
|
151
155
|
);
|
|
@@ -0,0 +1,18 @@
|
|
|
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 { default as SingleItem } from './SingleItem';
|