@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
|
@@ -22,7 +22,7 @@ import type {
|
|
|
22
22
|
PropsWithIsTabledAttribute,
|
|
23
23
|
PropsWithParentIsReadOnlyAttribute,
|
|
24
24
|
PropsWithQrItemChangeHandler,
|
|
25
|
-
|
|
25
|
+
PropsWithShowMinimalViewAttribute
|
|
26
26
|
} from '../../../interfaces/renderProps.interface';
|
|
27
27
|
import useQuestionnaireStore from '../../../stores/useQuestionnaireStore';
|
|
28
28
|
import SingleItemSwitcher from './SingleItemSwitcher';
|
|
@@ -30,17 +30,17 @@ import useHidden from '../../../hooks/useHidden';
|
|
|
30
30
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
31
31
|
|
|
32
32
|
interface SingleItemProps
|
|
33
|
-
extends PropsWithQrItemChangeHandler
|
|
33
|
+
extends PropsWithQrItemChangeHandler,
|
|
34
34
|
PropsWithIsRepeatedAttribute,
|
|
35
35
|
PropsWithIsTabledAttribute,
|
|
36
|
-
|
|
36
|
+
PropsWithShowMinimalViewAttribute,
|
|
37
37
|
PropsWithParentIsReadOnlyAttribute {
|
|
38
38
|
qItem: QuestionnaireItem;
|
|
39
|
-
qrItem: QuestionnaireResponseItem;
|
|
39
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
function SingleItem(props: SingleItemProps) {
|
|
43
|
-
const { qItem, qrItem, isRepeated, isTabled,
|
|
43
|
+
const { qItem, qrItem, isRepeated, isTabled, showMinimalView, parentIsReadOnly, onQrItemChange } =
|
|
44
44
|
props;
|
|
45
45
|
|
|
46
46
|
const updateEnableWhenItem = useQuestionnaireStore((state) => state.updateEnableWhenItem);
|
|
@@ -67,7 +67,7 @@ function SingleItem(props: SingleItemProps) {
|
|
|
67
67
|
qrItem={qrItem}
|
|
68
68
|
isRepeated={isRepeated}
|
|
69
69
|
isTabled={isTabled}
|
|
70
|
-
|
|
70
|
+
showMinimalView={showMinimalView}
|
|
71
71
|
parentIsReadOnly={readOnly}
|
|
72
72
|
onQrItemChange={handleQrItemChange}
|
|
73
73
|
/>
|
|
@@ -25,31 +25,33 @@ import type {
|
|
|
25
25
|
PropsWithIsTabledAttribute,
|
|
26
26
|
PropsWithParentIsReadOnlyAttribute,
|
|
27
27
|
PropsWithQrItemChangeHandler,
|
|
28
|
-
|
|
28
|
+
PropsWithShowMinimalViewAttribute
|
|
29
29
|
} from '../../../interfaces/renderProps.interface';
|
|
30
30
|
import StringItem from '../StringItem/StringItem';
|
|
31
31
|
import BooleanItem from '../BooleanItem/BooleanItem';
|
|
32
32
|
import TimeItem from '../TimeItem/TimeItem';
|
|
33
33
|
import DateTimeItem from '../DateTimeItem/DateTimeItem';
|
|
34
|
-
import DateItem from '../DateItem/DateItem';
|
|
35
34
|
import TextItem from '../TextItem/TextItem';
|
|
36
35
|
import DisplayItem from '../DisplayItem/DisplayItem';
|
|
37
|
-
import IntegerItem from '../IntegerItem/IntegerItem';
|
|
38
36
|
import DecimalItem from '../DecimalItem/DecimalItem';
|
|
39
37
|
import UrlItem from '../UrlItem/UrlItem';
|
|
38
|
+
import CustomDateItem from '../CustomDateItem/CustomDateItem';
|
|
39
|
+
import { isSpecificItemControl } from '../../../utils';
|
|
40
|
+
import SliderItem from '../SliderItem/SliderItem';
|
|
41
|
+
import IntegerItem from '../IntegerItem/IntegerItem';
|
|
40
42
|
|
|
41
43
|
interface SingleItemSwitcherProps
|
|
42
|
-
extends PropsWithQrItemChangeHandler
|
|
44
|
+
extends PropsWithQrItemChangeHandler,
|
|
43
45
|
PropsWithIsRepeatedAttribute,
|
|
44
46
|
PropsWithIsTabledAttribute,
|
|
45
|
-
|
|
47
|
+
PropsWithShowMinimalViewAttribute,
|
|
46
48
|
PropsWithParentIsReadOnlyAttribute {
|
|
47
49
|
qItem: QuestionnaireItem;
|
|
48
|
-
qrItem: QuestionnaireResponseItem;
|
|
50
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
49
51
|
}
|
|
50
52
|
|
|
51
53
|
function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
52
|
-
const { qItem, qrItem, isRepeated, isTabled,
|
|
54
|
+
const { qItem, qrItem, isRepeated, isTabled, showMinimalView, parentIsReadOnly, onQrItemChange } =
|
|
53
55
|
props;
|
|
54
56
|
|
|
55
57
|
switch (qItem.type) {
|
|
@@ -88,7 +90,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
88
90
|
);
|
|
89
91
|
case 'date':
|
|
90
92
|
return (
|
|
91
|
-
<
|
|
93
|
+
<CustomDateItem
|
|
92
94
|
qItem={qItem}
|
|
93
95
|
qrItem={qrItem}
|
|
94
96
|
isRepeated={isRepeated}
|
|
@@ -121,6 +123,19 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
121
123
|
case 'display':
|
|
122
124
|
return <DisplayItem qItem={qItem} />;
|
|
123
125
|
case 'integer':
|
|
126
|
+
if (isSpecificItemControl(qItem, 'slider')) {
|
|
127
|
+
return (
|
|
128
|
+
<SliderItem
|
|
129
|
+
qItem={qItem}
|
|
130
|
+
qrItem={qrItem}
|
|
131
|
+
isRepeated={isRepeated}
|
|
132
|
+
isTabled={isTabled}
|
|
133
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
134
|
+
onQrItemChange={onQrItemChange}
|
|
135
|
+
/>
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
|
|
124
139
|
return (
|
|
125
140
|
<IntegerItem
|
|
126
141
|
qItem={qItem}
|
|
@@ -149,7 +164,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
149
164
|
qrItem={qrItem}
|
|
150
165
|
isRepeated={isRepeated}
|
|
151
166
|
isTabled={isTabled}
|
|
152
|
-
|
|
167
|
+
showMinimalView={showMinimalView}
|
|
153
168
|
parentIsReadOnly={parentIsReadOnly}
|
|
154
169
|
onQrItemChange={onQrItemChange}
|
|
155
170
|
/>
|
|
@@ -161,7 +176,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
161
176
|
qrItem={qrItem}
|
|
162
177
|
isRepeated={isRepeated}
|
|
163
178
|
isTabled={isTabled}
|
|
164
|
-
|
|
179
|
+
showMinimalView={showMinimalView}
|
|
165
180
|
parentIsReadOnly={parentIsReadOnly}
|
|
166
181
|
onQrItemChange={onQrItemChange}
|
|
167
182
|
/>
|
|
@@ -180,7 +195,8 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
180
195
|
default:
|
|
181
196
|
return (
|
|
182
197
|
<Typography>
|
|
183
|
-
Item type not supported yet
|
|
198
|
+
Item type not supported yet, or something has went wrong. If your questionnnaire is not a
|
|
199
|
+
FHIR R4 resource, there might be issues rendering it.
|
|
184
200
|
</Typography>
|
|
185
201
|
);
|
|
186
202
|
}
|
|
@@ -0,0 +1,34 @@
|
|
|
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 { alpha, styled } from '@mui/material/styles';
|
|
19
|
+
import { Box } from '@mui/material';
|
|
20
|
+
|
|
21
|
+
export const SliderDisplayBox = styled(Box, {
|
|
22
|
+
shouldForwardProp: (prop) => prop !== 'hasLabels'
|
|
23
|
+
})<{ hasLabels: boolean }>(({ theme, hasLabels }) => ({
|
|
24
|
+
display: 'flex',
|
|
25
|
+
alignItems: 'center',
|
|
26
|
+
justifyContent: 'center',
|
|
27
|
+
margin: '0 auto',
|
|
28
|
+
marginBottom: hasLabels ? -20 : 0,
|
|
29
|
+
padding: theme.spacing(0.5),
|
|
30
|
+
borderRadius: Number(theme.shape.borderRadius) * 0.5,
|
|
31
|
+
border: `1px solid ${alpha(theme.palette.text.disabled, 0.5)}`,
|
|
32
|
+
minWidth: 28,
|
|
33
|
+
height: 18
|
|
34
|
+
}));
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import React from 'react';
|
|
19
|
+
import { SliderDisplayBox } from './Slider.styles';
|
|
20
|
+
import Typography from '@mui/material/Typography';
|
|
21
|
+
import { pxToRem } from '../../../theme/typography';
|
|
22
|
+
|
|
23
|
+
interface SliderDisplayValueProps {
|
|
24
|
+
value: number;
|
|
25
|
+
hasLabels: boolean;
|
|
26
|
+
isInteracted: boolean;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function SliderDisplayValue(props: SliderDisplayValueProps) {
|
|
30
|
+
const { value, hasLabels, isInteracted } = props;
|
|
31
|
+
|
|
32
|
+
const valueToDisplay = isInteracted ? value : '-';
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<SliderDisplayBox hasLabels={hasLabels}>
|
|
36
|
+
<Typography textAlign="center" color="text.disabled" fontSize={pxToRem(9.5)}>
|
|
37
|
+
{valueToDisplay}
|
|
38
|
+
</Typography>
|
|
39
|
+
</SliderDisplayBox>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export default SliderDisplayValue;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import React from 'react';
|
|
19
|
+
import type { PropsWithIsTabledAttribute } from '../../../interfaces/renderProps.interface';
|
|
20
|
+
import Slider from '@mui/material/Slider';
|
|
21
|
+
import { getSliderMarks } from '../../../utils/slider';
|
|
22
|
+
import Stack from '@mui/material/Stack';
|
|
23
|
+
import SliderLabels from './SliderLabels';
|
|
24
|
+
import SliderDisplayValue from './SliderDisplayValue';
|
|
25
|
+
|
|
26
|
+
interface SliderFieldProps extends PropsWithIsTabledAttribute {
|
|
27
|
+
linkId: string;
|
|
28
|
+
value: number;
|
|
29
|
+
minValue: number;
|
|
30
|
+
minLabel: string;
|
|
31
|
+
maxValue: number;
|
|
32
|
+
maxLabel: string;
|
|
33
|
+
stepValue: number;
|
|
34
|
+
isInteracted: boolean;
|
|
35
|
+
readOnly: boolean;
|
|
36
|
+
onValueChange: (newValue: number) => void;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function SliderField(props: SliderFieldProps) {
|
|
40
|
+
const {
|
|
41
|
+
linkId,
|
|
42
|
+
value,
|
|
43
|
+
minValue,
|
|
44
|
+
maxValue,
|
|
45
|
+
stepValue,
|
|
46
|
+
minLabel,
|
|
47
|
+
maxLabel,
|
|
48
|
+
isInteracted,
|
|
49
|
+
readOnly,
|
|
50
|
+
isTabled,
|
|
51
|
+
onValueChange
|
|
52
|
+
} = props;
|
|
53
|
+
|
|
54
|
+
const sliderMarks = getSliderMarks(minValue, maxValue, minLabel, maxLabel, stepValue);
|
|
55
|
+
|
|
56
|
+
const sliderSx = {
|
|
57
|
+
maxWidth: !isTabled ? 280 : 3000,
|
|
58
|
+
minWidth: 160
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const hasLabels = !!(minLabel || maxLabel);
|
|
62
|
+
|
|
63
|
+
return (
|
|
64
|
+
<Stack sx={{ ...sliderSx }}>
|
|
65
|
+
<SliderDisplayValue value={value} hasLabels={hasLabels} isInteracted={isInteracted} />
|
|
66
|
+
{hasLabels ? <SliderLabels minLabel={minLabel} maxLabel={maxLabel} /> : null}
|
|
67
|
+
<Slider
|
|
68
|
+
id={linkId}
|
|
69
|
+
value={value}
|
|
70
|
+
min={minValue}
|
|
71
|
+
max={maxValue}
|
|
72
|
+
step={stepValue}
|
|
73
|
+
marks={sliderMarks}
|
|
74
|
+
sx={{ ...sliderSx }}
|
|
75
|
+
onChange={(_, newValue) => {
|
|
76
|
+
if (typeof newValue === 'number') {
|
|
77
|
+
onValueChange(newValue);
|
|
78
|
+
}
|
|
79
|
+
}}
|
|
80
|
+
disabled={readOnly}
|
|
81
|
+
valueLabelDisplay="auto"
|
|
82
|
+
data-test="q-item-slider-field"
|
|
83
|
+
/>
|
|
84
|
+
</Stack>
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export default SliderField;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import React from 'react';
|
|
19
|
+
import type {
|
|
20
|
+
PropsWithIsRepeatedAttribute,
|
|
21
|
+
PropsWithIsTabledAttribute,
|
|
22
|
+
PropsWithParentIsReadOnlyAttribute,
|
|
23
|
+
PropsWithQrItemChangeHandler
|
|
24
|
+
} from '../../../interfaces/renderProps.interface';
|
|
25
|
+
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
26
|
+
import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
|
|
27
|
+
import { createEmptyQrItem } from '../../../utils/qrItem';
|
|
28
|
+
import { FullWidthFormComponentBox } from '../../Box.styles';
|
|
29
|
+
import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
|
|
30
|
+
import useReadOnly from '../../../hooks/useReadOnly';
|
|
31
|
+
import SliderField from './SliderField';
|
|
32
|
+
import useSliderExtensions from '../../../hooks/useSliderExtensions';
|
|
33
|
+
import Box from '@mui/material/Box';
|
|
34
|
+
|
|
35
|
+
interface SliderItemProps
|
|
36
|
+
extends PropsWithQrItemChangeHandler,
|
|
37
|
+
PropsWithIsRepeatedAttribute,
|
|
38
|
+
PropsWithIsTabledAttribute,
|
|
39
|
+
PropsWithParentIsReadOnlyAttribute {
|
|
40
|
+
qItem: QuestionnaireItem;
|
|
41
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function SliderItem(props: SliderItemProps) {
|
|
45
|
+
const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
|
|
46
|
+
|
|
47
|
+
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
48
|
+
const { displayInstructions } = useRenderingExtensions(qItem);
|
|
49
|
+
const { minValue, maxValue, stepValue, minLabel, maxLabel } = useSliderExtensions(qItem);
|
|
50
|
+
|
|
51
|
+
const isInteracted = !!qrItem?.answer;
|
|
52
|
+
|
|
53
|
+
// Init input value
|
|
54
|
+
let valueInteger = 0;
|
|
55
|
+
if (qrItem?.answer) {
|
|
56
|
+
if (qrItem?.answer[0].valueInteger) {
|
|
57
|
+
valueInteger = qrItem.answer[0].valueInteger;
|
|
58
|
+
}
|
|
59
|
+
if (qrItem?.answer[0].valueDecimal) {
|
|
60
|
+
valueInteger = Math.round(qrItem.answer[0].valueDecimal);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Event handlers
|
|
65
|
+
function handleValueChange(newValue: number) {
|
|
66
|
+
onQrItemChange({
|
|
67
|
+
...createEmptyQrItem(qItem),
|
|
68
|
+
answer: [{ valueInteger: newValue }]
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (isRepeated) {
|
|
73
|
+
return (
|
|
74
|
+
<Box px={4}>
|
|
75
|
+
<SliderField
|
|
76
|
+
linkId={qItem.linkId}
|
|
77
|
+
value={valueInteger}
|
|
78
|
+
minValue={minValue}
|
|
79
|
+
maxValue={maxValue}
|
|
80
|
+
stepValue={stepValue}
|
|
81
|
+
minLabel={minLabel}
|
|
82
|
+
maxLabel={maxLabel}
|
|
83
|
+
isInteracted={isInteracted}
|
|
84
|
+
readOnly={readOnly}
|
|
85
|
+
isTabled={isTabled}
|
|
86
|
+
onValueChange={handleValueChange}
|
|
87
|
+
/>
|
|
88
|
+
</Box>
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return (
|
|
93
|
+
<FullWidthFormComponentBox data-test="q-item-slider-box">
|
|
94
|
+
<ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions} readOnly={readOnly}>
|
|
95
|
+
<Box px={4}>
|
|
96
|
+
<SliderField
|
|
97
|
+
linkId={qItem.linkId}
|
|
98
|
+
value={valueInteger}
|
|
99
|
+
minValue={minValue}
|
|
100
|
+
maxValue={maxValue}
|
|
101
|
+
stepValue={stepValue}
|
|
102
|
+
minLabel={minLabel}
|
|
103
|
+
maxLabel={maxLabel}
|
|
104
|
+
isInteracted={isInteracted}
|
|
105
|
+
readOnly={readOnly}
|
|
106
|
+
isTabled={isTabled}
|
|
107
|
+
onValueChange={handleValueChange}
|
|
108
|
+
/>
|
|
109
|
+
</Box>
|
|
110
|
+
</ItemFieldGrid>
|
|
111
|
+
</FullWidthFormComponentBox>
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export default SliderItem;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import React from 'react';
|
|
19
|
+
import Typography from '@mui/material/Typography';
|
|
20
|
+
import { pxToRem } from '../../../theme/typography';
|
|
21
|
+
import Box from '@mui/material/Box';
|
|
22
|
+
|
|
23
|
+
interface SliderLabelsProps {
|
|
24
|
+
minLabel: string;
|
|
25
|
+
maxLabel: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function SliderLabels(props: SliderLabelsProps) {
|
|
29
|
+
const { minLabel, maxLabel } = props;
|
|
30
|
+
|
|
31
|
+
if (!minLabel && !maxLabel) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<Box display="flex" justifyContent="space-between" pb={0.5}>
|
|
37
|
+
{[minLabel, maxLabel].map((label, index) => (
|
|
38
|
+
<Typography
|
|
39
|
+
key={index}
|
|
40
|
+
textAlign="center"
|
|
41
|
+
fontSize={pxToRem(10)}
|
|
42
|
+
sx={{
|
|
43
|
+
transform: `translateX(${index === 0 ? '-50%' : '50%'})`,
|
|
44
|
+
wordWrap: 'break-word'
|
|
45
|
+
}}>
|
|
46
|
+
{label}
|
|
47
|
+
</Typography>
|
|
48
|
+
))}
|
|
49
|
+
</Box>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export default SliderLabels;
|
|
@@ -36,12 +36,12 @@ import useStringInput from '../../../hooks/useStringInput';
|
|
|
36
36
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
37
37
|
|
|
38
38
|
interface StringItemProps
|
|
39
|
-
extends PropsWithQrItemChangeHandler
|
|
39
|
+
extends PropsWithQrItemChangeHandler,
|
|
40
40
|
PropsWithIsRepeatedAttribute,
|
|
41
41
|
PropsWithIsTabledAttribute,
|
|
42
42
|
PropsWithParentIsReadOnlyAttribute {
|
|
43
43
|
qItem: QuestionnaireItem;
|
|
44
|
-
qrItem: QuestionnaireResponseItem;
|
|
44
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
45
45
|
}
|
|
46
46
|
function StringItem(props: StringItemProps) {
|
|
47
47
|
const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
|
|
@@ -35,6 +35,7 @@ import type {
|
|
|
35
35
|
PropsWithParentIsReadOnlyAttribute,
|
|
36
36
|
PropsWithQrRepeatGroupChangeHandler
|
|
37
37
|
} from '../../../interfaces/renderProps.interface';
|
|
38
|
+
import type { PropsWithShowMinimalViewAttribute } from '../../../interfaces/renderProps.interface';
|
|
38
39
|
import useInitialiseGroupTable from '../../../hooks/useInitialiseGroupTable';
|
|
39
40
|
import { nanoid } from 'nanoid';
|
|
40
41
|
import { createEmptyQrItem } from '../../../utils/qrItem';
|
|
@@ -44,14 +45,24 @@ import cloneDeep from 'lodash.clonedeep';
|
|
|
44
45
|
import AddRowButton from './AddRowButton';
|
|
45
46
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
46
47
|
|
|
47
|
-
interface
|
|
48
|
+
interface GroupTableProps
|
|
49
|
+
extends PropsWithQrRepeatGroupChangeHandler,
|
|
50
|
+
PropsWithShowMinimalViewAttribute,
|
|
51
|
+
PropsWithParentIsReadOnlyAttribute {
|
|
48
52
|
qItem: QuestionnaireItem;
|
|
49
53
|
qrItems: QuestionnaireResponseItem[];
|
|
50
54
|
groupCardElevation: number;
|
|
51
55
|
}
|
|
52
56
|
|
|
53
|
-
function GroupTable(props:
|
|
54
|
-
const {
|
|
57
|
+
function GroupTable(props: GroupTableProps) {
|
|
58
|
+
const {
|
|
59
|
+
qItem,
|
|
60
|
+
qrItems,
|
|
61
|
+
groupCardElevation,
|
|
62
|
+
showMinimalView,
|
|
63
|
+
parentIsReadOnly,
|
|
64
|
+
onQrRepeatGroupChange
|
|
65
|
+
} = props;
|
|
55
66
|
|
|
56
67
|
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
57
68
|
|
|
@@ -118,6 +129,47 @@ function GroupTable(props: Props) {
|
|
|
118
129
|
]);
|
|
119
130
|
}
|
|
120
131
|
|
|
132
|
+
if (showMinimalView) {
|
|
133
|
+
return (
|
|
134
|
+
<QGroupContainerBox cardElevation={groupCardElevation} isRepeated={false} py={1}>
|
|
135
|
+
<TableContainer component={Paper} elevation={groupCardElevation}>
|
|
136
|
+
<Table size="small">
|
|
137
|
+
<TableHead>
|
|
138
|
+
<TableRow>
|
|
139
|
+
{itemLabels.map((itemLabel) => (
|
|
140
|
+
<HeaderTableCell key={itemLabel} size="medium">
|
|
141
|
+
{itemLabel}
|
|
142
|
+
</HeaderTableCell>
|
|
143
|
+
))}
|
|
144
|
+
<TableCell />
|
|
145
|
+
</TableRow>
|
|
146
|
+
</TableHead>
|
|
147
|
+
<TableBody>
|
|
148
|
+
{tableRows.map(({ nanoId, qrItem: nullableQrItem }, index) => {
|
|
149
|
+
const answeredQrItem = createEmptyQrItem(qItem);
|
|
150
|
+
if (nullableQrItem) {
|
|
151
|
+
answeredQrItem.item = nullableQrItem.item;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return (
|
|
155
|
+
<TableRow key={nanoId}>
|
|
156
|
+
<GroupTableRow
|
|
157
|
+
qItem={qItem}
|
|
158
|
+
qrItem={answeredQrItem}
|
|
159
|
+
qItemsIndexMap={qItemsIndexMap}
|
|
160
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
161
|
+
onQrItemChange={(newQrGroup) => handleRowChange(newQrGroup, index)}
|
|
162
|
+
/>
|
|
163
|
+
</TableRow>
|
|
164
|
+
);
|
|
165
|
+
})}
|
|
166
|
+
</TableBody>
|
|
167
|
+
</Table>
|
|
168
|
+
</TableContainer>
|
|
169
|
+
</QGroupContainerBox>
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
121
173
|
return (
|
|
122
174
|
<QGroupContainerBox cardElevation={groupCardElevation} isRepeated={false} py={3}>
|
|
123
175
|
{groupCardElevation !== 1 ? (
|
|
@@ -17,18 +17,18 @@
|
|
|
17
17
|
|
|
18
18
|
import React from 'react';
|
|
19
19
|
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
20
|
-
import {
|
|
20
|
+
import { createEmptyQrGroup, updateQrItemsInGroup } from '../../../utils/qrItem';
|
|
21
21
|
import SingleItem from '../SingleItem/SingleItem';
|
|
22
22
|
import { getQrItemsIndex } from '../../../utils/mapItem';
|
|
23
23
|
import { StandardTableCell } from './Table.styles';
|
|
24
|
-
import type {
|
|
25
|
-
|
|
24
|
+
import type {
|
|
25
|
+
PropsWithParentIsReadOnlyAttribute,
|
|
26
|
+
PropsWithQrItemChangeHandler
|
|
27
|
+
} from '../../../interfaces/renderProps.interface';
|
|
26
28
|
|
|
27
|
-
interface Props
|
|
28
|
-
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
29
|
-
PropsWithParentIsReadOnlyAttribute {
|
|
29
|
+
interface Props extends PropsWithQrItemChangeHandler, PropsWithParentIsReadOnlyAttribute {
|
|
30
30
|
qItem: QuestionnaireItem;
|
|
31
|
-
qrItem: QuestionnaireResponseItem;
|
|
31
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
32
32
|
qItemsIndexMap: Record<string, number>;
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -36,7 +36,7 @@ function GroupTableRow(props: Props) {
|
|
|
36
36
|
const { qItem, qrItem, qItemsIndexMap, parentIsReadOnly, onQrItemChange } = props;
|
|
37
37
|
|
|
38
38
|
const rowItems = qItem.item;
|
|
39
|
-
const row = qrItem && qrItem.item ? qrItem :
|
|
39
|
+
const row = qrItem && qrItem.item ? qrItem : createEmptyQrGroup(qItem);
|
|
40
40
|
const rowQrItems = row.item;
|
|
41
41
|
|
|
42
42
|
if (!rowItems || !rowQrItems) {
|
|
@@ -65,9 +65,10 @@ function GroupTableRow(props: Props) {
|
|
|
65
65
|
<SingleItem
|
|
66
66
|
key={qItem.linkId}
|
|
67
67
|
qItem={rowItem}
|
|
68
|
-
qrItem={qrItem}
|
|
68
|
+
qrItem={qrItem ?? null}
|
|
69
69
|
isRepeated={true}
|
|
70
70
|
isTabled={true}
|
|
71
|
+
showMinimalView={true}
|
|
71
72
|
parentIsReadOnly={parentIsReadOnly}
|
|
72
73
|
onQrItemChange={handleQrRowItemChange}
|
|
73
74
|
/>
|
|
@@ -35,11 +35,11 @@ import useStringInput from '../../../hooks/useStringInput';
|
|
|
35
35
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
36
36
|
|
|
37
37
|
interface TextItemProps
|
|
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
|
}
|
|
44
44
|
|
|
45
45
|
function TextItem(props: TextItemProps) {
|
|
@@ -33,12 +33,12 @@ import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
|
|
|
33
33
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
34
34
|
|
|
35
35
|
interface TimeItemProps
|
|
36
|
-
extends PropsWithQrItemChangeHandler
|
|
36
|
+
extends PropsWithQrItemChangeHandler,
|
|
37
37
|
PropsWithIsRepeatedAttribute,
|
|
38
38
|
PropsWithIsTabledAttribute,
|
|
39
39
|
PropsWithParentIsReadOnlyAttribute {
|
|
40
40
|
qItem: QuestionnaireItem;
|
|
41
|
-
qrItem: QuestionnaireResponseItem;
|
|
41
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
function TimeItem(props: TimeItemProps) {
|
|
@@ -34,12 +34,12 @@ import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
|
|
|
34
34
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
35
35
|
|
|
36
36
|
interface UrlItemProps
|
|
37
|
-
extends PropsWithQrItemChangeHandler
|
|
37
|
+
extends PropsWithQrItemChangeHandler,
|
|
38
38
|
PropsWithIsRepeatedAttribute,
|
|
39
39
|
PropsWithIsTabledAttribute,
|
|
40
40
|
PropsWithParentIsReadOnlyAttribute {
|
|
41
41
|
qItem: QuestionnaireItem;
|
|
42
|
-
qrItem: QuestionnaireResponseItem;
|
|
42
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
43
43
|
}
|
|
44
44
|
function UrlItem(props: UrlItemProps) {
|
|
45
45
|
const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
|