@aehrc/smart-forms-renderer 0.25.2 → 0.26.1
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/components/Renderer/BaseRenderer.js +3 -3
- package/lib/components/Renderer/BaseRenderer.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.d.ts +6 -2
- package/lib/stores/questionnaireStore.js +13 -2
- 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/index.d.ts +1 -0
- package/lib/utils/index.js +1 -0
- package/lib/utils/index.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 +2 -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/components/Renderer/BaseRenderer.tsx +3 -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 +22 -2
- package/src/utils/calculatedExpression.ts +24 -10
- package/src/utils/enableWhenExpression.ts +22 -9
- package/src/utils/fhirpath.ts +62 -41
- package/src/utils/index.ts +1 -0
- package/src/utils/initialise.ts +5 -2
- package/src/utils/parseInputs.ts +1 -1
- package/src/utils/questionnaireResponseStoreUtils/updatableResponseItems.ts +62 -0
package/lib/utils/fhirpath.js
CHANGED
|
@@ -19,7 +19,7 @@ import fhirpath_r4_model from 'fhirpath/fhir-context/r4';
|
|
|
19
19
|
import { evaluateEnableWhenExpressions } from './enableWhenExpression';
|
|
20
20
|
import { evaluateCalculatedExpressions } from './calculatedExpression';
|
|
21
21
|
export function evaluateUpdatedExpressions(params) {
|
|
22
|
-
const { updatedResponse, enableWhenExpressions, calculatedExpressions, variablesFhirPath, existingFhirPathContext } = params;
|
|
22
|
+
const { updatedResponse, updatedResponseItemMap, enableWhenExpressions, calculatedExpressions, variablesFhirPath, existingFhirPathContext } = params;
|
|
23
23
|
const noExpressionsToBeUpdated = Object.keys(enableWhenExpressions).length === 0 &&
|
|
24
24
|
Object.keys(calculatedExpressions).length === 0;
|
|
25
25
|
if (noExpressionsToBeUpdated || !updatedResponse.item) {
|
|
@@ -30,7 +30,7 @@ export function evaluateUpdatedExpressions(params) {
|
|
|
30
30
|
updatedFhirPathContext: existingFhirPathContext
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
const updatedFhirPathContext = createFhirPathContext(updatedResponse,
|
|
33
|
+
const updatedFhirPathContext = createFhirPathContext(updatedResponse, updatedResponseItemMap, variablesFhirPath);
|
|
34
34
|
// Update enableWhenExpressions
|
|
35
35
|
const { enableWhenExpsIsUpdated, updatedEnableWhenExpressions } = evaluateEnableWhenExpressions(updatedFhirPathContext, enableWhenExpressions);
|
|
36
36
|
// Update calculatedExpressions
|
|
@@ -43,39 +43,35 @@ export function evaluateUpdatedExpressions(params) {
|
|
|
43
43
|
updatedFhirPathContext
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
|
-
export function createFhirPathContext(questionnaireResponse,
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
fhirPathContext = Object.assign(Object.assign({}, fhirPathContext), existingFhirPathContext);
|
|
46
|
+
export function createFhirPathContext(questionnaireResponse, questionnaireResponseItemMap, variablesFhirPath) {
|
|
47
|
+
if (!questionnaireResponse.item) {
|
|
48
|
+
return {};
|
|
50
49
|
}
|
|
51
50
|
// Add latest resource to fhirPathContext
|
|
52
|
-
fhirPathContext =
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
let fhirPathContext = { resource: questionnaireResponse };
|
|
52
|
+
// Evaluate resource-level variables
|
|
53
|
+
fhirPathContext = evaluateQuestionnaireLevelVariables(questionnaireResponse, variablesFhirPath, fhirPathContext);
|
|
54
|
+
// Add variables of items that exist in questionnaireResponseItemMap into fhirPathContext
|
|
55
|
+
for (const linkId in questionnaireResponseItemMap) {
|
|
56
|
+
// For non-repeat groups, the same linkId will have only one item
|
|
57
|
+
// For repeat groups, the same linkId will have multiple items
|
|
58
|
+
for (const qrItem of questionnaireResponseItemMap[linkId]) {
|
|
59
|
+
fhirPathContext = evaluateLinkIdVariables(qrItem, variablesFhirPath, fhirPathContext);
|
|
60
|
+
}
|
|
55
61
|
}
|
|
56
|
-
|
|
57
|
-
for (const
|
|
58
|
-
|
|
62
|
+
// Items don't exist in questionnaireResponseItemMap, but we still have to add them into the fhirPathContext as empty arrays
|
|
63
|
+
for (const linkId in variablesFhirPath) {
|
|
64
|
+
fhirPathContext = addEmptyLinkIdVariables(linkId, variablesFhirPath, fhirPathContext);
|
|
59
65
|
}
|
|
60
66
|
return fhirPathContext;
|
|
61
67
|
}
|
|
62
|
-
export function
|
|
63
|
-
const
|
|
64
|
-
if (
|
|
65
|
-
|
|
66
|
-
for (const childItem of items) {
|
|
67
|
-
evaluateFhirPathRecursive(childItem, variablesFhirPath, fhirPathContext);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
evaluateItemFhirPath(item, variablesFhirPath, fhirPathContext);
|
|
71
|
-
}
|
|
72
|
-
export function evaluateItemFhirPath(item, variablesFhirPath, fhirPathContext) {
|
|
73
|
-
const variablesOfItem = variablesFhirPath[item.linkId];
|
|
74
|
-
if (!variablesOfItem || variablesOfItem.length === 0) {
|
|
75
|
-
return;
|
|
68
|
+
export function evaluateLinkIdVariables(item, variablesFhirPath, fhirPathContext) {
|
|
69
|
+
const linkIdVariables = variablesFhirPath[item.linkId];
|
|
70
|
+
if (!linkIdVariables || linkIdVariables.length === 0) {
|
|
71
|
+
return fhirPathContext;
|
|
76
72
|
}
|
|
77
|
-
|
|
78
|
-
if (variable.expression) {
|
|
73
|
+
for (const variable of linkIdVariables) {
|
|
74
|
+
if (variable.expression && variable.name) {
|
|
79
75
|
try {
|
|
80
76
|
fhirPathContext[`${variable.name}`] = fhirpath.evaluate(item, {
|
|
81
77
|
base: 'QuestionnaireResponse.item',
|
|
@@ -86,14 +82,29 @@ export function evaluateItemFhirPath(item, variablesFhirPath, fhirPathContext) {
|
|
|
86
82
|
console.warn(e.message, `LinkId: ${item.linkId}\nExpression: ${variable.expression}`);
|
|
87
83
|
}
|
|
88
84
|
}
|
|
89
|
-
}
|
|
85
|
+
}
|
|
86
|
+
return fhirPathContext;
|
|
90
87
|
}
|
|
91
|
-
export function
|
|
88
|
+
export function addEmptyLinkIdVariables(linkId, variablesFhirPath, fhirPathContext) {
|
|
89
|
+
const linkIdVariables = variablesFhirPath[linkId];
|
|
90
|
+
if (!linkIdVariables || linkIdVariables.length === 0) {
|
|
91
|
+
return fhirPathContext;
|
|
92
|
+
}
|
|
93
|
+
for (const variable of linkIdVariables) {
|
|
94
|
+
if (variable.expression && variable.name) {
|
|
95
|
+
if (fhirPathContext[`${variable.name}`] === undefined) {
|
|
96
|
+
fhirPathContext[`${variable.name}`] = [];
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return fhirPathContext;
|
|
101
|
+
}
|
|
102
|
+
export function evaluateQuestionnaireLevelVariables(resource, variablesFhirPath, fhirPathContext) {
|
|
92
103
|
const questionnaireLevelVariables = variablesFhirPath['QuestionnaireLevel'];
|
|
93
104
|
if (!questionnaireLevelVariables || questionnaireLevelVariables.length === 0) {
|
|
94
|
-
return;
|
|
105
|
+
return fhirPathContext;
|
|
95
106
|
}
|
|
96
|
-
|
|
107
|
+
for (const variable of questionnaireLevelVariables) {
|
|
97
108
|
if (variable.expression) {
|
|
98
109
|
try {
|
|
99
110
|
fhirPathContext[`${variable.name}`] = fhirpath.evaluate(resource, {
|
|
@@ -105,6 +116,7 @@ export function evaluateResourceLevelFhirPath(resource, variablesFhirPath, fhirP
|
|
|
105
116
|
console.warn(e.message, `Questionnaire-level\nExpression: ${variable.expression}`);
|
|
106
117
|
}
|
|
107
118
|
}
|
|
108
|
-
}
|
|
119
|
+
}
|
|
120
|
+
return fhirPathContext;
|
|
109
121
|
}
|
|
110
122
|
//# sourceMappingURL=fhirpath.js.map
|
|
@@ -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/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { isSpecificItemControl } from './itemControl';
|
|
2
2
|
export { isRepeatItemAndNotCheckbox } from './qItem';
|
|
3
3
|
export { createEnableWhenLinkedQuestions, readInitialAnswers, setInitialAnswers } from './enableWhen';
|
|
4
|
+
export { initialiseQuestionnaireResponse } from './initialise';
|
package/lib/utils/index.js
CHANGED
|
@@ -17,4 +17,5 @@
|
|
|
17
17
|
export { isSpecificItemControl } from './itemControl';
|
|
18
18
|
export { isRepeatItemAndNotCheckbox } from './qItem';
|
|
19
19
|
export { createEnableWhenLinkedQuestions, readInitialAnswers, setInitialAnswers } from './enableWhen';
|
|
20
|
+
export { initialiseQuestionnaireResponse } from './initialise';
|
|
20
21
|
//# sourceMappingURL=index.js.map
|
package/lib/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EACL,+BAA+B,EAC/B,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EACL,+BAA+B,EAC/B,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC"}
|
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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aehrc/smart-forms-renderer",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.1",
|
|
4
4
|
"description": "FHIR Structured Data Captured (SDC) rendering engine for Smart Forms",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"fhirclient": "^2.5.2",
|
|
32
32
|
"fhirpath": "^3.7.1",
|
|
33
33
|
"html-react-parser": "4.2.10",
|
|
34
|
+
"js-base64": "^3.7.7",
|
|
34
35
|
"lodash.clonedeep": "^4.5.0",
|
|
35
36
|
"lodash.debounce": "^4.0.8",
|
|
36
37
|
"nanoid": "^5.0.1",
|
|
@@ -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
|
|
@@ -32,7 +32,7 @@ function BaseRenderer() {
|
|
|
32
32
|
const readOnly = useQuestionnaireStore.use.readOnly();
|
|
33
33
|
|
|
34
34
|
const updatableResponse = useQuestionnaireResponseStore.use.updatableResponse();
|
|
35
|
-
const
|
|
35
|
+
const validateQuestionnaire = useQuestionnaireResponseStore.use.validateQuestionnaire();
|
|
36
36
|
const updateResponse = useQuestionnaireResponseStore.use.updateResponse();
|
|
37
37
|
|
|
38
38
|
const qItemsIndexMap = useMemo(() => mapQItemsIndex(sourceQuestionnaire), [sourceQuestionnaire]);
|
|
@@ -43,7 +43,7 @@ function BaseRenderer() {
|
|
|
43
43
|
updateQrItemsInGroup(newTopLevelQRItem, null, updatedResponse, qItemsIndexMap);
|
|
44
44
|
|
|
45
45
|
updateExpressions(updatedResponse);
|
|
46
|
-
|
|
46
|
+
validateQuestionnaire(sourceQuestionnaire, updatedResponse);
|
|
47
47
|
updateResponse(updatedResponse);
|
|
48
48
|
}
|
|
49
49
|
|
|
@@ -53,7 +53,7 @@ function BaseRenderer() {
|
|
|
53
53
|
updateQrItemsInGroup(null, newTopLevelQRItems, updatedResponse, qItemsIndexMap);
|
|
54
54
|
|
|
55
55
|
updateExpressions(updatedResponse);
|
|
56
|
-
|
|
56
|
+
validateQuestionnaire(sourceQuestionnaire, updatedResponse);
|
|
57
57
|
updateResponse(updatedResponse);
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -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;
|