@aehrc/smart-forms-renderer 0.12.1 → 0.13.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/Box.styles.d.ts +6 -0
- package/lib/components/Box.styles.js +29 -1
- package/lib/components/Box.styles.js.map +1 -1
- package/lib/components/FormComponents/BooleanItem/BooleanItem.js +2 -2
- package/lib/components/FormComponents/BooleanItem/BooleanItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js +4 -10
- package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +4 -9
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +4 -9
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +4 -10
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +4 -10
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +4 -10
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js +4 -10
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/CustomDateItem/CustomDateItem.js +2 -2
- package/lib/components/FormComponents/CustomDateItem/CustomDateItem.js.map +1 -1
- package/lib/components/FormComponents/DateItem/DateItem.js +2 -2
- package/lib/components/FormComponents/DateItem/DateItem.js.map +1 -1
- package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js +2 -2
- package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js.map +1 -1
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js +4 -4
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
- package/lib/components/FormComponents/IntegerItem/IntegerField.js +1 -1
- package/lib/components/FormComponents/IntegerItem/IntegerField.js.map +1 -1
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js +4 -4
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
- package/lib/components/FormComponents/ItemParts/ItemExtensionLabels.d.ts +7 -0
- package/lib/components/FormComponents/{DateItem/DatePickerField.js → ItemParts/ItemExtensionLabels.js} +12 -6
- package/lib/components/FormComponents/ItemParts/ItemExtensionLabels.js.map +1 -0
- package/lib/components/FormComponents/ItemParts/ItemFieldGrid.d.ts +1 -0
- package/lib/components/FormComponents/ItemParts/ItemFieldGrid.js +10 -7
- package/lib/components/FormComponents/ItemParts/ItemFieldGrid.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js +4 -10
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js +4 -9
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js +4 -10
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js +4 -10
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js +4 -10
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/RepeatItem/RepeatItem.d.ts +1 -2
- package/lib/components/FormComponents/RepeatItem/RepeatItem.js +2 -2
- package/lib/components/FormComponents/RepeatItem/RepeatItem.js.map +1 -1
- package/lib/components/FormComponents/SliderItem/SliderItem.js +2 -2
- package/lib/components/FormComponents/SliderItem/SliderItem.js.map +1 -1
- package/lib/components/FormComponents/StringItem/StringItem.js +4 -4
- package/lib/components/FormComponents/StringItem/StringItem.js.map +1 -1
- package/lib/components/FormComponents/TextItem/TextItem.js +4 -4
- package/lib/components/FormComponents/TextItem/TextItem.js.map +1 -1
- package/lib/components/FormComponents/TimeItem/TimeItem.js +2 -2
- package/lib/components/FormComponents/TimeItem/TimeItem.js.map +1 -1
- package/lib/components/FormComponents/UrlItem/UrlItem.js +4 -4
- package/lib/components/FormComponents/UrlItem/UrlItem.js.map +1 -1
- package/lib/components/Renderer/BaseRenderer.js +7 -0
- package/lib/components/Renderer/BaseRenderer.js.map +1 -1
- package/lib/hooks/useRenderingExtensions.d.ts +2 -0
- package/lib/hooks/useRenderingExtensions.js +16 -11
- package/lib/hooks/useRenderingExtensions.js.map +1 -1
- package/lib/hooks/useValidationFeedback.d.ts +3 -0
- package/lib/hooks/useValidationFeedback.js +37 -0
- package/lib/hooks/useValidationFeedback.js.map +1 -0
- package/lib/stores/questionnaireResponseStore.d.ts +8 -1
- package/lib/stores/questionnaireResponseStore.js +22 -0
- package/lib/stores/questionnaireResponseStore.js.map +1 -1
- package/lib/utils/itemControl.d.ts +1 -27
- package/lib/utils/itemControl.js +0 -49
- package/lib/utils/itemControl.js.map +1 -1
- package/lib/utils/mapItem.d.ts +2 -0
- package/lib/utils/mapItem.js +2 -0
- package/lib/utils/mapItem.js.map +1 -1
- package/lib/utils/validateQuestionnaire.d.ts +23 -0
- package/lib/utils/validateQuestionnaire.js +183 -0
- package/lib/utils/validateQuestionnaire.js.map +1 -0
- package/package.json +1 -1
- package/src/components/Box.styles.ts +31 -1
- package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +6 -2
- package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +19 -23
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +15 -18
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +16 -19
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +15 -19
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +17 -21
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +15 -19
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +17 -21
- package/src/components/FormComponents/CustomDateItem/CustomDateItem.tsx +7 -2
- package/src/components/FormComponents/DateItem/DateItem.tsx +7 -2
- package/src/components/FormComponents/DateTimeItem/DateTimeItem.tsx +7 -2
- package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +9 -3
- package/src/components/FormComponents/IntegerItem/IntegerField.tsx +1 -0
- package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +9 -3
- package/{lib/components/BackToTopButton/BackToTopButton.js → src/components/FormComponents/ItemParts/ItemExtensionLabels.tsx} +23 -15
- package/src/components/FormComponents/ItemParts/ItemFieldGrid.tsx +14 -9
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +21 -25
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +20 -23
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +18 -22
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +16 -20
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +17 -21
- package/src/components/FormComponents/RepeatItem/RepeatItem.tsx +8 -4
- package/src/components/FormComponents/SliderItem/SliderItem.tsx +6 -2
- package/src/components/FormComponents/StringItem/StringItem.tsx +9 -3
- package/src/components/FormComponents/TextItem/TextItem.tsx +9 -3
- package/src/components/FormComponents/TimeItem/TimeItem.tsx +7 -2
- package/src/components/FormComponents/UrlItem/UrlItem.tsx +9 -3
- package/src/components/Renderer/BaseRenderer.tsx +9 -0
- package/src/hooks/useRenderingExtensions.ts +17 -11
- package/src/hooks/{useValidationError.ts → useValidationFeedback.ts} +23 -21
- package/src/stores/questionnaireResponseStore.ts +36 -1
- package/src/utils/itemControl.ts +1 -67
- package/src/utils/mapItem.ts +2 -0
- package/src/utils/validateQuestionnaire.ts +273 -0
- package/lib/components/BackToTopButton/BackToTopButton.d.ts +0 -7
- package/lib/components/BackToTopButton/BackToTopButton.js.map +0 -1
- package/lib/components/FormComponents/CustomDateItem/CustomDateField2.d.ts +0 -18
- package/lib/components/FormComponents/CustomDateItem/CustomDateField2.js +0 -31
- package/lib/components/FormComponents/CustomDateItem/CustomDateField2.js.map +0 -1
- package/lib/components/FormComponents/CustomDateItem/CustomDateTimeField.d.ts +0 -9
- package/lib/components/FormComponents/CustomDateItem/CustomDateTimeField.js +0 -75
- package/lib/components/FormComponents/CustomDateItem/CustomDateTimeField.js.map +0 -1
- package/lib/components/FormComponents/CustomDateItem/CustomDateTimePickerText2.d.ts +0 -9
- package/lib/components/FormComponents/CustomDateItem/CustomDateTimePickerText2.js +0 -75
- package/lib/components/FormComponents/CustomDateItem/CustomDateTimePickerText2.js.map +0 -1
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/hooks/useParseDates.d.ts +0 -5
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/hooks/useParseDates.js +0 -27
- package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/hooks/useParseDates.js.map +0 -1
- package/lib/components/FormComponents/CustomDateItem/customDateTimePickerText.d.ts +0 -9
- package/lib/components/FormComponents/CustomDateItem/customDateTimePickerText.js +0 -71
- package/lib/components/FormComponents/CustomDateItem/customDateTimePickerText.js.map +0 -1
- package/lib/components/FormComponents/DateItem/DatePicker.d.ts +0 -2
- package/lib/components/FormComponents/DateItem/DatePicker.js +0 -42
- package/lib/components/FormComponents/DateItem/DatePicker.js.map +0 -1
- package/lib/components/FormComponents/DateItem/DatePickerField.d.ts +0 -8
- package/lib/components/FormComponents/DateItem/DatePickerField.js.map +0 -1
- package/lib/components/FormComponents/DisplayItem/DisplayBox.d.ts +0 -0
- package/lib/components/FormComponents/DisplayItem/DisplayBox.js +0 -2
- package/lib/components/FormComponents/DisplayItem/DisplayBox.js.map +0 -1
- package/lib/components/FormComponents/DisplayItem/DisplayBox.styles.d.ts +0 -4
- package/lib/components/FormComponents/DisplayItem/DisplayBox.styles.js +0 -35
- package/lib/components/FormComponents/DisplayItem/DisplayBox.styles.js.map +0 -1
- package/lib/components/FormComponents/GroupItem/GroupChildItemSwitcher.d.ts +0 -10
- package/lib/components/FormComponents/GroupItem/GroupChildItemSwitcher.js +0 -73
- package/lib/components/FormComponents/GroupItem/GroupChildItemSwitcher.js.map +0 -1
- package/lib/components/FormComponents/GroupItem/ItemSwitcher.d.ts +0 -10
- package/lib/components/FormComponents/GroupItem/ItemSwitcher.js +0 -81
- package/lib/components/FormComponents/GroupItem/ItemSwitcher.js.map +0 -1
- package/lib/components/FormComponents/GroupItem/TopLevelGroupItemSwitcher.d.ts +0 -10
- package/lib/components/FormComponents/GroupItem/TopLevelGroupItemSwitcher.js +0 -45
- package/lib/components/FormComponents/GroupItem/TopLevelGroupItemSwitcher.js.map +0 -1
- package/lib/components/FormComponents/IntegerItem/SliderItem.d.ts +0 -9
- package/lib/components/FormComponents/IntegerItem/SliderItem.js +0 -75
- package/lib/components/FormComponents/IntegerItem/SliderItem.js.map +0 -1
- package/lib/components/FormComponents/ItemParts/RadioButtons.d.ts +0 -8
- package/lib/components/FormComponents/ItemParts/RadioButtons.js +0 -37
- package/lib/components/FormComponents/ItemParts/RadioButtons.js.map +0 -1
- package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.d.ts +0 -8
- package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.js +0 -37
- package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.js.map +0 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.d.ts +0 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.js +0 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.js.map +0 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.d.ts +0 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.js +0 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.js.map +0 -1
- package/lib/components/FormComponents/RepeatItem/DeleteItemButton.d.ts +0 -10
- package/lib/components/FormComponents/RepeatItem/DeleteItemButton.js +0 -30
- package/lib/components/FormComponents/RepeatItem/DeleteItemButton.js.map +0 -1
- package/lib/components/FormComponents/SliderItem/DisplayBox.styles.d.ts +0 -4
- package/lib/components/FormComponents/SliderItem/DisplayBox.styles.js +0 -35
- package/lib/components/FormComponents/SliderItem/DisplayBox.styles.js.map +0 -1
- package/lib/components/FormComponents/Tables/AddItemButton.d.ts +0 -8
- package/lib/components/FormComponents/Tables/AddItemButton.js +0 -28
- package/lib/components/FormComponents/Tables/AddItemButton.js.map +0 -1
- package/lib/components/FormComponents/Tables/DeleteRowButton.d.ts +0 -10
- package/lib/components/FormComponents/Tables/DeleteRowButton.js +0 -32
- package/lib/components/FormComponents/Tables/DeleteRowButton.js.map +0 -1
- package/lib/components/FormComponents/Tables/GroupTableRows.d.ts +0 -17
- package/lib/components/FormComponents/Tables/GroupTableRows.js +0 -45
- package/lib/components/FormComponents/Tables/GroupTableRows.js.map +0 -1
- package/lib/components/FormComponents/Tables/GroupTableTestRow.d.ts +0 -22
- package/lib/components/FormComponents/Tables/GroupTableTestRow.js +0 -43
- package/lib/components/FormComponents/Tables/GroupTableTestRow.js.map +0 -1
- package/lib/components/FormComponents/Tables/QItemGroupTable.d.ts +0 -10
- package/lib/components/FormComponents/Tables/QItemGroupTable.js +0 -109
- package/lib/components/FormComponents/Tables/QItemGroupTable.js.map +0 -1
- package/lib/components/FormComponents/Tables/QItemGroupTableRow.d.ts +0 -10
- package/lib/components/FormComponents/Tables/QItemGroupTableRow.js +0 -46
- package/lib/components/FormComponents/Tables/QItemGroupTableRow.js.map +0 -1
- package/lib/components/FormComponents/Typography.styles.d.ts +0 -6
- package/lib/components/FormComponents/Typography.styles.js +0 -24
- package/lib/components/FormComponents/Typography.styles.js.map +0 -1
- package/lib/hooks/useBackToTop.d.ts +0 -2
- package/lib/hooks/useBackToTop.js +0 -26
- package/lib/hooks/useBackToTop.js.map +0 -1
- package/lib/hooks/useDateSeparatorValidation.d.ts +0 -2
- package/lib/hooks/useDateSeparatorValidation.js +0 -25
- package/lib/hooks/useDateSeparatorValidation.js.map +0 -1
- package/lib/hooks/useDecimalUpdateFromProp.d.ts +0 -2
- package/lib/hooks/useDecimalUpdateFromProp.js +0 -29
- package/lib/hooks/useDecimalUpdateFromProp.js.map +0 -1
- package/lib/hooks/useIntegerUpdateFromProp.d.ts +0 -2
- package/lib/hooks/useIntegerUpdateFromProp.js +0 -29
- package/lib/hooks/useIntegerUpdateFromProp.js.map +0 -1
- package/lib/hooks/useMinimalStringCalculatedExpression.d.ts +0 -11
- package/lib/hooks/useMinimalStringCalculatedExpression.js +0 -49
- package/lib/hooks/useMinimalStringCalculatedExpression.js.map +0 -1
- package/lib/hooks/useNumberUpdateFromProp.d.ts +0 -2
- package/lib/hooks/useNumberUpdateFromProp.js +0 -29
- package/lib/hooks/useNumberUpdateFromProp.js.map +0 -1
- package/lib/hooks/useRepeatItemState.d.ts +0 -5
- package/lib/hooks/useRepeatItemState.js +0 -35
- package/lib/hooks/useRepeatItemState.js.map +0 -1
- package/lib/hooks/useRepeatItemUpdateFromProp.d.ts +0 -2
- package/lib/hooks/useRepeatItemUpdateFromProp.js +0 -29
- package/lib/hooks/useRepeatItemUpdateFromProp.js.map +0 -1
- package/lib/hooks/useStringField.d.ts +0 -2
- package/lib/hooks/useStringField.js +0 -29
- package/lib/hooks/useStringField.js.map +0 -1
- package/lib/hooks/useStringUpdateFromProp.d.ts +0 -2
- package/lib/hooks/useStringUpdateFromProp.js +0 -29
- package/lib/hooks/useStringUpdateFromProp.js.map +0 -1
- package/lib/hooks/useValidationError.d.ts +0 -3
- package/lib/hooks/useValidationError.js +0 -38
- package/lib/hooks/useValidationError.js.map +0 -1
- package/lib/interfaces/index.d.ts +0 -2
- package/lib/interfaces/index.js +0 -18
- package/lib/interfaces/index.js.map +0 -1
- package/lib/setup-jest.js +0 -1
- package/lib/setup-jest.js.map +0 -1
- package/lib/stores/useQuestionnaireResponseStore.d.ts +0 -27
- package/lib/stores/useQuestionnaireResponseStore.js +0 -49
- package/lib/stores/useQuestionnaireResponseStore.js.map +0 -1
- package/lib/stores/useQuestionnaireStore.d.ts +0 -64
- package/lib/stores/useQuestionnaireStore.js +0 -173
- package/lib/stores/useQuestionnaireStore.js.map +0 -1
- package/lib/stores/useSmartConfigStore.d.ts +0 -14
- package/lib/stores/useSmartConfigStore.js +0 -13
- package/lib/stores/useSmartConfigStore.js.map +0 -1
- package/lib/stores/useTerminologyServerStore.d.ts +0 -7
- package/lib/stores/useTerminologyServerStore.js +0 -25
- package/lib/stores/useTerminologyServerStore.js.map +0 -1
- package/lib/stories/MedicalHistoryTable.stories.js +0 -45
- package/lib/stories/MedicalHistoryTable.stories.js.map +0 -1
- package/lib/stories/SmartFormsRenderer.stories.js +0 -103
- package/lib/stories/SmartFormsRenderer.stories.js.map +0 -1
- package/lib/test.d.ts +0 -4
- package/lib/test.js +0 -18
- package/lib/test.js.map +0 -1
- package/lib/theme/overrides/Backdrop.d.ts +0 -13
- package/lib/theme/overrides/Backdrop.js +0 -32
- package/lib/theme/overrides/Backdrop.js.map +0 -1
- package/lib/theme/overrides/Typography.d.ts +0 -13
- package/lib/theme/overrides/Typography.js +0 -31
- package/lib/theme/overrides/Typography.js.map +0 -1
- package/lib/utils/formChangesOld.d.ts +0 -18
- package/lib/utils/formChangesOld.js +0 -91
- package/lib/utils/formChangesOld.js.map +0 -1
- package/lib/utils/initialiseForm.d.ts +0 -22
- package/lib/utils/initialiseForm.js +0 -53
- package/lib/utils/initialiseForm.js.map +0 -1
- package/lib/utils/launchContext.d.ts +0 -0
- package/lib/utils/launchContext.js +0 -2
- package/lib/utils/launchContext.js.map +0 -1
- package/lib/utils/populateInputParams.d.ts +0 -8
- package/lib/utils/populateInputParams.js +0 -193
- package/lib/utils/populateInputParams.js.map +0 -1
- package/lib/utils/removeHidden.d.ts +0 -16
- package/lib/utils/removeHidden.js +0 -105
- package/lib/utils/removeHidden.js.map +0 -1
- package/lib/utils/repopulate.d.ts +0 -9
- package/lib/utils/repopulate.js +0 -133
- package/lib/utils/repopulate.js.map +0 -1
- package/lib/utils/repopulateGenerateItems.d.ts +0 -9
- package/lib/utils/repopulateGenerateItems.js +0 -133
- package/lib/utils/repopulateGenerateItems.js.map +0 -1
- package/lib/utils/repopulateRepeatGroup.d.ts +0 -4
- package/lib/utils/repopulateRepeatGroup.js +0 -62
- package/lib/utils/repopulateRepeatGroup.js.map +0 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { QuestionnaireResponse } from 'fhir/r4';
|
|
2
|
+
import { Questionnaire } from 'fhir/r4';
|
|
3
|
+
import { EnableWhenExpression, EnableWhenItems } from '../interfaces/enableWhen.interface';
|
|
4
|
+
import { RegexValidation } from '../interfaces/regex.interface';
|
|
5
|
+
export type InvalidType = 'regex' | 'minLength' | 'maxLength' | 'required';
|
|
6
|
+
interface ValidateQuestionnaireParams {
|
|
7
|
+
questionnaire: Questionnaire;
|
|
8
|
+
questionnaireResponse: QuestionnaireResponse;
|
|
9
|
+
invalidItems: Record<string, InvalidType>;
|
|
10
|
+
enableWhenIsActivated: boolean;
|
|
11
|
+
enableWhenItems: EnableWhenItems;
|
|
12
|
+
enableWhenExpressions: Record<string, EnableWhenExpression>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Recursively go through the questionnaireResponse and check for un-filled required qItems
|
|
16
|
+
* At the moment item.required for group items are not checked
|
|
17
|
+
* FIXME will eventually be renamed to validate questionnaire
|
|
18
|
+
*
|
|
19
|
+
* @author Sean Fong
|
|
20
|
+
*/
|
|
21
|
+
export declare function validateQuestionnaire(params: ValidateQuestionnaireParams): Record<string, InvalidType>;
|
|
22
|
+
export declare function getInputInvalidType(input: string, regexValidation: RegexValidation | null, minLength: number | null, maxLength: number | null): InvalidType | null;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,183 @@
|
|
|
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
|
+
import { getQrItemsIndex, mapQItemsIndex } from './mapItem';
|
|
18
|
+
import { isHidden } from './qItem';
|
|
19
|
+
import { getRegexValidation } from './itemControl';
|
|
20
|
+
import { structuredDataCapture } from 'fhir-sdc-helpers';
|
|
21
|
+
/**
|
|
22
|
+
* Recursively go through the questionnaireResponse and check for un-filled required qItems
|
|
23
|
+
* At the moment item.required for group items are not checked
|
|
24
|
+
* FIXME will eventually be renamed to validate questionnaire
|
|
25
|
+
*
|
|
26
|
+
* @author Sean Fong
|
|
27
|
+
*/
|
|
28
|
+
export function validateQuestionnaire(params) {
|
|
29
|
+
var _a;
|
|
30
|
+
const { questionnaire, questionnaireResponse, invalidItems, enableWhenIsActivated, enableWhenItems, enableWhenExpressions } = params;
|
|
31
|
+
if (!questionnaire.item ||
|
|
32
|
+
questionnaire.item.length === 0 ||
|
|
33
|
+
!questionnaireResponse.item ||
|
|
34
|
+
questionnaireResponse.item.length === 0) {
|
|
35
|
+
return invalidItems;
|
|
36
|
+
}
|
|
37
|
+
const qItemsIndexMap = mapQItemsIndex(questionnaire);
|
|
38
|
+
const topLevelQRItemsByIndex = getQrItemsIndex(questionnaire.item, questionnaireResponse.item, qItemsIndexMap);
|
|
39
|
+
for (const [index, topLevelQItem] of questionnaire.item.entries()) {
|
|
40
|
+
let topLevelQRItem = (_a = topLevelQRItemsByIndex[index]) !== null && _a !== void 0 ? _a : {
|
|
41
|
+
linkId: topLevelQItem.linkId,
|
|
42
|
+
text: topLevelQItem.text
|
|
43
|
+
};
|
|
44
|
+
if (Array.isArray(topLevelQRItem)) {
|
|
45
|
+
topLevelQRItem = {
|
|
46
|
+
linkId: topLevelQItem.linkId,
|
|
47
|
+
text: topLevelQItem.text,
|
|
48
|
+
item: topLevelQRItem
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
validateItemRecursive({
|
|
52
|
+
qItem: topLevelQItem,
|
|
53
|
+
qrItem: topLevelQRItem,
|
|
54
|
+
invalidItems: invalidItems,
|
|
55
|
+
enableWhenIsActivated,
|
|
56
|
+
enableWhenItems,
|
|
57
|
+
enableWhenExpressions
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return invalidItems;
|
|
61
|
+
}
|
|
62
|
+
function validateItemRecursive(params) {
|
|
63
|
+
var _a, _b;
|
|
64
|
+
const { qItem, qrItem, invalidItems, enableWhenIsActivated, enableWhenItems, enableWhenExpressions } = params;
|
|
65
|
+
if (isHidden({
|
|
66
|
+
questionnaireItem: qItem,
|
|
67
|
+
enableWhenIsActivated,
|
|
68
|
+
enableWhenItems,
|
|
69
|
+
enableWhenExpressions
|
|
70
|
+
})) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// FIXME repeat groups not working
|
|
74
|
+
if (qItem.type === 'group' && qItem.repeats) {
|
|
75
|
+
return validateRepeatGroup(qItem, qrItem, invalidItems);
|
|
76
|
+
}
|
|
77
|
+
const childQItems = qItem.item;
|
|
78
|
+
if (childQItems && childQItems.length > 0) {
|
|
79
|
+
const childQrItems = (_a = qrItem === null || qrItem === void 0 ? void 0 : qrItem.item) !== null && _a !== void 0 ? _a : [];
|
|
80
|
+
const indexMap = mapQItemsIndex(qItem);
|
|
81
|
+
const qrItemsByIndex = getQrItemsIndex(childQItems, childQrItems, indexMap);
|
|
82
|
+
if (qItem.type === 'group' && qItem.required) {
|
|
83
|
+
if (!qrItem || qrItemsByIndex.length === 0) {
|
|
84
|
+
invalidItems[qItem.linkId] = 'required';
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
for (const [index, childQItem] of childQItems.entries()) {
|
|
88
|
+
let childQRItem = (_b = qrItemsByIndex[index]) !== null && _b !== void 0 ? _b : {
|
|
89
|
+
linkId: childQItem.linkId,
|
|
90
|
+
text: childQItem.text
|
|
91
|
+
};
|
|
92
|
+
if (Array.isArray(childQRItem)) {
|
|
93
|
+
childQRItem = {
|
|
94
|
+
linkId: childQItem.linkId,
|
|
95
|
+
text: childQItem.text,
|
|
96
|
+
item: childQRItem
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
validateItemRecursive({
|
|
100
|
+
qItem: childQItem,
|
|
101
|
+
qrItem: childQRItem,
|
|
102
|
+
invalidItems: invalidItems,
|
|
103
|
+
enableWhenIsActivated,
|
|
104
|
+
enableWhenItems,
|
|
105
|
+
enableWhenExpressions
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
validateSingleItem(qItem, qrItem, invalidItems);
|
|
110
|
+
}
|
|
111
|
+
function validateSingleItem(qItem, qrItem, invalidItems) {
|
|
112
|
+
var _a, _b;
|
|
113
|
+
// Validate item.required
|
|
114
|
+
if (qItem.type !== 'display') {
|
|
115
|
+
if (qItem.required && !qrItem.answer) {
|
|
116
|
+
invalidItems[qItem.linkId] = 'required';
|
|
117
|
+
return invalidItems;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Validate regex, maxLength and minLength
|
|
121
|
+
if (qrItem.answer) {
|
|
122
|
+
for (const answer of qrItem.answer) {
|
|
123
|
+
if (answer.valueString || answer.valueInteger || answer.valueDecimal || answer.valueUri) {
|
|
124
|
+
const invalidInputType = getInputInvalidType(getInputInString(answer), getRegexValidation(qItem), (_a = structuredDataCapture.getMinLength(qItem)) !== null && _a !== void 0 ? _a : null, (_b = qItem.maxLength) !== null && _b !== void 0 ? _b : null);
|
|
125
|
+
if (!invalidInputType) {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
// Assign invalid type and break - stop checking other answers if is a repeat item
|
|
129
|
+
switch (invalidInputType) {
|
|
130
|
+
case 'regex':
|
|
131
|
+
invalidItems[qItem.linkId] = 'regex';
|
|
132
|
+
break;
|
|
133
|
+
case 'minLength':
|
|
134
|
+
invalidItems[qItem.linkId] = 'minLength';
|
|
135
|
+
break;
|
|
136
|
+
case 'maxLength':
|
|
137
|
+
invalidItems[qItem.linkId] = 'maxLength';
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Reached the end of the loop and no invalid input type found
|
|
144
|
+
// If a required item is filled, remove the required invalid type
|
|
145
|
+
if (qItem.required && invalidItems[qItem.linkId] && invalidItems[qItem.linkId] === 'required') {
|
|
146
|
+
delete invalidItems[qItem.linkId];
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return invalidItems;
|
|
150
|
+
}
|
|
151
|
+
function validateRepeatGroup(qItem, qrItems, invalidLinkIds) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
function getInputInString(answer) {
|
|
155
|
+
if (answer.valueString) {
|
|
156
|
+
return answer.valueString;
|
|
157
|
+
}
|
|
158
|
+
else if (answer.valueInteger) {
|
|
159
|
+
return answer.valueInteger.toString();
|
|
160
|
+
}
|
|
161
|
+
else if (answer.valueDecimal) {
|
|
162
|
+
return answer.valueDecimal.toString();
|
|
163
|
+
}
|
|
164
|
+
else if (answer.valueUri) {
|
|
165
|
+
return answer.valueUri;
|
|
166
|
+
}
|
|
167
|
+
return '';
|
|
168
|
+
}
|
|
169
|
+
export function getInputInvalidType(input, regexValidation, minLength, maxLength) {
|
|
170
|
+
if (input) {
|
|
171
|
+
if (regexValidation && !regexValidation.expression.test(input)) {
|
|
172
|
+
return 'regex';
|
|
173
|
+
}
|
|
174
|
+
if (minLength && input.length < minLength) {
|
|
175
|
+
return 'minLength';
|
|
176
|
+
}
|
|
177
|
+
if (maxLength && input.length > maxLength) {
|
|
178
|
+
return 'maxLength';
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=validateQuestionnaire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateQuestionnaire.js","sourceRoot":"","sources":["../../src/utils/validateQuestionnaire.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import Box from '@mui/material/Box';
|
|
19
|
-
import { styled } from '@mui/material/styles';
|
|
19
|
+
import { alpha, styled } from '@mui/material/styles';
|
|
20
20
|
import FormControlLabel from '@mui/material/FormControlLabel';
|
|
21
21
|
|
|
22
22
|
export const QGroupContainerBox = styled(Box, {
|
|
@@ -37,3 +37,33 @@ export const FormTitleWrapper = styled(Box)(() => ({
|
|
|
37
37
|
export const StyledFormControlLabel = styled(FormControlLabel)(() => ({
|
|
38
38
|
height: 34
|
|
39
39
|
}));
|
|
40
|
+
|
|
41
|
+
export const RequiredLabel = styled(Box)(({ theme }) => ({
|
|
42
|
+
height: 12,
|
|
43
|
+
minWidth: 20,
|
|
44
|
+
lineHeight: 0,
|
|
45
|
+
borderRadius: 6,
|
|
46
|
+
alignItems: 'center',
|
|
47
|
+
whiteSpace: 'nowrap',
|
|
48
|
+
justifyContent: 'center',
|
|
49
|
+
padding: theme.spacing(1),
|
|
50
|
+
fontSize: theme.typography.caption.fontSize,
|
|
51
|
+
color: theme.palette.error.dark,
|
|
52
|
+
backgroundColor: alpha(theme.palette.error.main, 0.16),
|
|
53
|
+
fontWeight: theme.typography.fontWeightBold
|
|
54
|
+
}));
|
|
55
|
+
|
|
56
|
+
export const ReadOnlyLabel = styled(Box)(({ theme }) => ({
|
|
57
|
+
height: 12,
|
|
58
|
+
minWidth: 20,
|
|
59
|
+
lineHeight: 0,
|
|
60
|
+
borderRadius: 6,
|
|
61
|
+
alignItems: 'center',
|
|
62
|
+
whiteSpace: 'nowrap',
|
|
63
|
+
justifyContent: 'center',
|
|
64
|
+
padding: theme.spacing(1),
|
|
65
|
+
fontSize: theme.typography.caption.fontSize,
|
|
66
|
+
color: theme.palette.text.primary,
|
|
67
|
+
backgroundColor: theme.palette.grey['300'],
|
|
68
|
+
fontWeight: theme.typography.fontWeightBold
|
|
69
|
+
}));
|
|
@@ -44,7 +44,7 @@ function BooleanItem(props: BooleanItemProps) {
|
|
|
44
44
|
const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
|
|
45
45
|
|
|
46
46
|
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
47
|
-
const { displayInstructions } = useRenderingExtensions(qItem);
|
|
47
|
+
const { displayInstructions, required } = useRenderingExtensions(qItem);
|
|
48
48
|
|
|
49
49
|
// Init input value
|
|
50
50
|
let checked = false;
|
|
@@ -75,7 +75,11 @@ function BooleanItem(props: BooleanItemProps) {
|
|
|
75
75
|
}
|
|
76
76
|
return (
|
|
77
77
|
<FullWidthFormComponentBox data-test="q-item-boolean-box">
|
|
78
|
-
<ItemFieldGrid
|
|
78
|
+
<ItemFieldGrid
|
|
79
|
+
qItem={qItem}
|
|
80
|
+
displayInstructions={displayInstructions}
|
|
81
|
+
required={required}
|
|
82
|
+
readOnly={readOnly}>
|
|
79
83
|
<BooleanField checked={checked} readOnly={readOnly} onCheckedChange={handleCheckedChange} />
|
|
80
84
|
</ItemFieldGrid>
|
|
81
85
|
</FullWidthFormComponentBox>
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import React, { useState } from 'react';
|
|
19
|
-
import Grid from '@mui/material/Grid';
|
|
20
19
|
import type { Coding, QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
21
20
|
|
|
22
21
|
import { createEmptyQrItem } from '../../../utils/qrItem';
|
|
@@ -31,10 +30,9 @@ import type {
|
|
|
31
30
|
PropsWithQrItemChangeHandler
|
|
32
31
|
} from '../../../interfaces/renderProps.interface';
|
|
33
32
|
import { AUTOCOMPLETE_DEBOUNCE_DURATION } from '../../../utils/debounce';
|
|
34
|
-
import DisplayInstructions from '../DisplayItem/DisplayInstructions';
|
|
35
|
-
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
36
33
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
37
34
|
import ChoiceAutocompleteField from './ChoiceAutocompleteField';
|
|
35
|
+
import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
|
|
38
36
|
|
|
39
37
|
interface ChoiceAutocompleteItemProps
|
|
40
38
|
extends PropsWithQrItemChangeHandler,
|
|
@@ -56,7 +54,7 @@ function ChoiceAutocompleteItem(props: ChoiceAutocompleteItemProps) {
|
|
|
56
54
|
}
|
|
57
55
|
|
|
58
56
|
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
59
|
-
const { displayInstructions } = useRenderingExtensions(qItem);
|
|
57
|
+
const { displayInstructions, required } = useRenderingExtensions(qItem);
|
|
60
58
|
|
|
61
59
|
const maxList = 10;
|
|
62
60
|
|
|
@@ -106,25 +104,23 @@ function ChoiceAutocompleteItem(props: ChoiceAutocompleteItemProps) {
|
|
|
106
104
|
|
|
107
105
|
return (
|
|
108
106
|
<FullWidthFormComponentBox>
|
|
109
|
-
<
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
</Grid>
|
|
127
|
-
</Grid>
|
|
107
|
+
<ItemFieldGrid
|
|
108
|
+
qItem={qItem}
|
|
109
|
+
displayInstructions={displayInstructions}
|
|
110
|
+
required={required}
|
|
111
|
+
readOnly={readOnly}>
|
|
112
|
+
<ChoiceAutocompleteField
|
|
113
|
+
qItem={qItem}
|
|
114
|
+
options={options}
|
|
115
|
+
valueCoding={valueCoding ?? null}
|
|
116
|
+
loading={loading}
|
|
117
|
+
feedback={feedback ?? null}
|
|
118
|
+
readOnly={readOnly}
|
|
119
|
+
isTabled={isTabled}
|
|
120
|
+
onInputChange={setInput}
|
|
121
|
+
onValueChange={handleValueChange}
|
|
122
|
+
/>
|
|
123
|
+
</ItemFieldGrid>
|
|
128
124
|
</FullWidthFormComponentBox>
|
|
129
125
|
);
|
|
130
126
|
}
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import React from 'react';
|
|
19
|
-
import Grid from '@mui/material/Grid';
|
|
20
19
|
import type { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
|
|
21
20
|
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
22
21
|
import { createEmptyQrItem } from '../../../utils/qrItem';
|
|
@@ -30,9 +29,9 @@ import type {
|
|
|
30
29
|
PropsWithShowMinimalViewAttribute
|
|
31
30
|
} from '../../../interfaces/renderProps.interface';
|
|
32
31
|
import DisplayInstructions from '../DisplayItem/DisplayInstructions';
|
|
33
|
-
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
34
32
|
import ChoiceCheckboxAnswerValueSetFields from './ChoiceCheckboxAnswerOptionFields';
|
|
35
33
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
34
|
+
import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
|
|
36
35
|
|
|
37
36
|
interface ChoiceCheckboxAnswerOptionItemProps
|
|
38
37
|
extends PropsWithQrItemChangeHandler,
|
|
@@ -60,7 +59,7 @@ function ChoiceCheckboxAnswerOptionItem(props: ChoiceCheckboxAnswerOptionItemPro
|
|
|
60
59
|
const answers = qrChoiceCheckbox.answer ? qrChoiceCheckbox.answer : [];
|
|
61
60
|
|
|
62
61
|
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
63
|
-
const { displayInstructions } = useRenderingExtensions(qItem);
|
|
62
|
+
const { displayInstructions, required } = useRenderingExtensions(qItem);
|
|
64
63
|
|
|
65
64
|
// Event handlers
|
|
66
65
|
function handleCheckedChange(changedValue: string) {
|
|
@@ -97,21 +96,19 @@ function ChoiceCheckboxAnswerOptionItem(props: ChoiceCheckboxAnswerOptionItemPro
|
|
|
97
96
|
|
|
98
97
|
return (
|
|
99
98
|
<FullWidthFormComponentBox data-test="q-item-choice-checkbox-answer-option-box">
|
|
100
|
-
<
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
</Grid>
|
|
114
|
-
</Grid>
|
|
99
|
+
<ItemFieldGrid
|
|
100
|
+
qItem={qItem}
|
|
101
|
+
displayInstructions={displayInstructions}
|
|
102
|
+
required={required}
|
|
103
|
+
readOnly={readOnly}>
|
|
104
|
+
<ChoiceCheckboxAnswerValueSetFields
|
|
105
|
+
qItem={qItem}
|
|
106
|
+
answers={answers}
|
|
107
|
+
orientation={orientation}
|
|
108
|
+
readOnly={readOnly}
|
|
109
|
+
onCheckedChange={handleCheckedChange}
|
|
110
|
+
/>
|
|
111
|
+
</ItemFieldGrid>
|
|
115
112
|
</FullWidthFormComponentBox>
|
|
116
113
|
);
|
|
117
114
|
}
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import React from 'react';
|
|
19
|
-
import Grid from '@mui/material/Grid';
|
|
20
19
|
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
21
20
|
import { createEmptyQrItem } from '../../../utils/qrItem';
|
|
22
21
|
import useValueSetCodings from '../../../hooks/useValueSetCodings';
|
|
@@ -31,9 +30,9 @@ import type {
|
|
|
31
30
|
PropsWithShowMinimalViewAttribute
|
|
32
31
|
} from '../../../interfaces/renderProps.interface';
|
|
33
32
|
import DisplayInstructions from '../DisplayItem/DisplayInstructions';
|
|
34
|
-
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
35
33
|
import ChoiceCheckboxAnswerValueSetFields from './ChoiceCheckboxAnswerValueSetFields';
|
|
36
34
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
35
|
+
import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
|
|
37
36
|
|
|
38
37
|
interface ChoiceCheckboxAnswerValueSetItemProps
|
|
39
38
|
extends PropsWithQrItemChangeHandler,
|
|
@@ -62,7 +61,7 @@ function ChoiceCheckboxAnswerValueSetItem(props: ChoiceCheckboxAnswerValueSetIte
|
|
|
62
61
|
const answers = qrChoiceCheckbox.answer ? qrChoiceCheckbox.answer : [];
|
|
63
62
|
|
|
64
63
|
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
65
|
-
const { displayInstructions } = useRenderingExtensions(qItem);
|
|
64
|
+
const { displayInstructions, required } = useRenderingExtensions(qItem);
|
|
66
65
|
|
|
67
66
|
// Get codings/options from valueSet
|
|
68
67
|
const { codings, serverError } = useValueSetCodings(qItem);
|
|
@@ -102,22 +101,20 @@ function ChoiceCheckboxAnswerValueSetItem(props: ChoiceCheckboxAnswerValueSetIte
|
|
|
102
101
|
|
|
103
102
|
return (
|
|
104
103
|
<FullWidthFormComponentBox data-test="q-item-choice-checkbox-answer-value-set-box">
|
|
105
|
-
<
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
</Grid>
|
|
120
|
-
</Grid>
|
|
104
|
+
<ItemFieldGrid
|
|
105
|
+
qItem={qItem}
|
|
106
|
+
displayInstructions={displayInstructions}
|
|
107
|
+
required={required}
|
|
108
|
+
readOnly={readOnly}>
|
|
109
|
+
<ChoiceCheckboxAnswerValueSetFields
|
|
110
|
+
codings={codings}
|
|
111
|
+
answers={answers}
|
|
112
|
+
orientation={orientation}
|
|
113
|
+
readOnly={readOnly}
|
|
114
|
+
serverError={serverError}
|
|
115
|
+
onCheckedChange={handleCheckedChange}
|
|
116
|
+
/>
|
|
117
|
+
</ItemFieldGrid>
|
|
121
118
|
</FullWidthFormComponentBox>
|
|
122
119
|
);
|
|
123
120
|
}
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import React from 'react';
|
|
19
|
-
import Grid from '@mui/material/Grid';
|
|
20
19
|
import type { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
|
|
21
20
|
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
22
21
|
import { findInAnswerOptions, getQrChoiceValue } from '../../../utils/choice';
|
|
@@ -28,10 +27,9 @@ import type {
|
|
|
28
27
|
PropsWithParentIsReadOnlyAttribute,
|
|
29
28
|
PropsWithQrItemChangeHandler
|
|
30
29
|
} from '../../../interfaces/renderProps.interface';
|
|
31
|
-
import DisplayInstructions from '../DisplayItem/DisplayInstructions';
|
|
32
|
-
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
33
30
|
import ChoiceRadioAnswerOptionFields from './ChoiceRadioAnswerOptionFields';
|
|
34
31
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
32
|
+
import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
|
|
35
33
|
|
|
36
34
|
interface ChoiceRadioAnswerOptionItemProps
|
|
37
35
|
extends PropsWithQrItemChangeHandler,
|
|
@@ -50,7 +48,7 @@ function ChoiceRadioAnswerOptionItem(props: ChoiceRadioAnswerOptionItemProps) {
|
|
|
50
48
|
const valueRadio = getQrChoiceValue(qrChoiceRadio);
|
|
51
49
|
|
|
52
50
|
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
53
|
-
const { displayInstructions } = useRenderingExtensions(qItem);
|
|
51
|
+
const { displayInstructions, required } = useRenderingExtensions(qItem);
|
|
54
52
|
|
|
55
53
|
// Event handlers
|
|
56
54
|
function handleChange(newValue: string) {
|
|
@@ -76,21 +74,19 @@ function ChoiceRadioAnswerOptionItem(props: ChoiceRadioAnswerOptionItemProps) {
|
|
|
76
74
|
|
|
77
75
|
return (
|
|
78
76
|
<FullWidthFormComponentBox data-test="q-item-choice-radio-answer-option-box">
|
|
79
|
-
<
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
</Grid>
|
|
93
|
-
</Grid>
|
|
77
|
+
<ItemFieldGrid
|
|
78
|
+
qItem={qItem}
|
|
79
|
+
displayInstructions={displayInstructions}
|
|
80
|
+
required={required}
|
|
81
|
+
readOnly={readOnly}>
|
|
82
|
+
<ChoiceRadioAnswerOptionFields
|
|
83
|
+
qItem={qItem}
|
|
84
|
+
valueRadio={valueRadio}
|
|
85
|
+
orientation={orientation}
|
|
86
|
+
readOnly={readOnly}
|
|
87
|
+
onCheckedChange={handleChange}
|
|
88
|
+
/>
|
|
89
|
+
</ItemFieldGrid>
|
|
94
90
|
</FullWidthFormComponentBox>
|
|
95
91
|
);
|
|
96
92
|
}
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import React from 'react';
|
|
19
|
-
import Grid from '@mui/material/Grid';
|
|
20
19
|
import type { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
|
|
21
20
|
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
22
21
|
import { findInAnswerValueSetCodings } from '../../../utils/choice';
|
|
@@ -29,10 +28,9 @@ import type {
|
|
|
29
28
|
PropsWithParentIsReadOnlyAttribute,
|
|
30
29
|
PropsWithQrItemChangeHandler
|
|
31
30
|
} from '../../../interfaces/renderProps.interface';
|
|
32
|
-
import DisplayInstructions from '../DisplayItem/DisplayInstructions';
|
|
33
|
-
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
34
31
|
import ChoiceRadioAnswerValueSetFields from './ChoiceRadioAnswerValueSetFields';
|
|
35
32
|
import useReadOnly from '../../../hooks/useReadOnly';
|
|
33
|
+
import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
|
|
36
34
|
|
|
37
35
|
interface ChoiceRadioAnswerValueSetItemProps
|
|
38
36
|
extends PropsWithQrItemChangeHandler,
|
|
@@ -47,7 +45,7 @@ function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps
|
|
|
47
45
|
const { qItem, qrItem, orientation, isRepeated, parentIsReadOnly, onQrItemChange } = props;
|
|
48
46
|
|
|
49
47
|
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
50
|
-
const { displayInstructions } = useRenderingExtensions(qItem);
|
|
48
|
+
const { displayInstructions, required } = useRenderingExtensions(qItem);
|
|
51
49
|
|
|
52
50
|
// Init input value
|
|
53
51
|
const qrChoiceRadio = qrItem ?? createEmptyQrItem(qItem);
|
|
@@ -88,23 +86,21 @@ function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps
|
|
|
88
86
|
|
|
89
87
|
return (
|
|
90
88
|
<FullWidthFormComponentBox data-test="q-item-choice-radio-answer-value-set-box">
|
|
91
|
-
<
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
</Grid>
|
|
107
|
-
</Grid>
|
|
89
|
+
<ItemFieldGrid
|
|
90
|
+
qItem={qItem}
|
|
91
|
+
displayInstructions={displayInstructions}
|
|
92
|
+
required={required}
|
|
93
|
+
readOnly={readOnly}>
|
|
94
|
+
<ChoiceRadioAnswerValueSetFields
|
|
95
|
+
qItem={qItem}
|
|
96
|
+
codings={codings}
|
|
97
|
+
valueRadio={valueRadio}
|
|
98
|
+
orientation={orientation}
|
|
99
|
+
readOnly={readOnly}
|
|
100
|
+
serverError={serverError}
|
|
101
|
+
onCheckedChange={handleChange}
|
|
102
|
+
/>
|
|
103
|
+
</ItemFieldGrid>
|
|
108
104
|
</FullWidthFormComponentBox>
|
|
109
105
|
);
|
|
110
106
|
}
|