@aehrc/smart-forms-renderer 0.8.1 → 0.9.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/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/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/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/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/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 +0 -4
- package/lib/theme/customGlobalStyles.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/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 +11 -9
- 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/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 +0 -4
- 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/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/repopulateRepeatGroup.ts +0 -68
|
@@ -47,12 +47,12 @@ import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
|
47
47
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
48
48
|
|
|
49
49
|
interface ChoiceAutocompleteItemProps
|
|
50
|
-
extends PropsWithQrItemChangeHandler
|
|
50
|
+
extends PropsWithQrItemChangeHandler,
|
|
51
51
|
PropsWithIsRepeatedAttribute,
|
|
52
52
|
PropsWithIsTabledAttribute,
|
|
53
53
|
PropsWithParentIsReadOnlyAttribute {
|
|
54
54
|
qItem: QuestionnaireItem;
|
|
55
|
-
qrItem: QuestionnaireResponseItem;
|
|
55
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
function ChoiceAutocompleteItem(props: ChoiceAutocompleteItemProps) {
|
|
@@ -27,7 +27,7 @@ import type {
|
|
|
27
27
|
PropsWithIsRepeatedAttribute,
|
|
28
28
|
PropsWithParentIsReadOnlyAttribute,
|
|
29
29
|
PropsWithQrItemChangeHandler,
|
|
30
|
-
|
|
30
|
+
PropsWithShowMinimalViewAttribute
|
|
31
31
|
} from '../../../interfaces/renderProps.interface';
|
|
32
32
|
import DisplayInstructions from '../DisplayItem/DisplayInstructions';
|
|
33
33
|
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
@@ -35,12 +35,12 @@ import ChoiceCheckboxAnswerValueSetFields from './ChoiceCheckboxAnswerOptionFiel
|
|
|
35
35
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
36
36
|
|
|
37
37
|
interface ChoiceCheckboxAnswerOptionItemProps
|
|
38
|
-
extends PropsWithQrItemChangeHandler
|
|
38
|
+
extends PropsWithQrItemChangeHandler,
|
|
39
39
|
PropsWithIsRepeatedAttribute,
|
|
40
|
-
|
|
40
|
+
PropsWithShowMinimalViewAttribute,
|
|
41
41
|
PropsWithParentIsReadOnlyAttribute {
|
|
42
42
|
qItem: QuestionnaireItem;
|
|
43
|
-
qrItem: QuestionnaireResponseItem;
|
|
43
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
44
44
|
orientation: ChoiceItemOrientation;
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -50,7 +50,7 @@ function ChoiceCheckboxAnswerOptionItem(props: ChoiceCheckboxAnswerOptionItemPro
|
|
|
50
50
|
qrItem,
|
|
51
51
|
orientation,
|
|
52
52
|
isRepeated,
|
|
53
|
-
|
|
53
|
+
showMinimalView = false,
|
|
54
54
|
parentIsReadOnly,
|
|
55
55
|
onQrItemChange
|
|
56
56
|
} = props;
|
|
@@ -80,39 +80,39 @@ function ChoiceCheckboxAnswerOptionItem(props: ChoiceCheckboxAnswerOptionItemPro
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
if (
|
|
83
|
+
if (showMinimalView) {
|
|
84
84
|
return (
|
|
85
|
-
|
|
86
|
-
<
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
readOnly={readOnly}
|
|
96
|
-
onCheckedChange={handleCheckedChange}
|
|
97
|
-
/>
|
|
98
|
-
<DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
|
|
99
|
-
</Grid>
|
|
100
|
-
</Grid>
|
|
101
|
-
</FullWidthFormComponentBox>
|
|
85
|
+
<>
|
|
86
|
+
<ChoiceCheckboxAnswerValueSetFields
|
|
87
|
+
qItem={qItem}
|
|
88
|
+
answers={answers}
|
|
89
|
+
orientation={orientation}
|
|
90
|
+
readOnly={readOnly}
|
|
91
|
+
onCheckedChange={handleCheckedChange}
|
|
92
|
+
/>
|
|
93
|
+
<DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
|
|
94
|
+
</>
|
|
102
95
|
);
|
|
103
96
|
}
|
|
104
97
|
|
|
105
98
|
return (
|
|
106
|
-
|
|
107
|
-
<
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
99
|
+
<FullWidthFormComponentBox data-test="q-item-choice-checkbox-answer-option-box">
|
|
100
|
+
<Grid container columnSpacing={6}>
|
|
101
|
+
<Grid item xs={5}>
|
|
102
|
+
<LabelWrapper qItem={qItem} readOnly={readOnly} />
|
|
103
|
+
</Grid>
|
|
104
|
+
<Grid item xs={7}>
|
|
105
|
+
<ChoiceCheckboxAnswerValueSetFields
|
|
106
|
+
qItem={qItem}
|
|
107
|
+
answers={answers}
|
|
108
|
+
orientation={orientation}
|
|
109
|
+
readOnly={readOnly}
|
|
110
|
+
onCheckedChange={handleCheckedChange}
|
|
111
|
+
/>
|
|
112
|
+
<DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
|
|
113
|
+
</Grid>
|
|
114
|
+
</Grid>
|
|
115
|
+
</FullWidthFormComponentBox>
|
|
116
116
|
);
|
|
117
117
|
}
|
|
118
118
|
|
|
@@ -28,7 +28,7 @@ import type {
|
|
|
28
28
|
PropsWithIsRepeatedAttribute,
|
|
29
29
|
PropsWithParentIsReadOnlyAttribute,
|
|
30
30
|
PropsWithQrItemChangeHandler,
|
|
31
|
-
|
|
31
|
+
PropsWithShowMinimalViewAttribute
|
|
32
32
|
} from '../../../interfaces/renderProps.interface';
|
|
33
33
|
import DisplayInstructions from '../DisplayItem/DisplayInstructions';
|
|
34
34
|
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
@@ -36,12 +36,12 @@ import ChoiceCheckboxAnswerValueSetFields from './ChoiceCheckboxAnswerValueSetFi
|
|
|
36
36
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
37
37
|
|
|
38
38
|
interface ChoiceCheckboxAnswerValueSetItemProps
|
|
39
|
-
extends PropsWithQrItemChangeHandler
|
|
39
|
+
extends PropsWithQrItemChangeHandler,
|
|
40
40
|
PropsWithIsRepeatedAttribute,
|
|
41
|
-
|
|
41
|
+
PropsWithShowMinimalViewAttribute,
|
|
42
42
|
PropsWithParentIsReadOnlyAttribute {
|
|
43
43
|
qItem: QuestionnaireItem;
|
|
44
|
-
qrItem: QuestionnaireResponseItem;
|
|
44
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
45
45
|
orientation: ChoiceItemOrientation;
|
|
46
46
|
showText?: boolean;
|
|
47
47
|
}
|
|
@@ -52,7 +52,7 @@ function ChoiceCheckboxAnswerValueSetItem(props: ChoiceCheckboxAnswerValueSetIte
|
|
|
52
52
|
qrItem,
|
|
53
53
|
orientation,
|
|
54
54
|
isRepeated,
|
|
55
|
-
|
|
55
|
+
showMinimalView = false,
|
|
56
56
|
parentIsReadOnly,
|
|
57
57
|
onQrItemChange
|
|
58
58
|
} = props;
|
|
@@ -84,41 +84,41 @@ function ChoiceCheckboxAnswerValueSetItem(props: ChoiceCheckboxAnswerValueSetIte
|
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
if (
|
|
87
|
+
if (showMinimalView) {
|
|
88
88
|
return (
|
|
89
|
-
|
|
90
|
-
<
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
serverError={serverError}
|
|
101
|
-
onCheckedChange={handleCheckedChange}
|
|
102
|
-
/>
|
|
103
|
-
<DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
|
|
104
|
-
</Grid>
|
|
105
|
-
</Grid>
|
|
106
|
-
</FullWidthFormComponentBox>
|
|
89
|
+
<>
|
|
90
|
+
<ChoiceCheckboxAnswerValueSetFields
|
|
91
|
+
codings={codings}
|
|
92
|
+
answers={answers}
|
|
93
|
+
orientation={orientation}
|
|
94
|
+
readOnly={readOnly}
|
|
95
|
+
serverError={serverError}
|
|
96
|
+
onCheckedChange={handleCheckedChange}
|
|
97
|
+
/>
|
|
98
|
+
<DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
|
|
99
|
+
</>
|
|
107
100
|
);
|
|
108
101
|
}
|
|
109
102
|
|
|
110
103
|
return (
|
|
111
|
-
|
|
112
|
-
<
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
104
|
+
<FullWidthFormComponentBox data-test="q-item-choice-checkbox-answer-value-set-box">
|
|
105
|
+
<Grid container columnSpacing={6}>
|
|
106
|
+
<Grid item xs={5}>
|
|
107
|
+
<LabelWrapper qItem={qItem} readOnly={readOnly} />
|
|
108
|
+
</Grid>
|
|
109
|
+
<Grid item xs={7}>
|
|
110
|
+
<ChoiceCheckboxAnswerValueSetFields
|
|
111
|
+
codings={codings}
|
|
112
|
+
answers={answers}
|
|
113
|
+
orientation={orientation}
|
|
114
|
+
readOnly={readOnly}
|
|
115
|
+
serverError={serverError}
|
|
116
|
+
onCheckedChange={handleCheckedChange}
|
|
117
|
+
/>
|
|
118
|
+
<DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
|
|
119
|
+
</Grid>
|
|
120
|
+
</Grid>
|
|
121
|
+
</FullWidthFormComponentBox>
|
|
122
122
|
);
|
|
123
123
|
}
|
|
124
124
|
|
|
@@ -29,23 +29,23 @@ import ChoiceCheckboxAnswerValueSetItem from './ChoiceCheckboxAnswerValueSetItem
|
|
|
29
29
|
import type {
|
|
30
30
|
PropsWithIsRepeatedAttribute,
|
|
31
31
|
PropsWithIsTabledAttribute,
|
|
32
|
+
PropsWithParentIsReadOnlyAttribute,
|
|
32
33
|
PropsWithQrItemChangeHandler,
|
|
33
|
-
|
|
34
|
+
PropsWithShowMinimalViewAttribute
|
|
34
35
|
} from '../../../interfaces/renderProps.interface';
|
|
35
|
-
import type { PropsWithParentIsReadOnlyAttribute } from '../../../interfaces/renderProps.interface';
|
|
36
36
|
|
|
37
37
|
interface ChoiceItemSwitcherProps
|
|
38
|
-
extends PropsWithQrItemChangeHandler
|
|
38
|
+
extends PropsWithQrItemChangeHandler,
|
|
39
39
|
PropsWithIsRepeatedAttribute,
|
|
40
40
|
PropsWithIsTabledAttribute,
|
|
41
|
-
|
|
41
|
+
PropsWithShowMinimalViewAttribute,
|
|
42
42
|
PropsWithParentIsReadOnlyAttribute {
|
|
43
43
|
qItem: QuestionnaireItem;
|
|
44
|
-
qrItem: QuestionnaireResponseItem;
|
|
44
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
function ChoiceItemSwitcher(props: ChoiceItemSwitcherProps) {
|
|
48
|
-
const { qItem, qrItem, isRepeated, isTabled,
|
|
48
|
+
const { qItem, qrItem, isRepeated, isTabled, showMinimalView, parentIsReadOnly, onQrItemChange } =
|
|
49
49
|
props;
|
|
50
50
|
|
|
51
51
|
const orientation = getChoiceOrientation(qItem);
|
|
@@ -84,7 +84,7 @@ function ChoiceItemSwitcher(props: ChoiceItemSwitcherProps) {
|
|
|
84
84
|
qrItem={qrItem}
|
|
85
85
|
orientation={orientation}
|
|
86
86
|
isRepeated={qItem.repeats ?? false}
|
|
87
|
-
|
|
87
|
+
showMinimalView={showMinimalView}
|
|
88
88
|
parentIsReadOnly={parentIsReadOnly}
|
|
89
89
|
onQrItemChange={onQrItemChange}
|
|
90
90
|
/>
|
|
@@ -96,7 +96,7 @@ function ChoiceItemSwitcher(props: ChoiceItemSwitcherProps) {
|
|
|
96
96
|
qrItem={qrItem}
|
|
97
97
|
isRepeated={qItem.repeats ?? false}
|
|
98
98
|
orientation={orientation}
|
|
99
|
-
|
|
99
|
+
showMinimalView={showMinimalView}
|
|
100
100
|
parentIsReadOnly={parentIsReadOnly}
|
|
101
101
|
onQrItemChange={onQrItemChange}
|
|
102
102
|
/>
|
|
@@ -34,11 +34,11 @@ import ChoiceRadioAnswerOptionFields from './ChoiceRadioAnswerOptionFields';
|
|
|
34
34
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
35
35
|
|
|
36
36
|
interface ChoiceRadioAnswerOptionItemProps
|
|
37
|
-
extends PropsWithQrItemChangeHandler
|
|
37
|
+
extends PropsWithQrItemChangeHandler,
|
|
38
38
|
PropsWithIsRepeatedAttribute,
|
|
39
39
|
PropsWithParentIsReadOnlyAttribute {
|
|
40
40
|
qItem: QuestionnaireItem;
|
|
41
|
-
qrItem: QuestionnaireResponseItem;
|
|
41
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
42
42
|
orientation: ChoiceItemOrientation;
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -35,11 +35,11 @@ import ChoiceRadioAnswerValueSetFields from './ChoiceRadioAnswerValueSetFields';
|
|
|
35
35
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
36
36
|
|
|
37
37
|
interface ChoiceRadioAnswerValueSetItemProps
|
|
38
|
-
extends PropsWithQrItemChangeHandler
|
|
38
|
+
extends PropsWithQrItemChangeHandler,
|
|
39
39
|
PropsWithIsRepeatedAttribute,
|
|
40
40
|
PropsWithParentIsReadOnlyAttribute {
|
|
41
41
|
qItem: QuestionnaireItem;
|
|
42
|
-
qrItem: QuestionnaireResponseItem;
|
|
42
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
43
43
|
orientation: ChoiceItemOrientation;
|
|
44
44
|
}
|
|
45
45
|
|
|
@@ -35,12 +35,12 @@ import ChoiceSelectAnswerOptionFields from './ChoiceSelectAnswerOptionFields';
|
|
|
35
35
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
36
36
|
|
|
37
37
|
interface ChoiceSelectAnswerOptionItemProps
|
|
38
|
-
extends PropsWithQrItemChangeHandler
|
|
38
|
+
extends PropsWithQrItemChangeHandler,
|
|
39
39
|
PropsWithIsRepeatedAttribute,
|
|
40
40
|
PropsWithIsTabledAttribute,
|
|
41
41
|
PropsWithParentIsReadOnlyAttribute {
|
|
42
42
|
qItem: QuestionnaireItem;
|
|
43
|
-
qrItem: QuestionnaireResponseItem;
|
|
43
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
function ChoiceSelectAnswerOptionItem(props: ChoiceSelectAnswerOptionItemProps) {
|
|
@@ -35,12 +35,12 @@ import ChoiceSelectAnswerValueSetFields from './ChoiceSelectAnswerValueSetFields
|
|
|
35
35
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
36
36
|
|
|
37
37
|
interface ChoiceSelectAnswerValueSetItemProps
|
|
38
|
-
extends PropsWithQrItemChangeHandler
|
|
38
|
+
extends PropsWithQrItemChangeHandler,
|
|
39
39
|
PropsWithIsRepeatedAttribute,
|
|
40
40
|
PropsWithIsTabledAttribute,
|
|
41
41
|
PropsWithParentIsReadOnlyAttribute {
|
|
42
42
|
qItem: QuestionnaireItem;
|
|
43
|
-
qrItem: QuestionnaireResponseItem;
|
|
43
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
function ChoiceSelectAnswerValueSetItem(props: ChoiceSelectAnswerValueSetItemProps) {
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import React, { useState } from 'react';
|
|
19
|
+
import type {
|
|
20
|
+
PropsWithIsRepeatedAttribute,
|
|
21
|
+
PropsWithIsTabledAttribute,
|
|
22
|
+
PropsWithParentIsReadOnlyAttribute,
|
|
23
|
+
PropsWithQrItemChangeHandler
|
|
24
|
+
} from '../../../interfaces/renderProps.interface';
|
|
25
|
+
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
26
|
+
import useReadOnly from '../../../hooks/useReadOnly';
|
|
27
|
+
import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
|
|
28
|
+
import { FullWidthFormComponentBox } from '../../Box.styles';
|
|
29
|
+
import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
|
|
30
|
+
import {
|
|
31
|
+
parseFhirDateToDisplayDate,
|
|
32
|
+
parseInputDateToFhirDate,
|
|
33
|
+
validateInput
|
|
34
|
+
} from './customDateTimePicker/utils/parseDates';
|
|
35
|
+
import { createEmptyQrItem } from '../../../utils/qrItem';
|
|
36
|
+
import useDateValidation from '../../../hooks/useDateValidation';
|
|
37
|
+
import CustomDateField from './customDateTimePicker/CustomDateField';
|
|
38
|
+
|
|
39
|
+
interface CustomDateItemProps
|
|
40
|
+
extends PropsWithQrItemChangeHandler,
|
|
41
|
+
PropsWithIsRepeatedAttribute,
|
|
42
|
+
PropsWithIsTabledAttribute,
|
|
43
|
+
PropsWithParentIsReadOnlyAttribute {
|
|
44
|
+
qItem: QuestionnaireItem;
|
|
45
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function CustomDateItem(props: CustomDateItemProps) {
|
|
49
|
+
const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
|
|
50
|
+
|
|
51
|
+
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
52
|
+
const { displayPrompt, displayInstructions, entryFormat } = useRenderingExtensions(qItem);
|
|
53
|
+
|
|
54
|
+
const qrDate = qrItem ?? createEmptyQrItem(qItem);
|
|
55
|
+
|
|
56
|
+
// Init input value
|
|
57
|
+
let valueDate: string = '';
|
|
58
|
+
if (qrDate.answer) {
|
|
59
|
+
if (qrDate.answer[0].valueDate) {
|
|
60
|
+
valueDate = qrDate.answer[0].valueDate;
|
|
61
|
+
} else if (qrDate.answer[0].valueDateTime) {
|
|
62
|
+
valueDate = qrDate.answer[0].valueDateTime;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const { displayDate, parseFail } = parseFhirDateToDisplayDate(valueDate);
|
|
67
|
+
|
|
68
|
+
const [input, setInput] = useState(displayDate);
|
|
69
|
+
const [focused, setFocused] = useState(false);
|
|
70
|
+
|
|
71
|
+
// Perform validation checks
|
|
72
|
+
const errorFeedback = useDateValidation(input, parseFail);
|
|
73
|
+
|
|
74
|
+
function handleSelectDate(selectedDate: string) {
|
|
75
|
+
setInput(selectedDate);
|
|
76
|
+
onQrItemChange({
|
|
77
|
+
...createEmptyQrItem(qItem),
|
|
78
|
+
answer: [{ valueDate: parseInputDateToFhirDate(selectedDate) }]
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function handleInputChange(newInput: string) {
|
|
83
|
+
setInput(newInput);
|
|
84
|
+
|
|
85
|
+
if (newInput === '') {
|
|
86
|
+
onQrItemChange(createEmptyQrItem(qItem));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (!validateInput(newInput)) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
onQrItemChange({
|
|
94
|
+
...createEmptyQrItem(qItem),
|
|
95
|
+
answer: [{ valueDate: parseInputDateToFhirDate(newInput) }]
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (isRepeated) {
|
|
100
|
+
return (
|
|
101
|
+
<CustomDateField
|
|
102
|
+
linkId={qItem.linkId}
|
|
103
|
+
valueDate={displayDate}
|
|
104
|
+
input={input}
|
|
105
|
+
feedback={errorFeedback ?? ''}
|
|
106
|
+
isFocused={focused}
|
|
107
|
+
displayPrompt={displayPrompt}
|
|
108
|
+
entryFormat={entryFormat}
|
|
109
|
+
readOnly={readOnly}
|
|
110
|
+
isTabled={isTabled}
|
|
111
|
+
setFocused={setFocused}
|
|
112
|
+
onInputChange={handleInputChange}
|
|
113
|
+
onSelectDate={handleSelectDate}
|
|
114
|
+
/>
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return (
|
|
119
|
+
<FullWidthFormComponentBox data-test="q-item-date-box">
|
|
120
|
+
<ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions} readOnly={readOnly}>
|
|
121
|
+
<CustomDateField
|
|
122
|
+
linkId={qItem.linkId}
|
|
123
|
+
valueDate={displayDate}
|
|
124
|
+
input={input}
|
|
125
|
+
feedback={errorFeedback ?? ''}
|
|
126
|
+
isFocused={focused}
|
|
127
|
+
displayPrompt={displayPrompt}
|
|
128
|
+
entryFormat={entryFormat}
|
|
129
|
+
readOnly={readOnly}
|
|
130
|
+
isTabled={isTabled}
|
|
131
|
+
setFocused={setFocused}
|
|
132
|
+
onInputChange={handleInputChange}
|
|
133
|
+
onSelectDate={handleSelectDate}
|
|
134
|
+
/>
|
|
135
|
+
</ItemFieldGrid>
|
|
136
|
+
</FullWidthFormComponentBox>
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export default CustomDateItem;
|
|
@@ -0,0 +1,96 @@
|
|
|
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 { Dayjs } from 'dayjs';
|
|
19
|
+
import type { ChangeEvent, Dispatch, RefObject, SetStateAction } from 'react';
|
|
20
|
+
import React, { useRef } from 'react';
|
|
21
|
+
import type { PropsWithIsTabledAttribute } from '../../../../interfaces/renderProps.interface';
|
|
22
|
+
import { StandardTextField } from '../../Textfield.styles';
|
|
23
|
+
import DatePicker from './DatePicker';
|
|
24
|
+
import Tooltip from '@mui/material/Tooltip';
|
|
25
|
+
|
|
26
|
+
interface CustomDateFieldProps extends PropsWithIsTabledAttribute {
|
|
27
|
+
linkId: string;
|
|
28
|
+
valueDate: string;
|
|
29
|
+
input: string;
|
|
30
|
+
feedback: string;
|
|
31
|
+
isFocused: boolean;
|
|
32
|
+
displayPrompt: string;
|
|
33
|
+
entryFormat: string;
|
|
34
|
+
readOnly: boolean;
|
|
35
|
+
setFocused: Dispatch<SetStateAction<boolean>>;
|
|
36
|
+
onInputChange: (newInput: string) => void;
|
|
37
|
+
onSelectDate: (newDateValue: string) => void;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function CustomDateField(props: CustomDateFieldProps) {
|
|
41
|
+
const {
|
|
42
|
+
linkId,
|
|
43
|
+
valueDate,
|
|
44
|
+
input,
|
|
45
|
+
feedback,
|
|
46
|
+
isFocused,
|
|
47
|
+
displayPrompt,
|
|
48
|
+
entryFormat,
|
|
49
|
+
readOnly,
|
|
50
|
+
isTabled,
|
|
51
|
+
setFocused,
|
|
52
|
+
onInputChange,
|
|
53
|
+
onSelectDate
|
|
54
|
+
} = props;
|
|
55
|
+
|
|
56
|
+
const anchorRef: RefObject<HTMLDivElement> = useRef(null);
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
<Tooltip title={isTabled ? feedback : ''}>
|
|
60
|
+
<StandardTextField
|
|
61
|
+
id={linkId}
|
|
62
|
+
ref={anchorRef}
|
|
63
|
+
fullWidth
|
|
64
|
+
isTabled={isTabled}
|
|
65
|
+
value={input}
|
|
66
|
+
error={!!feedback}
|
|
67
|
+
onChange={(e: ChangeEvent<HTMLInputElement>) => onInputChange(e.target.value)}
|
|
68
|
+
label={displayPrompt}
|
|
69
|
+
placeholder={entryFormat !== '' ? entryFormat : 'DD/MM/YYYY'}
|
|
70
|
+
disabled={readOnly}
|
|
71
|
+
size="small"
|
|
72
|
+
focused={isFocused}
|
|
73
|
+
onFocus={() => setFocused(true)}
|
|
74
|
+
onBlur={() => setFocused(false)}
|
|
75
|
+
InputProps={{
|
|
76
|
+
endAdornment: (
|
|
77
|
+
<>
|
|
78
|
+
<DatePicker
|
|
79
|
+
valueString={valueDate}
|
|
80
|
+
readOnly={readOnly}
|
|
81
|
+
anchorEl={anchorRef.current}
|
|
82
|
+
onSelectDate={(valueDayjs: Dayjs) => {
|
|
83
|
+
onSelectDate(valueDayjs.format('DD/MM/YYYY'));
|
|
84
|
+
}}
|
|
85
|
+
onFocus={(focus) => setFocused(focus)}
|
|
86
|
+
/>
|
|
87
|
+
</>
|
|
88
|
+
)
|
|
89
|
+
}}
|
|
90
|
+
helperText={isTabled ? '' : feedback}
|
|
91
|
+
/>
|
|
92
|
+
</Tooltip>
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export default CustomDateField;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import React, { useState } from 'react';
|
|
19
|
+
import type { Dayjs } from 'dayjs';
|
|
20
|
+
import dayjs from 'dayjs';
|
|
21
|
+
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
|
22
|
+
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
|
|
23
|
+
import MuiDatePicker from './MuiDatePicker';
|
|
24
|
+
// import { DatePicker as MuiDatePicker, LocalizationProvider } from '@mui/x-date-pickers';
|
|
25
|
+
import DatePickerButton from './DatePickerButton';
|
|
26
|
+
|
|
27
|
+
interface DatePickerProps {
|
|
28
|
+
valueString: string;
|
|
29
|
+
readOnly: boolean;
|
|
30
|
+
anchorEl: HTMLElement | null;
|
|
31
|
+
onSelectDate: (newValueDayjs: Dayjs) => void;
|
|
32
|
+
onFocus: (focus: boolean) => void;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function DatePicker(props: DatePickerProps) {
|
|
36
|
+
const { valueString, readOnly, anchorEl, onSelectDate, onFocus } = props;
|
|
37
|
+
|
|
38
|
+
const [open, setOpen] = useState(false);
|
|
39
|
+
|
|
40
|
+
const valueDayJs = valueString ? dayjs(valueString, 'DD/MM/YYYY') : null;
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<LocalizationProvider dateAdapter={AdapterDayjs}>
|
|
44
|
+
<MuiDatePicker
|
|
45
|
+
value={valueDayJs ?? null}
|
|
46
|
+
disabled={readOnly}
|
|
47
|
+
slots={{ field: DatePickerButton }}
|
|
48
|
+
slotProps={{
|
|
49
|
+
field: {
|
|
50
|
+
onOpen: () => {
|
|
51
|
+
setOpen(!open);
|
|
52
|
+
onFocus(true);
|
|
53
|
+
},
|
|
54
|
+
readOnly: readOnly
|
|
55
|
+
} as any,
|
|
56
|
+
textField: {
|
|
57
|
+
size: 'small'
|
|
58
|
+
},
|
|
59
|
+
popper: {
|
|
60
|
+
anchorEl: () => anchorEl as HTMLElement
|
|
61
|
+
}
|
|
62
|
+
}}
|
|
63
|
+
open={open}
|
|
64
|
+
onClose={() => {
|
|
65
|
+
setOpen(false);
|
|
66
|
+
onFocus(false);
|
|
67
|
+
}}
|
|
68
|
+
onChange={(newValue) => {
|
|
69
|
+
if (!newValue) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
onSelectDate(newValue);
|
|
74
|
+
onFocus(false);
|
|
75
|
+
}}
|
|
76
|
+
/>
|
|
77
|
+
</LocalizationProvider>
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export default DatePicker;
|