@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.
Files changed (126) hide show
  1. package/lib/components/FormComponents/BooleanItem/BooleanField.d.ts +1 -0
  2. package/lib/components/FormComponents/BooleanItem/BooleanField.js +20 -17
  3. package/lib/components/FormComponents/BooleanItem/BooleanField.js.map +1 -1
  4. package/lib/components/FormComponents/BooleanItem/BooleanItem.js +6 -3
  5. package/lib/components/FormComponents/BooleanItem/BooleanItem.js.map +1 -1
  6. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.d.ts +1 -0
  7. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js +15 -7
  8. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js.map +1 -1
  9. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +5 -2
  10. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js.map +1 -1
  11. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionView.d.ts +1 -0
  12. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionView.js +3 -3
  13. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionView.js.map +1 -1
  14. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.d.ts +1 -0
  15. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js +14 -7
  16. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js.map +1 -1
  17. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +6 -3
  18. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
  19. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.d.ts +1 -0
  20. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js +7 -5
  21. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js.map +1 -1
  22. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +4 -1
  23. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
  24. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionView.d.ts +1 -0
  25. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionView.js +3 -3
  26. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionView.js.map +1 -1
  27. package/lib/components/FormComponents/DecimalItem/DecimalItem.js +1 -1
  28. package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
  29. package/lib/components/FormComponents/IntegerItem/IntegerItem.js +1 -1
  30. package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
  31. package/lib/components/FormComponents/QuantityItem/QuantityItem.js +1 -1
  32. package/lib/components/FormComponents/QuantityItem/QuantityItem.js.map +1 -1
  33. package/lib/components/FormComponents/StringItem/StringItem.js +1 -1
  34. package/lib/components/FormComponents/StringItem/StringItem.js.map +1 -1
  35. package/lib/components/FormComponents/TextItem/TextItem.js +1 -1
  36. package/lib/components/FormComponents/TextItem/TextItem.js.map +1 -1
  37. package/lib/components/FormComponents/UrlItem/UrlItem.js +1 -1
  38. package/lib/components/FormComponents/UrlItem/UrlItem.js.map +1 -1
  39. package/lib/components/Renderer/BaseRenderer.js +6 -4
  40. package/lib/components/Renderer/BaseRenderer.js.map +1 -1
  41. package/lib/components/Renderer/FormBodyTabbed.js +1 -1
  42. package/lib/components/Renderer/FormBodyTabbed.js.map +1 -1
  43. package/lib/hooks/useValidationFeedback.js +33 -2
  44. package/lib/hooks/useValidationFeedback.js.map +1 -1
  45. package/lib/interfaces/questionnaireStore.interface.d.ts +2 -0
  46. package/lib/interfaces/targetConstraint.interface.d.ts +30 -0
  47. package/lib/interfaces/targetConstraint.interface.js +2 -0
  48. package/lib/interfaces/targetConstraint.interface.js.map +1 -0
  49. package/lib/stores/questionnaireResponseStore.d.ts +8 -2
  50. package/lib/stores/questionnaireResponseStore.js +15 -16
  51. package/lib/stores/questionnaireResponseStore.js.map +1 -1
  52. package/lib/stores/questionnaireStore.d.ts +7 -0
  53. package/lib/stores/questionnaireStore.js +22 -8
  54. package/lib/stores/questionnaireStore.js.map +1 -1
  55. package/lib/utils/calculatedExpression.d.ts +3 -2
  56. package/lib/utils/calculatedExpression.js +2 -2
  57. package/lib/utils/calculatedExpression.js.map +1 -1
  58. package/lib/utils/enableWhenExpression.d.ts +4 -3
  59. package/lib/utils/enableWhenExpression.js +4 -4
  60. package/lib/utils/enableWhenExpression.js.map +1 -1
  61. package/lib/utils/fhirpath.d.ts +8 -3
  62. package/lib/utils/fhirpath.js +27 -8
  63. package/lib/utils/fhirpath.js.map +1 -1
  64. package/lib/utils/initialise.d.ts +6 -2
  65. package/lib/utils/initialise.js +16 -4
  66. package/lib/utils/initialise.js.map +1 -1
  67. package/lib/utils/itemControl.d.ts +1 -0
  68. package/lib/utils/itemControl.js +11 -0
  69. package/lib/utils/itemControl.js.map +1 -1
  70. package/lib/utils/manageForm.js +2 -0
  71. package/lib/utils/manageForm.js.map +1 -1
  72. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +4 -0
  73. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -1
  74. package/lib/utils/questionnaireStoreUtils/extractTargetConstraint.d.ts +4 -0
  75. package/lib/utils/questionnaireStoreUtils/extractTargetConstraint.js +39 -0
  76. package/lib/utils/questionnaireStoreUtils/extractTargetConstraint.js.map +1 -0
  77. package/lib/utils/targetConstraint.d.ts +23 -0
  78. package/lib/utils/targetConstraint.js +179 -0
  79. package/lib/utils/targetConstraint.js.map +1 -0
  80. package/lib/utils/validate.d.ts +73 -0
  81. package/lib/utils/validate.js +742 -0
  82. package/lib/utils/validate.js.map +1 -0
  83. package/lib/utils/validateQuestionnaire.d.ts +40 -40
  84. package/lib/utils/validateQuestionnaire.js +1 -0
  85. package/lib/utils/validateQuestionnaire.js.map +1 -1
  86. package/lib/utils/validateQuestionnaireResponse.d.ts +71 -0
  87. package/lib/utils/validateQuestionnaireResponse.js +710 -0
  88. package/lib/utils/validateQuestionnaireResponse.js.map +1 -0
  89. package/lib/utils/validateTargetConstraint.d.ts +1 -0
  90. package/lib/utils/validateTargetConstraint.js +34 -0
  91. package/lib/utils/validateTargetConstraint.js.map +1 -0
  92. package/package.json +1 -1
  93. package/src/components/FormComponents/BooleanItem/BooleanField.tsx +82 -73
  94. package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +7 -0
  95. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.tsx +43 -18
  96. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +6 -0
  97. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionView.tsx +4 -0
  98. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.tsx +35 -17
  99. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +8 -2
  100. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +41 -34
  101. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +5 -0
  102. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionView.tsx +4 -0
  103. package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +2 -1
  104. package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +2 -1
  105. package/src/components/FormComponents/QuantityItem/QuantityItem.tsx +2 -1
  106. package/src/components/FormComponents/StringItem/StringItem.tsx +1 -1
  107. package/src/components/FormComponents/TextItem/TextItem.tsx +2 -1
  108. package/src/components/FormComponents/UrlItem/UrlItem.tsx +2 -1
  109. package/src/components/Renderer/BaseRenderer.tsx +6 -4
  110. package/src/components/Renderer/FormBodyTabbed.tsx +1 -1
  111. package/src/hooks/useValidationFeedback.ts +39 -2
  112. package/src/interfaces/questionnaireStore.interface.ts +2 -0
  113. package/src/interfaces/renderProps.interface.ts +1 -0
  114. package/src/interfaces/targetConstraint.interface.ts +36 -0
  115. package/src/stores/questionnaireResponseStore.ts +25 -18
  116. package/src/stores/questionnaireStore.ts +31 -5
  117. package/src/utils/calculatedExpression.ts +4 -4
  118. package/src/utils/enableWhenExpression.ts +8 -7
  119. package/src/utils/fhirpath.ts +57 -9
  120. package/src/utils/initialise.ts +23 -6
  121. package/src/utils/itemControl.ts +15 -0
  122. package/src/utils/manageForm.ts +3 -0
  123. package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +6 -0
  124. package/src/utils/questionnaireStoreUtils/extractTargetConstraint.ts +71 -0
  125. package/src/utils/targetConstraint.ts +243 -0
  126. 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aehrc/smart-forms-renderer",
