@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
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type { QuestionnaireItem
|
|
1
|
+
import type { QuestionnaireItem } from 'fhir/r4';
|
|
2
2
|
interface UseIntegerCalculatedExpression {
|
|
3
3
|
calcExpUpdated: boolean;
|
|
4
4
|
}
|
|
5
5
|
interface useIntegerCalculatedExpressionProps {
|
|
6
6
|
qItem: QuestionnaireItem;
|
|
7
7
|
inputValue: string;
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
onChangeByCalcExpressionInteger: (calcExpressionValue: number) => void;
|
|
9
|
+
onChangeByCalcExpressionNull: () => void;
|
|
10
10
|
}
|
|
11
11
|
declare function useIntegerCalculatedExpression(props: useIntegerCalculatedExpressionProps): UseIntegerCalculatedExpression;
|
|
12
12
|
export default useIntegerCalculatedExpression;
|
|
@@ -15,10 +15,9 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
import { useEffect, useState } from 'react';
|
|
18
|
-
import {
|
|
19
|
-
import { useQuestionnaireStore } from '../stores/questionnaireStore';
|
|
18
|
+
import { useQuestionnaireStore } from '../stores';
|
|
20
19
|
function useIntegerCalculatedExpression(props) {
|
|
21
|
-
const { qItem, inputValue,
|
|
20
|
+
const { qItem, inputValue, onChangeByCalcExpressionInteger, onChangeByCalcExpressionNull } = props;
|
|
22
21
|
const calculatedExpressions = useQuestionnaireStore.use.calculatedExpressions();
|
|
23
22
|
const [calcExpUpdated, setCalcExpUpdated] = useState(false);
|
|
24
23
|
useEffect(() => {
|
|
@@ -28,7 +27,8 @@ function useIntegerCalculatedExpression(props) {
|
|
|
28
27
|
return;
|
|
29
28
|
}
|
|
30
29
|
// only update if calculated value is different from current value
|
|
31
|
-
if (calcExpression.value !== inputValue &&
|
|
30
|
+
if (calcExpression.value !== inputValue &&
|
|
31
|
+
(typeof calcExpression.value === 'number' || calcExpression.value === null)) {
|
|
32
32
|
const calcExpressionValue = calcExpression.value;
|
|
33
33
|
if (calcExpressionValue !== parseInt(inputValue)) {
|
|
34
34
|
// update ui to show calculated value changes
|
|
@@ -36,9 +36,13 @@ function useIntegerCalculatedExpression(props) {
|
|
|
36
36
|
setTimeout(() => {
|
|
37
37
|
setCalcExpUpdated(false);
|
|
38
38
|
}, 500);
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
// calculatedExpression value is null
|
|
40
|
+
if (calcExpressionValue === null) {
|
|
41
|
+
onChangeByCalcExpressionNull();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// calculatedExpression value is a number
|
|
45
|
+
onChangeByCalcExpressionInteger(calcExpressionValue);
|
|
42
46
|
}
|
|
43
47
|
}
|
|
44
48
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIntegerCalculatedExpression.js","sourceRoot":"","sources":["../../src/hooks/useIntegerCalculatedExpression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useIntegerCalculatedExpression.js","sourceRoot":"","sources":["../../src/hooks/useIntegerCalculatedExpression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAalD,SAAS,8BAA8B,CACrC,KAA0C;IAE1C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,GACxF,KAAK,CAAC;IAER,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;IAEhF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5D,SAAS,CACP,GAAG,EAAE;;QACH,MAAM,cAAc,GAAG,MAAA,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,IAAI,CAC9D,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAC7B,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO;SACR;QAED,kEAAkE;QAClE,IACE,cAAc,CAAC,KAAK,KAAK,UAAU;YACnC,CAAC,OAAO,cAAc,CAAC,KAAK,KAAK,QAAQ,IAAI,cAAc,CAAC,KAAK,KAAK,IAAI,CAAC,EAC3E;YACA,MAAM,mBAAmB,GAAG,cAAc,CAAC,KAAK,CAAC;YAEjD,IAAI,mBAAmB,KAAK,QAAQ,CAAC,UAAU,CAAC,EAAE;gBAChD,6CAA6C;gBAC7C,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACxB,UAAU,CAAC,GAAG,EAAE;oBACd,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC,EAAE,GAAG,CAAC,CAAC;gBAER,qCAAqC;gBACrC,IAAI,mBAAmB,KAAK,IAAI,EAAE;oBAChC,4BAA4B,EAAE,CAAC;oBAC/B,OAAO;iBACR;gBAED,yCAAyC;gBACzC,+BAA+B,CAAC,mBAAmB,CAAC,CAAC;aACtD;SACF;IACH,CAAC;IACD,mEAAmE;IACnE,uDAAuD;IACvD,CAAC,qBAAqB,CAAC,CACxB,CAAC;IAEF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC5C,CAAC;AAED,eAAe,8BAA8B,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type { QuestionnaireItem
|
|
1
|
+
import type { QuestionnaireItem } from 'fhir/r4';
|
|
2
2
|
interface UseStringCalculatedExpression {
|
|
3
3
|
calcExpUpdated: boolean;
|
|
4
4
|
}
|
|
5
5
|
interface useStringCalculatedExpressionProps {
|
|
6
6
|
qItem: QuestionnaireItem;
|
|
7
7
|
inputValue: string;
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
onChangeByCalcExpressionString: (newValueString: string) => void;
|
|
9
|
+
onChangeByCalcExpressionNull: () => void;
|
|
10
10
|
}
|
|
11
11
|
declare function useStringCalculatedExpression(props: useStringCalculatedExpressionProps): UseStringCalculatedExpression;
|
|
12
12
|
export default useStringCalculatedExpression;
|
|
@@ -15,10 +15,9 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
import { useEffect, useState } from 'react';
|
|
18
|
-
import { createEmptyQrItem } from '../utils/qrItem';
|
|
19
18
|
import { useQuestionnaireStore } from '../stores';
|
|
20
19
|
function useStringCalculatedExpression(props) {
|
|
21
|
-
const { qItem, inputValue,
|
|
20
|
+
const { qItem, inputValue, onChangeByCalcExpressionString, onChangeByCalcExpressionNull } = props;
|
|
22
21
|
const calculatedExpressions = useQuestionnaireStore.use.calculatedExpressions();
|
|
23
22
|
const [calcExpUpdated, setCalcExpUpdated] = useState(false);
|
|
24
23
|
useEffect(() => {
|
|
@@ -29,18 +28,24 @@ function useStringCalculatedExpression(props) {
|
|
|
29
28
|
}
|
|
30
29
|
// only update if calculated value is different from current value
|
|
31
30
|
if (calcExpression.value !== inputValue &&
|
|
32
|
-
(typeof calcExpression.value === 'string' ||
|
|
31
|
+
(typeof calcExpression.value === 'string' ||
|
|
32
|
+
typeof calcExpression.value === 'number' ||
|
|
33
|
+
calcExpression.value === null)) {
|
|
33
34
|
// update ui to show calculated value changes
|
|
34
35
|
setCalcExpUpdated(true);
|
|
35
36
|
setTimeout(() => {
|
|
36
37
|
setCalcExpUpdated(false);
|
|
37
38
|
}, 500);
|
|
38
|
-
|
|
39
|
+
// calculatedExpression value is null
|
|
40
|
+
if (calcExpression.value === null) {
|
|
41
|
+
onChangeByCalcExpressionNull();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// calculatedExpression value is a string or number
|
|
45
|
+
const newInputValue = typeof calcExpression.value === 'string'
|
|
39
46
|
? calcExpression.value
|
|
40
47
|
: calcExpression.value.toString();
|
|
41
|
-
|
|
42
|
-
setInputValue(updatedInputValue);
|
|
43
|
-
onQrItemChange(Object.assign(Object.assign({}, createEmptyQrItem(qItem)), { answer: [{ valueString: updatedInputValue }] }));
|
|
48
|
+
onChangeByCalcExpressionString(newInputValue);
|
|
44
49
|
}
|
|
45
50
|
},
|
|
46
51
|
// Only trigger this effect if calculatedExpression of item changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStringCalculatedExpression.js","sourceRoot":"","sources":["../../src/hooks/useStringCalculatedExpression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useStringCalculatedExpression.js","sourceRoot":"","sources":["../../src/hooks/useStringCalculatedExpression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAalD,SAAS,6BAA6B,CACpC,KAAyC;IAEzC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,8BAA8B,EAAE,4BAA4B,EAAE,GAAG,KAAK,CAAC;IAElG,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;IAEhF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5D,SAAS,CACP,GAAG,EAAE;;QACH,MAAM,cAAc,GAAG,MAAA,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,IAAI,CAC9D,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAC7B,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO;SACR;QAED,kEAAkE;QAClE,IACE,cAAc,CAAC,KAAK,KAAK,UAAU;YACnC,CAAC,OAAO,cAAc,CAAC,KAAK,KAAK,QAAQ;gBACvC,OAAO,cAAc,CAAC,KAAK,KAAK,QAAQ;gBACxC,cAAc,CAAC,KAAK,KAAK,IAAI,CAAC,EAChC;YACA,6CAA6C;YAC7C,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACxB,UAAU,CAAC,GAAG,EAAE;gBACd,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC,EAAE,GAAG,CAAC,CAAC;YAER,qCAAqC;YACrC,IAAI,cAAc,CAAC,KAAK,KAAK,IAAI,EAAE;gBACjC,4BAA4B,EAAE,CAAC;gBAC/B,OAAO;aACR;YAED,mDAAmD;YACnD,MAAM,aAAa,GACjB,OAAO,cAAc,CAAC,KAAK,KAAK,QAAQ;gBACtC,CAAC,CAAC,cAAc,CAAC,KAAK;gBACtB,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAEtC,8BAA8B,CAAC,aAAa,CAAC,CAAC;SAC/C;IACH,CAAC;IACD,mEAAmE;IACnE,uDAAuD;IACvD,CAAC,qBAAqB,CAAC,CACxB,CAAC;IAEF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC5C,CAAC;AAED,eAAe,6BAA6B,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { OperationOutcome, Questionnaire, QuestionnaireResponse } from 'fhir/r4';
|
|
1
|
+
import type { OperationOutcome, Questionnaire, QuestionnaireResponse, QuestionnaireResponseItem } from 'fhir/r4';
|
|
2
2
|
import type { Diff } from 'deep-diff';
|
|
3
3
|
interface QuestionnaireResponseStoreType {
|
|
4
4
|
sourceResponse: QuestionnaireResponse;
|
|
5
5
|
updatableResponse: QuestionnaireResponse;
|
|
6
|
+
updatableResponseItems: Record<string, QuestionnaireResponseItem[]>;
|
|
6
7
|
formChangesHistory: (Diff<QuestionnaireResponse, QuestionnaireResponse>[] | null)[];
|
|
7
8
|
invalidItems: Record<string, OperationOutcome>;
|
|
8
9
|
responseIsValid: boolean;
|
|
@@ -19,6 +20,7 @@ export declare const useQuestionnaireResponseStore: import("zustand/vanilla").St
|
|
|
19
20
|
use: {
|
|
20
21
|
sourceResponse: () => QuestionnaireResponse;
|
|
21
22
|
updatableResponse: () => QuestionnaireResponse;
|
|
23
|
+
updatableResponseItems: () => Record<string, QuestionnaireResponseItem[]>;
|
|
22
24
|
formChangesHistory: () => (Diff<QuestionnaireResponse, QuestionnaireResponse>[] | null)[];
|
|
23
25
|
invalidItems: () => Record<string, OperationOutcome>;
|
|
24
26
|
responseIsValid: () => boolean;
|
|
@@ -21,9 +21,11 @@ import { diff } from 'deep-diff';
|
|
|
21
21
|
import { createSelectors } from './selector';
|
|
22
22
|
import { validateQuestionnaire } from '../utils/validateQuestionnaire';
|
|
23
23
|
import { questionnaireStore } from './questionnaireStore';
|
|
24
|
+
import { createQuestionnaireResponseItemMap } from '../utils/questionnaireResponseStoreUtils/updatableResponseItems';
|
|
24
25
|
export const questionnaireResponseStore = createStore()((set, get) => ({
|
|
25
26
|
sourceResponse: cloneDeep(emptyResponse),
|
|
26
27
|
updatableResponse: cloneDeep(emptyResponse),
|
|
28
|
+
updatableResponseItems: {},
|
|
27
29
|
formChangesHistory: [],
|
|
28
30
|
invalidItems: {},
|
|
29
31
|
responseIsValid: true,
|
|
@@ -46,7 +48,8 @@ export const questionnaireResponseStore = createStore()((set, get) => ({
|
|
|
46
48
|
buildSourceResponse: (questionnaireResponse) => {
|
|
47
49
|
set(() => ({
|
|
48
50
|
sourceResponse: questionnaireResponse,
|
|
49
|
-
updatableResponse: questionnaireResponse
|
|
51
|
+
updatableResponse: questionnaireResponse,
|
|
52
|
+
updatableResponseItems: createQuestionnaireResponseItemMap(questionnaireResponse)
|
|
50
53
|
}));
|
|
51
54
|
},
|
|
52
55
|
setUpdatableResponseAsPopulated: (populatedResponse) => {
|
|
@@ -54,6 +57,7 @@ export const questionnaireResponseStore = createStore()((set, get) => ({
|
|
|
54
57
|
const formChanges = (_a = diff(get().updatableResponse, populatedResponse)) !== null && _a !== void 0 ? _a : null;
|
|
55
58
|
set(() => ({
|
|
56
59
|
updatableResponse: populatedResponse,
|
|
60
|
+
updatableResponseItems: createQuestionnaireResponseItemMap(populatedResponse),
|
|
57
61
|
formChangesHistory: [...get().formChangesHistory, formChanges]
|
|
58
62
|
}));
|
|
59
63
|
},
|
|
@@ -62,21 +66,25 @@ export const questionnaireResponseStore = createStore()((set, get) => ({
|
|
|
62
66
|
const formChanges = (_a = diff(get().updatableResponse, updatedResponse)) !== null && _a !== void 0 ? _a : null;
|
|
63
67
|
set(() => ({
|
|
64
68
|
updatableResponse: updatedResponse,
|
|
69
|
+
updatableResponseItems: createQuestionnaireResponseItemMap(updatedResponse),
|
|
65
70
|
formChangesHistory: [...get().formChangesHistory, formChanges]
|
|
66
71
|
}));
|
|
67
72
|
},
|
|
68
73
|
setUpdatableResponseAsSaved: (savedResponse) => set(() => ({
|
|
69
74
|
sourceResponse: savedResponse,
|
|
70
75
|
updatableResponse: savedResponse,
|
|
76
|
+
updatableResponseItems: createQuestionnaireResponseItemMap(savedResponse),
|
|
71
77
|
formChangesHistory: []
|
|
72
78
|
})),
|
|
73
79
|
setUpdatableResponseAsEmpty: (clearedResponse) => set(() => ({
|
|
74
80
|
updatableResponse: clearedResponse,
|
|
81
|
+
updatableResponseItems: createQuestionnaireResponseItemMap(clearedResponse),
|
|
75
82
|
formChangesHistory: []
|
|
76
83
|
})),
|
|
77
84
|
destroySourceResponse: () => set(() => ({
|
|
78
85
|
sourceResponse: cloneDeep(emptyResponse),
|
|
79
86
|
updatableResponse: cloneDeep(emptyResponse),
|
|
87
|
+
updatableResponseItems: createQuestionnaireResponseItemMap(cloneDeep(emptyResponse)),
|
|
80
88
|
formChangesHistory: []
|
|
81
89
|
}))
|
|
82
90
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"questionnaireResponseStore.js","sourceRoot":"","sources":["../../src/stores/questionnaireResponseStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"questionnaireResponseStore.js","sourceRoot":"","sources":["../../src/stores/questionnaireResponseStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ interface QuestionnaireStoreType {
|
|
|
22
22
|
processedValueSetUrls: Record<string, string>;
|
|
23
23
|
cachedValueSetCodings: Record<string, Coding[]>;
|
|
24
24
|
fhirPathContext: Record<string, any>;
|
|
25
|
+
populatedContext: Record<string, any>;
|
|
25
26
|
focusedLinkId: string;
|
|
26
27
|
readOnly: boolean;
|
|
27
28
|
buildSourceQuestionnaire: (questionnaire: Questionnaire, questionnaireResponse?: QuestionnaireResponse, additionalVariables?: Record<string, object>, terminologyServerUrl?: string, readOnly?: boolean) => Promise<void>;
|
|
@@ -33,8 +34,9 @@ interface QuestionnaireStoreType {
|
|
|
33
34
|
toggleEnableWhenActivation: (isActivated: boolean) => void;
|
|
34
35
|
updateExpressions: (updatedResponse: QuestionnaireResponse) => void;
|
|
35
36
|
addCodingToCache: (valueSetUrl: string, codings: Coding[]) => void;
|
|
36
|
-
updatePopulatedProperties: (populatedResponse: QuestionnaireResponse, persistTabIndex?: boolean) => QuestionnaireResponse;
|
|
37
|
+
updatePopulatedProperties: (populatedResponse: QuestionnaireResponse, populatedContext?: Record<string, any>, persistTabIndex?: boolean) => QuestionnaireResponse;
|
|
37
38
|
onFocusLinkId: (linkId: string) => void;
|
|
39
|
+
setPopulatedContext: (newPopulatedContext: Record<string, any>) => void;
|
|
38
40
|
}
|
|
39
41
|
export declare const questionnaireStore: import("zustand/vanilla").StoreApi<QuestionnaireStoreType>;
|
|
40
42
|
export declare const useQuestionnaireStore: import("zustand/vanilla").StoreApi<QuestionnaireStoreType> & {
|
|
@@ -55,6 +57,7 @@ export declare const useQuestionnaireStore: import("zustand/vanilla").StoreApi<Q
|
|
|
55
57
|
processedValueSetUrls: () => Record<string, string>;
|
|
56
58
|
cachedValueSetCodings: () => Record<string, Coding[]>;
|
|
57
59
|
fhirPathContext: () => Record<string, any>;
|
|
60
|
+
populatedContext: () => Record<string, any>;
|
|
58
61
|
focusedLinkId: () => string;
|
|
59
62
|
readOnly: () => boolean;
|
|
60
63
|
buildSourceQuestionnaire: () => (questionnaire: Questionnaire, questionnaireResponse?: QuestionnaireResponse, additionalVariables?: Record<string, object>, terminologyServerUrl?: string, readOnly?: boolean) => Promise<void>;
|
|
@@ -66,8 +69,9 @@ export declare const useQuestionnaireStore: import("zustand/vanilla").StoreApi<Q
|
|
|
66
69
|
toggleEnableWhenActivation: () => (isActivated: boolean) => void;
|
|
67
70
|
updateExpressions: () => (updatedResponse: QuestionnaireResponse) => void;
|
|
68
71
|
addCodingToCache: () => (valueSetUrl: string, codings: Coding[]) => void;
|
|
69
|
-
updatePopulatedProperties: () => (populatedResponse: QuestionnaireResponse, persistTabIndex?: boolean) => QuestionnaireResponse;
|
|
72
|
+
updatePopulatedProperties: () => (populatedResponse: QuestionnaireResponse, populatedContext?: Record<string, any>, persistTabIndex?: boolean) => QuestionnaireResponse;
|
|
70
73
|
onFocusLinkId: () => (linkId: string) => void;
|
|
74
|
+
setPopulatedContext: () => (newPopulatedContext: Record<string, any>) => void;
|
|
71
75
|
};
|
|
72
76
|
};
|
|
73
77
|
export {};
|
|
@@ -35,6 +35,7 @@ import { terminologyServerStore } from './terminologyServerStore';
|
|
|
35
35
|
import { createSelectors } from './selector';
|
|
36
36
|
import { mutateRepeatEnableWhenExpressionInstances } from '../utils/enableWhenExpression';
|
|
37
37
|
import { questionnaireResponseStore } from './questionnaireResponseStore';
|
|
38
|
+
import { createQuestionnaireResponseItemMap } from '../utils/questionnaireResponseStoreUtils/updatableResponseItems';
|
|
38
39
|
export const questionnaireStore = createStore()((set, get) => ({
|
|
39
40
|
sourceQuestionnaire: cloneDeep(emptyQuestionnaire),
|
|
40
41
|
itemTypes: {},
|
|
@@ -52,6 +53,7 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
52
53
|
processedValueSetUrls: {},
|
|
53
54
|
cachedValueSetCodings: {},
|
|
54
55
|
fhirPathContext: {},
|
|
56
|
+
populatedContext: {},
|
|
55
57
|
focusedLinkId: '',
|
|
56
58
|
readOnly: false,
|
|
57
59
|
buildSourceQuestionnaire: (questionnaire, questionnaireResponse = cloneDeep(emptyResponse), additionalVariables = {}, terminologyServerUrl = terminologyServerStore.getState().url, readOnly = false) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -124,6 +126,7 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
124
126
|
const updatedEnableWhenItems = mutateRepeatEnableWhenItemInstances(Object.assign({}, enableWhenItems), parentRepeatGroupLinkId, parentRepeatGroupIndex, actionType);
|
|
125
127
|
const { updatedEnableWhenExpressions, isUpdated } = mutateRepeatEnableWhenExpressionInstances({
|
|
126
128
|
questionnaireResponse: questionnaireResponseStore.getState().updatableResponse,
|
|
129
|
+
questionnaireResponseItemMap: questionnaireResponseStore.getState().updatableResponseItems,
|
|
127
130
|
variablesFhirPath: get().variables.fhirPathVariables,
|
|
128
131
|
existingFhirPathContext: get().fhirPathContext,
|
|
129
132
|
enableWhenExpressions: enableWhenExpressions,
|
|
@@ -140,8 +143,10 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
140
143
|
},
|
|
141
144
|
toggleEnableWhenActivation: (isActivated) => set(() => ({ enableWhenIsActivated: isActivated })),
|
|
142
145
|
updateExpressions: (updatedResponse) => {
|
|
146
|
+
const updatedResponseItemMap = createQuestionnaireResponseItemMap(updatedResponse);
|
|
143
147
|
const { isUpdated, updatedEnableWhenExpressions, updatedCalculatedExpressions, updatedFhirPathContext } = evaluateUpdatedExpressions({
|
|
144
148
|
updatedResponse,
|
|
149
|
+
updatedResponseItemMap,
|
|
145
150
|
enableWhenExpressions: get().enableWhenExpressions,
|
|
146
151
|
calculatedExpressions: get().calculatedExpressions,
|
|
147
152
|
variablesFhirPath: get().variables.fhirPathVariables,
|
|
@@ -162,9 +167,11 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
162
167
|
addCodingToCache: (valueSetUrl, codings) => set(() => ({
|
|
163
168
|
cachedValueSetCodings: Object.assign(Object.assign({}, get().cachedValueSetCodings), { [valueSetUrl]: codings })
|
|
164
169
|
})),
|
|
165
|
-
updatePopulatedProperties: (populatedResponse, persistTabIndex) => {
|
|
170
|
+
updatePopulatedProperties: (populatedResponse, populatedContext, persistTabIndex) => {
|
|
171
|
+
const initialResponseItemMap = createQuestionnaireResponseItemMap(populatedResponse);
|
|
166
172
|
const evaluateInitialCalculatedExpressionsResult = evaluateInitialCalculatedExpressions({
|
|
167
173
|
initialResponse: populatedResponse,
|
|
174
|
+
initialResponseItemMap: initialResponseItemMap,
|
|
168
175
|
calculatedExpressions: get().calculatedExpressions,
|
|
169
176
|
variablesFhirPath: get().variables.fhirPathVariables,
|
|
170
177
|
existingFhirPathContext: get().fhirPathContext
|
|
@@ -188,12 +195,16 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
188
195
|
enableWhenExpressions: initialEnableWhenExpressions,
|
|
189
196
|
calculatedExpressions: initialCalculatedExpressions,
|
|
190
197
|
currentTabIndex: persistTabIndex ? get().currentTabIndex : firstVisibleTab,
|
|
191
|
-
fhirPathContext: updatedFhirPathContext
|
|
198
|
+
fhirPathContext: updatedFhirPathContext,
|
|
199
|
+
populatedContext: populatedContext !== null && populatedContext !== void 0 ? populatedContext : get().populatedContext
|
|
192
200
|
}));
|
|
193
201
|
return updatedResponse;
|
|
194
202
|
},
|
|
195
203
|
onFocusLinkId: (linkId) => set(() => ({
|
|
196
204
|
focusedLinkId: linkId
|
|
205
|
+
})),
|
|
206
|
+
setPopulatedContext: (newPopulatedContext) => set(() => ({
|
|
207
|
+
populatedContext: newPopulatedContext
|
|
197
208
|
}))
|
|
198
209
|
}));
|
|
199
210
|
export const useQuestionnaireStore = createSelectors(questionnaireStore);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"questionnaireStore.js","sourceRoot":"","sources":["../../src/stores/questionnaireStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAa9C,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EACL,oCAAoC,EACpC,oCAAoC,EACrC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0DAA0D,CAAC;AACpG,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,yCAAyC,EAAE,MAAM,+BAA+B,CAAC;AAC1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"questionnaireStore.js","sourceRoot":"","sources":["../../src/stores/questionnaireStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { CalculatedExpression } from '../interfaces/calculatedExpression.interface';
|
|
2
|
-
import type { Expression, Questionnaire, QuestionnaireResponse } from 'fhir/r4';
|
|
2
|
+
import type { Expression, Questionnaire, QuestionnaireResponse, QuestionnaireResponseItem } from 'fhir/r4';
|
|
3
3
|
interface EvaluateInitialCalculatedExpressionsParams {
|
|
4
4
|
initialResponse: QuestionnaireResponse;
|
|
5
|
+
initialResponseItemMap: Record<string, QuestionnaireResponseItem[]>;
|
|
5
6
|
calculatedExpressions: Record<string, CalculatedExpression[]>;
|
|
6
7
|
variablesFhirPath: Record<string, Expression[]>;
|
|
7
8
|
existingFhirPathContext: Record<string, any>;
|
|
@@ -24,7 +24,7 @@ import { updateQrItemsInGroup } from './qrItem';
|
|
|
24
24
|
import cloneDeep from 'lodash.clonedeep';
|
|
25
25
|
import dayjs from 'dayjs';
|
|
26
26
|
export function evaluateInitialCalculatedExpressions(params) {
|
|
27
|
-
const { initialResponse, calculatedExpressions, variablesFhirPath, existingFhirPathContext } = params;
|
|
27
|
+
const { initialResponse, initialResponseItemMap, calculatedExpressions, variablesFhirPath, existingFhirPathContext } = params;
|
|
28
28
|
// Return early if initialResponse is empty or there are no calculated expressions to evaluate
|
|
29
29
|
if (_isEqual(initialResponse, cloneDeep(emptyResponse)) ||
|
|
30
30
|
Object.keys(calculatedExpressions).length === 0) {
|
|
@@ -34,13 +34,14 @@ export function evaluateInitialCalculatedExpressions(params) {
|
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
36
|
const initialCalculatedExpressions = Object.assign({}, calculatedExpressions);
|
|
37
|
-
const updatedFhirPathContext = createFhirPathContext(initialResponse,
|
|
37
|
+
const updatedFhirPathContext = createFhirPathContext(initialResponse, initialResponseItemMap, variablesFhirPath);
|
|
38
38
|
for (const linkId in initialCalculatedExpressions) {
|
|
39
39
|
const itemCalcExpressions = calculatedExpressions[linkId];
|
|
40
40
|
for (const calcExpression of itemCalcExpressions) {
|
|
41
41
|
try {
|
|
42
42
|
const result = fhirpath.evaluate({}, calcExpression.expression, updatedFhirPathContext, fhirpath_r4_model);
|
|
43
|
-
if
|
|
43
|
+
// Only update calculatedExpressions if length of result array > 0
|
|
44
|
+
if (result.length > 0 && !_isEqual(calcExpression.value, result[0])) {
|
|
44
45
|
calcExpression.value = result[0];
|
|
45
46
|
}
|
|
46
47
|
}
|
|
@@ -63,11 +64,16 @@ export function evaluateCalculatedExpressions(fhirPathContext, calculatedExpress
|
|
|
63
64
|
for (const calcExpression of itemCalcExpressions) {
|
|
64
65
|
try {
|
|
65
66
|
const result = fhirpath.evaluate({}, calcExpression.expression, fhirPathContext, fhirpath_r4_model);
|
|
66
|
-
if
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
// Update calculatedExpressions if length of result array > 0
|
|
68
|
+
// Only update when current calcExpression value is different from the result, otherwise it will result in an infinite loop as per issue #733
|
|
69
|
+
if (result.length > 0 && !_isEqual(calcExpression.value, result[0])) {
|
|
70
|
+
isUpdated = true;
|
|
71
|
+
calcExpression.value = result[0];
|
|
72
|
+
}
|
|
73
|
+
// Update calculatedExpression value to null if no result is returned
|
|
74
|
+
if (result.length === 0 && calcExpression.value !== null) {
|
|
75
|
+
isUpdated = true;
|
|
76
|
+
calcExpression.value = null;
|
|
71
77
|
}
|
|
72
78
|
}
|
|
73
79
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculatedExpression.js","sourceRoot":"","sources":["../../src/utils/calculatedExpression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AAUzD,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"calculatedExpression.js","sourceRoot":"","sources":["../../src/utils/calculatedExpression.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { Expression, QuestionnaireResponse } from 'fhir/r4';
|
|
1
|
+
import type { Expression, QuestionnaireResponse, QuestionnaireResponseItem } from 'fhir/r4';
|
|
2
2
|
import type { EnableWhenExpressions, EnableWhenRepeatExpression } from '../interfaces';
|
|
3
3
|
interface EvaluateInitialEnableWhenExpressionsParams {
|
|
4
4
|
initialResponse: QuestionnaireResponse;
|
|
5
|
+
initialResponseItemMap: Record<string, QuestionnaireResponseItem[]>;
|
|
5
6
|
enableWhenExpressions: EnableWhenExpressions;
|
|
6
7
|
variablesFhirPath: Record<string, Expression[]>;
|
|
7
|
-
existingFhirPathContext: Record<string, any>;
|
|
8
8
|
}
|
|
9
9
|
export declare function evaluateInitialEnableWhenExpressions(params: EvaluateInitialEnableWhenExpressionsParams): {
|
|
10
10
|
initialEnableWhenExpressions: EnableWhenExpressions;
|
|
@@ -20,6 +20,7 @@ export declare function evaluateEnableWhenExpressions(fhirPathContext: Record<st
|
|
|
20
20
|
};
|
|
21
21
|
interface MutateRepeatEnableWhenExpressionInstancesParams {
|
|
22
22
|
questionnaireResponse: QuestionnaireResponse;
|
|
23
|
+
questionnaireResponseItemMap: Record<string, QuestionnaireResponseItem[]>;
|
|
23
24
|
variablesFhirPath: Record<string, Expression[]>;
|
|
24
25
|
existingFhirPathContext: Record<string, any>;
|
|
25
26
|
enableWhenExpressions: EnableWhenExpressions;
|
|
@@ -18,9 +18,9 @@ import { createFhirPathContext } from './fhirpath';
|
|
|
18
18
|
import fhirpath from 'fhirpath';
|
|
19
19
|
import fhirpath_r4_model from 'fhirpath/fhir-context/r4';
|
|
20
20
|
export function evaluateInitialEnableWhenExpressions(params) {
|
|
21
|
-
const { initialResponse, enableWhenExpressions, variablesFhirPath
|
|
21
|
+
const { initialResponse, initialResponseItemMap, enableWhenExpressions, variablesFhirPath } = params;
|
|
22
22
|
const initialEnableWhenExpressions = Object.assign({}, enableWhenExpressions);
|
|
23
|
-
const updatedFhirPathContext = createFhirPathContext(initialResponse,
|
|
23
|
+
const updatedFhirPathContext = createFhirPathContext(initialResponse, initialResponseItemMap, variablesFhirPath);
|
|
24
24
|
const initialEnableWhenSingleExpressions = evaluateEnableWhenSingleExpressions(initialEnableWhenExpressions.singleExpressions, updatedFhirPathContext);
|
|
25
25
|
const initialEnableWhenRepeatExpressions = evaluateEnableWhenRepeatExpressions(initialEnableWhenExpressions.repeatExpressions, updatedFhirPathContext);
|
|
26
26
|
return {
|
|
@@ -39,11 +39,16 @@ function evaluateEnableWhenSingleExpressions(enableWhenSingleExpressions, update
|
|
|
39
39
|
try {
|
|
40
40
|
const result = fhirpath.evaluate('', expression, updatedFhirPathContext, fhirpath_r4_model);
|
|
41
41
|
// Update enableWhenExpressions if length of result array > 0
|
|
42
|
-
// Only update when current isEnabled value is different from the result, otherwise it will result in
|
|
42
|
+
// Only update when current isEnabled value is different from the result, otherwise it will result in an infinite loop as per issue #733
|
|
43
43
|
if (result.length > 0 && initialValue !== result[0] && typeof result[0] === 'boolean') {
|
|
44
44
|
enableWhenSingleExpressions[linkId].isEnabled = result[0];
|
|
45
45
|
isUpdated = true;
|
|
46
46
|
}
|
|
47
|
+
// Update isEnabled value to false if no result is returned
|
|
48
|
+
if (result.length === 0 && initialValue !== false) {
|
|
49
|
+
enableWhenSingleExpressions[linkId].isEnabled = false;
|
|
50
|
+
isUpdated = true;
|
|
51
|
+
}
|
|
47
52
|
// handle intersect edge case - evaluate() returns empty array if result is false
|
|
48
53
|
if (enableWhenSingleExpressions[linkId].expression.includes('intersect') &&
|
|
49
54
|
result.length === 0 &&
|
|
@@ -102,6 +107,11 @@ export function evaluateEnableWhenRepeatExpressionInstance(linkId, fhirPathConte
|
|
|
102
107
|
isEnabled = result[0];
|
|
103
108
|
isUpdated = true;
|
|
104
109
|
}
|
|
110
|
+
// Update isEnabled value to false if no result is returned
|
|
111
|
+
if (result.length === 0 && initialValue !== false) {
|
|
112
|
+
isEnabled = false;
|
|
113
|
+
isUpdated = true;
|
|
114
|
+
}
|
|
105
115
|
// handle intersect edge case - evaluate() returns empty array if result is false
|
|
106
116
|
if (expression.includes('intersect') && result.length === 0 && initialValue !== result[0]) {
|
|
107
117
|
isEnabled = false;
|
|
@@ -127,9 +137,9 @@ export function evaluateEnableWhenExpressions(fhirPathContext, enableWhenExpress
|
|
|
127
137
|
};
|
|
128
138
|
}
|
|
129
139
|
export function mutateRepeatEnableWhenExpressionInstances(params) {
|
|
130
|
-
const { questionnaireResponse,
|
|
140
|
+
const { questionnaireResponse, questionnaireResponseItemMap, variablesFhirPath, enableWhenExpressions, parentRepeatGroupLinkId, parentRepeatGroupIndex, actionType } = params;
|
|
131
141
|
const { repeatExpressions } = enableWhenExpressions;
|
|
132
|
-
const updatedFhirPathContext = createFhirPathContext(questionnaireResponse,
|
|
142
|
+
const updatedFhirPathContext = createFhirPathContext(questionnaireResponse, questionnaireResponseItemMap, variablesFhirPath);
|
|
133
143
|
let isUpdated = false;
|
|
134
144
|
for (const linkId in repeatExpressions) {
|
|
135
145
|
if (repeatExpressions[linkId].parentLinkId !== parentRepeatGroupLinkId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enableWhenExpression.js","sourceRoot":"","sources":["../../src/utils/enableWhenExpression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AAczD,MAAM,UAAU,oCAAoC,CAClD,MAAkD;IAKlD,MAAM,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"enableWhenExpression.js","sourceRoot":"","sources":["../../src/utils/enableWhenExpression.ts"],"names":[],"mappings":"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"}
|
package/lib/utils/fhirpath.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { CalculatedExpression } from '../interfaces/calculatedExpression.in
|
|
|
3
3
|
import type { EnableWhenExpressions } from '../interfaces';
|
|
4
4
|
interface EvaluateUpdatedExpressionsParams {
|
|
5
5
|
updatedResponse: QuestionnaireResponse;
|
|
6
|
+
updatedResponseItemMap: Record<string, QuestionnaireResponseItem[]>;
|
|
6
7
|
calculatedExpressions: Record<string, CalculatedExpression[]>;
|
|
7
8
|
enableWhenExpressions: EnableWhenExpressions;
|
|
8
9
|
variablesFhirPath: Record<string, Expression[]>;
|
|
@@ -14,8 +15,8 @@ export declare function evaluateUpdatedExpressions(params: EvaluateUpdatedExpres
|
|
|
14
15
|
updatedCalculatedExpressions: Record<string, CalculatedExpression[]>;
|
|
15
16
|
updatedFhirPathContext: Record<string, any>;
|
|
16
17
|
};
|
|
17
|
-
export declare function createFhirPathContext(questionnaireResponse: QuestionnaireResponse,
|
|
18
|
-
export declare function
|
|
19
|
-
export declare function
|
|
20
|
-
export declare function
|
|
18
|
+
export declare function createFhirPathContext(questionnaireResponse: QuestionnaireResponse, questionnaireResponseItemMap: Record<string, QuestionnaireResponseItem[]>, variablesFhirPath: Record<string, Expression[]>): Record<string, any>;
|
|
19
|
+
export declare function evaluateLinkIdVariables(item: QuestionnaireResponseItem, variablesFhirPath: Record<string, Expression[]>, fhirPathContext: Record<string, any>): Record<string, any>;
|
|
20
|
+
export declare function addEmptyLinkIdVariables(linkId: string, variablesFhirPath: Record<string, Expression[]>, fhirPathContext: Record<string, any>): Record<string, any>;
|
|
21
|
+
export declare function evaluateQuestionnaireLevelVariables(resource: QuestionnaireResponse, variablesFhirPath: Record<string, Expression[]>, fhirPathContext: Record<string, any>): Record<string, any>;
|
|
21
22
|
export {};
|