@aehrc/smart-forms-renderer 0.23.2 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/FormComponents/BooleanItem/BooleanField.d.ts +1 -0
- package/lib/components/FormComponents/BooleanItem/BooleanField.js +3 -1
- package/lib/components/FormComponents/BooleanItem/BooleanField.js.map +1 -1
- package/lib/components/FormComponents/BooleanItem/BooleanItem.js +10 -3
- package/lib/components/FormComponents/BooleanItem/BooleanItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +4 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +4 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.d.ts +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js +10 -5
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.d.ts +3 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js +9 -3
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +39 -17
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionView.d.ts +13 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionView.js +31 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionView.js.map +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.d.ts +3 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js +11 -5
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +16 -9
- 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 +3 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +18 -21
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionView.d.ts +13 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionView.js +31 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionView.js.map +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.d.ts +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js +3 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js +17 -3
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js.map +1 -1
- package/lib/hooks/useBooleanCalculatedExpression.d.ts +11 -0
- package/lib/hooks/useBooleanCalculatedExpression.js +47 -0
- package/lib/hooks/useBooleanCalculatedExpression.js.map +1 -0
- package/lib/hooks/useCodingCalculatedExpression.d.ts +11 -0
- package/lib/hooks/useCodingCalculatedExpression.js +51 -0
- package/lib/hooks/useCodingCalculatedExpression.js.map +1 -0
- package/lib/interfaces/calculatedExpression.interface.d.ts +1 -1
- package/lib/utils/choice.d.ts +8 -2
- package/lib/utils/choice.js +20 -14
- package/lib/utils/choice.js.map +1 -1
- package/lib/utils/enableWhen.js +11 -10
- package/lib/utils/enableWhen.js.map +1 -1
- package/lib/utils/initialise.js +6 -0
- package/lib/utils/initialise.js.map +1 -1
- package/package.json +1 -1
- package/src/components/FormComponents/BooleanItem/BooleanField.tsx +5 -1
- package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +11 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +7 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +7 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.tsx +10 -1
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.tsx +25 -11
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +65 -32
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionView.tsx +83 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.tsx +41 -19
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +24 -10
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +5 -2
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +30 -39
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionView.tsx +83 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.tsx +13 -2
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +20 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +1 -0
- package/src/hooks/useBooleanCalculatedExpression.ts +75 -0
- package/src/hooks/useCodingCalculatedExpression.ts +80 -0
- package/src/interfaces/calculatedExpression.interface.ts +1 -1
- package/src/utils/choice.ts +23 -13
- package/src/utils/enableWhen.ts +32 -10
- package/src/utils/initialise.ts +7 -0
package/src/utils/choice.ts
CHANGED
|
@@ -25,6 +25,23 @@ import type {
|
|
|
25
25
|
import { ChoiceItemControl, ChoiceItemOrientation } from '../interfaces/choice.enum';
|
|
26
26
|
import { isSpecificItemControl } from './itemControl';
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Convert codings to Questionnaire answer options
|
|
30
|
+
*
|
|
31
|
+
* @author Sean Fong
|
|
32
|
+
*/
|
|
33
|
+
export function convertCodingsToAnswerOptions(codings: Coding[]): QuestionnaireItemAnswerOption[] {
|
|
34
|
+
return codings.map(
|
|
35
|
+
(coding): QuestionnaireItemAnswerOption => ({
|
|
36
|
+
valueCoding: {
|
|
37
|
+
system: coding.system,
|
|
38
|
+
code: coding.code,
|
|
39
|
+
display: coding.display
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
28
45
|
/**
|
|
29
46
|
* Find and return corresponding answerOption based on selected answer in form
|
|
30
47
|
*
|
|
@@ -32,11 +49,11 @@ import { isSpecificItemControl } from './itemControl';
|
|
|
32
49
|
*/
|
|
33
50
|
export function findInAnswerOptions(
|
|
34
51
|
options: QuestionnaireItemAnswerOption[],
|
|
35
|
-
|
|
52
|
+
valueInString: string
|
|
36
53
|
): QuestionnaireResponseItemAnswer | undefined {
|
|
37
54
|
for (const option of options) {
|
|
38
55
|
if (option.valueCoding) {
|
|
39
|
-
if (
|
|
56
|
+
if (valueInString === option.valueCoding.code) {
|
|
40
57
|
return {
|
|
41
58
|
valueCoding: option.valueCoding
|
|
42
59
|
};
|
|
@@ -44,7 +61,7 @@ export function findInAnswerOptions(
|
|
|
44
61
|
}
|
|
45
62
|
|
|
46
63
|
if (option.valueString) {
|
|
47
|
-
if (
|
|
64
|
+
if (valueInString === option.valueString) {
|
|
48
65
|
return {
|
|
49
66
|
valueString: option.valueString
|
|
50
67
|
};
|
|
@@ -52,7 +69,7 @@ export function findInAnswerOptions(
|
|
|
52
69
|
}
|
|
53
70
|
|
|
54
71
|
if (option.valueInteger) {
|
|
55
|
-
if (
|
|
72
|
+
if (valueInString === option.valueInteger.toString()) {
|
|
56
73
|
return {
|
|
57
74
|
valueInteger: option.valueInteger
|
|
58
75
|
};
|
|
@@ -69,7 +86,6 @@ export function findInAnswerOptions(
|
|
|
69
86
|
* @author Sean Fong
|
|
70
87
|
*/
|
|
71
88
|
export function getChoiceControlType(qItem: QuestionnaireItem) {
|
|
72
|
-
const dropdownOptionsCount = 5;
|
|
73
89
|
if (isSpecificItemControl(qItem, 'autocomplete')) {
|
|
74
90
|
return ChoiceItemControl.Autocomplete;
|
|
75
91
|
}
|
|
@@ -86,17 +102,11 @@ export function getChoiceControlType(qItem: QuestionnaireItem) {
|
|
|
86
102
|
return ChoiceItemControl.Select;
|
|
87
103
|
}
|
|
88
104
|
|
|
89
|
-
|
|
90
|
-
return qItem.answerOption.length > 0 && qItem.answerOption.length < dropdownOptionsCount
|
|
91
|
-
? ChoiceItemControl.Radio
|
|
92
|
-
: ChoiceItemControl.Select;
|
|
93
|
-
} else {
|
|
94
|
-
return ChoiceItemControl.Select;
|
|
95
|
-
}
|
|
105
|
+
return ChoiceItemControl.Select;
|
|
96
106
|
}
|
|
97
107
|
|
|
98
108
|
/**
|
|
99
|
-
* Find and return corresponding coding from
|
|
109
|
+
* Find and return corresponding coding from AnswerValueSet based on selected answer in form
|
|
100
110
|
*
|
|
101
111
|
* @author Sean Fong
|
|
102
112
|
*/
|
package/src/utils/enableWhen.ts
CHANGED
|
@@ -68,51 +68,73 @@ export function isEnabledAnswerTypeSwitcher(
|
|
|
68
68
|
enableWhen: QuestionnaireItemEnableWhen,
|
|
69
69
|
answer: QuestionnaireResponseItemAnswer
|
|
70
70
|
): boolean {
|
|
71
|
-
if (enableWhen
|
|
71
|
+
if (typeof enableWhen.answerBoolean === 'boolean' && enableWhen.operator === 'exists') {
|
|
72
72
|
return answerOperatorSwitcher(enableWhen.answerBoolean, answer, enableWhen.operator);
|
|
73
|
-
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (typeof enableWhen.answerBoolean === 'boolean' && typeof answer.valueBoolean === 'boolean') {
|
|
74
76
|
return answerOperatorSwitcher(
|
|
75
77
|
enableWhen.answerBoolean,
|
|
76
78
|
answer.valueBoolean,
|
|
77
79
|
enableWhen.operator
|
|
78
80
|
);
|
|
79
|
-
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (typeof enableWhen.answerDecimal === 'number' && typeof answer.valueDecimal === 'number') {
|
|
80
84
|
return answerOperatorSwitcher(
|
|
81
85
|
enableWhen.answerDecimal,
|
|
82
86
|
answer.valueDecimal,
|
|
83
87
|
enableWhen.operator
|
|
84
88
|
);
|
|
85
|
-
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (typeof enableWhen.answerInteger === 'number' && typeof answer.valueInteger === 'number') {
|
|
86
92
|
return answerOperatorSwitcher(
|
|
87
93
|
enableWhen.answerInteger,
|
|
88
94
|
answer.valueInteger,
|
|
89
95
|
enableWhen.operator
|
|
90
96
|
);
|
|
91
|
-
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (typeof enableWhen.answerDate === 'string' && typeof answer.valueDate === 'string') {
|
|
92
100
|
return answerOperatorSwitcher(enableWhen.answerDate, answer.valueDate, enableWhen.operator);
|
|
93
|
-
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (typeof enableWhen.answerDateTime === 'string' && typeof answer.valueDateTime === 'string') {
|
|
94
104
|
return answerOperatorSwitcher(
|
|
95
105
|
enableWhen.answerDateTime,
|
|
96
106
|
answer.valueDateTime,
|
|
97
107
|
enableWhen.operator
|
|
98
108
|
);
|
|
99
|
-
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (typeof enableWhen.answerTime === 'string' && typeof answer.valueTime === 'string') {
|
|
100
112
|
return answerOperatorSwitcher(enableWhen.answerTime, answer.valueTime, enableWhen.operator);
|
|
101
|
-
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (typeof enableWhen.answerString === 'string' && typeof answer.valueString === 'string') {
|
|
102
116
|
return answerOperatorSwitcher(enableWhen.answerString, answer.valueString, enableWhen.operator);
|
|
103
|
-
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (
|
|
120
|
+
typeof enableWhen.answerCoding?.code === 'string' &&
|
|
121
|
+
typeof answer.valueCoding?.code === 'string'
|
|
122
|
+
) {
|
|
104
123
|
return answerOperatorSwitcher(
|
|
105
124
|
enableWhen.answerCoding.code,
|
|
106
125
|
answer.valueCoding.code,
|
|
107
126
|
enableWhen.operator
|
|
108
127
|
);
|
|
109
|
-
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (enableWhen.answerQuantity && answer.valueQuantity) {
|
|
110
131
|
return answerOperatorSwitcher(
|
|
111
132
|
enableWhen.answerQuantity,
|
|
112
133
|
answer.valueQuantity,
|
|
113
134
|
enableWhen.operator
|
|
114
135
|
);
|
|
115
136
|
}
|
|
137
|
+
|
|
116
138
|
return false;
|
|
117
139
|
}
|
|
118
140
|
|
package/src/utils/initialise.ts
CHANGED
|
@@ -73,6 +73,13 @@ export function initialiseQuestionnaireResponse(
|
|
|
73
73
|
questionnaireResponse.questionnaire = createQuestionnaireReference(questionnaire);
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
// Add "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse" profile
|
|
77
|
+
const profiles: string[] = [
|
|
78
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse'
|
|
79
|
+
];
|
|
80
|
+
questionnaireResponse.meta = questionnaireResponse.meta || {};
|
|
81
|
+
questionnaireResponse.meta.profile = profiles;
|
|
82
|
+
|
|
76
83
|
return questionnaireResponse;
|
|
77
84
|
}
|
|
78
85
|
|