3
- "version": "1.0.0-alpha.21",
3
+ "version": "1.0.0-alpha.23",
4
4
  "description": "FHIR Structured Data Captured (SDC) rendering engine for Smart Forms",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -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 } = props;
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
- <Box display="flex" alignItems="center">
61
- {booleanAsCheckbox ? (
62
- <FormControlLabel
63
- id={qItem.linkId}
64
- disabled={readOnly}
65
- control={
66
- <Checkbox
67
- size="small"
68
- checked={selection === 'true'}
69
- onChange={() => {
70
- if (selection === 'true') {
71
- onCheckedChange('false');
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
- if (selection === 'false' || selection === null) {
75
- onCheckedChange('true');
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
- <ChoiceRadioSingle
99
- value="true"
100
- label="Yes"
101
- readOnly={readOnly}
102
- fullWidth={inputsFlexGrow}
103
- />
104
- </>
105
- ) : (
106
- <>
107
- <ChoiceRadioSingle
108
- value="true"
109
- label="Yes"
110
- readOnly={readOnly}
111
- fullWidth={inputsFlexGrow}
112
- />
113
- <ChoiceRadioSingle
114
- value="false"
115
- label="No"
116
- readOnly={readOnly}
117
- fullWidth={inputsFlexGrow}
118
- />
119
- </>
120
- )}
121
- </StyledRadioGroup>
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
- <Box flexGrow={1} />
125
- {calculatedExpressionExist ? (
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
- {hideClearButton ? null : (
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 { qItem, options, valueRadio, readOnly, calcExpUpdated, onCheckedChange, onClear } = props;
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
- <Box display="flex" alignItems="center">
49
- <StyledRadioGroup
50
- id={qItem.linkId}
51
- row={orientation === ChoiceItemOrientation.Horizontal}
52
- name={qItem.text}
53
- sx={inputsFlexGrow ? { width: '100%', flexWrap: 'nowrap' } : {}}
54
- onChange={(e) => onCheckedChange(e.target.value)}
55
- value={valueRadio}
56
- data-test="q-item-radio-group">
57
- <RadioOptionList options={options} readOnly={readOnly} fullWidth={inputsFlexGrow} />
58
- </StyledRadioGroup>
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
- <Box flexGrow={1} />
79
+ <Box flexGrow={1} />
61
80
 
62
- <FadingCheckIcon fadeIn={calcExpUpdated} disabled={readOnly} />
63
- {hideClearButton ? null : (
64
- <ClearInputButton buttonShown={!!valueRadio} readOnly={readOnly} onClear={onClear} />
65
- )}
66
- </Box>
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
- <Box display="flex" alignItems="center">
64
- <StyledRadioGroup
65
- id={qItem.linkId}
66
- row={orientation === ChoiceItemOrientation.Horizontal}
67
- name={qItem.text}
68
- sx={inputsFlexGrow ? { width: '100%', flexWrap: 'nowrap' } : {}}
69
- onChange={(e) => onCheckedChange(e.target.value)}
70
- value={valueRadio}
71
- data-test="q-item-radio-group">
72
- <RadioOptionList options={options} readOnly={readOnly} fullWidth={inputsFlexGrow} />
73
- </StyledRadioGroup>
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
- <Box flexGrow={1} />
85
+ <Box flexGrow={1} />
76
86
 
77
- <FadingCheckIcon fadeIn={calcExpUpdated} disabled={readOnly} />
87
+ <FadingCheckIcon fadeIn={calcExpUpdated} disabled={readOnly} />
88
+ </Box>
78
89
 
79
- {hideClearButton ? null : (
80
- <ClearInputButton buttonShown={!!valueRadio} readOnly={readOnly} onClear={onClear} />
81
- )}
82
- </Box>
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}