@aehrc/smart-forms-renderer 1.0.0-alpha.21 → 1.0.0-alpha.23
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/BooleanField.d.ts +1 -0
- package/lib/components/FormComponents/BooleanItem/BooleanField.js +20 -17
- package/lib/components/FormComponents/BooleanItem/BooleanField.js.map +1 -1
- package/lib/components/FormComponents/BooleanItem/BooleanItem.js +6 -3
- package/lib/components/FormComponents/BooleanItem/BooleanItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.d.ts +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js +15 -7
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +5 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionView.d.ts +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionView.js +3 -3
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionView.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.d.ts +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js +14 -7
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +6 -3
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.d.ts +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js +7 -5
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +4 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionView.d.ts +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionView.js +3 -3
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionView.js.map +1 -1
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js +1 -1
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js +1 -1
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
- package/lib/components/FormComponents/QuantityItem/QuantityItem.js +1 -1
- package/lib/components/FormComponents/QuantityItem/QuantityItem.js.map +1 -1
- package/lib/components/FormComponents/StringItem/StringItem.js +1 -1
- package/lib/components/FormComponents/StringItem/StringItem.js.map +1 -1
- package/lib/components/FormComponents/TextItem/TextItem.js +1 -1
- package/lib/components/FormComponents/TextItem/TextItem.js.map +1 -1
- package/lib/components/FormComponents/UrlItem/UrlItem.js +1 -1
- package/lib/components/FormComponents/UrlItem/UrlItem.js.map +1 -1
- package/lib/components/Renderer/BaseRenderer.js +6 -4
- package/lib/components/Renderer/BaseRenderer.js.map +1 -1
- package/lib/components/Renderer/FormBodyTabbed.js +1 -1
- package/lib/components/Renderer/FormBodyTabbed.js.map +1 -1
- package/lib/hooks/useValidationFeedback.js +33 -2
- package/lib/hooks/useValidationFeedback.js.map +1 -1
- package/lib/interfaces/questionnaireStore.interface.d.ts +2 -0
- package/lib/interfaces/targetConstraint.interface.d.ts +30 -0
- package/lib/interfaces/targetConstraint.interface.js +2 -0
- package/lib/interfaces/targetConstraint.interface.js.map +1 -0
- package/lib/stores/questionnaireResponseStore.d.ts +8 -2
- package/lib/stores/questionnaireResponseStore.js +15 -16
- package/lib/stores/questionnaireResponseStore.js.map +1 -1
- package/lib/stores/questionnaireStore.d.ts +7 -0
- package/lib/stores/questionnaireStore.js +22 -8
- package/lib/stores/questionnaireStore.js.map +1 -1
- package/lib/utils/calculatedExpression.d.ts +3 -2
- package/lib/utils/calculatedExpression.js +2 -2
- package/lib/utils/calculatedExpression.js.map +1 -1
- package/lib/utils/enableWhenExpression.d.ts +4 -3
- package/lib/utils/enableWhenExpression.js +4 -4
- package/lib/utils/enableWhenExpression.js.map +1 -1
- package/lib/utils/fhirpath.d.ts +8 -3
- package/lib/utils/fhirpath.js +27 -8
- package/lib/utils/fhirpath.js.map +1 -1
- package/lib/utils/initialise.d.ts +6 -2
- package/lib/utils/initialise.js +16 -4
- package/lib/utils/initialise.js.map +1 -1
- package/lib/utils/itemControl.d.ts +1 -0
- package/lib/utils/itemControl.js +11 -0
- package/lib/utils/itemControl.js.map +1 -1
- package/lib/utils/manageForm.js +2 -0
- package/lib/utils/manageForm.js.map +1 -1
- package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +4 -0
- package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -1
- package/lib/utils/questionnaireStoreUtils/extractTargetConstraint.d.ts +4 -0
- package/lib/utils/questionnaireStoreUtils/extractTargetConstraint.js +39 -0
- package/lib/utils/questionnaireStoreUtils/extractTargetConstraint.js.map +1 -0
- package/lib/utils/targetConstraint.d.ts +23 -0
- package/lib/utils/targetConstraint.js +179 -0
- package/lib/utils/targetConstraint.js.map +1 -0
- package/lib/utils/validate.d.ts +73 -0
- package/lib/utils/validate.js +742 -0
- package/lib/utils/validate.js.map +1 -0
- package/lib/utils/validateQuestionnaire.d.ts +40 -40
- package/lib/utils/validateQuestionnaire.js +1 -0
- package/lib/utils/validateQuestionnaire.js.map +1 -1
- package/lib/utils/validateQuestionnaireResponse.d.ts +71 -0
- package/lib/utils/validateQuestionnaireResponse.js +710 -0
- package/lib/utils/validateQuestionnaireResponse.js.map +1 -0
- package/lib/utils/validateTargetConstraint.d.ts +1 -0
- package/lib/utils/validateTargetConstraint.js +34 -0
- package/lib/utils/validateTargetConstraint.js.map +1 -0
- package/package.json +1 -1
- package/src/components/FormComponents/BooleanItem/BooleanField.tsx +82 -73
- package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +7 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.tsx +43 -18
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +6 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionView.tsx +4 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.tsx +35 -17
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +8 -2
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +41 -34
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +5 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionView.tsx +4 -0
- package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +2 -1
- package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +2 -1
- package/src/components/FormComponents/QuantityItem/QuantityItem.tsx +2 -1
- package/src/components/FormComponents/StringItem/StringItem.tsx +1 -1
- package/src/components/FormComponents/TextItem/TextItem.tsx +2 -1
- package/src/components/FormComponents/UrlItem/UrlItem.tsx +2 -1
- package/src/components/Renderer/BaseRenderer.tsx +6 -4
- package/src/components/Renderer/FormBodyTabbed.tsx +1 -1
- package/src/hooks/useValidationFeedback.ts +39 -2
- package/src/interfaces/questionnaireStore.interface.ts +2 -0
- package/src/interfaces/renderProps.interface.ts +1 -0
- package/src/interfaces/targetConstraint.interface.ts +36 -0
- package/src/stores/questionnaireResponseStore.ts +25 -18
- package/src/stores/questionnaireStore.ts +31 -5
- package/src/utils/calculatedExpression.ts +4 -4
- package/src/utils/enableWhenExpression.ts +8 -7
- package/src/utils/fhirpath.ts +57 -9
- package/src/utils/initialise.ts +23 -6
- package/src/utils/itemControl.ts +15 -0
- package/src/utils/manageForm.ts +3 -0
- package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +6 -0
- package/src/utils/questionnaireStoreUtils/extractTargetConstraint.ts +71 -0
- package/src/utils/targetConstraint.ts +243 -0
- package/src/utils/{validateQuestionnaire.ts → validate.ts} +138 -58
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateQuestionnaireResponse.js","sourceRoot":"","sources":["../../src/utils/validateQuestionnaireResponse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function validateTargetConstraint(): void;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 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 { useQuestionnaireResponseStore, useQuestionnaireStore } from '../stores';
|
|
18
|
+
import { createValidationOperationOutcome, ValidationResult } from './validate';
|
|
19
|
+
export function validateTargetConstraint() {
|
|
20
|
+
var _a, _b, _c;
|
|
21
|
+
const targetConstraints = useQuestionnaireStore.use.targetConstraints();
|
|
22
|
+
const invalidItems = useQuestionnaireResponseStore.use.invalidItems();
|
|
23
|
+
for (const [, targetConstraint] of Object.entries(targetConstraints)) {
|
|
24
|
+
const locationExpression = targetConstraint.location
|
|
25
|
+
? `${(_a = targetConstraint.valueExpression.expression) !== null && _a !== void 0 ? _a : 'unknown FHIRPath expression'} at ${targetConstraint.location}`
|
|
26
|
+
: `${(_b = targetConstraint.valueExpression.expression) !== null && _b !== void 0 ? _b : 'unknown FHIRPath expression'}`;
|
|
27
|
+
const validationOutcome = createValidationOperationOutcome(ValidationResult.invariant, null, // We don't need a QuestionnaireItem here
|
|
28
|
+
null, // We don't need a QuestionnaireResponseItem here
|
|
29
|
+
null, locationExpression, []);
|
|
30
|
+
const invalidItemKey = (_c = targetConstraint.linkId) !== null && _c !== void 0 ? _c : `target-constraint-${targetConstraint.key}`;
|
|
31
|
+
invalidItems[invalidItemKey] = validationOutcome;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=validateTargetConstraint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateTargetConstraint.js","sourceRoot":"","sources":["../../src/utils/validateTargetConstraint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EAAE,gCAAgC,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGhF,MAAM,UAAU,wBAAwB;;IACtC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;IACxE,MAAM,YAAY,GAAG,6BAA6B,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IACtE,KAAK,MAAM,CAAC,EAAE,gBAAgB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;QACpE,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,QAAQ;YAClD,CAAC,CAAC,GAAG,MAAA,gBAAgB,CAAC,eAAe,CAAC,UAAU,mCAAI,6BAA6B,OAAO,gBAAgB,CAAC,QAAQ,EAAE;YACnH,CAAC,CAAC,GAAG,MAAA,gBAAgB,CAAC,eAAe,CAAC,UAAU,mCAAI,6BAA6B,EAAE,CAAC;QAEtF,MAAM,iBAAiB,GAAG,gCAAgC,CACxD,gBAAgB,CAAC,SAAS,EAC1B,IAAoC,EAAE,yCAAyC;QAC/E,IAA4C,EAAE,iDAAiD;QAC/F,IAAI,EACJ,kBAAkB,EAClB,EAAE,CACH,CAAC;QAEF,MAAM,cAAc,GAAG,MAAA,gBAAgB,CAAC,MAAM,mCAAI,qBAAqB,gBAAgB,CAAC,GAAG,EAAE,CAAC;QAC9F,YAAY,CAAC,cAAc,CAAC,GAAG,iBAAiB,CAAC;KAClD;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -29,18 +29,21 @@ import { isSpecificItemControl } from '../../../utils';
|
|
|
29
29
|
import ClearInputButton from '../ItemParts/ClearInputButton';
|
|
30
30
|
import { useRendererStylingStore } from '../../../stores';
|
|
31
31
|
import { findCalculatedExpressionsInExtensions } from '../../../utils/getExpressionsFromItem';
|
|
32
|
+
import Typography from '@mui/material/Typography';
|
|
32
33
|
|
|
33
34
|
interface BooleanFieldProps {
|
|
34
35
|
qItem: QuestionnaireItem;
|
|
35
36
|
readOnly: boolean;
|
|
36
37
|
valueBoolean: boolean | undefined;
|
|
38
|
+
feedback: string;
|
|
37
39
|
calcExpUpdated: boolean;
|
|
38
40
|
onCheckedChange: (newValue: string) => void;
|
|
39
41
|
onClear: () => void;
|
|
40
42
|
}
|
|
41
43
|
|
|
42
44
|
const BooleanField = memo(function BooleanField(props: BooleanFieldProps) {
|
|
43
|
-
const { qItem, readOnly, valueBoolean, calcExpUpdated, onCheckedChange, onClear } =
|
|
45
|
+
const { qItem, readOnly, valueBoolean, feedback, calcExpUpdated, onCheckedChange, onClear } =
|
|
46
|
+
props;
|
|
44
47
|
|
|
45
48
|
const inputsFlexGrow = useRendererStylingStore.use.inputsFlexGrow();
|
|
46
49
|
const reverseBooleanYesNo = useRendererStylingStore.use.reverseBooleanYesNo();
|
|
@@ -57,82 +60,88 @@ const BooleanField = memo(function BooleanField(props: BooleanFieldProps) {
|
|
|
57
60
|
const selection = valueBoolean === undefined ? null : valueBoolean.toString();
|
|
58
61
|
|
|
59
62
|
return (
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
63
|
+
<>
|
|
64
|
+
<Box display="flex" alignItems="center">
|
|
65
|
+
{booleanAsCheckbox ? (
|
|
66
|
+
<FormControlLabel
|
|
67
|
+
id={qItem.linkId}
|
|
68
|
+
disabled={readOnly}
|
|
69
|
+
control={
|
|
70
|
+
<Checkbox
|
|
71
|
+
size="small"
|
|
72
|
+
checked={selection === 'true'}
|
|
73
|
+
onChange={() => {
|
|
74
|
+
if (selection === 'true') {
|
|
75
|
+
onCheckedChange('false');
|
|
76
|
+
}
|
|
73
77
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
/>
|
|
79
|
-
}
|
|
80
|
-
label=""
|
|
81
|
-
/>
|
|
82
|
-
) : (
|
|
83
|
-
<StyledRadioGroup
|
|
84
|
-
id={qItem.linkId}
|
|
85
|
-
row={orientation === ChoiceItemOrientation.Horizontal}
|
|
86
|
-
name={qItem.text}
|
|
87
|
-
sx={inputsFlexGrow ? { width: '100%', flexWrap: 'nowrap' } : {}}
|
|
88
|
-
onChange={(e) => onCheckedChange(e.target.value)}
|
|
89
|
-
value={selection}>
|
|
90
|
-
{reverseBooleanYesNo ? (
|
|
91
|
-
<>
|
|
92
|
-
<ChoiceRadioSingle
|
|
93
|
-
value="false"
|
|
94
|
-
label="No"
|
|
95
|
-
readOnly={readOnly}
|
|
96
|
-
fullWidth={inputsFlexGrow}
|
|
78
|
+
if (selection === 'false' || selection === null) {
|
|
79
|
+
onCheckedChange('true');
|
|
80
|
+
}
|
|
81
|
+
}}
|
|
97
82
|
/>
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
83
|
+
}
|
|
84
|
+
label=""
|
|
85
|
+
/>
|
|
86
|
+
) : (
|
|
87
|
+
<StyledRadioGroup
|
|
88
|
+
id={qItem.linkId}
|
|
89
|
+
row={orientation === ChoiceItemOrientation.Horizontal}
|
|
90
|
+
name={qItem.text}
|
|
91
|
+
sx={inputsFlexGrow ? { width: '100%', flexWrap: 'nowrap' } : {}}
|
|
92
|
+
onChange={(e) => onCheckedChange(e.target.value)}
|
|
93
|
+
value={selection}>
|
|
94
|
+
{reverseBooleanYesNo ? (
|
|
95
|
+
<>
|
|
96
|
+
<ChoiceRadioSingle
|
|
97
|
+
value="false"
|
|
98
|
+
label="No"
|
|
99
|
+
readOnly={readOnly}
|
|
100
|
+
fullWidth={inputsFlexGrow}
|
|
101
|
+
/>
|
|
102
|
+
<ChoiceRadioSingle
|
|
103
|
+
value="true"
|
|
104
|
+
label="Yes"
|
|
105
|
+
readOnly={readOnly}
|
|
106
|
+
fullWidth={inputsFlexGrow}
|
|
107
|
+
/>
|
|
108
|
+
</>
|
|
109
|
+
) : (
|
|
110
|
+
<>
|
|
111
|
+
<ChoiceRadioSingle
|
|
112
|
+
value="true"
|
|
113
|
+
label="Yes"
|
|
114
|
+
readOnly={readOnly}
|
|
115
|
+
fullWidth={inputsFlexGrow}
|
|
116
|
+
/>
|
|
117
|
+
<ChoiceRadioSingle
|
|
118
|
+
value="false"
|
|
119
|
+
label="No"
|
|
120
|
+
readOnly={readOnly}
|
|
121
|
+
fullWidth={inputsFlexGrow}
|
|
122
|
+
/>
|
|
123
|
+
</>
|
|
124
|
+
)}
|
|
125
|
+
</StyledRadioGroup>
|
|
126
|
+
)}
|
|
127
|
+
|
|
128
|
+
<Box flexGrow={1} />
|
|
129
|
+
{calculatedExpressionExist ? (
|
|
130
|
+
<FadingCheckIcon fadeIn={calcExpUpdated} disabled={readOnly} />
|
|
131
|
+
) : null}
|
|
132
|
+
{hideClearButton ? null : (
|
|
133
|
+
<ClearInputButton
|
|
134
|
+
buttonShown={valueBoolean !== undefined}
|
|
135
|
+
readOnly={readOnly}
|
|
136
|
+
onClear={onClear}
|
|
137
|
+
/>
|
|
138
|
+
)}
|
|
139
|
+
</Box>
|
|
123
140
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
<FadingCheckIcon fadeIn={calcExpUpdated} disabled={readOnly} />
|
|
141
|
+
{feedback ? (
|
|
142
|
+
<Typography sx={{ color: 'error.main', fontSize: '0.75rem', mt: 1 }}>{feedback}</Typography>
|
|
127
143
|
) : null}
|
|
128
|
-
|
|
129
|
-
<ClearInputButton
|
|
130
|
-
buttonShown={valueBoolean !== undefined}
|
|
131
|
-
readOnly={readOnly}
|
|
132
|
-
onClear={onClear}
|
|
133
|
-
/>
|
|
134
|
-
)}
|
|
135
|
-
</Box>
|
|
144
|
+
</>
|
|
136
145
|
);
|
|
137
146
|
});
|
|
138
147
|
|
|
@@ -33,6 +33,7 @@ import useReadOnly from '../../../hooks/useReadOnly';
|
|
|
33
33
|
import { useQuestionnaireStore } from '../../../stores';
|
|
34
34
|
import useBooleanCalculatedExpression from '../../../hooks/useBooleanCalculatedExpression';
|
|
35
35
|
import { ItemLabelWrapper } from '../ItemParts';
|
|
36
|
+
import useValidationFeedback from '../../../hooks/useValidationFeedback';
|
|
36
37
|
|
|
37
38
|
interface BooleanItemProps
|
|
38
39
|
extends PropsWithQrItemChangeHandler,
|
|
@@ -51,6 +52,9 @@ function BooleanItem(props: BooleanItemProps) {
|
|
|
51
52
|
|
|
52
53
|
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
53
54
|
|
|
55
|
+
// Perform validation checks - there's no string-based input here
|
|
56
|
+
const feedback = useValidationFeedback(qItem, '');
|
|
57
|
+
|
|
54
58
|
// Init input value
|
|
55
59
|
const answerKey = qrItem?.answer?.[0].id;
|
|
56
60
|
let valueBoolean: boolean | undefined = undefined;
|
|
@@ -105,6 +109,7 @@ function BooleanItem(props: BooleanItemProps) {
|
|
|
105
109
|
qItem={qItem}
|
|
106
110
|
readOnly={readOnly}
|
|
107
111
|
valueBoolean={valueBoolean}
|
|
112
|
+
feedback={feedback}
|
|
108
113
|
calcExpUpdated={calcExpUpdated}
|
|
109
114
|
onCheckedChange={handleValueChange}
|
|
110
115
|
onClear={handleClear}
|
|
@@ -119,6 +124,7 @@ function BooleanItem(props: BooleanItemProps) {
|
|
|
119
124
|
qItem={qItem}
|
|
120
125
|
readOnly={readOnly}
|
|
121
126
|
valueBoolean={valueBoolean}
|
|
127
|
+
feedback={feedback}
|
|
122
128
|
calcExpUpdated={calcExpUpdated}
|
|
123
129
|
onCheckedChange={handleValueChange}
|
|
124
130
|
onClear={handleClear}
|
|
@@ -140,6 +146,7 @@ function BooleanItem(props: BooleanItemProps) {
|
|
|
140
146
|
qItem={qItem}
|
|
141
147
|
readOnly={readOnly}
|
|
142
148
|
valueBoolean={valueBoolean}
|
|
149
|
+
feedback={feedback}
|
|
143
150
|
calcExpUpdated={calcExpUpdated}
|
|
144
151
|
onCheckedChange={handleValueChange}
|
|
145
152
|
onClear={handleClear}
|
|
@@ -25,11 +25,13 @@ import Box from '@mui/material/Box';
|
|
|
25
25
|
import FadingCheckIcon from '../ItemParts/FadingCheckIcon';
|
|
26
26
|
import ClearInputButton from '../ItemParts/ClearInputButton';
|
|
27
27
|
import { useRendererStylingStore } from '../../../stores';
|
|
28
|
+
import Typography from '@mui/material/Typography';
|
|
28
29
|
|
|
29
30
|
interface ChoiceRadioAnswerOptionFieldsProps {
|
|
30
31
|
qItem: QuestionnaireItem;
|
|
31
32
|
options: QuestionnaireItemAnswerOption[];
|
|
32
33
|
valueRadio: string | null;
|
|
34
|
+
feedback: string;
|
|
33
35
|
readOnly: boolean;
|
|
34
36
|
calcExpUpdated: boolean;
|
|
35
37
|
onCheckedChange: (newValue: string) => void;
|
|
@@ -37,7 +39,16 @@ interface ChoiceRadioAnswerOptionFieldsProps {
|
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
function ChoiceRadioAnswerOptionFields(props: ChoiceRadioAnswerOptionFieldsProps) {
|
|
40
|
-
const {
|
|
42
|
+
const {
|
|
43
|
+
qItem,
|
|
44
|
+
options,
|
|
45
|
+
valueRadio,
|
|
46
|
+
feedback,
|
|
47
|
+
readOnly,
|
|
48
|
+
calcExpUpdated,
|
|
49
|
+
onCheckedChange,
|
|
50
|
+
onClear
|
|
51
|
+
} = props;
|
|
41
52
|
|
|
42
53
|
const inputsFlexGrow = useRendererStylingStore.use.inputsFlexGrow();
|
|
43
54
|
const hideClearButton = useRendererStylingStore.use.hideClearButton();
|
|
@@ -45,25 +56,39 @@ function ChoiceRadioAnswerOptionFields(props: ChoiceRadioAnswerOptionFieldsProps
|
|
|
45
56
|
const orientation = getChoiceOrientation(qItem) ?? ChoiceItemOrientation.Vertical;
|
|
46
57
|
|
|
47
58
|
return (
|
|
48
|
-
|
|
49
|
-
<
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
+
<>
|
|
60
|
+
<Box
|
|
61
|
+
display="flex"
|
|
62
|
+
sx={{
|
|
63
|
+
justifyContent: 'space-between',
|
|
64
|
+
alignItems: { xs: 'start', sm: 'center' },
|
|
65
|
+
flexDirection: { xs: 'column', sm: 'row' }
|
|
66
|
+
}}>
|
|
67
|
+
<Box display="flex" sx={inputsFlexGrow ? { width: '100%', flexWrap: 'nowrap' } : {}}>
|
|
68
|
+
<StyledRadioGroup
|
|
69
|
+
id={qItem.linkId}
|
|
70
|
+
row={orientation === ChoiceItemOrientation.Horizontal}
|
|
71
|
+
name={qItem.text}
|
|
72
|
+
sx={inputsFlexGrow ? { width: '100%', flexWrap: 'nowrap' } : {}}
|
|
73
|
+
onChange={(e) => onCheckedChange(e.target.value)}
|
|
74
|
+
value={valueRadio}
|
|
75
|
+
data-test="q-item-radio-group">
|
|
76
|
+
<RadioOptionList options={options} readOnly={readOnly} fullWidth={inputsFlexGrow} />
|
|
77
|
+
</StyledRadioGroup>
|
|
59
78
|
|
|
60
|
-
|
|
79
|
+
<Box flexGrow={1} />
|
|
61
80
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
81
|
+
<FadingCheckIcon fadeIn={calcExpUpdated} disabled={readOnly} />
|
|
82
|
+
</Box>
|
|
83
|
+
|
|
84
|
+
{hideClearButton ? null : (
|
|
85
|
+
<ClearInputButton buttonShown={!!valueRadio} readOnly={readOnly} onClear={onClear} />
|
|
86
|
+
)}
|
|
87
|
+
</Box>
|
|
88
|
+
{feedback ? (
|
|
89
|
+
<Typography sx={{ color: 'error.main', fontSize: '0.75rem', mt: 1 }}>{feedback}</Typography>
|
|
90
|
+
) : null}
|
|
91
|
+
</>
|
|
67
92
|
);
|
|
68
93
|
}
|
|
69
94
|
|
|
@@ -37,6 +37,7 @@ import Typography from '@mui/material/Typography';
|
|
|
37
37
|
import useCodingCalculatedExpression from '../../../hooks/useCodingCalculatedExpression';
|
|
38
38
|
import ChoiceRadioAnswerOptionView from './ChoiceRadioAnswerOptionView';
|
|
39
39
|
import ChoiceSelectAnswerOptionView from './ChoiceSelectAnswerOptionView';
|
|
40
|
+
import useValidationFeedback from '../../../hooks/useValidationFeedback';
|
|
40
41
|
|
|
41
42
|
interface ChoiceRadioAnswerOptionItemProps
|
|
42
43
|
extends PropsWithQrItemChangeHandler,
|
|
@@ -68,6 +69,9 @@ function ChoiceRadioAnswerOptionItem(props: ChoiceRadioAnswerOptionItemProps) {
|
|
|
68
69
|
|
|
69
70
|
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
70
71
|
|
|
72
|
+
// Perform validation checks - there's no string-based input here
|
|
73
|
+
const feedback = useValidationFeedback(qItem, '');
|
|
74
|
+
|
|
71
75
|
const options = qItem.answerOption ?? [];
|
|
72
76
|
|
|
73
77
|
// Process calculated expressions
|
|
@@ -124,6 +128,7 @@ function ChoiceRadioAnswerOptionItem(props: ChoiceRadioAnswerOptionItemProps) {
|
|
|
124
128
|
qItem={qItem}
|
|
125
129
|
options={options}
|
|
126
130
|
valueChoice={valueChoice}
|
|
131
|
+
feedback={feedback}
|
|
127
132
|
isRepeated={isRepeated}
|
|
128
133
|
readOnly={readOnly}
|
|
129
134
|
calcExpUpdated={calcExpUpdated}
|
|
@@ -140,6 +145,7 @@ function ChoiceRadioAnswerOptionItem(props: ChoiceRadioAnswerOptionItemProps) {
|
|
|
140
145
|
qItem={qItem}
|
|
141
146
|
options={options}
|
|
142
147
|
valueChoice={valueChoice}
|
|
148
|
+
feedback={feedback}
|
|
143
149
|
isRepeated={isRepeated}
|
|
144
150
|
isTabled={isTabled}
|
|
145
151
|
readOnly={readOnly}
|
|
@@ -27,6 +27,7 @@ interface ChoiceRadioAnswerOptionViewProps extends PropsWithIsRepeatedAttribute
|
|
|
27
27
|
qItem: QuestionnaireItem;
|
|
28
28
|
options: QuestionnaireItemAnswerOption[];
|
|
29
29
|
valueChoice: string | null;
|
|
30
|
+
feedback: string;
|
|
30
31
|
readOnly: boolean;
|
|
31
32
|
calcExpUpdated: boolean;
|
|
32
33
|
onCheckedChange: (linkId: string) => void;
|
|
@@ -39,6 +40,7 @@ function ChoiceRadioAnswerOptionView(props: ChoiceRadioAnswerOptionViewProps) {
|
|
|
39
40
|
qItem,
|
|
40
41
|
options,
|
|
41
42
|
valueChoice,
|
|
43
|
+
feedback,
|
|
42
44
|
isRepeated,
|
|
43
45
|
readOnly,
|
|
44
46
|
calcExpUpdated,
|
|
@@ -53,6 +55,7 @@ function ChoiceRadioAnswerOptionView(props: ChoiceRadioAnswerOptionViewProps) {
|
|
|
53
55
|
qItem={qItem}
|
|
54
56
|
options={options}
|
|
55
57
|
valueRadio={valueChoice}
|
|
58
|
+
feedback={feedback}
|
|
56
59
|
readOnly={readOnly}
|
|
57
60
|
calcExpUpdated={calcExpUpdated}
|
|
58
61
|
onCheckedChange={onCheckedChange}
|
|
@@ -75,6 +78,7 @@ function ChoiceRadioAnswerOptionView(props: ChoiceRadioAnswerOptionViewProps) {
|
|
|
75
78
|
qItem={qItem}
|
|
76
79
|
options={options}
|
|
77
80
|
valueRadio={valueChoice}
|
|
81
|
+
feedback={feedback}
|
|
78
82
|
readOnly={readOnly}
|
|
79
83
|
calcExpUpdated={calcExpUpdated}
|
|
80
84
|
onCheckedChange={onCheckedChange}
|
|
@@ -34,6 +34,7 @@ interface ChoiceRadioAnswerValueSetFieldsProps {
|
|
|
34
34
|
qItem: QuestionnaireItem;
|
|
35
35
|
options: QuestionnaireItemAnswerOption[];
|
|
36
36
|
valueRadio: string | null;
|
|
37
|
+
feedback: string;
|
|
37
38
|
readOnly: boolean;
|
|
38
39
|
calcExpUpdated: boolean;
|
|
39
40
|
terminologyError: TerminologyError;
|
|
@@ -46,6 +47,7 @@ function ChoiceRadioAnswerValueSetFields(props: ChoiceRadioAnswerValueSetFieldsP
|
|
|
46
47
|
qItem,
|
|
47
48
|
options,
|
|
48
49
|
valueRadio,
|
|
50
|
+
feedback,
|
|
49
51
|
readOnly,
|
|
50
52
|
calcExpUpdated,
|
|
51
53
|
terminologyError,
|
|
@@ -60,26 +62,42 @@ function ChoiceRadioAnswerValueSetFields(props: ChoiceRadioAnswerValueSetFieldsP
|
|
|
60
62
|
|
|
61
63
|
if (options.length > 0) {
|
|
62
64
|
return (
|
|
63
|
-
|
|
64
|
-
<
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
65
|
+
<>
|
|
66
|
+
<Box
|
|
67
|
+
display="flex"
|
|
68
|
+
sx={{
|
|
69
|
+
justifyContent: 'space-between',
|
|
70
|
+
alignItems: { xs: 'start', sm: 'center' },
|
|
71
|
+
flexDirection: { xs: 'column', sm: 'row' }
|
|
72
|
+
}}>
|
|
73
|
+
<Box display="flex" sx={inputsFlexGrow ? { width: '100%', flexWrap: 'nowrap' } : {}}>
|
|
74
|
+
<StyledRadioGroup
|
|
75
|
+
id={qItem.linkId}
|
|
76
|
+
row={orientation === ChoiceItemOrientation.Horizontal}
|
|
77
|
+
name={qItem.text}
|
|
78
|
+
sx={inputsFlexGrow ? { width: '100%', flexWrap: 'nowrap' } : {}}
|
|
79
|
+
onChange={(e) => onCheckedChange(e.target.value)}
|
|
80
|
+
value={valueRadio}
|
|
81
|
+
data-test="q-item-radio-group">
|
|
82
|
+
<RadioOptionList options={options} readOnly={readOnly} fullWidth={inputsFlexGrow} />
|
|
83
|
+
</StyledRadioGroup>
|
|
74
84
|
|
|
75
|
-
|
|
85
|
+
<Box flexGrow={1} />
|
|
76
86
|
|
|
77
|
-
|
|
87
|
+
<FadingCheckIcon fadeIn={calcExpUpdated} disabled={readOnly} />
|
|
88
|
+
</Box>
|
|
78
89
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
90
|
+
{hideClearButton ? null : (
|
|
91
|
+
<ClearInputButton buttonShown={!!valueRadio} readOnly={readOnly} onClear={onClear} />
|
|
92
|
+
)}
|
|
93
|
+
</Box>
|
|
94
|
+
|
|
95
|
+
{feedback ? (
|
|
96
|
+
<Typography sx={{ color: 'error.main', fontSize: '0.75rem', mt: 1 }}>
|
|
97
|
+
{feedback}
|
|
98
|
+
</Typography>
|
|
99
|
+
) : null}
|
|
100
|
+
</>
|
|
83
101
|
);
|
|
84
102
|
}
|
|
85
103
|
|
|
@@ -33,6 +33,7 @@ import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
|
|
|
33
33
|
import { useQuestionnaireStore } from '../../../stores';
|
|
34
34
|
import useCodingCalculatedExpression from '../../../hooks/useCodingCalculatedExpression';
|
|
35
35
|
import { ItemLabelWrapper } from '../ItemParts';
|
|
36
|
+
import useValidationFeedback from '../../../hooks/useValidationFeedback';
|
|
36
37
|
|
|
37
38
|
interface ChoiceRadioAnswerValueSetItemProps
|
|
38
39
|
extends PropsWithQrItemChangeHandler,
|
|
@@ -48,8 +49,6 @@ function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps
|
|
|
48
49
|
|
|
49
50
|
const onFocusLinkId = useQuestionnaireStore.use.onFocusLinkId();
|
|
50
51
|
|
|
51
|
-
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
52
|
-
|
|
53
52
|
// Init input value
|
|
54
53
|
const answerKey = qrItem?.answer?.[0].id;
|
|
55
54
|
const qrChoiceRadio = qrItem ?? createEmptyQrItem(qItem, answerKey);
|
|
@@ -65,6 +64,11 @@ function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps
|
|
|
65
64
|
// Get codings/options from valueSet
|
|
66
65
|
const { codings, terminologyError } = useValueSetCodings(qItem);
|
|
67
66
|
|
|
67
|
+
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
68
|
+
|
|
69
|
+
// Perform validation checks - there's no string-based input here
|
|
70
|
+
const feedback = useValidationFeedback(qItem, '');
|
|
71
|
+
|
|
68
72
|
const options = useMemo(() => convertCodingsToAnswerOptions(codings), [codings]);
|
|
69
73
|
|
|
70
74
|
const { calcExpUpdated } = useCodingCalculatedExpression({
|
|
@@ -98,6 +102,7 @@ function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps
|
|
|
98
102
|
qItem={qItem}
|
|
99
103
|
options={options}
|
|
100
104
|
valueRadio={valueRadio}
|
|
105
|
+
feedback={feedback}
|
|
101
106
|
readOnly={readOnly}
|
|
102
107
|
calcExpUpdated={calcExpUpdated}
|
|
103
108
|
terminologyError={terminologyError}
|
|
@@ -121,6 +126,7 @@ function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps
|
|
|
121
126
|
qItem={qItem}
|
|
122
127
|
options={options}
|
|
123
128
|
valueRadio={valueRadio}
|
|
129
|
+
feedback={feedback}
|
|
124
130
|
readOnly={readOnly}
|
|
125
131
|
calcExpUpdated={calcExpUpdated}
|
|
126
132
|
terminologyError={terminologyError}
|