@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
package/src/components/index.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as useHidden } from './useHidden';
|
|
@@ -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);
|
|
@@ -15,28 +15,39 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import type { QuestionnaireResponseItem } from 'fhir/r4';
|
|
18
|
+
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
19
19
|
import type { RepeatAnswer } from '../interfaces/repeatItem.interface';
|
|
20
20
|
import { nanoid } from 'nanoid';
|
|
21
|
+
import { useMemo } from 'react';
|
|
21
22
|
|
|
22
|
-
function useInitialiseRepeatAnswers(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
function useInitialiseRepeatAnswers(
|
|
24
|
+
qItem: QuestionnaireItem,
|
|
25
|
+
qrItem: QuestionnaireResponseItem
|
|
26
|
+
): RepeatAnswer[] {
|
|
27
|
+
return useMemo(
|
|
28
|
+
() => {
|
|
29
|
+
let initialRepeatAnswers: RepeatAnswer[] = [
|
|
30
|
+
{
|
|
31
|
+
nanoId: nanoid(),
|
|
32
|
+
answer: null
|
|
33
|
+
}
|
|
34
|
+
];
|
|
29
35
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
if (qrItem?.answer) {
|
|
37
|
+
initialRepeatAnswers = qrItem.answer.map((answer) => {
|
|
38
|
+
return {
|
|
39
|
+
nanoId: nanoid(),
|
|
40
|
+
answer
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
}
|
|
38
44
|
|
|
39
|
-
|
|
45
|
+
return initialRepeatAnswers;
|
|
46
|
+
},
|
|
47
|
+
// init initialRepeatAnswers on first render only, leave dependency array empty
|
|
48
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
49
|
+
[qItem]
|
|
50
|
+
);
|
|
40
51
|
}
|
|
41
52
|
|
|
42
53
|
export default useInitialiseRepeatAnswers;
|
|
@@ -16,27 +16,38 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import type { QuestionnaireResponseItem } from 'fhir/r4';
|
|
19
|
+
import type { QuestionnaireItem } from 'fhir/r4';
|
|
19
20
|
import { nanoid } from 'nanoid';
|
|
20
21
|
import type { RepeatGroupSingle } from '../interfaces/repeatGroup.interface';
|
|
22
|
+
import { useMemo } from 'react';
|
|
21
23
|
|
|
22
|
-
function useInitialiseRepeatGroups(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
function useInitialiseRepeatGroups(
|
|
25
|
+
qItem: QuestionnaireItem,
|
|
26
|
+
qrItems: QuestionnaireResponseItem[]
|
|
27
|
+
): RepeatGroupSingle[] {
|
|
28
|
+
return useMemo(
|
|
29
|
+
() => {
|
|
30
|
+
let initialRepeatGroupAnswers: RepeatGroupSingle[] = [
|
|
31
|
+
{
|
|
32
|
+
nanoId: nanoid(),
|
|
33
|
+
qrItem: null
|
|
34
|
+
}
|
|
35
|
+
];
|
|
29
36
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
if (qrItems.length > 0) {
|
|
38
|
+
initialRepeatGroupAnswers = qrItems.map((qrItem) => {
|
|
39
|
+
return {
|
|
40
|
+
nanoId: nanoid(),
|
|
41
|
+
qrItem
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return initialRepeatGroupAnswers;
|
|
46
|
+
},
|
|
47
|
+
// init initialRepeatAnswers on first render only, leave dependency array empty
|
|
48
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
49
|
+
[qItem]
|
|
50
|
+
);
|
|
40
51
|
}
|
|
41
52
|
|
|
42
53
|
export default useInitialiseRepeatGroups;
|
|
@@ -0,0 +1,38 @@
|
|
|
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 { Dispatch, SetStateAction } from 'react';
|
|
19
|
+
import { useEffect, useState } from 'react';
|
|
20
|
+
|
|
21
|
+
function useNumberInput(valueFromProps: number): [number, Dispatch<SetStateAction<number>>] {
|
|
22
|
+
const [value, setValue] = useState(valueFromProps);
|
|
23
|
+
|
|
24
|
+
useEffect(
|
|
25
|
+
() => {
|
|
26
|
+
if (value !== valueFromProps) {
|
|
27
|
+
setValue(valueFromProps);
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
// Only trigger this effect if prop value changes
|
|
31
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
32
|
+
[valueFromProps]
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
return [value, setValue];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export default useNumberInput;
|
|
@@ -0,0 +1,38 @@
|
|
|
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 { Dispatch, SetStateAction } from 'react';
|
|
19
|
+
import { useEffect, useState } from 'react';
|
|
20
|
+
|
|
21
|
+
function useStringInput(valueFromProps: string): [string, Dispatch<SetStateAction<string>>] {
|
|
22
|
+
const [input, setInput] = useState(valueFromProps);
|
|
23
|
+
|
|
24
|
+
useEffect(
|
|
25
|
+
() => {
|
|
26
|
+
if (input !== valueFromProps) {
|
|
27
|
+
setInput(valueFromProps);
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
// Only trigger this effect if prop value changes
|
|
31
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
32
|
+
[valueFromProps]
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
return [input, setInput];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export default useStringInput;
|
|
@@ -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,11 +1,17 @@
|
|
|
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
|
+
import type { ItemToRepopulate } from './utils/repopulateItems';
|
|
7
|
+
import { getItemsToRepopulate } from './utils/repopulateItems';
|
|
8
|
+
import { repopulateItemsIntoResponse } from './utils/repopulateIntoResponse';
|
|
6
9
|
|
|
7
10
|
export * from './components';
|
|
8
11
|
export * from './stores';
|
|
12
|
+
export * from './hooks';
|
|
13
|
+
export * from './utils';
|
|
14
|
+
export type { ItemToRepopulate };
|
|
9
15
|
|
|
10
16
|
/**
|
|
11
17
|
* Build the form with an initial Questionnaire and an optional filled QuestionnaireResponse.
|
|
@@ -22,7 +28,7 @@ export async function buildForm(
|
|
|
22
28
|
if (!questionnaireResponse) {
|
|
23
29
|
useQuestionnaireResponseStore
|
|
24
30
|
.getState()
|
|
25
|
-
.buildSourceResponse(
|
|
31
|
+
.buildSourceResponse(createEmptyQuestionnaireResponse(questionnaire));
|
|
26
32
|
return;
|
|
27
33
|
}
|
|
28
34
|
|
|
@@ -72,3 +78,40 @@ export function removeHiddenAnswersFromResponse(
|
|
|
72
78
|
enableWhenExpressions
|
|
73
79
|
});
|
|
74
80
|
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Re-populate stuff
|
|
84
|
+
*
|
|
85
|
+
* @author Sean Fong
|
|
86
|
+
*/
|
|
87
|
+
export function generateItemsToRepopulate(populatedResponse: QuestionnaireResponse) {
|
|
88
|
+
const sourceQuestionnaire = useQuestionnaireStore.getState().sourceQuestionnaire;
|
|
89
|
+
const itemTypes = useQuestionnaireStore.getState().itemTypes;
|
|
90
|
+
const tabs = useQuestionnaireStore.getState().tabs;
|
|
91
|
+
const updatableResponse = useQuestionnaireResponseStore.getState().updatableResponse;
|
|
92
|
+
console.log(updatableResponse);
|
|
93
|
+
|
|
94
|
+
return getItemsToRepopulate(
|
|
95
|
+
sourceQuestionnaire,
|
|
96
|
+
itemTypes,
|
|
97
|
+
tabs,
|
|
98
|
+
populatedResponse,
|
|
99
|
+
updatableResponse
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Re-populate stuff
|
|
105
|
+
*
|
|
106
|
+
* @author Sean Fong
|
|
107
|
+
*/
|
|
108
|
+
export function repopulate(checkedItemsToRepopulate: Record<string, ItemToRepopulate>) {
|
|
109
|
+
const sourceQuestionnaire = useQuestionnaireStore.getState().sourceQuestionnaire;
|
|
110
|
+
const updatableResponse = useQuestionnaireResponseStore.getState().updatableResponse;
|
|
111
|
+
|
|
112
|
+
return repopulateItemsIntoResponse(
|
|
113
|
+
sourceQuestionnaire,
|
|
114
|
+
updatableResponse,
|
|
115
|
+
checkedItemsToRepopulate
|
|
116
|
+
);
|
|
117
|
+
}
|
|
@@ -24,6 +24,7 @@ import type { AnswerExpression } from './answerExpression.interface';
|
|
|
24
24
|
import type { Coding } from 'fhir/r4';
|
|
25
25
|
|
|
26
26
|
export interface QuestionnaireModel {
|
|
27
|
+
itemTypes: Record<string, string>;
|
|
27
28
|
tabs: Tabs;
|
|
28
29
|
variables: Variables;
|
|
29
30
|
launchContexts: Record<string, LaunchContext>;
|
|
@@ -2,11 +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 type { Diff } from 'deep-diff';
|
|
6
|
+
import { diff } from 'deep-diff';
|
|
5
7
|
|
|
6
8
|
export interface UseQuestionnaireResponseStoreType {
|
|
7
9
|
sourceResponse: QuestionnaireResponse;
|
|
8
10
|
updatableResponse: QuestionnaireResponse;
|
|
9
|
-
|
|
11
|
+
formChangesHistory: (Diff<QuestionnaireResponse, QuestionnaireResponse>[] | null)[];
|
|
10
12
|
buildSourceResponse: (response: QuestionnaireResponse) => void;
|
|
11
13
|
setUpdatableResponseAsPopulated: (populatedResponse: QuestionnaireResponse) => void;
|
|
12
14
|
updateResponse: (updatedResponse: QuestionnaireResponse) => void;
|
|
@@ -15,10 +17,10 @@ export interface UseQuestionnaireResponseStoreType {
|
|
|
15
17
|
destroySourceResponse: () => void;
|
|
16
18
|
}
|
|
17
19
|
|
|
18
|
-
const useQuestionnaireResponseStore = create<UseQuestionnaireResponseStoreType>()((set) => ({
|
|
20
|
+
const useQuestionnaireResponseStore = create<UseQuestionnaireResponseStoreType>()((set, get) => ({
|
|
19
21
|
sourceResponse: cloneDeep(emptyResponse),
|
|
20
22
|
updatableResponse: cloneDeep(emptyResponse),
|
|
21
|
-
|
|
23
|
+
formChangesHistory: [],
|
|
22
24
|
buildSourceResponse: (questionnaireResponse: QuestionnaireResponse) => {
|
|
23
25
|
set(() => ({
|
|
24
26
|
sourceResponse: questionnaireResponse,
|
|
@@ -26,32 +28,35 @@ const useQuestionnaireResponseStore = create<UseQuestionnaireResponseStoreType>(
|
|
|
26
28
|
}));
|
|
27
29
|
},
|
|
28
30
|
setUpdatableResponseAsPopulated: (populatedResponse: QuestionnaireResponse) => {
|
|
31
|
+
const formChanges = diff(get().updatableResponse, populatedResponse) ?? null;
|
|
29
32
|
set(() => ({
|
|
30
33
|
updatableResponse: populatedResponse,
|
|
31
|
-
|
|
34
|
+
formChangesHistory: [...get().formChangesHistory, formChanges]
|
|
32
35
|
}));
|
|
33
36
|
},
|
|
34
|
-
updateResponse: (updatedResponse: QuestionnaireResponse) =>
|
|
37
|
+
updateResponse: (updatedResponse: QuestionnaireResponse) => {
|
|
38
|
+
const formChanges = diff(get().updatableResponse, updatedResponse) ?? null;
|
|
35
39
|
set(() => ({
|
|
36
40
|
updatableResponse: updatedResponse,
|
|
37
|
-
|
|
38
|
-
}))
|
|
41
|
+
formChangesHistory: [...get().formChangesHistory, formChanges]
|
|
42
|
+
}));
|
|
43
|
+
},
|
|
39
44
|
setUpdatableResponseAsSaved: (savedResponse: QuestionnaireResponse) =>
|
|
40
45
|
set(() => ({
|
|
41
46
|
sourceResponse: savedResponse,
|
|
42
47
|
updatableResponse: savedResponse,
|
|
43
|
-
|
|
48
|
+
formChangesHistory: []
|
|
44
49
|
})),
|
|
45
50
|
setUpdatableResponseAsEmpty: (clearedResponse: QuestionnaireResponse) =>
|
|
46
51
|
set(() => ({
|
|
47
52
|
updatableResponse: clearedResponse,
|
|
48
|
-
|
|
53
|
+
formChangesHistory: []
|
|
49
54
|
})),
|
|
50
55
|
destroySourceResponse: () =>
|
|
51
56
|
set(() => ({
|
|
52
57
|
sourceResponse: cloneDeep(emptyResponse),
|
|
53
58
|
updatableResponse: cloneDeep(emptyResponse),
|
|
54
|
-
|
|
59
|
+
formChangesHistory: []
|
|
55
60
|
}))
|
|
56
61
|
}));
|
|
57
62
|
|
|
@@ -42,6 +42,7 @@ import useTerminologyServerStore from './useTerminologyServerStore';
|
|
|
42
42
|
|
|
43
43
|
export interface UseQuestionnaireStoreType {
|
|
44
44
|
sourceQuestionnaire: Questionnaire;
|
|
45
|
+
itemTypes: Record<string, string>;
|
|
45
46
|
tabs: Tabs;
|
|
46
47
|
currentTabIndex: number;
|
|
47
48
|
variables: Variables;
|
|
@@ -68,11 +69,15 @@ export interface UseQuestionnaireStoreType {
|
|
|
68
69
|
toggleEnableWhenActivation: (isActivated: boolean) => void;
|
|
69
70
|
updateExpressions: (updatedResponse: QuestionnaireResponse) => void;
|
|
70
71
|
addCodingToCache: (valueSetUrl: string, codings: Coding[]) => void;
|
|
71
|
-
updatePopulatedProperties: (
|
|
72
|
+
updatePopulatedProperties: (
|
|
73
|
+
populatedResponse: QuestionnaireResponse,
|
|
74
|
+
persistTabIndex?: boolean
|
|
75
|
+
) => QuestionnaireResponse;
|
|
72
76
|
}
|
|
73
77
|
|
|
74
78
|
const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) => ({
|
|
75
79
|
sourceQuestionnaire: cloneDeep(emptyQuestionnaire),
|
|
80
|
+
itemTypes: {},
|
|
76
81
|
tabs: {},
|
|
77
82
|
currentTabIndex: 0,
|
|
78
83
|
variables: { fhirPathVariables: {}, xFhirQueryVariables: {} },
|
|
@@ -115,6 +120,7 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
|
|
|
115
120
|
|
|
116
121
|
set({
|
|
117
122
|
sourceQuestionnaire: questionnaire,
|
|
123
|
+
itemTypes: questionnaireModel.itemTypes,
|
|
118
124
|
tabs: questionnaireModel.tabs,
|
|
119
125
|
currentTabIndex: firstVisibleTab,
|
|
120
126
|
variables: questionnaireModel.variables,
|
|
@@ -131,6 +137,7 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
|
|
|
131
137
|
destroySourceQuestionnaire: () =>
|
|
132
138
|
set({
|
|
133
139
|
sourceQuestionnaire: cloneDeep(emptyQuestionnaire),
|
|
140
|
+
itemTypes: {},
|
|
134
141
|
tabs: {},
|
|
135
142
|
currentTabIndex: 0,
|
|
136
143
|
variables: { fhirPathVariables: {}, xFhirQueryVariables: {} },
|
|
@@ -197,7 +204,7 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
|
|
|
197
204
|
[valueSetUrl]: codings
|
|
198
205
|
}
|
|
199
206
|
})),
|
|
200
|
-
updatePopulatedProperties: (populatedResponse: QuestionnaireResponse) => {
|
|
207
|
+
updatePopulatedProperties: (populatedResponse: QuestionnaireResponse, persistTabIndex) => {
|
|
201
208
|
const initialCalculatedExpressions = evaluateInitialCalculatedExpressions({
|
|
202
209
|
initialResponse: populatedResponse,
|
|
203
210
|
calculatedExpressions: get().calculatedExpressions,
|
|
@@ -229,7 +236,7 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
|
|
|
229
236
|
enableWhenLinkedQuestions: initialEnableWhenLinkedQuestions,
|
|
230
237
|
enableWhenExpressions: initialEnableWhenExpressions,
|
|
231
238
|
calculatedExpressions: initialCalculatedExpressions,
|
|
232
|
-
currentTabIndex: firstVisibleTab
|
|
239
|
+
currentTabIndex: persistTabIndex ? get().currentTabIndex : firstVisibleTab
|
|
233
240
|
}));
|
|
234
241
|
|
|
235
242
|
return updatedResponse;
|
|
@@ -20,7 +20,6 @@ import Paper from './Paper';
|
|
|
20
20
|
import Input from './Input';
|
|
21
21
|
import Table from './Table';
|
|
22
22
|
import Button from './Button';
|
|
23
|
-
import Backdrop from './Backdrop';
|
|
24
23
|
import Autocomplete from './Autocomplete';
|
|
25
24
|
import Accordion from './Accordion';
|
|
26
25
|
import SpeedDial from './SpeedDial';
|
|
@@ -34,7 +33,6 @@ function ComponentsOverrides(theme: Theme) {
|
|
|
34
33
|
Input(theme),
|
|
35
34
|
Paper(),
|
|
36
35
|
Button(theme),
|
|
37
|
-
Backdrop(theme),
|
|
38
36
|
Autocomplete(theme),
|
|
39
37
|
SpeedDial(theme)
|
|
40
38
|
);
|
|
@@ -30,7 +30,7 @@ import _isEqual from 'lodash/isEqual';
|
|
|
30
30
|
import { emptyResponse } from './emptyResource';
|
|
31
31
|
import { createFhirPathContext } from './fhirpath';
|
|
32
32
|
import { getQrItemsIndex, mapQItemsIndex } from './mapItem';
|
|
33
|
-
import {
|
|
33
|
+
import { updateQrItemsInGroup } from './qrItem';
|
|
34
34
|
import cloneDeep from 'lodash.clonedeep';
|
|
35
35
|
|
|
36
36
|
interface EvaluateInitialCalculatedExpressionsParams {
|
|
@@ -213,7 +213,7 @@ function initialiseItemCalculatedExpressionValueRecursive(
|
|
|
213
213
|
}
|
|
214
214
|
|
|
215
215
|
if (newQrItem) {
|
|
216
|
-
|
|
216
|
+
updateQrItemsInGroup(
|
|
217
217
|
newQrItem,
|
|
218
218
|
null,
|
|
219
219
|
qrItem ?? { linkId: qItem.linkId, text: qItem.text, item: [] },
|