@aehrc/smart-forms-renderer 0.25.2 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/FormComponents/BooleanItem/BooleanItem.js +6 -1
- package/lib/components/FormComponents/BooleanItem/BooleanItem.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/ChoiceRadioAnswerValueSetItem.js +5 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +5 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js +5 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js +9 -3
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js +7 -3
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
- package/lib/components/FormComponents/StringItem/StringItem.js +7 -3
- package/lib/components/FormComponents/StringItem/StringItem.js.map +1 -1
- package/lib/components/FormComponents/TextItem/TextItem.js +7 -3
- package/lib/components/FormComponents/TextItem/TextItem.js.map +1 -1
- package/lib/hooks/useBooleanCalculatedExpression.d.ts +5 -4
- package/lib/hooks/useBooleanCalculatedExpression.js +12 -7
- package/lib/hooks/useBooleanCalculatedExpression.js.map +1 -1
- package/lib/hooks/useCodingCalculatedExpression.d.ts +4 -3
- package/lib/hooks/useCodingCalculatedExpression.js +14 -7
- package/lib/hooks/useCodingCalculatedExpression.js.map +1 -1
- package/lib/hooks/useDecimalCalculatedExpression.d.ts +3 -3
- package/lib/hooks/useDecimalCalculatedExpression.js +11 -7
- package/lib/hooks/useDecimalCalculatedExpression.js.map +1 -1
- package/lib/hooks/useDisplayCalculatedExpression.js +8 -1
- package/lib/hooks/useDisplayCalculatedExpression.js.map +1 -1
- package/lib/hooks/useIntegerCalculatedExpression.d.ts +3 -3
- package/lib/hooks/useIntegerCalculatedExpression.js +11 -7
- package/lib/hooks/useIntegerCalculatedExpression.js.map +1 -1
- package/lib/hooks/useStringCalculatedExpression.d.ts +3 -3
- package/lib/hooks/useStringCalculatedExpression.js +12 -7
- package/lib/hooks/useStringCalculatedExpression.js.map +1 -1
- package/lib/interfaces/calculatedExpression.interface.d.ts +1 -1
- package/lib/stores/questionnaireResponseStore.d.ts +3 -1
- package/lib/stores/questionnaireResponseStore.js +9 -1
- package/lib/stores/questionnaireResponseStore.js.map +1 -1
- package/lib/stores/questionnaireStore.js +6 -0
- package/lib/stores/questionnaireStore.js.map +1 -1
- package/lib/utils/calculatedExpression.d.ts +2 -1
- package/lib/utils/calculatedExpression.js +14 -8
- package/lib/utils/calculatedExpression.js.map +1 -1
- package/lib/utils/enableWhenExpression.d.ts +3 -2
- package/lib/utils/enableWhenExpression.js +15 -5
- package/lib/utils/enableWhenExpression.js.map +1 -1
- package/lib/utils/fhirpath.d.ts +5 -4
- package/lib/utils/fhirpath.js +45 -33
- package/lib/utils/fhirpath.js.map +1 -1
- package/lib/utils/initialise.js +5 -2
- package/lib/utils/initialise.js.map +1 -1
- package/lib/utils/parseInputs.js +1 -1
- package/lib/utils/parseInputs.js.map +1 -1
- package/package.json +1 -1
- package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +9 -1
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +5 -2
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +5 -2
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +5 -2
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +5 -2
- package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +14 -3
- package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +10 -3
- package/src/components/FormComponents/StringItem/StringItem.tsx +10 -3
- package/src/components/FormComponents/TextItem/TextItem.tsx +10 -3
- package/src/hooks/useBooleanCalculatedExpression.ts +19 -12
- package/src/hooks/useCodingCalculatedExpression.ts +18 -8
- package/src/hooks/useDecimalCalculatedExpression.ts +26 -17
- package/src/hooks/useDisplayCalculatedExpression.ts +12 -1
- package/src/hooks/useIntegerCalculatedExpression.ts +18 -13
- package/src/hooks/useStringCalculatedExpression.ts +16 -13
- package/src/interfaces/calculatedExpression.interface.ts +1 -1
- package/src/stores/questionnaireResponseStore.ts +16 -2
- package/src/stores/questionnaireStore.ts +7 -0
- package/src/utils/calculatedExpression.ts +24 -10
- package/src/utils/enableWhenExpression.ts +22 -9
- package/src/utils/fhirpath.ts +62 -41
- package/src/utils/initialise.ts +5 -2
- package/src/utils/parseInputs.ts +1 -1
- package/src/utils/questionnaireResponseStoreUtils/updatableResponseItems.ts +62 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fhirpath.js","sourceRoot":"","sources":["../../src/utils/fhirpath.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AAIzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"fhirpath.js","sourceRoot":"","sources":["../../src/utils/fhirpath.ts"],"names":[],"mappings":"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"}
|
package/lib/utils/initialise.js
CHANGED
|
@@ -18,6 +18,7 @@ import { evaluateInitialEnableWhenExpressions } from './enableWhenExpression';
|
|
|
18
18
|
import { getFirstVisibleTab } from './tabs';
|
|
19
19
|
import { assignPopulatedAnswersToEnableWhen } from './enableWhen';
|
|
20
20
|
import { evaluateInitialCalculatedExpressions } from './calculatedExpression';
|
|
21
|
+
import { createQuestionnaireResponseItemMap } from './questionnaireResponseStoreUtils/updatableResponseItems';
|
|
21
22
|
/**
|
|
22
23
|
* Initialise a conformant questionnaireResponse from a given questionnaire
|
|
23
24
|
* optionally takes in an existing questionnaireResponse to be initialised
|
|
@@ -241,18 +242,20 @@ function createNewRepeatGroupQuestionnaireResponseItem(qItem, initialValueItems)
|
|
|
241
242
|
}
|
|
242
243
|
export function initialiseFormFromResponse(params) {
|
|
243
244
|
const { questionnaireResponse, enableWhenItems, enableWhenExpressions, calculatedExpressions, variablesFhirPath, tabs } = params;
|
|
245
|
+
const initialResponseItemMap = createQuestionnaireResponseItemMap(questionnaireResponse);
|
|
244
246
|
let updatedFhirPathContext = params.fhirPathContext;
|
|
245
247
|
const { initialisedItems, linkedQuestions } = assignPopulatedAnswersToEnableWhen(enableWhenItems, questionnaireResponse);
|
|
246
248
|
const evaluateInitialEnableWhenExpressionsResult = evaluateInitialEnableWhenExpressions({
|
|
247
249
|
initialResponse: questionnaireResponse,
|
|
250
|
+
initialResponseItemMap: initialResponseItemMap,
|
|
248
251
|
enableWhenExpressions: enableWhenExpressions,
|
|
249
|
-
variablesFhirPath: variablesFhirPath
|
|
250
|
-
existingFhirPathContext: updatedFhirPathContext
|
|
252
|
+
variablesFhirPath: variablesFhirPath
|
|
251
253
|
});
|
|
252
254
|
const { initialEnableWhenExpressions } = evaluateInitialEnableWhenExpressionsResult;
|
|
253
255
|
updatedFhirPathContext = evaluateInitialEnableWhenExpressionsResult.updatedFhirPathContext;
|
|
254
256
|
const evaluateInitialCalculatedExpressionsResult = evaluateInitialCalculatedExpressions({
|
|
255
257
|
initialResponse: questionnaireResponse,
|
|
258
|
+
initialResponseItemMap: initialResponseItemMap,
|
|
256
259
|
calculatedExpressions: calculatedExpressions,
|
|
257
260
|
variablesFhirPath: variablesFhirPath,
|
|
258
261
|
existingFhirPathContext: updatedFhirPathContext
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initialise.js","sourceRoot":"","sources":["../../src/utils/initialise.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,oCAAoC,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAY5C,OAAO,EAAE,kCAAkC,EAAE,MAAM,cAAc,CAAC;AAElE,OAAO,EAAE,oCAAoC,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"initialise.js","sourceRoot":"","sources":["../../src/utils/initialise.ts"],"names":[],"mappings":"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"}
|
package/lib/utils/parseInputs.js
CHANGED
|
@@ -48,7 +48,7 @@ export function parseDecimalStringWithPrecision(input, precision) {
|
|
|
48
48
|
}
|
|
49
49
|
// truncate decimal digits based on precision
|
|
50
50
|
const parsedDecimalPoint = input.indexOf('.');
|
|
51
|
-
if (precision && parsedDecimalPoint !== -1) {
|
|
51
|
+
if (typeof precision === 'number' && parsedDecimalPoint !== -1) {
|
|
52
52
|
parsedInput = parsedInput.substring(0, parsedDecimalPoint + precision + 1);
|
|
53
53
|
}
|
|
54
54
|
return parsedInput;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseInputs.js","sourceRoot":"","sources":["../../src/utils/parseInputs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAE1D,OAAO,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC1B,OAAO,GAAG,CAAC;KACZ;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,KAAK,KAAK,EAAE,EAAE;QAChB,OAAO,EAAE,CAAC;KACX;IAED,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,KAAa,EAAE,SAAwB;IACrF,IAAI,KAAK,KAAK,EAAE,EAAE;QAChB,OAAO,EAAE,CAAC;KACX;IAED,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAEvC,IAAI,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;IAE/C,sDAAsD;IACtD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;QACvB,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAChD,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;YACnC,WAAW,IAAI,aAAa,CAAC;SAC9B;KACF;IAED,6CAA6C;IAC7C,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,SAAS,IAAI,kBAAkB,KAAK,CAAC,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"parseInputs.js","sourceRoot":"","sources":["../../src/utils/parseInputs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAE1D,OAAO,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC1B,OAAO,GAAG,CAAC;KACZ;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,KAAK,KAAK,EAAE,EAAE;QAChB,OAAO,EAAE,CAAC;KACX;IAED,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,KAAa,EAAE,SAAwB;IACrF,IAAI,KAAK,KAAK,EAAE,EAAE;QAChB,OAAO,EAAE,CAAC;KACX;IAED,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAEvC,IAAI,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;IAE/C,sDAAsD;IACtD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;QACvB,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAChD,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;YACnC,WAAW,IAAI,aAAa,CAAC;SAC9B;KACF;IAED,6CAA6C;IAC7C,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,kBAAkB,KAAK,CAAC,CAAC,EAAE;QAC9D,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,kBAAkB,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;KAC5E;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAa,EAAE,SAAiB;IACxE,OAAO,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1D,CAAC"}
|
package/package.json
CHANGED
|
@@ -54,7 +54,15 @@ function BooleanItem(props: BooleanItemProps) {
|
|
|
54
54
|
const { calcExpUpdated } = useBooleanCalculatedExpression({
|
|
55
55
|
qItem: qItem,
|
|
56
56
|
booleanValue: valueBoolean,
|
|
57
|
-
|
|
57
|
+
onChangeByCalcExpressionBoolean: (newValueBoolean: boolean) => {
|
|
58
|
+
onQrItemChange({
|
|
59
|
+
...createEmptyQrItem(qItem),
|
|
60
|
+
answer: [{ valueBoolean: newValueBoolean }]
|
|
61
|
+
});
|
|
62
|
+
},
|
|
63
|
+
onChangeByCalcExpressionNull: () => {
|
|
64
|
+
onQrItemChange(createEmptyQrItem(qItem));
|
|
65
|
+
}
|
|
58
66
|
});
|
|
59
67
|
|
|
60
68
|
// Event handlers
|
|
@@ -57,8 +57,11 @@ function ChoiceRadioAnswerOptionItem(props: ChoiceRadioAnswerOptionItemProps) {
|
|
|
57
57
|
const { calcExpUpdated } = useCodingCalculatedExpression({
|
|
58
58
|
qItem: qItem,
|
|
59
59
|
valueInString: valueChoice ?? '',
|
|
60
|
-
|
|
61
|
-
handleChange(
|
|
60
|
+
onChangeByCalcExpressionString: (newValueString: string) => {
|
|
61
|
+
handleChange(newValueString);
|
|
62
|
+
},
|
|
63
|
+
onChangeByCalcExpressionNull: () => {
|
|
64
|
+
onQrItemChange(createEmptyQrItem(qItem));
|
|
62
65
|
}
|
|
63
66
|
});
|
|
64
67
|
|
|
@@ -65,8 +65,11 @@ function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps
|
|
|
65
65
|
const { calcExpUpdated } = useCodingCalculatedExpression({
|
|
66
66
|
qItem: qItem,
|
|
67
67
|
valueInString: valueRadio ?? '',
|
|
68
|
-
|
|
69
|
-
handleChange(
|
|
68
|
+
onChangeByCalcExpressionString: (newValueString: string) => {
|
|
69
|
+
handleChange(newValueString);
|
|
70
|
+
},
|
|
71
|
+
onChangeByCalcExpressionNull: () => {
|
|
72
|
+
onQrItemChange(createEmptyQrItem(qItem));
|
|
70
73
|
}
|
|
71
74
|
});
|
|
72
75
|
|
|
@@ -56,8 +56,11 @@ function ChoiceSelectAnswerOptionItem(props: ChoiceSelectAnswerOptionItemProps)
|
|
|
56
56
|
const { calcExpUpdated } = useCodingCalculatedExpression({
|
|
57
57
|
qItem: qItem,
|
|
58
58
|
valueInString: valueChoice ?? '',
|
|
59
|
-
|
|
60
|
-
handleChange(
|
|
59
|
+
onChangeByCalcExpressionString: (newValueString: string) => {
|
|
60
|
+
handleChange(newValueString);
|
|
61
|
+
},
|
|
62
|
+
onChangeByCalcExpressionNull: () => {
|
|
63
|
+
onQrItemChange(createEmptyQrItem(qItem));
|
|
61
64
|
}
|
|
62
65
|
});
|
|
63
66
|
|
|
@@ -87,13 +87,16 @@ function ChoiceSelectAnswerValueSetItem(props: ChoiceSelectAnswerValueSetItemPro
|
|
|
87
87
|
const { calcExpUpdated } = useCodingCalculatedExpression({
|
|
88
88
|
qItem: qItem,
|
|
89
89
|
valueInString: valueCoding?.code ?? '',
|
|
90
|
-
|
|
90
|
+
onChangeByCalcExpressionString: (newValueString) => {
|
|
91
91
|
if (codings.length > 0) {
|
|
92
|
-
const qrAnswer = findInAnswerOptions(answerOptions,
|
|
92
|
+
const qrAnswer = findInAnswerOptions(answerOptions, newValueString);
|
|
93
93
|
onQrItemChange(
|
|
94
94
|
qrAnswer ? { ...createEmptyQrItem(qItem), answer: [qrAnswer] } : createEmptyQrItem(qItem)
|
|
95
95
|
);
|
|
96
96
|
}
|
|
97
|
+
},
|
|
98
|
+
onChangeByCalcExpressionNull: () => {
|
|
99
|
+
onQrItemChange(createEmptyQrItem(qItem));
|
|
97
100
|
}
|
|
98
101
|
});
|
|
99
102
|
|
|
@@ -83,10 +83,21 @@ function DecimalItem(props: DecimalItemProps) {
|
|
|
83
83
|
qItem: qItem,
|
|
84
84
|
inputValue: input,
|
|
85
85
|
precision: precision,
|
|
86
|
-
|
|
87
|
-
setInput(
|
|
86
|
+
onChangeByCalcExpressionDecimal: (newValueDecimal: number) => {
|
|
87
|
+
setInput(
|
|
88
|
+
typeof precision === 'number'
|
|
89
|
+
? newValueDecimal.toFixed(precision)
|
|
90
|
+
: newValueDecimal.toString()
|
|
91
|
+
);
|
|
92
|
+
onQrItemChange({
|
|
93
|
+
...createEmptyQrItem(qItem),
|
|
94
|
+
answer: [{ valueInteger: newValueDecimal }]
|
|
95
|
+
});
|
|
88
96
|
},
|
|
89
|
-
|
|
97
|
+
onChangeByCalcExpressionNull: () => {
|
|
98
|
+
setInput('');
|
|
99
|
+
onQrItemChange(createEmptyQrItem(qItem));
|
|
100
|
+
}
|
|
90
101
|
});
|
|
91
102
|
|
|
92
103
|
// Event handlers
|
|
@@ -78,10 +78,17 @@ function IntegerItem(props: IntegerItemProps) {
|
|
|
78
78
|
const { calcExpUpdated } = useIntegerCalculatedExpression({
|
|
79
79
|
qItem: qItem,
|
|
80
80
|
inputValue: input,
|
|
81
|
-
|
|
82
|
-
setInput(
|
|
81
|
+
onChangeByCalcExpressionInteger: (newValueInteger: number) => {
|
|
82
|
+
setInput(newValueInteger.toString());
|
|
83
|
+
onQrItemChange({
|
|
84
|
+
...createEmptyQrItem(qItem),
|
|
85
|
+
answer: [{ valueInteger: newValueInteger }]
|
|
86
|
+
});
|
|
83
87
|
},
|
|
84
|
-
|
|
88
|
+
onChangeByCalcExpressionNull: () => {
|
|
89
|
+
setInput('');
|
|
90
|
+
onQrItemChange(createEmptyQrItem(qItem));
|
|
91
|
+
}
|
|
85
92
|
});
|
|
86
93
|
|
|
87
94
|
// Event handlers
|
|
@@ -66,10 +66,17 @@ function StringItem(props: StringItemProps) {
|
|
|
66
66
|
const { calcExpUpdated } = useStringCalculatedExpression({
|
|
67
67
|
qItem: qItem,
|
|
68
68
|
inputValue: input,
|
|
69
|
-
|
|
70
|
-
setInput(
|
|
69
|
+
onChangeByCalcExpressionString: (newValueString: string) => {
|
|
70
|
+
setInput(newValueString);
|
|
71
|
+
onQrItemChange({
|
|
72
|
+
...createEmptyQrItem(qItem),
|
|
73
|
+
answer: [{ valueString: newValueString }]
|
|
74
|
+
});
|
|
71
75
|
},
|
|
72
|
-
|
|
76
|
+
onChangeByCalcExpressionNull: () => {
|
|
77
|
+
setInput('');
|
|
78
|
+
onQrItemChange(createEmptyQrItem(qItem));
|
|
79
|
+
}
|
|
73
80
|
});
|
|
74
81
|
|
|
75
82
|
// Event handlers
|
|
@@ -65,10 +65,17 @@ function TextItem(props: TextItemProps) {
|
|
|
65
65
|
const { calcExpUpdated } = useStringCalculatedExpression({
|
|
66
66
|
qItem: qItem,
|
|
67
67
|
inputValue: input,
|
|
68
|
-
|
|
69
|
-
setInput(
|
|
68
|
+
onChangeByCalcExpressionString: (newValueString: string) => {
|
|
69
|
+
setInput(newValueString);
|
|
70
|
+
onQrItemChange({
|
|
71
|
+
...createEmptyQrItem(qItem),
|
|
72
|
+
answer: [{ valueString: newValueString }]
|
|
73
|
+
});
|
|
70
74
|
},
|
|
71
|
-
|
|
75
|
+
onChangeByCalcExpressionNull: () => {
|
|
76
|
+
setInput('');
|
|
77
|
+
onQrItemChange(createEmptyQrItem(qItem));
|
|
78
|
+
}
|
|
72
79
|
});
|
|
73
80
|
|
|
74
81
|
// Event handlers
|
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import { useEffect, useState } from 'react';
|
|
19
|
-
import {
|
|
20
|
-
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
19
|
+
import type { QuestionnaireItem } from 'fhir/r4';
|
|
21
20
|
import { useQuestionnaireStore } from '../stores';
|
|
22
21
|
|
|
23
22
|
interface UseBooleanCalculatedExpression {
|
|
@@ -27,13 +26,15 @@ interface UseBooleanCalculatedExpression {
|
|
|
27
26
|
interface UseBooleanCalculatedExpressionProps {
|
|
28
27
|
qItem: QuestionnaireItem;
|
|
29
28
|
booleanValue: boolean | undefined;
|
|
30
|
-
|
|
29
|
+
onChangeByCalcExpressionBoolean: (newValueBoolean: boolean) => void;
|
|
30
|
+
onChangeByCalcExpressionNull: () => void;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
function
|
|
33
|
+
function useBooleanCalculatedExpression(
|
|
34
34
|
props: UseBooleanCalculatedExpressionProps
|
|
35
35
|
): UseBooleanCalculatedExpression {
|
|
36
|
-
const { qItem, booleanValue,
|
|
36
|
+
const { qItem, booleanValue, onChangeByCalcExpressionBoolean, onChangeByCalcExpressionNull } =
|
|
37
|
+
props;
|
|
37
38
|
|
|
38
39
|
const calculatedExpressions = useQuestionnaireStore.use.calculatedExpressions();
|
|
39
40
|
|
|
@@ -50,18 +51,24 @@ function UseBooleanCalculatedExpression(
|
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
// only update if calculated value is different from current value
|
|
53
|
-
if (
|
|
54
|
+
if (
|
|
55
|
+
calcExpression.value !== booleanValue &&
|
|
56
|
+
(typeof calcExpression.value === 'boolean' || calcExpression.value === null)
|
|
57
|
+
) {
|
|
54
58
|
// update ui to show calculated value changes
|
|
55
59
|
setCalcExpUpdated(true);
|
|
56
60
|
setTimeout(() => {
|
|
57
61
|
setCalcExpUpdated(false);
|
|
58
62
|
}, 500);
|
|
59
63
|
|
|
60
|
-
//
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
64
|
+
// calculatedExpression value is null
|
|
65
|
+
if (calcExpression.value === null) {
|
|
66
|
+
onChangeByCalcExpressionNull();
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// calculatedExpression value is boolean
|
|
71
|
+
onChangeByCalcExpressionBoolean(calcExpression.value);
|
|
65
72
|
}
|
|
66
73
|
},
|
|
67
74
|
// Only trigger this effect if calculatedExpression of item changes
|
|
@@ -72,4 +79,4 @@ function UseBooleanCalculatedExpression(
|
|
|
72
79
|
return { calcExpUpdated: calcExpUpdated };
|
|
73
80
|
}
|
|
74
81
|
|
|
75
|
-
export default
|
|
82
|
+
export default useBooleanCalculatedExpression;
|
|
@@ -26,14 +26,16 @@ interface UseCodingCalculatedExpression {
|
|
|
26
26
|
interface UseCodingCalculatedExpressionProps {
|
|
27
27
|
qItem: QuestionnaireItem;
|
|
28
28
|
valueInString: string;
|
|
29
|
-
|
|
29
|
+
onChangeByCalcExpressionString: (newValueInString: string) => void;
|
|
30
|
+
onChangeByCalcExpressionNull: () => void;
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
// TODO use this in all choice and open choice items if possible
|
|
33
|
-
function
|
|
34
|
+
function useCodingCalculatedExpression(
|
|
34
35
|
props: UseCodingCalculatedExpressionProps
|
|
35
36
|
): UseCodingCalculatedExpression {
|
|
36
|
-
const { qItem, valueInString,
|
|
37
|
+
const { qItem, valueInString, onChangeByCalcExpressionString, onChangeByCalcExpressionNull } =
|
|
38
|
+
props;
|
|
37
39
|
|
|
38
40
|
const calculatedExpressions = useQuestionnaireStore.use.calculatedExpressions();
|
|
39
41
|
|
|
@@ -52,7 +54,9 @@ function UseCodingCalculatedExpression(
|
|
|
52
54
|
// only update if calculated value is different from current value
|
|
53
55
|
if (
|
|
54
56
|
calcExpression.value !== valueInString &&
|
|
55
|
-
(typeof calcExpression.value === 'string' ||
|
|
57
|
+
(typeof calcExpression.value === 'string' ||
|
|
58
|
+
typeof calcExpression.value === 'number' ||
|
|
59
|
+
calcExpression.value === null)
|
|
56
60
|
) {
|
|
57
61
|
// update ui to show calculated value changes
|
|
58
62
|
setCalcExpUpdated(true);
|
|
@@ -60,13 +64,19 @@ function UseCodingCalculatedExpression(
|
|
|
60
64
|
setCalcExpUpdated(false);
|
|
61
65
|
}, 500);
|
|
62
66
|
|
|
63
|
-
|
|
67
|
+
// calculatedExpression value is null
|
|
68
|
+
if (calcExpression.value === null) {
|
|
69
|
+
onChangeByCalcExpressionNull();
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// calculatedExpression value is a string or number
|
|
74
|
+
const newValueString =
|
|
64
75
|
typeof calcExpression.value === 'string'
|
|
65
76
|
? calcExpression.value
|
|
66
77
|
: calcExpression.value.toString();
|
|
67
78
|
|
|
68
|
-
|
|
69
|
-
onChangeByCalcExpression(updatedValueInString);
|
|
79
|
+
onChangeByCalcExpressionString(newValueString);
|
|
70
80
|
}
|
|
71
81
|
},
|
|
72
82
|
// Only trigger this effect if calculatedExpression of item changes
|
|
@@ -77,4 +87,4 @@ function UseCodingCalculatedExpression(
|
|
|
77
87
|
return { calcExpUpdated: calcExpUpdated };
|
|
78
88
|
}
|
|
79
89
|
|
|
80
|
-
export default
|
|
90
|
+
export default useCodingCalculatedExpression;
|
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import { useEffect, useState } from 'react';
|
|
19
|
-
import {
|
|
20
|
-
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
19
|
+
import type { QuestionnaireItem } from 'fhir/r4';
|
|
21
20
|
import { useQuestionnaireStore } from '../stores';
|
|
22
21
|
|
|
23
22
|
interface UseDecimalCalculatedExpression {
|
|
@@ -28,14 +27,20 @@ interface useDecimalCalculatedExpressionProps {
|
|
|
28
27
|
qItem: QuestionnaireItem;
|
|
29
28
|
inputValue: string;
|
|
30
29
|
precision: number | null;
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
onChangeByCalcExpressionDecimal: (calcExpressionValue: number) => void;
|
|
31
|
+
onChangeByCalcExpressionNull: () => void;
|
|
33
32
|
}
|
|
34
33
|
|
|
35
34
|
function useDecimalCalculatedExpression(
|
|
36
35
|
props: useDecimalCalculatedExpressionProps
|
|
37
36
|
): UseDecimalCalculatedExpression {
|
|
38
|
-
const {
|
|
37
|
+
const {
|
|
38
|
+
qItem,
|
|
39
|
+
inputValue,
|
|
40
|
+
precision,
|
|
41
|
+
onChangeByCalcExpressionDecimal,
|
|
42
|
+
onChangeByCalcExpressionNull
|
|
43
|
+
} = props;
|
|
39
44
|
|
|
40
45
|
const calculatedExpressions = useQuestionnaireStore.use.calculatedExpressions();
|
|
41
46
|
|
|
@@ -52,10 +57,14 @@ function useDecimalCalculatedExpression(
|
|
|
52
57
|
}
|
|
53
58
|
|
|
54
59
|
// only update if calculated value is different from current value
|
|
55
|
-
if (
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
if (
|
|
61
|
+
calcExpression.value !== inputValue &&
|
|
62
|
+
(typeof calcExpression.value === 'number' || calcExpression.value === null)
|
|
63
|
+
) {
|
|
64
|
+
const calcExpressionValue =
|
|
65
|
+
typeof calcExpression.value === 'number' && typeof precision === 'number'
|
|
66
|
+
? parseFloat(calcExpression.value.toFixed(precision))
|
|
67
|
+
: calcExpression.value;
|
|
59
68
|
|
|
60
69
|
// only update if calculated value is different from current value
|
|
61
70
|
if (calcExpressionValue !== parseFloat(inputValue)) {
|
|
@@ -65,14 +74,14 @@ function useDecimalCalculatedExpression(
|
|
|
65
74
|
setCalcExpUpdated(false);
|
|
66
75
|
}, 500);
|
|
67
76
|
|
|
68
|
-
//
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
// calculatedExpression value is null
|
|
78
|
+
if (calcExpressionValue === null) {
|
|
79
|
+
onChangeByCalcExpressionNull();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// calculatedExpression value is a number
|
|
84
|
+
onChangeByCalcExpressionDecimal(calcExpressionValue);
|
|
76
85
|
}
|
|
77
86
|
}
|
|
78
87
|
},
|
|
@@ -24,11 +24,22 @@ function useDisplayCalculatedExpression(qItem: QuestionnaireItem): string | null
|
|
|
24
24
|
const calcExpression = calculatedExpressions[qItem.linkId]?.find(
|
|
25
25
|
(exp) => exp.from === 'item._text'
|
|
26
26
|
);
|
|
27
|
+
|
|
27
28
|
if (!calcExpression) {
|
|
28
29
|
return null;
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
if (
|
|
32
|
+
if (
|
|
33
|
+
typeof calcExpression.value === 'string' ||
|
|
34
|
+
typeof calcExpression.value === 'number' ||
|
|
35
|
+
calcExpression.value === null
|
|
36
|
+
) {
|
|
37
|
+
// calculatedExpression value is null
|
|
38
|
+
if (calcExpression.value === null) {
|
|
39
|
+
return '';
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// calculatedExpression value is string or number
|
|
32
43
|
return typeof calcExpression.value === 'string'
|
|
33
44
|
? calcExpression.value
|
|
34
45
|
: calcExpression.value.toString();
|
|
@@ -16,9 +16,8 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import { useEffect, useState } from 'react';
|
|
19
|
-
import {
|
|
20
|
-
import
|
|
21
|
-
import { useQuestionnaireStore } from '../stores/questionnaireStore';
|
|
19
|
+
import type { QuestionnaireItem } from 'fhir/r4';
|
|
20
|
+
import { useQuestionnaireStore } from '../stores';
|
|
22
21
|
|
|
23
22
|
interface UseIntegerCalculatedExpression {
|
|
24
23
|
calcExpUpdated: boolean;
|
|
@@ -27,14 +26,15 @@ interface UseIntegerCalculatedExpression {
|
|
|
27
26
|
interface useIntegerCalculatedExpressionProps {
|
|
28
27
|
qItem: QuestionnaireItem;
|
|
29
28
|
inputValue: string;
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
onChangeByCalcExpressionInteger: (calcExpressionValue: number) => void;
|
|
30
|
+
onChangeByCalcExpressionNull: () => void;
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
function useIntegerCalculatedExpression(
|
|
35
34
|
props: useIntegerCalculatedExpressionProps
|
|
36
35
|
): UseIntegerCalculatedExpression {
|
|
37
|
-
const { qItem, inputValue,
|
|
36
|
+
const { qItem, inputValue, onChangeByCalcExpressionInteger, onChangeByCalcExpressionNull } =
|
|
37
|
+
props;
|
|
38
38
|
|
|
39
39
|
const calculatedExpressions = useQuestionnaireStore.use.calculatedExpressions();
|
|
40
40
|
|
|
@@ -51,7 +51,10 @@ function useIntegerCalculatedExpression(
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
// only update if calculated value is different from current value
|
|
54
|
-
if (
|
|
54
|
+
if (
|
|
55
|
+
calcExpression.value !== inputValue &&
|
|
56
|
+
(typeof calcExpression.value === 'number' || calcExpression.value === null)
|
|
57
|
+
) {
|
|
55
58
|
const calcExpressionValue = calcExpression.value;
|
|
56
59
|
|
|
57
60
|
if (calcExpressionValue !== parseInt(inputValue)) {
|
|
@@ -61,12 +64,14 @@ function useIntegerCalculatedExpression(
|
|
|
61
64
|
setCalcExpUpdated(false);
|
|
62
65
|
}, 500);
|
|
63
66
|
|
|
64
|
-
//
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
// calculatedExpression value is null
|
|
68
|
+
if (calcExpressionValue === null) {
|
|
69
|
+
onChangeByCalcExpressionNull();
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// calculatedExpression value is a number
|
|
74
|
+
onChangeByCalcExpressionInteger(calcExpressionValue);
|
|
70
75
|
}
|
|
71
76
|
}
|
|
72
77
|
},
|