@aehrc/smart-forms-renderer 0.8.1 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/lib/components/FormComponents/BooleanItem/BooleanItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.d.ts +3 -3
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +12 -12
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.d.ts +3 -3
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +12 -12
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.d.ts +3 -4
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js +3 -3
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.d.ts +2 -2
- package/lib/components/FormComponents/CustomDateItem/CustomDateField2.d.ts +18 -0
- package/lib/components/FormComponents/CustomDateItem/CustomDateField2.js +31 -0
- package/lib/components/FormComponents/CustomDateItem/CustomDateField2.js.map +1 -0
- package/lib/components/FormComponents/CustomDateItem/CustomDateItem.d.ts +9 -0
- package/lib/components/FormComponents/CustomDateItem/CustomDateItem.js +68 -0
- package/lib/components/FormComponents/CustomDateItem/CustomDateItem.js.map +1 -0
- package/lib/components/FormComponents/CustomDateItem/CustomDateTimeField.d.ts +9 -0
- package/lib/components/FormComponents/CustomDateItem/CustomDateTimeField.js +75 -0
- package/lib/components/FormComponents/CustomDateItem/CustomDateTimeField.js.map +1 -0
- package/lib/components/FormComponents/CustomDateItem/CustomDateTimePickerText2.d.ts +9 -0
- package/lib/components/FormComponents/CustomDateItem/CustomDateTimePickerText2.js +75 -0
- package/lib/components/FormComponents/CustomDateItem/CustomDateTimePickerText2.js.map +1 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.d.ts +18 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.js +33 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.js.map +1 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.d.ts +11 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.js +55 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.js.map +1 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.d.ts +9 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.js +13 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.js.map +1 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.d.ts +5 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.js +20 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.js.map +1 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/hooks/useParseDates.d.ts +5 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/hooks/useParseDates.js +27 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/hooks/useParseDates.js.map +1 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/index.d.ts +1 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/index.js +18 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/index.js.map +1 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.d.ts +1 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.js +18 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.js.map +1 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.d.ts +9 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.js +121 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.js.map +1 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePickerText.d.ts +9 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePickerText.js +71 -0
- package/lib/components/FormComponents/CustomDateItem/customDateTimePickerText.js.map +1 -0
- package/lib/components/FormComponents/CustomDateItem/index.d.ts +1 -0
- package/lib/components/FormComponents/CustomDateItem/index.js +18 -0
- package/lib/components/FormComponents/CustomDateItem/index.js.map +1 -0
- package/lib/components/FormComponents/DateItem/DateItem.d.ts +3 -4
- package/lib/components/FormComponents/DateTimeItem/DateTimeItem.d.ts +2 -2
- package/lib/components/FormComponents/DecimalItem/DecimalItem.d.ts +2 -2
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js +2 -3
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
- package/lib/components/FormComponents/DisplayItem/DisplayBox.d.ts +0 -0
- package/lib/components/FormComponents/DisplayItem/DisplayBox.js +2 -0
- package/lib/components/FormComponents/DisplayItem/DisplayBox.js.map +1 -0
- package/lib/components/FormComponents/DisplayItem/DisplayBox.styles.d.ts +4 -0
- package/lib/components/FormComponents/DisplayItem/DisplayBox.styles.js +35 -0
- package/lib/components/FormComponents/DisplayItem/DisplayBox.styles.js.map +1 -0
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.d.ts +2 -1
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js.map +1 -1
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.js +0 -1
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.js.map +1 -1
- package/lib/components/FormComponents/GridGroup/GridGroup.d.ts +3 -3
- package/lib/components/FormComponents/GridGroup/GridGroup.js +13 -8
- package/lib/components/FormComponents/GridGroup/GridGroup.js.map +1 -1
- package/lib/components/FormComponents/GridGroup/GridRow.d.ts +3 -4
- package/lib/components/FormComponents/GridGroup/GridRow.js +3 -3
- package/lib/components/FormComponents/GridGroup/GridRow.js.map +1 -1
- package/lib/components/FormComponents/GridGroup/GridTable.d.ts +3 -3
- package/lib/components/FormComponents/GridGroup/GridTable.js +9 -4
- package/lib/components/FormComponents/GridGroup/GridTable.js.map +1 -1
- package/lib/components/FormComponents/GridGroup/index.d.ts +1 -0
- package/lib/components/FormComponents/GridGroup/index.js +18 -0
- package/lib/components/FormComponents/GridGroup/index.js.map +1 -0
- package/lib/components/FormComponents/GroupItem/GroupItem.d.ts +2 -2
- package/lib/components/FormComponents/GroupItem/GroupItem.js +2 -2
- package/lib/components/FormComponents/GroupItem/GroupItem.js.map +1 -1
- package/lib/components/FormComponents/GroupItem/GroupItem.styles.d.ts +1 -1
- package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.d.ts +2 -2
- package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +5 -6
- package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/IntegerItem/IntegerItem.d.ts +2 -2
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js +2 -3
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
- package/lib/components/FormComponents/IntegerItem/SliderItem.d.ts +9 -0
- package/lib/components/FormComponents/IntegerItem/SliderItem.js +75 -0
- package/lib/components/FormComponents/IntegerItem/SliderItem.js.map +1 -0
- package/lib/components/FormComponents/ItemParts/FadingCheckIcon.js +2 -2
- package/lib/components/FormComponents/ItemParts/FadingCheckIcon.js.map +1 -1
- package/lib/components/FormComponents/ItemParts/ItemFieldGrid.d.ts +2 -2
- package/lib/components/FormComponents/Lists.styles.d.ts +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.d.ts +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.d.ts +3 -3
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js +12 -12
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.d.ts +3 -3
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.d.ts +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.d.ts +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.d.ts +2 -2
- package/lib/components/FormComponents/RepeatGroup/RepeatGroup.d.ts +2 -2
- package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js +15 -4
- package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js.map +1 -1
- package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.d.ts +2 -2
- package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js +2 -2
- package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js.map +1 -1
- package/lib/components/FormComponents/RepeatItem/RepeatField.d.ts +3 -3
- package/lib/components/FormComponents/RepeatItem/RepeatField.js +3 -3
- package/lib/components/FormComponents/RepeatItem/RepeatField.js.map +1 -1
- package/lib/components/FormComponents/RepeatItem/RepeatItem.d.ts +3 -2
- package/lib/components/FormComponents/RepeatItem/RepeatItem.js +11 -2
- package/lib/components/FormComponents/RepeatItem/RepeatItem.js.map +1 -1
- package/lib/components/FormComponents/RepeatItem/index.d.ts +1 -0
- package/lib/components/FormComponents/RepeatItem/index.js +18 -0
- package/lib/components/FormComponents/RepeatItem/index.js.map +1 -0
- package/lib/components/FormComponents/SingleItem/SingleItem.d.ts +3 -3
- 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 +3 -3
- package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js +12 -7
- package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/SliderItem/DisplayBox.styles.d.ts +4 -0
- package/lib/components/FormComponents/SliderItem/DisplayBox.styles.js +35 -0
- package/lib/components/FormComponents/SliderItem/DisplayBox.styles.js.map +1 -0
- package/lib/components/FormComponents/SliderItem/Slider.styles.d.ts +6 -0
- package/lib/components/FormComponents/SliderItem/Slider.styles.js +33 -0
- package/lib/components/FormComponents/SliderItem/Slider.styles.js.map +1 -0
- package/lib/components/FormComponents/SliderItem/SliderDisplayValue.d.ts +8 -0
- package/lib/components/FormComponents/SliderItem/SliderDisplayValue.js +28 -0
- package/lib/components/FormComponents/SliderItem/SliderDisplayValue.js.map +1 -0
- package/lib/components/FormComponents/SliderItem/SliderField.d.ts +16 -0
- package/lib/components/FormComponents/SliderItem/SliderField.js +41 -0
- package/lib/components/FormComponents/SliderItem/SliderField.js.map +1 -0
- package/lib/components/FormComponents/SliderItem/SliderItem.d.ts +9 -0
- package/lib/components/FormComponents/SliderItem/SliderItem.js +56 -0
- package/lib/components/FormComponents/SliderItem/SliderItem.js.map +1 -0
- package/lib/components/FormComponents/SliderItem/SliderLabels.d.ts +7 -0
- package/lib/components/FormComponents/SliderItem/SliderLabels.js +32 -0
- package/lib/components/FormComponents/SliderItem/SliderLabels.js.map +1 -0
- package/lib/components/FormComponents/StringItem/StringItem.d.ts +2 -2
- package/lib/components/FormComponents/Tables/GroupTable.d.ts +3 -2
- package/lib/components/FormComponents/Tables/GroupTable.js +18 -1
- package/lib/components/FormComponents/Tables/GroupTable.js.map +1 -1
- package/lib/components/FormComponents/Tables/GroupTableRow.d.ts +3 -4
- package/lib/components/FormComponents/Tables/GroupTableRow.js +3 -3
- package/lib/components/FormComponents/Tables/GroupTableRow.js.map +1 -1
- package/lib/components/FormComponents/TextItem/TextItem.d.ts +2 -2
- package/lib/components/FormComponents/TimeItem/TimeItem.d.ts +2 -2
- package/lib/components/FormComponents/UrlItem/UrlItem.d.ts +2 -2
- package/lib/components/FormComponents/index.d.ts +3 -0
- package/lib/components/FormComponents/index.js +3 -0
- package/lib/components/FormComponents/index.js.map +1 -1
- package/lib/components/Lists.styles.d.ts +1 -1
- package/lib/components/Renderer/BaseRenderer.js +3 -5
- package/lib/components/Renderer/BaseRenderer.js.map +1 -1
- package/lib/components/Renderer/FormBodyCollapsible.d.ts +2 -2
- package/lib/components/Renderer/FormBodyCollapsible.js +6 -5
- package/lib/components/Renderer/FormBodyCollapsible.js.map +1 -1
- package/lib/components/Renderer/FormBodySingleCollapsibleWrapper.d.ts +2 -2
- package/lib/components/Renderer/FormBodySingleCollapsibleWrapper.js.map +1 -1
- package/lib/components/Renderer/FormBodyTabbed.d.ts +2 -2
- package/lib/components/Renderer/FormBodyTabbed.js +6 -5
- package/lib/components/Renderer/FormBodyTabbed.js.map +1 -1
- package/lib/components/Renderer/FormTopLevelItem.d.ts +2 -2
- package/lib/components/Renderer/FormTopLevelItem.js +3 -1
- package/lib/components/Renderer/FormTopLevelItem.js.map +1 -1
- package/lib/components/Renderer/SmartFormsRenderer.js +1 -1
- package/lib/components/Renderer/SmartFormsRenderer.js.map +1 -1
- package/lib/hooks/useDateSeparatorValidation.d.ts +2 -0
- package/lib/hooks/useDateSeparatorValidation.js +25 -0
- package/lib/hooks/useDateSeparatorValidation.js.map +1 -0
- package/lib/hooks/useDateValidation.d.ts +2 -0
- package/lib/hooks/useDateValidation.js +61 -0
- package/lib/hooks/useDateValidation.js.map +1 -0
- package/lib/hooks/useDecimalCalculatedExpression.d.ts +0 -1
- package/lib/hooks/useDecimalCalculatedExpression.js +3 -3
- package/lib/hooks/useDecimalCalculatedExpression.js.map +1 -1
- package/lib/hooks/useInitialiseRepeatAnswers.d.ts +1 -1
- package/lib/hooks/useInitialiseRepeatAnswers.js.map +1 -1
- package/lib/hooks/useIntegerCalculatedExpression.d.ts +0 -1
- package/lib/hooks/useIntegerCalculatedExpression.js +3 -3
- package/lib/hooks/useIntegerCalculatedExpression.js.map +1 -1
- package/lib/hooks/useSliderExtensions.d.ts +10 -0
- package/lib/hooks/useSliderExtensions.js +37 -0
- package/lib/hooks/useSliderExtensions.js.map +1 -0
- package/lib/hooks/useTerminologyServerQuery.js +0 -1
- package/lib/hooks/useTerminologyServerQuery.js.map +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.js +15 -6
- package/lib/index.js.map +1 -1
- package/lib/interfaces/index.d.ts +2 -0
- package/lib/interfaces/index.js +18 -0
- package/lib/interfaces/index.js.map +1 -0
- package/lib/interfaces/questionnaireStore.interface.d.ts +1 -0
- package/lib/interfaces/renderProps.interface.d.ts +4 -3
- package/lib/stores/useQuestionnaireStore.d.ts +1 -0
- package/lib/stores/useQuestionnaireStore.js +28 -12
- package/lib/stores/useQuestionnaireStore.js.map +1 -1
- package/lib/test.d.ts +4 -0
- package/lib/test.js +18 -0
- package/lib/test.js.map +1 -0
- package/lib/theme/customGlobalStyles.js +2 -5
- package/lib/theme/customGlobalStyles.js.map +1 -1
- package/lib/theme/typography.js +9 -9
- package/lib/theme/typography.js.map +1 -1
- package/lib/utils/calculatedExpression.d.ts +5 -1
- package/lib/utils/calculatedExpression.js +21 -16
- package/lib/utils/calculatedExpression.js.map +1 -1
- package/lib/utils/dayjsExtend.d.ts +1 -0
- package/lib/utils/dayjsExtend.js +22 -0
- package/lib/utils/dayjsExtend.js.map +1 -0
- package/lib/utils/enableWhenExpression.d.ts +5 -1
- package/lib/utils/enableWhenExpression.js +26 -21
- package/lib/utils/enableWhenExpression.js.map +1 -1
- package/lib/utils/fhirpath.d.ts +3 -1
- package/lib/utils/fhirpath.js +25 -15
- package/lib/utils/fhirpath.js.map +1 -1
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js +1 -0
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/initialiseForm.d.ts +2 -0
- package/lib/utils/initialiseForm.js +13 -5
- package/lib/utils/initialiseForm.js.map +1 -1
- package/lib/utils/itemControl.d.ts +12 -0
- package/lib/utils/itemControl.js +30 -0
- package/lib/utils/itemControl.js.map +1 -1
- package/lib/utils/launchContext.d.ts +0 -0
- package/lib/utils/launchContext.js +2 -0
- package/lib/utils/launchContext.js.map +1 -0
- package/lib/utils/mapItem.d.ts +1 -1
- package/lib/utils/populateContexts.d.ts +2 -12
- package/lib/utils/populateContexts.js +0 -36
- package/lib/utils/populateContexts.js.map +1 -1
- package/lib/utils/qrItem.d.ts +1 -7
- package/lib/utils/qrItem.js +1 -12
- package/lib/utils/qrItem.js.map +1 -1
- package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +4 -2
- package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -1
- package/lib/utils/removeHidden.js +2 -1
- package/lib/utils/removeHidden.js.map +1 -1
- package/lib/utils/repopulateIntoResponse.js +90 -29
- package/lib/utils/repopulateIntoResponse.js.map +1 -1
- package/lib/utils/repopulateItems.d.ts +14 -1
- package/lib/utils/repopulateItems.js +251 -70
- package/lib/utils/repopulateItems.js.map +1 -1
- package/lib/utils/repopulateRepeatGroup.js +9 -1
- package/lib/utils/repopulateRepeatGroup.js.map +1 -1
- package/lib/utils/slider.d.ts +28 -0
- package/lib/utils/slider.js +89 -0
- package/lib/utils/slider.js.map +1 -0
- package/package.json +18 -15
- package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +2 -2
- package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +2 -2
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +33 -33
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +35 -35
- package/src/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.tsx +8 -8
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +2 -2
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +2 -2
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +2 -2
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +2 -2
- package/src/components/FormComponents/CustomDateItem/CustomDateItem.tsx +140 -0
- package/src/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.tsx +96 -0
- package/src/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.tsx +81 -0
- package/src/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.tsx +33 -0
- package/src/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.ts +22 -0
- package/src/components/FormComponents/CustomDateItem/customDateTimePicker/index.ts +18 -0
- package/src/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.ts +18 -0
- package/src/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.ts +154 -0
- package/src/components/FormComponents/CustomDateItem/index.ts +18 -0
- package/src/components/FormComponents/DateItem/DateItem.tsx +3 -3
- package/src/components/FormComponents/DateTimeItem/DateTimeItem.tsx +2 -2
- package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +4 -5
- package/src/components/FormComponents/DisplayItem/DisplayInstructions.styles.ts +0 -1
- package/src/components/FormComponents/DisplayItem/DisplayInstructions.tsx +2 -1
- package/src/components/FormComponents/GridGroup/GridGroup.tsx +41 -15
- package/src/components/FormComponents/GridGroup/GridRow.tsx +10 -9
- package/src/components/FormComponents/GridGroup/GridTable.tsx +29 -9
- package/src/components/FormComponents/GridGroup/index.ts +18 -0
- package/src/components/FormComponents/GroupItem/GroupItem.tsx +5 -6
- package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +7 -8
- package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +4 -5
- package/src/components/FormComponents/ItemParts/FadingCheckIcon.tsx +2 -2
- package/src/components/FormComponents/ItemParts/ItemFieldGrid.tsx +2 -2
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +2 -2
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +43 -43
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.tsx +6 -6
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +2 -2
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +2 -2
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +2 -2
- package/src/components/FormComponents/RepeatGroup/RepeatGroup.tsx +49 -6
- package/src/components/FormComponents/RepeatGroup/RepeatGroupItem.tsx +13 -8
- package/src/components/FormComponents/RepeatItem/RepeatField.tsx +15 -9
- package/src/components/FormComponents/RepeatItem/RepeatItem.tsx +33 -3
- package/src/components/FormComponents/RepeatItem/index.ts +18 -0
- package/src/components/FormComponents/SingleItem/SingleItem.tsx +6 -6
- package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +27 -11
- package/src/components/FormComponents/SliderItem/Slider.styles.ts +34 -0
- package/src/components/FormComponents/SliderItem/SliderDisplayValue.tsx +43 -0
- package/src/components/FormComponents/SliderItem/SliderField.tsx +88 -0
- package/src/components/FormComponents/SliderItem/SliderItem.tsx +115 -0
- package/src/components/FormComponents/SliderItem/SliderLabels.tsx +53 -0
- package/src/components/FormComponents/StringItem/StringItem.tsx +2 -2
- package/src/components/FormComponents/Tables/GroupTable.tsx +55 -3
- package/src/components/FormComponents/Tables/GroupTableRow.tsx +10 -9
- package/src/components/FormComponents/TextItem/TextItem.tsx +2 -2
- package/src/components/FormComponents/TimeItem/TimeItem.tsx +2 -2
- package/src/components/FormComponents/UrlItem/UrlItem.tsx +2 -2
- package/src/components/FormComponents/index.ts +3 -0
- package/src/components/Renderer/BaseRenderer.tsx +5 -12
- package/src/components/Renderer/FormBodyCollapsible.tsx +9 -7
- package/src/components/Renderer/FormBodySingleCollapsibleWrapper.tsx +2 -3
- package/src/components/Renderer/FormBodyTabbed.tsx +9 -7
- package/src/components/Renderer/FormTopLevelItem.tsx +14 -11
- package/src/components/Renderer/SmartFormsRenderer.tsx +2 -1
- package/src/hooks/useDateValidation.tsx +79 -0
- package/src/hooks/useDecimalCalculatedExpression.ts +3 -4
- package/src/hooks/useInitialiseRepeatAnswers.ts +1 -1
- package/src/hooks/useIntegerCalculatedExpression.ts +3 -4
- package/src/hooks/useSliderExtensions.ts +50 -0
- package/src/hooks/useTerminologyServerQuery.ts +0 -2
- package/src/index.ts +12 -9
- package/src/interfaces/questionnaireStore.interface.ts +1 -0
- package/src/interfaces/renderProps.interface.ts +4 -3
- package/src/stores/useQuestionnaireStore.ts +39 -16
- package/src/theme/customGlobalStyles.tsx +2 -5
- package/src/theme/typography.ts +9 -9
- package/src/utils/calculatedExpression.ts +41 -28
- package/src/utils/dayjsExtend.ts +23 -0
- package/src/utils/enableWhenExpression.ts +49 -34
- package/src/utils/fhirpath.ts +50 -31
- package/src/utils/index.ts +1 -0
- package/src/utils/initialiseForm.ts +15 -5
- package/src/utils/itemControl.ts +32 -0
- package/src/utils/mapItem.ts +1 -1
- package/src/utils/populateContexts.ts +2 -61
- package/src/utils/qrItem.ts +1 -16
- package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +4 -2
- package/src/utils/removeHidden.ts +2 -1
- package/src/utils/repopulateIntoResponse.ts +134 -43
- package/src/utils/repopulateItems.ts +379 -101
- package/src/utils/slider.ts +112 -0
- package/src/utils/populateInputParams.ts +0 -242
- package/src/utils/repopulateRepeatGroup.ts +0 -68
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import { useEffect, useState } from 'react';
|
|
19
|
-
import {
|
|
19
|
+
import { createEmptyQrItem } from '../utils/qrItem';
|
|
20
20
|
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
21
21
|
import useQuestionnaireStore from '../stores/useQuestionnaireStore';
|
|
22
22
|
|
|
@@ -27,7 +27,6 @@ interface UseDecimalCalculatedExpression {
|
|
|
27
27
|
interface useDecimalCalculatedExpressionProps {
|
|
28
28
|
qItem: QuestionnaireItem;
|
|
29
29
|
inputValue: string;
|
|
30
|
-
displayUnit: string;
|
|
31
30
|
precision: number | null;
|
|
32
31
|
setInputValue: (value: string) => void;
|
|
33
32
|
onQrItemChange: (qrItem: QuestionnaireResponseItem) => void;
|
|
@@ -36,7 +35,7 @@ interface useDecimalCalculatedExpressionProps {
|
|
|
36
35
|
function useDecimalCalculatedExpression(
|
|
37
36
|
props: useDecimalCalculatedExpressionProps
|
|
38
37
|
): UseDecimalCalculatedExpression {
|
|
39
|
-
const { qItem, inputValue,
|
|
38
|
+
const { qItem, inputValue, precision, setInputValue, onQrItemChange } = props;
|
|
40
39
|
|
|
41
40
|
const calculatedExpressions = useQuestionnaireStore((state) => state.calculatedExpressions);
|
|
42
41
|
|
|
@@ -63,7 +62,7 @@ function useDecimalCalculatedExpression(
|
|
|
63
62
|
// update questionnaireResponse
|
|
64
63
|
setInputValue(precision ? value.toFixed(precision) : value.toString());
|
|
65
64
|
onQrItemChange({
|
|
66
|
-
...
|
|
65
|
+
...createEmptyQrItem(qItem),
|
|
67
66
|
answer: [{ valueDecimal: value }]
|
|
68
67
|
});
|
|
69
68
|
}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import { useEffect, useState } from 'react';
|
|
19
|
-
import {
|
|
19
|
+
import { createEmptyQrItem } from '../utils/qrItem';
|
|
20
20
|
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
21
21
|
import useQuestionnaireStore from '../stores/useQuestionnaireStore';
|
|
22
22
|
|
|
@@ -27,7 +27,6 @@ interface UseIntegerCalculatedExpression {
|
|
|
27
27
|
interface useIntegerCalculatedExpressionProps {
|
|
28
28
|
qItem: QuestionnaireItem;
|
|
29
29
|
inputValue: number;
|
|
30
|
-
displayUnit: string;
|
|
31
30
|
setInputValue: (value: number) => void;
|
|
32
31
|
onQrItemChange: (qrItem: QuestionnaireResponseItem) => void;
|
|
33
32
|
}
|
|
@@ -35,7 +34,7 @@ interface useIntegerCalculatedExpressionProps {
|
|
|
35
34
|
function useIntegerCalculatedExpression(
|
|
36
35
|
props: useIntegerCalculatedExpressionProps
|
|
37
36
|
): UseIntegerCalculatedExpression {
|
|
38
|
-
const { qItem, inputValue,
|
|
37
|
+
const { qItem, inputValue, setInputValue, onQrItemChange } = props;
|
|
39
38
|
|
|
40
39
|
const calculatedExpressions = useQuestionnaireStore((state) => state.calculatedExpressions);
|
|
41
40
|
|
|
@@ -56,7 +55,7 @@ function useIntegerCalculatedExpression(
|
|
|
56
55
|
// update questionnaireResponse
|
|
57
56
|
setInputValue(calcExpression.value);
|
|
58
57
|
onQrItemChange({
|
|
59
|
-
...
|
|
58
|
+
...createEmptyQrItem(qItem),
|
|
60
59
|
answer: [{ valueInteger: calcExpression.value }]
|
|
61
60
|
});
|
|
62
61
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
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 { getTextDisplayLower, getTextDisplayUpper } from '../utils/itemControl';
|
|
19
|
+
import type { QuestionnaireItem } from 'fhir/r4';
|
|
20
|
+
import { getMaxValue, getMinValue, getSliderStepValue } from '../utils/slider';
|
|
21
|
+
|
|
22
|
+
const defaultMinValue = 0;
|
|
23
|
+
const defaultMinLabel = '0';
|
|
24
|
+
|
|
25
|
+
const defaultMaxValue = 100;
|
|
26
|
+
const defaultMaxLabel = '100';
|
|
27
|
+
|
|
28
|
+
const defaultStepValue = 1;
|
|
29
|
+
|
|
30
|
+
interface SliderExtensions {
|
|
31
|
+
minValue: number;
|
|
32
|
+
minLabel: string;
|
|
33
|
+
maxValue: number;
|
|
34
|
+
maxLabel: string;
|
|
35
|
+
stepValue: number;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function useSliderExtensions(qItem: QuestionnaireItem): SliderExtensions {
|
|
39
|
+
const minValue = getMinValue(qItem) ?? defaultMinValue;
|
|
40
|
+
const maxValue = getMaxValue(qItem) ?? defaultMaxValue;
|
|
41
|
+
return {
|
|
42
|
+
minValue: minValue,
|
|
43
|
+
minLabel: getTextDisplayLower(qItem) ?? minValue.toString() ?? defaultMinLabel,
|
|
44
|
+
maxValue: maxValue,
|
|
45
|
+
maxLabel: getTextDisplayUpper(qItem) ?? maxValue.toString() ?? defaultMaxLabel,
|
|
46
|
+
stepValue: getSliderStepValue(qItem) ?? defaultStepValue
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export default useSliderExtensions;
|
package/src/index.ts
CHANGED
|
@@ -80,32 +80,35 @@ export function removeHiddenAnswersFromResponse(
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
/**
|
|
83
|
-
*
|
|
83
|
+
* Compare latest data from the server with the current QuestionnaireResponse and decide items to re-populate.
|
|
84
84
|
*
|
|
85
85
|
* @author Sean Fong
|
|
86
86
|
*/
|
|
87
87
|
export function generateItemsToRepopulate(populatedResponse: QuestionnaireResponse) {
|
|
88
88
|
const sourceQuestionnaire = useQuestionnaireStore.getState().sourceQuestionnaire;
|
|
89
|
-
const itemTypes = useQuestionnaireStore.getState().itemTypes;
|
|
90
89
|
const tabs = useQuestionnaireStore.getState().tabs;
|
|
91
90
|
const updatableResponse = useQuestionnaireResponseStore.getState().updatableResponse;
|
|
92
|
-
|
|
91
|
+
const enableWhenIsActivated = useQuestionnaireStore.getState().enableWhenIsActivated;
|
|
92
|
+
const enableWhenItems = useQuestionnaireStore.getState().enableWhenItems;
|
|
93
|
+
const enableWhenExpressions = useQuestionnaireStore.getState().enableWhenExpressions;
|
|
93
94
|
|
|
94
|
-
return getItemsToRepopulate(
|
|
95
|
+
return getItemsToRepopulate({
|
|
95
96
|
sourceQuestionnaire,
|
|
96
|
-
itemTypes,
|
|
97
97
|
tabs,
|
|
98
98
|
populatedResponse,
|
|
99
|
-
updatableResponse
|
|
100
|
-
|
|
99
|
+
updatableResponse,
|
|
100
|
+
enableWhenIsActivated,
|
|
101
|
+
enableWhenItems,
|
|
102
|
+
enableWhenExpressions
|
|
103
|
+
});
|
|
101
104
|
}
|
|
102
105
|
|
|
103
106
|
/**
|
|
104
|
-
* Re-populate
|
|
107
|
+
* Re-populate checked items in the re-population dialog into the current QuestionnaireResponse.
|
|
105
108
|
*
|
|
106
109
|
* @author Sean Fong
|
|
107
110
|
*/
|
|
108
|
-
export function
|
|
111
|
+
export function repopulateResponse(checkedItemsToRepopulate: Record<string, ItemToRepopulate>) {
|
|
109
112
|
const sourceQuestionnaire = useQuestionnaireStore.getState().sourceQuestionnaire;
|
|
110
113
|
const updatableResponse = useQuestionnaireResponseStore.getState().updatableResponse;
|
|
111
114
|
|
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import type { QrRepeatGroup } from './repeatGroup.interface';
|
|
19
|
+
import type { QuestionnaireResponseItem } from 'fhir/r4';
|
|
19
20
|
|
|
20
|
-
export interface PropsWithQrItemChangeHandler
|
|
21
|
+
export interface PropsWithQrItemChangeHandler {
|
|
21
22
|
onQrItemChange: (qrItem: QuestionnaireResponseItem) => unknown;
|
|
22
23
|
}
|
|
23
24
|
|
|
@@ -33,8 +34,8 @@ export interface PropsWithIsTabledAttribute {
|
|
|
33
34
|
isTabled: boolean;
|
|
34
35
|
}
|
|
35
36
|
|
|
36
|
-
export interface
|
|
37
|
-
|
|
37
|
+
export interface PropsWithShowMinimalViewAttribute {
|
|
38
|
+
showMinimalView?: boolean;
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
export interface PropsWithParentIsReadOnlyAttribute {
|
|
@@ -56,6 +56,7 @@ export interface UseQuestionnaireStoreType {
|
|
|
56
56
|
processedValueSetCodings: Record<string, Coding[]>;
|
|
57
57
|
processedValueSetUrls: Record<string, string>;
|
|
58
58
|
cachedValueSetCodings: Record<string, Coding[]>;
|
|
59
|
+
fhirPathContext: Record<string, any>;
|
|
59
60
|
buildSourceQuestionnaire: (
|
|
60
61
|
questionnaire: Questionnaire,
|
|
61
62
|
questionnaireResponse?: QuestionnaireResponse,
|
|
@@ -91,6 +92,7 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
|
|
|
91
92
|
processedValueSetCodings: {},
|
|
92
93
|
processedValueSetUrls: {},
|
|
93
94
|
cachedValueSetCodings: {},
|
|
95
|
+
fhirPathContext: {},
|
|
94
96
|
buildSourceQuestionnaire: async (
|
|
95
97
|
questionnaire,
|
|
96
98
|
questionnaireResponse = cloneDeep(emptyResponse),
|
|
@@ -108,14 +110,16 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
|
|
|
108
110
|
initialEnableWhenLinkedQuestions,
|
|
109
111
|
initialEnableWhenExpressions,
|
|
110
112
|
initialCalculatedExpressions,
|
|
111
|
-
firstVisibleTab
|
|
113
|
+
firstVisibleTab,
|
|
114
|
+
updatedFhirPathContext
|
|
112
115
|
} = initialiseFormFromResponse({
|
|
113
116
|
questionnaireResponse,
|
|
114
117
|
enableWhenItems: questionnaireModel.enableWhenItems,
|
|
115
118
|
enableWhenExpressions: questionnaireModel.enableWhenExpressions,
|
|
116
119
|
calculatedExpressions: questionnaireModel.calculatedExpressions,
|
|
117
120
|
variablesFhirPath: questionnaireModel.variables.fhirPathVariables,
|
|
118
|
-
tabs: questionnaireModel.tabs
|
|
121
|
+
tabs: questionnaireModel.tabs,
|
|
122
|
+
fhirPathContext: questionnaireModel.fhirPathContext
|
|
119
123
|
});
|
|
120
124
|
|
|
121
125
|
set({
|
|
@@ -131,7 +135,8 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
|
|
|
131
135
|
calculatedExpressions: initialCalculatedExpressions,
|
|
132
136
|
answerExpressions: questionnaireModel.answerExpressions,
|
|
133
137
|
processedValueSetCodings: questionnaireModel.processedValueSetCodings,
|
|
134
|
-
processedValueSetUrls: questionnaireModel.processedValueSetUrls
|
|
138
|
+
processedValueSetUrls: questionnaireModel.processedValueSetUrls,
|
|
139
|
+
fhirPathContext: updatedFhirPathContext
|
|
135
140
|
});
|
|
136
141
|
},
|
|
137
142
|
destroySourceQuestionnaire: () =>
|
|
@@ -148,7 +153,8 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
|
|
|
148
153
|
calculatedExpressions: {},
|
|
149
154
|
answerExpressions: {},
|
|
150
155
|
processedValueSetCodings: {},
|
|
151
|
-
processedValueSetUrls: {}
|
|
156
|
+
processedValueSetUrls: {},
|
|
157
|
+
fhirPathContext: {}
|
|
152
158
|
}),
|
|
153
159
|
switchTab: (newTabIndex: number) => set(() => ({ currentTabIndex: newTabIndex })),
|
|
154
160
|
markTabAsComplete: (tabLinkId: string) => {
|
|
@@ -182,20 +188,31 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
|
|
|
182
188
|
toggleEnableWhenActivation: (isActivated: boolean) =>
|
|
183
189
|
set(() => ({ enableWhenIsActivated: isActivated })),
|
|
184
190
|
updateExpressions: (updatedResponse: QuestionnaireResponse) => {
|
|
185
|
-
const {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
191
|
+
const {
|
|
192
|
+
isUpdated,
|
|
193
|
+
updatedEnableWhenExpressions,
|
|
194
|
+
updatedCalculatedExpressions,
|
|
195
|
+
updatedFhirPathContext
|
|
196
|
+
} = evaluateUpdatedExpressions({
|
|
197
|
+
updatedResponse,
|
|
198
|
+
enableWhenExpressions: get().enableWhenExpressions,
|
|
199
|
+
calculatedExpressions: get().calculatedExpressions,
|
|
200
|
+
variablesFhirPath: get().variables.fhirPathVariables,
|
|
201
|
+
existingFhirPathContext: get().fhirPathContext
|
|
202
|
+
});
|
|
192
203
|
|
|
193
204
|
if (isUpdated) {
|
|
194
205
|
set(() => ({
|
|
195
206
|
enableWhenExpressions: updatedEnableWhenExpressions,
|
|
196
|
-
calculatedExpressions: updatedCalculatedExpressions
|
|
207
|
+
calculatedExpressions: updatedCalculatedExpressions,
|
|
208
|
+
fhirPathContext: updatedFhirPathContext
|
|
197
209
|
}));
|
|
210
|
+
return 0;
|
|
198
211
|
}
|
|
212
|
+
|
|
213
|
+
set(() => ({
|
|
214
|
+
fhirPathContext: updatedFhirPathContext
|
|
215
|
+
}));
|
|
199
216
|
},
|
|
200
217
|
addCodingToCache: (valueSetUrl: string, codings: Coding[]) =>
|
|
201
218
|
set(() => ({
|
|
@@ -205,11 +222,14 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
|
|
|
205
222
|
}
|
|
206
223
|
})),
|
|
207
224
|
updatePopulatedProperties: (populatedResponse: QuestionnaireResponse, persistTabIndex) => {
|
|
208
|
-
const
|
|
225
|
+
const evaluateInitialCalculatedExpressionsResult = evaluateInitialCalculatedExpressions({
|
|
209
226
|
initialResponse: populatedResponse,
|
|
210
227
|
calculatedExpressions: get().calculatedExpressions,
|
|
211
|
-
variablesFhirPath: get().variables.fhirPathVariables
|
|
228
|
+
variablesFhirPath: get().variables.fhirPathVariables,
|
|
229
|
+
existingFhirPathContext: get().fhirPathContext
|
|
212
230
|
});
|
|
231
|
+
const { initialCalculatedExpressions } = evaluateInitialCalculatedExpressionsResult;
|
|
232
|
+
let updatedFhirPathContext = evaluateInitialCalculatedExpressionsResult.updatedFhirPathContext;
|
|
213
233
|
|
|
214
234
|
const updatedResponse = initialiseCalculatedExpressionValues(
|
|
215
235
|
get().sourceQuestionnaire,
|
|
@@ -228,15 +248,18 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
|
|
|
228
248
|
enableWhenExpressions: get().enableWhenExpressions,
|
|
229
249
|
calculatedExpressions: initialCalculatedExpressions,
|
|
230
250
|
variablesFhirPath: get().variables.fhirPathVariables,
|
|
231
|
-
tabs: get().tabs
|
|
251
|
+
tabs: get().tabs,
|
|
252
|
+
fhirPathContext: updatedFhirPathContext
|
|
232
253
|
});
|
|
254
|
+
updatedFhirPathContext = evaluateInitialCalculatedExpressionsResult.updatedFhirPathContext;
|
|
233
255
|
|
|
234
256
|
set(() => ({
|
|
235
257
|
enableWhenItems: initialEnableWhenItems,
|
|
236
258
|
enableWhenLinkedQuestions: initialEnableWhenLinkedQuestions,
|
|
237
259
|
enableWhenExpressions: initialEnableWhenExpressions,
|
|
238
260
|
calculatedExpressions: initialCalculatedExpressions,
|
|
239
|
-
currentTabIndex: persistTabIndex ? get().currentTabIndex : firstVisibleTab
|
|
261
|
+
currentTabIndex: persistTabIndex ? get().currentTabIndex : firstVisibleTab,
|
|
262
|
+
fhirPathContext: updatedFhirPathContext
|
|
240
263
|
}));
|
|
241
264
|
|
|
242
265
|
return updatedResponse;
|
|
@@ -39,7 +39,8 @@ export default function CustomGlobalStyles() {
|
|
|
39
39
|
},
|
|
40
40
|
'#root': {
|
|
41
41
|
width: '100%',
|
|
42
|
-
height: '100%'
|
|
42
|
+
height: '100%',
|
|
43
|
+
textAlign: 'left'
|
|
43
44
|
},
|
|
44
45
|
input: {
|
|
45
46
|
'&[type=number]': {
|
|
@@ -57,10 +58,6 @@ export default function CustomGlobalStyles() {
|
|
|
57
58
|
img: {
|
|
58
59
|
display: 'block',
|
|
59
60
|
maxWidth: '100%'
|
|
60
|
-
},
|
|
61
|
-
ul: {
|
|
62
|
-
margin: 0,
|
|
63
|
-
padding: 0
|
|
64
61
|
}
|
|
65
62
|
}}
|
|
66
63
|
/>
|
package/src/theme/typography.ts
CHANGED
|
@@ -37,7 +37,7 @@ export function responsiveFontSizes(props: { sm: number; md: number; lg: number
|
|
|
37
37
|
// ----------------------------------------------------------------------
|
|
38
38
|
|
|
39
39
|
const typography = {
|
|
40
|
-
fontFamily: ['Inter', 'sans-serif', '
|
|
40
|
+
fontFamily: ['Inter', 'sans-serif', 'Helvetica', 'Arial', 'Roboto', '"Helvetica Neue"'].join(','),
|
|
41
41
|
fontWeightRegular: 500,
|
|
42
42
|
h1: {
|
|
43
43
|
fontWeight: 800,
|
|
@@ -72,40 +72,40 @@ const typography = {
|
|
|
72
72
|
h6: {
|
|
73
73
|
fontWeight: 700,
|
|
74
74
|
lineHeight: 28 / 18,
|
|
75
|
-
fontSize: pxToRem(13),
|
|
75
|
+
fontSize: pxToRem(13.5),
|
|
76
76
|
...responsiveFontSizes({ sm: 14, md: 14, lg: 14 })
|
|
77
77
|
},
|
|
78
78
|
subtitle1: {
|
|
79
79
|
fontWeight: 600,
|
|
80
80
|
lineHeight: 1.5,
|
|
81
|
-
fontSize: pxToRem(13)
|
|
81
|
+
fontSize: pxToRem(13.5)
|
|
82
82
|
},
|
|
83
83
|
subtitle2: {
|
|
84
84
|
fontWeight: 600,
|
|
85
85
|
lineHeight: 22 / 14,
|
|
86
|
-
fontSize: pxToRem(
|
|
86
|
+
fontSize: pxToRem(12)
|
|
87
87
|
},
|
|
88
88
|
body1: {
|
|
89
89
|
lineHeight: 1.5,
|
|
90
|
-
fontSize: pxToRem(
|
|
90
|
+
fontSize: pxToRem(13)
|
|
91
91
|
},
|
|
92
92
|
body2: {
|
|
93
93
|
lineHeight: 22 / 14,
|
|
94
|
-
fontSize: pxToRem(11)
|
|
94
|
+
fontSize: pxToRem(11.5)
|
|
95
95
|
},
|
|
96
96
|
caption: {
|
|
97
97
|
lineHeight: 1.5,
|
|
98
|
-
fontSize: pxToRem(10)
|
|
98
|
+
fontSize: pxToRem(10.5)
|
|
99
99
|
},
|
|
100
100
|
overline: {
|
|
101
101
|
fontWeight: 700,
|
|
102
102
|
lineHeight: 1.5,
|
|
103
|
-
fontSize: pxToRem(10)
|
|
103
|
+
fontSize: pxToRem(10.5)
|
|
104
104
|
},
|
|
105
105
|
button: {
|
|
106
106
|
fontWeight: 700,
|
|
107
107
|
lineHeight: 24 / 14,
|
|
108
|
-
fontSize: pxToRem(12)
|
|
108
|
+
fontSize: pxToRem(12.5)
|
|
109
109
|
}
|
|
110
110
|
};
|
|
111
111
|
|
|
@@ -40,49 +40,62 @@ interface EvaluateInitialCalculatedExpressionsParams {
|
|
|
40
40
|
initialResponse: QuestionnaireResponse;
|
|
41
41
|
calculatedExpressions: Record<string, CalculatedExpression>;
|
|
42
42
|
variablesFhirPath: Record<string, Expression[]>;
|
|
43
|
+
existingFhirPathContext: Record<string, any>;
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
export function evaluateInitialCalculatedExpressions(
|
|
46
47
|
params: EvaluateInitialCalculatedExpressionsParams
|
|
47
|
-
):
|
|
48
|
-
|
|
48
|
+
): {
|
|
49
|
+
initialCalculatedExpressions: Record<string, CalculatedExpression>;
|
|
50
|
+
updatedFhirPathContext: Record<string, any>;
|
|
51
|
+
} {
|
|
52
|
+
const { initialResponse, calculatedExpressions, variablesFhirPath, existingFhirPathContext } =
|
|
53
|
+
params;
|
|
49
54
|
|
|
50
|
-
// Return early if initialResponse is empty
|
|
51
|
-
if (
|
|
52
|
-
|
|
55
|
+
// Return early if initialResponse is empty or there are no calculated expressions to evaluate
|
|
56
|
+
if (
|
|
57
|
+
_isEqual(initialResponse, cloneDeep(emptyResponse)) ||
|
|
58
|
+
Object.keys(calculatedExpressions).length === 0
|
|
59
|
+
) {
|
|
60
|
+
return {
|
|
61
|
+
initialCalculatedExpressions: calculatedExpressions,
|
|
62
|
+
updatedFhirPathContext: existingFhirPathContext
|
|
63
|
+
};
|
|
53
64
|
}
|
|
54
65
|
|
|
55
66
|
const initialCalculatedExpressions: Record<string, CalculatedExpression> = {
|
|
56
67
|
...calculatedExpressions
|
|
57
68
|
};
|
|
69
|
+
const updatedFhirPathContext = createFhirPathContext(
|
|
70
|
+
initialResponse,
|
|
71
|
+
variablesFhirPath,
|
|
72
|
+
existingFhirPathContext
|
|
73
|
+
);
|
|
58
74
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const result = fhirpath.evaluate(
|
|
68
|
-
initialResponse,
|
|
69
|
-
calculatedExpressions[linkId].expression,
|
|
70
|
-
fhirPathContext,
|
|
71
|
-
fhirpath_r4_model
|
|
72
|
-
);
|
|
75
|
+
for (const linkId in initialCalculatedExpressions) {
|
|
76
|
+
try {
|
|
77
|
+
const result = fhirpath.evaluate(
|
|
78
|
+
initialResponse,
|
|
79
|
+
calculatedExpressions[linkId].expression,
|
|
80
|
+
updatedFhirPathContext,
|
|
81
|
+
fhirpath_r4_model
|
|
82
|
+
);
|
|
73
83
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
} catch (e) {
|
|
78
|
-
console.warn(
|
|
79
|
-
e.message,
|
|
80
|
-
`LinkId: ${linkId}\nExpression: ${calculatedExpressions[linkId].expression}`
|
|
81
|
-
);
|
|
84
|
+
if (!_isEqual(calculatedExpressions[linkId].value, result[0])) {
|
|
85
|
+
initialCalculatedExpressions[linkId].value = result[0];
|
|
82
86
|
}
|
|
87
|
+
} catch (e) {
|
|
88
|
+
console.warn(
|
|
89
|
+
e.message,
|
|
90
|
+
`LinkId: ${linkId}\nExpression: ${calculatedExpressions[linkId].expression}`
|
|
91
|
+
);
|
|
83
92
|
}
|
|
84
93
|
}
|
|
85
|
-
|
|
94
|
+
|
|
95
|
+
return {
|
|
96
|
+
initialCalculatedExpressions,
|
|
97
|
+
updatedFhirPathContext
|
|
98
|
+
};
|
|
86
99
|
}
|
|
87
100
|
|
|
88
101
|
export function evaluateCalculatedExpressions(
|
|
@@ -0,0 +1,23 @@
|
|
|
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 dayjs from 'dayjs';
|
|
19
|
+
import localizedFormat from 'dayjs/plugin/localizedFormat';
|
|
20
|
+
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
21
|
+
|
|
22
|
+
dayjs.extend(localizedFormat);
|
|
23
|
+
dayjs.extend(customParseFormat);
|
|
@@ -28,52 +28,67 @@ interface EvaluateInitialEnableWhenExpressionsParams {
|
|
|
28
28
|
initialResponse: QuestionnaireResponse;
|
|
29
29
|
enableWhenExpressions: Record<string, EnableWhenExpression>;
|
|
30
30
|
variablesFhirPath: Record<string, Expression[]>;
|
|
31
|
+
existingFhirPathContext: Record<string, any>;
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
export function evaluateInitialEnableWhenExpressions(
|
|
34
35
|
params: EvaluateInitialEnableWhenExpressionsParams
|
|
35
|
-
):
|
|
36
|
-
|
|
36
|
+
): {
|
|
37
|
+
initialEnableWhenExpressions: Record<string, EnableWhenExpression>;
|
|
38
|
+
updatedFhirPathContext: Record<string, any>;
|
|
39
|
+
} {
|
|
40
|
+
const { initialResponse, enableWhenExpressions, variablesFhirPath, existingFhirPathContext } =
|
|
41
|
+
params;
|
|
37
42
|
|
|
38
|
-
// Return early if initialResponse is empty
|
|
39
|
-
if (
|
|
40
|
-
|
|
43
|
+
// Return early if initialResponse is empty or there are no enableWhen expressions to evaluate
|
|
44
|
+
if (
|
|
45
|
+
_isEqual(initialResponse, cloneDeep(emptyResponse)) ||
|
|
46
|
+
Object.keys(enableWhenExpressions).length === 0
|
|
47
|
+
) {
|
|
48
|
+
return {
|
|
49
|
+
initialEnableWhenExpressions: enableWhenExpressions,
|
|
50
|
+
updatedFhirPathContext: existingFhirPathContext
|
|
51
|
+
};
|
|
41
52
|
}
|
|
42
53
|
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
const initialEnableWhenExpressions: Record<string, EnableWhenExpression> = {
|
|
55
|
+
...enableWhenExpressions
|
|
56
|
+
};
|
|
57
|
+
const updatedFhirPathContext = createFhirPathContext(
|
|
58
|
+
initialResponse,
|
|
59
|
+
variablesFhirPath,
|
|
60
|
+
existingFhirPathContext
|
|
61
|
+
);
|
|
50
62
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
63
|
+
for (const linkId in initialEnableWhenExpressions) {
|
|
64
|
+
try {
|
|
65
|
+
const result = fhirpath.evaluate(
|
|
66
|
+
initialResponse,
|
|
67
|
+
enableWhenExpressions[linkId].expression,
|
|
68
|
+
updatedFhirPathContext,
|
|
69
|
+
fhirpath_r4_model
|
|
70
|
+
);
|
|
59
71
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
72
|
+
if (result.length > 0) {
|
|
73
|
+
initialEnableWhenExpressions[linkId].isEnabled = result[0];
|
|
74
|
+
}
|
|
63
75
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
} catch (e) {
|
|
69
|
-
console.warn(
|
|
70
|
-
e.message,
|
|
71
|
-
`LinkId: ${linkId}\nExpression: ${enableWhenExpressions[linkId].expression}`
|
|
72
|
-
);
|
|
76
|
+
// handle intersect edge case - evaluate() returns empty array if result is false
|
|
77
|
+
if (enableWhenExpressions[linkId].expression.includes('intersect') && result.length === 0) {
|
|
78
|
+
initialEnableWhenExpressions[linkId].isEnabled = false;
|
|
73
79
|
}
|
|
80
|
+
} catch (e) {
|
|
81
|
+
console.warn(
|
|
82
|
+
e.message,
|
|
83
|
+
`LinkId: ${linkId}\nExpression: ${enableWhenExpressions[linkId].expression}`
|
|
84
|
+
);
|
|
74
85
|
}
|
|
75
86
|
}
|
|
76
|
-
|
|
87
|
+
|
|
88
|
+
return {
|
|
89
|
+
initialEnableWhenExpressions,
|
|
90
|
+
updatedFhirPathContext
|
|
91
|
+
};
|
|
77
92
|
}
|
|
78
93
|
|
|
79
94
|
export function evaluateEnableWhenExpressions(
|
|
@@ -104,7 +119,7 @@ export function evaluateEnableWhenExpressions(
|
|
|
104
119
|
}
|
|
105
120
|
}
|
|
106
121
|
|
|
107
|
-
// handle intersect edge case -
|
|
122
|
+
// handle intersect edge case - evaluate() returns empty array if result is false
|
|
108
123
|
if (enableWhenExpressions[linkId].expression.includes('intersect') && result.length === 0) {
|
|
109
124
|
updatedEnableWhenExpressions[linkId].isEnabled = false;
|
|
110
125
|
}
|