@aehrc/smart-forms-renderer 0.35.8 → 0.36.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/README.md +1 -1
- package/lib/components/FormComponents/DateTimeItem/DateTimeField.d.ts +12 -0
- package/lib/components/FormComponents/DateTimeItem/DateTimeField.js +34 -0
- package/lib/components/FormComponents/DateTimeItem/DateTimeField.js.map +1 -0
- package/lib/components/FormComponents/DateTimeItem/DateTimeItem.d.ts +9 -0
- package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js +60 -0
- package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js.map +1 -0
- package/lib/hooks/useCodingCalculatedExpression.js +11 -0
- package/lib/hooks/useCodingCalculatedExpression.js.map +1 -1
- package/lib/hooks/useDisplayCalculatedExpression.d.ts +3 -0
- package/lib/hooks/useDisplayCalculatedExpression.js +40 -0
- package/lib/hooks/useDisplayCalculatedExpression.js.map +1 -0
- package/lib/hooks/useInitialiseRenderer.d.ts +4 -0
- package/lib/hooks/useInitialiseRenderer.js +85 -0
- package/lib/hooks/useInitialiseRenderer.js.map +1 -0
- package/lib/hooks/useQueryClient.d.ts +3 -0
- package/lib/hooks/useQueryClient.js +29 -0
- package/lib/hooks/useQueryClient.js.map +1 -0
- package/lib/utils/buildForm.d.ts +8 -0
- package/lib/utils/buildForm.js +26 -0
- package/lib/utils/buildForm.js.map +1 -0
- package/lib/utils/calculatedExpression.js +15 -43
- package/lib/utils/calculatedExpression.js.map +1 -1
- package/lib/utils/fhirpath.js +0 -4
- package/lib/utils/fhirpath.js.map +1 -1
- package/lib/utils/manageForm.d.ts +7 -1
- package/lib/utils/manageForm.js +9 -0
- package/lib/utils/manageForm.js.map +1 -1
- package/lib/utils/questionnaireStoreUtils/resolveValueSets.js +8 -3
- package/lib/utils/questionnaireStoreUtils/resolveValueSets.js.map +1 -1
- package/lib/utils/removeEmptyAnswers.js +19 -6
- package/lib/utils/removeEmptyAnswers.js.map +1 -1
- package/lib/utils/repopulateIntoResponse.d.ts +1 -3
- package/lib/utils/repopulateIntoResponse.js +2 -31
- package/lib/utils/repopulateIntoResponse.js.map +1 -1
- package/lib/utils/tabs.js +6 -4
- package/lib/utils/tabs.js.map +1 -1
- package/lib/utils/updateQr.d.ts +9 -0
- package/lib/utils/updateQr.js +55 -0
- package/lib/utils/updateQr.js.map +1 -0
- package/lib/utils/valueSet.js +4 -2
- package/lib/utils/valueSet.js.map +1 -1
- package/package.json +5 -4
- package/src/hooks/useCodingCalculatedExpression.ts +14 -1
- package/src/stories/assets/questionnaires/AuCoreTestingJson/AuCoreAllergyIntolerance.json +209 -0
- package/src/stories/assets/questionnaires/AuCoreTestingJson/AuCoreCondition.json +220 -0
- package/src/stories/assets/questionnaires/AuCoreTestingJson/AuCoreEncounter.json +220 -0
- package/src/stories/assets/questionnaires/QAuCoreTesting.ts +455 -0
- package/src/stories/assets/questionnaires/QPrePopTester.ts +266 -71
- package/src/stories/testing/AuCoreTester.stories.tsx +57 -0
- package/src/utils/calculatedExpression.ts +25 -59
- package/src/utils/fhirpath.ts +0 -5
- package/src/utils/manageForm.ts +11 -1
- package/src/utils/questionnaireStoreUtils/resolveValueSets.ts +10 -6
- package/src/utils/removeEmptyAnswers.ts +22 -6
- package/src/utils/repopulateIntoResponse.ts +5 -58
- package/src/utils/tabs.ts +6 -4
- package/src/utils/updateQr.ts +88 -0
- package/src/utils/valueSet.ts +4 -2
- package/stats.html +4842 -0
- package/stats1.html +4842 -0
- package/stats3.html +4842 -0
- package/lib/utils/answerExpression.d.ts +0 -5
- package/lib/utils/answerExpression.js +0 -52
- package/lib/utils/answerExpression.js.map +0 -1
- package/lib/utils/dynamicValueSet.d.ts +0 -5
- package/lib/utils/dynamicValueSet.js +0 -96
- package/lib/utils/dynamicValueSet.js.map +0 -1
- package/lib/utils/fhirpathAsyncUtils/fhirpath-async.d.ts +0 -14
- package/lib/utils/fhirpathAsyncUtils/fhirpath-async.js +0 -431
- package/lib/utils/fhirpathAsyncUtils/fhirpath-async.js.map +0 -1
- package/lib/utils/fhirpathAsyncUtils/outcome-utils.d.ts +0 -3
- package/lib/utils/fhirpathAsyncUtils/outcome-utils.js +0 -41
- package/lib/utils/fhirpathAsyncUtils/outcome-utils.js.map +0 -1
- package/lib/utils/fhirpathAsyncUtils/test-questionnaire.d.ts +0 -1
- package/lib/utils/fhirpathAsyncUtils/test-questionnaire.js +0 -379
- package/lib/utils/fhirpathAsyncUtils/test-questionnaire.js.map +0 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
A React-based library that contains the Questionnaire renderer used in the Smart Forms app.
|
|
4
4
|
It acts as a reference implementation for the [SDC Form Filler](https://hl7.org/fhir/uv/sdc/CapabilityStatement-sdc-form-filler.html).
|
|
5
5
|
|
|
6
|
-
<h4><a href="https://smartforms.csiro.au/docs/
|
|
6
|
+
<h4><a href="https://smartforms.csiro.au/docs/dev">Check out the documentation 📚</a></h4>
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
---
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { PropsWithIsTabledAttribute } from '../../../interfaces/renderProps.interface';
|
|
3
|
+
import type { Dayjs } from 'dayjs';
|
|
4
|
+
interface DateTimeFieldProps extends PropsWithIsTabledAttribute {
|
|
5
|
+
value: Dayjs | null;
|
|
6
|
+
displayPrompt: string;
|
|
7
|
+
entryFormat: string;
|
|
8
|
+
readOnly: boolean;
|
|
9
|
+
onDateTimeChange: (newValue: Dayjs | null) => unknown;
|
|
10
|
+
}
|
|
11
|
+
declare function DateTimeField(props: DateTimeFieldProps): React.JSX.Element;
|
|
12
|
+
export default DateTimeField;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import React from 'react';
|
|
18
|
+
import { DateTimePicker as MuiDateTimePicker, LocalizationProvider } from '@mui/x-date-pickers';
|
|
19
|
+
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
|
20
|
+
import Box from '@mui/material/Box';
|
|
21
|
+
import { TEXT_FIELD_WIDTH } from '../Textfield.styles';
|
|
22
|
+
function DateTimeField(props) {
|
|
23
|
+
const { value, displayPrompt, entryFormat, readOnly, isTabled, onDateTimeChange } = props;
|
|
24
|
+
return (React.createElement(LocalizationProvider, { dateAdapter: AdapterDayjs },
|
|
25
|
+
React.createElement(Box, { "data-test": "q-item-date-time-field" },
|
|
26
|
+
React.createElement(MuiDateTimePicker, { format: entryFormat !== '' ? entryFormat : 'DD/MM/YYYY hh:mm A', value: value, disabled: readOnly, label: displayPrompt, sx: { maxWidth: !isTabled ? TEXT_FIELD_WIDTH : 3000, minWidth: 160 }, onChange: onDateTimeChange, slotProps: {
|
|
27
|
+
textField: {
|
|
28
|
+
size: 'small',
|
|
29
|
+
fullWidth: true
|
|
30
|
+
}
|
|
31
|
+
} }))));
|
|
32
|
+
}
|
|
33
|
+
export default DateTimeField;
|
|
34
|
+
//# sourceMappingURL=DateTimeField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateTimeField.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/DateTimeItem/DateTimeField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,cAAc,IAAI,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,GAAG,MAAM,mBAAmB,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAUvD,SAAS,aAAa,CAAC,KAAyB;IAC9C,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IAE1F,OAAO,CACL,oBAAC,oBAAoB,IAAC,WAAW,EAAE,YAAY;QAC7C,oBAAC,GAAG,iBAAW,wBAAwB;YACrC,oBAAC,iBAAiB,IAChB,MAAM,EAAE,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAoB,EAC/D,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,aAAa,EACpB,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EACpE,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE;oBACT,SAAS,EAAE;wBACT,IAAI,EAAE,OAAO;wBACb,SAAS,EAAE,IAAI;qBAChB;iBACF,GACD,CACE,CACe,CACxB,CAAC;AACJ,CAAC;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { PropsWithIsRepeatedAttribute, PropsWithIsTabledAttribute, PropsWithParentIsReadOnlyAttribute, PropsWithQrItemChangeHandler } from '../../../interfaces/renderProps.interface';
|
|
3
|
+
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
4
|
+
interface DateTimeItemProps extends PropsWithQrItemChangeHandler, PropsWithIsRepeatedAttribute, PropsWithIsTabledAttribute, PropsWithParentIsReadOnlyAttribute {
|
|
5
|
+
qItem: QuestionnaireItem;
|
|
6
|
+
qrItem: QuestionnaireResponseItem | null;
|
|
7
|
+
}
|
|
8
|
+
declare function DateTimeItem(props: DateTimeItemProps): React.JSX.Element;
|
|
9
|
+
export default DateTimeItem;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import React from 'react';
|
|
18
|
+
import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
|
|
19
|
+
import { createEmptyQrItem } from '../../../utils/qrItem';
|
|
20
|
+
import { FullWidthFormComponentBox } from '../../Box.styles';
|
|
21
|
+
import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
|
|
22
|
+
import DateTimeField from './DateTimeField';
|
|
23
|
+
import dayjs from 'dayjs';
|
|
24
|
+
import useReadOnly from '../../../hooks/useReadOnly';
|
|
25
|
+
import { useQuestionnaireStore } from '../../../stores';
|
|
26
|
+
function DateTimeItem(props) {
|
|
27
|
+
const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
|
|
28
|
+
const onFocusLinkId = useQuestionnaireStore.use.onFocusLinkId();
|
|
29
|
+
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
30
|
+
const { displayPrompt, entryFormat } = useRenderingExtensions(qItem);
|
|
31
|
+
// Init input value
|
|
32
|
+
let dateTimeString = null;
|
|
33
|
+
if (qrItem === null || qrItem === void 0 ? void 0 : qrItem.answer) {
|
|
34
|
+
if (qrItem === null || qrItem === void 0 ? void 0 : qrItem.answer[0].valueDate) {
|
|
35
|
+
dateTimeString = qrItem.answer[0].valueDate;
|
|
36
|
+
}
|
|
37
|
+
else if (qrItem === null || qrItem === void 0 ? void 0 : qrItem.answer[0].valueDateTime) {
|
|
38
|
+
dateTimeString = qrItem.answer[0].valueDateTime;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const dateTimeDayJs = dateTimeString ? dayjs(dateTimeString) : null;
|
|
42
|
+
// Event handlers
|
|
43
|
+
function handleDateTimeChange(newValue) {
|
|
44
|
+
const emptyQrItem = createEmptyQrItem(qItem);
|
|
45
|
+
if (newValue) {
|
|
46
|
+
onQrItemChange(Object.assign(Object.assign({}, emptyQrItem), { answer: [{ valueDateTime: newValue.format() }] }));
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
onQrItemChange(emptyQrItem);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (isRepeated) {
|
|
53
|
+
return (React.createElement(DateTimeField, { value: dateTimeDayJs, displayPrompt: displayPrompt, entryFormat: entryFormat, readOnly: readOnly, onDateTimeChange: handleDateTimeChange, isTabled: isTabled }));
|
|
54
|
+
}
|
|
55
|
+
return (React.createElement(FullWidthFormComponentBox, { "data-test": "q-item-date-time-box", "data-linkid": qItem.linkId, onClick: () => onFocusLinkId(qItem.linkId) },
|
|
56
|
+
React.createElement(ItemFieldGrid, { qItem: qItem, readOnly: readOnly },
|
|
57
|
+
React.createElement(DateTimeField, { value: dateTimeDayJs, displayPrompt: displayPrompt, entryFormat: entryFormat, readOnly: readOnly, onDateTimeChange: handleDateTimeChange, isTabled: isTabled }))));
|
|
58
|
+
}
|
|
59
|
+
export default DateTimeItem;
|
|
60
|
+
//# sourceMappingURL=DateTimeItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateTimeItem.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/DateTimeItem/DateTimeItem.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,sBAAsB,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAWxD,SAAS,YAAY,CAAC,KAAwB;IAC5C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAExF,MAAM,aAAa,GAAG,qBAAqB,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAEhE,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACtD,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAErE,mBAAmB;IACnB,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,EAAE;QAClB,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE;YAC/B,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;SAC7C;aAAM,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAC,CAAC,EAAE,aAAa,EAAE;YAC1C,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;SACjD;KACF;IACD,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEpE,iBAAiB;IACjB,SAAS,oBAAoB,CAAC,QAAsB;QAClD,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE;YACZ,cAAc,iCAAM,WAAW,KAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,IAAG,CAAC;SACpF;aAAM;YACL,cAAc,CAAC,WAAW,CAAC,CAAC;SAC7B;IACH,CAAC;IAED,IAAI,UAAU,EAAE;QACd,OAAO,CACL,oBAAC,aAAa,IACZ,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,oBAAoB,EACtC,QAAQ,EAAE,QAAQ,GAClB,CACH,CAAC;KACH;IAED,OAAO,CACL,oBAAC,yBAAyB,iBACd,sBAAsB,iBACnB,KAAK,CAAC,MAAM,EACzB,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;QAC1C,oBAAC,aAAa,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ;YAC7C,oBAAC,aAAa,IACZ,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,oBAAoB,EACtC,QAAQ,EAAE,QAAQ,GAClB,CACY,CACU,CAC7B,CAAC;AACJ,CAAC;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -31,6 +31,7 @@ function useCodingCalculatedExpression(props) {
|
|
|
31
31
|
if (calcExpression.value !== valueInString &&
|
|
32
32
|
(typeof calcExpression.value === 'string' ||
|
|
33
33
|
typeof calcExpression.value === 'number' ||
|
|
34
|
+
typeof calcExpression.value === 'object' ||
|
|
34
35
|
calcExpression.value === null)) {
|
|
35
36
|
// update ui to show calculated value changes
|
|
36
37
|
setCalcExpUpdated(true);
|
|
@@ -42,6 +43,13 @@ function useCodingCalculatedExpression(props) {
|
|
|
42
43
|
onChangeByCalcExpressionNull();
|
|
43
44
|
return;
|
|
44
45
|
}
|
|
46
|
+
// calculatedExpression value is object, check if it is a Coding object
|
|
47
|
+
if (typeof calcExpression.value === 'object' && objectIsCoding(calcExpression.value)) {
|
|
48
|
+
if (calcExpression.value.code) {
|
|
49
|
+
onChangeByCalcExpressionString(calcExpression.value.code);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
45
53
|
// calculatedExpression value is a string or number
|
|
46
54
|
const newValueString = typeof calcExpression.value === 'string'
|
|
47
55
|
? calcExpression.value
|
|
@@ -54,5 +62,8 @@ function useCodingCalculatedExpression(props) {
|
|
|
54
62
|
[calculatedExpressions]);
|
|
55
63
|
return { calcExpUpdated: calcExpUpdated };
|
|
56
64
|
}
|
|
65
|
+
function objectIsCoding(obj) {
|
|
66
|
+
return obj && obj.code && typeof obj.code === 'string';
|
|
67
|
+
}
|
|
57
68
|
export default useCodingCalculatedExpression;
|
|
58
69
|
//# sourceMappingURL=useCodingCalculatedExpression.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCodingCalculatedExpression.js","sourceRoot":"","sources":["../../src/hooks/useCodingCalculatedExpression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAalD,gEAAgE;AAChE,SAAS,6BAA6B,CACpC,KAAyC;IAEzC,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,8BAA8B,EAAE,4BAA4B,EAAE,GAC1F,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,aAAa;YACtC,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,cAAc,GAClB,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,cAAc,CAAC,CAAC;SAChD;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
|
+
{"version":3,"file":"useCodingCalculatedExpression.js","sourceRoot":"","sources":["../../src/hooks/useCodingCalculatedExpression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAalD,gEAAgE;AAChE,SAAS,6BAA6B,CACpC,KAAyC;IAEzC,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,8BAA8B,EAAE,4BAA4B,EAAE,GAC1F,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,aAAa;YACtC,CAAC,OAAO,cAAc,CAAC,KAAK,KAAK,QAAQ;gBACvC,OAAO,cAAc,CAAC,KAAK,KAAK,QAAQ;gBACxC,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,uEAAuE;YACvE,IAAI,OAAO,cAAc,CAAC,KAAK,KAAK,QAAQ,IAAI,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;gBACpF,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE;oBAC7B,8BAA8B,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC1D,OAAO;iBACR;aACF;YAED,mDAAmD;YACnD,MAAM,cAAc,GAClB,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,cAAc,CAAC,CAAC;SAChD;IACH,CAAC;IACD,mEAAmE;IACnE,uDAAuD;IACvD,CAAC,qBAAqB,CAAC,CACxB,CAAC;IAEF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,cAAc,CAAC,GAAQ;IAC9B,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;AACzD,CAAC;AAED,eAAe,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { useQuestionnaireStore } from '../stores';
|
|
18
|
+
function useDisplayCalculatedExpression(qItem) {
|
|
19
|
+
var _a;
|
|
20
|
+
const calculatedExpressions = useQuestionnaireStore.use.calculatedExpressions();
|
|
21
|
+
const calcExpression = (_a = calculatedExpressions[qItem.linkId]) === null || _a === void 0 ? void 0 : _a.find((exp) => exp.from === 'item._text');
|
|
22
|
+
if (!calcExpression) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
if (typeof calcExpression.value === 'string' ||
|
|
26
|
+
typeof calcExpression.value === 'number' ||
|
|
27
|
+
calcExpression.value === null) {
|
|
28
|
+
// calculatedExpression value is null
|
|
29
|
+
if (calcExpression.value === null) {
|
|
30
|
+
return '';
|
|
31
|
+
}
|
|
32
|
+
// calculatedExpression value is string or number
|
|
33
|
+
return typeof calcExpression.value === 'string'
|
|
34
|
+
? calcExpression.value
|
|
35
|
+
: calcExpression.value.toString();
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
export default useDisplayCalculatedExpression;
|
|
40
|
+
//# sourceMappingURL=useDisplayCalculatedExpression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDisplayCalculatedExpression.js","sourceRoot":"","sources":["../../src/hooks/useDisplayCalculatedExpression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAGlD,SAAS,8BAA8B,CAAC,KAAwB;;IAC9D,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;IAEhF,MAAM,cAAc,GAAG,MAAA,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,IAAI,CAC9D,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,CACnC,CAAC;IAEF,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,IAAI,CAAC;KACb;IAED,IACE,OAAO,cAAc,CAAC,KAAK,KAAK,QAAQ;QACxC,OAAO,cAAc,CAAC,KAAK,KAAK,QAAQ;QACxC,cAAc,CAAC,KAAK,KAAK,IAAI,EAC7B;QACA,qCAAqC;QACrC,IAAI,cAAc,CAAC,KAAK,KAAK,IAAI,EAAE;YACjC,OAAO,EAAE,CAAC;SACX;QAED,iDAAiD;QACjD,OAAO,OAAO,cAAc,CAAC,KAAK,KAAK,QAAQ;YAC7C,CAAC,CAAC,cAAc,CAAC,KAAK;YACtB,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;KACrC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,eAAe,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Questionnaire, QuestionnaireResponse } from 'fhir/r4';
|
|
2
|
+
import type Client from 'fhirclient/lib/Client';
|
|
3
|
+
declare function useInitialiseRenderer(questionnaire: Questionnaire, questionnaireResponse?: QuestionnaireResponse, additionalVariables?: Record<string, object>, terminologyServerUrl?: string, fhirClient?: Client, readOnly?: boolean): boolean;
|
|
4
|
+
export default useInitialiseRenderer;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { useLayoutEffect, useState } from 'react';
|
|
18
|
+
import { initialiseQuestionnaireResponse } from '../utils';
|
|
19
|
+
import { readEncounter, readPatient, readUser } from '../api/smartClient';
|
|
20
|
+
import { useQuestionnaireResponseStore, useQuestionnaireStore, useSmartConfigStore, useTerminologyServerStore } from '../stores';
|
|
21
|
+
function useInitialiseRenderer(questionnaire, questionnaireResponse, additionalVariables, terminologyServerUrl, fhirClient, readOnly) {
|
|
22
|
+
const buildSourceQuestionnaire = useQuestionnaireStore.use.buildSourceQuestionnaire();
|
|
23
|
+
const updatePopulatedProperties = useQuestionnaireStore.use.updatePopulatedProperties();
|
|
24
|
+
const buildSourceResponse = useQuestionnaireResponseStore.use.buildSourceResponse();
|
|
25
|
+
const setUpdatableResponseAsPopulated = useQuestionnaireResponseStore.use.setUpdatableResponseAsPopulated();
|
|
26
|
+
const setTerminologyServerUrl = useTerminologyServerStore.use.setUrl();
|
|
27
|
+
const resetTerminologyServerUrl = useTerminologyServerStore.use.resetUrl();
|
|
28
|
+
const setSmartClient = useSmartConfigStore.use.setClient();
|
|
29
|
+
const setPatient = useSmartConfigStore.use.setPatient();
|
|
30
|
+
const setUser = useSmartConfigStore.use.setUser();
|
|
31
|
+
const setEncounter = useSmartConfigStore.use.setEncounter();
|
|
32
|
+
const [loading, setLoading] = useState(true);
|
|
33
|
+
useLayoutEffect(() => {
|
|
34
|
+
setLoading(true);
|
|
35
|
+
// set fhirClient if provided
|
|
36
|
+
if (fhirClient) {
|
|
37
|
+
setSmartClient(fhirClient);
|
|
38
|
+
readPatient(fhirClient).then((patient) => {
|
|
39
|
+
setPatient(patient);
|
|
40
|
+
});
|
|
41
|
+
readUser(fhirClient).then((user) => {
|
|
42
|
+
setUser(user);
|
|
43
|
+
});
|
|
44
|
+
readEncounter(fhirClient).then((encounter) => {
|
|
45
|
+
setEncounter(encounter);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
// set terminology server url if provided, otherwise reset it back to ontoserver
|
|
49
|
+
if (terminologyServerUrl) {
|
|
50
|
+
setTerminologyServerUrl(terminologyServerUrl);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
resetTerminologyServerUrl();
|
|
54
|
+
}
|
|
55
|
+
// initialise form including enableWhen, enableWhenExpressions, calculatedExpressions, initialExpressions, answerExpressions, cache answerValueSets
|
|
56
|
+
buildSourceQuestionnaire(questionnaire, questionnaireResponse, additionalVariables, terminologyServerUrl, readOnly).then(() => {
|
|
57
|
+
buildSourceResponse(initialiseQuestionnaireResponse(questionnaire));
|
|
58
|
+
if (questionnaireResponse) {
|
|
59
|
+
const updatedResponse = updatePopulatedProperties(questionnaireResponse);
|
|
60
|
+
setUpdatableResponseAsPopulated(updatedResponse);
|
|
61
|
+
}
|
|
62
|
+
setLoading(false);
|
|
63
|
+
});
|
|
64
|
+
}, [
|
|
65
|
+
questionnaire,
|
|
66
|
+
questionnaireResponse,
|
|
67
|
+
buildSourceQuestionnaire,
|
|
68
|
+
buildSourceResponse,
|
|
69
|
+
setUpdatableResponseAsPopulated,
|
|
70
|
+
updatePopulatedProperties,
|
|
71
|
+
additionalVariables,
|
|
72
|
+
fhirClient,
|
|
73
|
+
setSmartClient,
|
|
74
|
+
setPatient,
|
|
75
|
+
setUser,
|
|
76
|
+
setEncounter,
|
|
77
|
+
terminologyServerUrl,
|
|
78
|
+
setTerminologyServerUrl,
|
|
79
|
+
resetTerminologyServerUrl,
|
|
80
|
+
readOnly
|
|
81
|
+
]);
|
|
82
|
+
return loading;
|
|
83
|
+
}
|
|
84
|
+
export default useInitialiseRenderer;
|
|
85
|
+
//# sourceMappingURL=useInitialiseRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInitialiseRenderer.js","sourceRoot":"","sources":["../../src/hooks/useInitialiseRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Commonwealth Scientific and Industrial Research
|
|
3
|
+
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
18
|
+
function useQueryClient() {
|
|
19
|
+
return new QueryClient({
|
|
20
|
+
defaultOptions: {
|
|
21
|
+
queries: {
|
|
22
|
+
refetchOnWindowFocus: false,
|
|
23
|
+
keepPreviousData: true
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
export default useQueryClient;
|
|
29
|
+
//# sourceMappingURL=useQueryClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQueryClient.js","sourceRoot":"","sources":["../../src/hooks/useQueryClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,SAAS,cAAc;IACrB,OAAO,IAAI,WAAW,CAAC;QACrB,cAAc,EAAE;YACd,OAAO,EAAE;gBACP,oBAAoB,EAAE,KAAK;gBAC3B,gBAAgB,EAAE,IAAI;aACvB;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Questionnaire, QuestionnaireResponse } from 'fhir/r4';
|
|
2
|
+
/**
|
|
3
|
+
* Build the form with an initial Questionnaire and an optional filled QuestionnaireResponse.
|
|
4
|
+
* If a QuestionnaireResponse is not provided, an empty QuestionnaireResponse is set as the initial QuestionnaireResponse.
|
|
5
|
+
*
|
|
6
|
+
* @author Sean Fong
|
|
7
|
+
*/
|
|
8
|
+
export declare function buildForm(questionnaire: Questionnaire, questionnaireResponse?: QuestionnaireResponse): Promise<void>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { questionnaireResponseStore, questionnaireStore } from '../stores';
|
|
11
|
+
import { initialiseQuestionnaireResponse } from './initialise';
|
|
12
|
+
/**
|
|
13
|
+
* Build the form with an initial Questionnaire and an optional filled QuestionnaireResponse.
|
|
14
|
+
* If a QuestionnaireResponse is not provided, an empty QuestionnaireResponse is set as the initial QuestionnaireResponse.
|
|
15
|
+
*
|
|
16
|
+
* @author Sean Fong
|
|
17
|
+
*/
|
|
18
|
+
export function buildForm(questionnaire, questionnaireResponse) {
|
|
19
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
yield questionnaireStore.getState().buildSourceQuestionnaire(questionnaire);
|
|
21
|
+
const initialisedQuestionnaireResponse = initialiseQuestionnaireResponse(questionnaire, questionnaireResponse);
|
|
22
|
+
questionnaireResponseStore.getState().buildSourceResponse(initialisedQuestionnaireResponse);
|
|
23
|
+
questionnaireStore.getState().updatePopulatedProperties(initialisedQuestionnaireResponse);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=buildForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildForm.js","sourceRoot":"","sources":["../../src/utils/buildForm.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,UAAgB,SAAS,CAC7B,aAA4B,EAC5B,qBAA6C;;QAE7C,MAAM,kBAAkB,CAAC,QAAQ,EAAE,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;QAE5E,MAAM,gCAAgC,GAAG,+BAA+B,CACtE,aAAa,EACb,qBAAqB,CACtB,CAAC;QACF,0BAA0B,CAAC,QAAQ,EAAE,CAAC,mBAAmB,CAAC,gCAAgC,CAAC,CAAC;QAC5F,kBAAkB,CAAC,QAAQ,EAAE,CAAC,yBAAyB,CAAC,gCAAgC,CAAC,CAAC;IAC5F,CAAC;CAAA"}
|
|
@@ -23,6 +23,7 @@ import { getQrItemsIndex, mapQItemsIndex } from './mapItem';
|
|
|
23
23
|
import { updateQrItemsInGroup } from './qrItem';
|
|
24
24
|
import cloneDeep from 'lodash.clonedeep';
|
|
25
25
|
import dayjs from 'dayjs';
|
|
26
|
+
import { updateQuestionnaireResponse } from './updateQr';
|
|
26
27
|
export function evaluateInitialCalculatedExpressions(params) {
|
|
27
28
|
const { initialResponse, initialResponseItemMap, calculatedExpressions, variablesFhirPath, existingFhirPathContext } = params;
|
|
28
29
|
// Return early if initialResponse is empty or there are no calculated expressions to evaluate
|
|
@@ -88,13 +89,6 @@ export function evaluateCalculatedExpressions(fhirPathContext, calculatedExpress
|
|
|
88
89
|
};
|
|
89
90
|
}
|
|
90
91
|
export function initialiseCalculatedExpressionValues(questionnaire, populatedResponse, calculatedExpressions) {
|
|
91
|
-
var _a;
|
|
92
|
-
if (!questionnaire.item ||
|
|
93
|
-
questionnaire.item.length === 0 ||
|
|
94
|
-
!populatedResponse.item ||
|
|
95
|
-
populatedResponse.item.length === 0) {
|
|
96
|
-
return populatedResponse;
|
|
97
|
-
}
|
|
98
92
|
// Filter calculated expressions, only preserve key-value pairs with values
|
|
99
93
|
const calculatedExpressionsWithValues = {};
|
|
100
94
|
for (const linkId in calculatedExpressions) {
|
|
@@ -103,54 +97,32 @@ export function initialiseCalculatedExpressionValues(questionnaire, populatedRes
|
|
|
103
97
|
calculatedExpressionsWithValues[linkId] = itemCalcExpressionsWithValues;
|
|
104
98
|
}
|
|
105
99
|
}
|
|
106
|
-
|
|
107
|
-
const topLevelQrItems = [];
|
|
108
|
-
for (const [index, topLevelQItem] of questionnaire.item.entries()) {
|
|
109
|
-
const populatedTopLevelQrItem = (_a = populatedResponse.item[index]) !== null && _a !== void 0 ? _a : {
|
|
110
|
-
linkId: topLevelQItem.linkId,
|
|
111
|
-
text: topLevelQItem.text,
|
|
112
|
-
item: []
|
|
113
|
-
};
|
|
114
|
-
const updatedTopLevelQRItem = initialiseItemCalculatedExpressionValueRecursive(topLevelQItem, populatedTopLevelQrItem, calculatedExpressionsWithValues);
|
|
115
|
-
if (Array.isArray(updatedTopLevelQRItem)) {
|
|
116
|
-
if (updatedTopLevelQRItem.length > 0) {
|
|
117
|
-
topLevelQrItems.push(...updatedTopLevelQRItem);
|
|
118
|
-
}
|
|
119
|
-
continue;
|
|
120
|
-
}
|
|
121
|
-
if (updatedTopLevelQRItem) {
|
|
122
|
-
topLevelQrItems.push(updatedTopLevelQRItem);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return Object.assign(Object.assign({}, populatedResponse), { item: topLevelQrItems });
|
|
100
|
+
return updateQuestionnaireResponse(questionnaire, populatedResponse, initialiseItemCalculatedExpressionValueRecursive, calculatedExpressionsWithValues);
|
|
126
101
|
}
|
|
127
|
-
function initialiseItemCalculatedExpressionValueRecursive(qItem,
|
|
102
|
+
function initialiseItemCalculatedExpressionValueRecursive(qItem, qrItemOrItems, calculatedExpressions) {
|
|
128
103
|
var _a;
|
|
104
|
+
// For repeat groups
|
|
105
|
+
const hasMultipleAnswers = Array.isArray(qrItemOrItems);
|
|
106
|
+
if (hasMultipleAnswers) {
|
|
107
|
+
return qrItemOrItems;
|
|
108
|
+
}
|
|
109
|
+
const qrItem = qrItemOrItems;
|
|
129
110
|
const childQItems = qItem.item;
|
|
130
111
|
if (childQItems && childQItems.length > 0) {
|
|
131
|
-
// iterate through items of item recursively
|
|
132
112
|
const childQrItems = (_a = qrItem === null || qrItem === void 0 ? void 0 : qrItem.item) !== null && _a !== void 0 ? _a : [];
|
|
133
|
-
// const updatedChildQrItems: QuestionnaireResponseItem[] = [];
|
|
134
|
-
// FIXME Not implemented for repeat groups
|
|
135
|
-
if (qItem.type === 'group' && qItem.repeats) {
|
|
136
|
-
return qrItem !== null && qrItem !== void 0 ? qrItem : null;
|
|
137
|
-
}
|
|
138
113
|
const indexMap = mapQItemsIndex(qItem);
|
|
139
114
|
const qrItemsByIndex = getQrItemsIndex(childQItems, childQrItems, indexMap);
|
|
140
115
|
// Otherwise loop through qItem as usual
|
|
141
116
|
for (const [index, childQItem] of childQItems.entries()) {
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
if (Array.isArray(childQrItem)) {
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
const newQrItem = initialiseItemCalculatedExpressionValueRecursive(childQItem, childQrItem, calculatedExpressions);
|
|
117
|
+
const childQRItemOrItems = qrItemsByIndex[index];
|
|
118
|
+
const updatedChildQRItemOrItems = initialiseItemCalculatedExpressionValueRecursive(childQItem, childQRItemOrItems !== null && childQRItemOrItems !== void 0 ? childQRItemOrItems : null, calculatedExpressions);
|
|
148
119
|
// FIXME Not implemented for repeat groups
|
|
149
|
-
if (Array.isArray(
|
|
120
|
+
if (Array.isArray(updatedChildQRItemOrItems)) {
|
|
150
121
|
continue;
|
|
151
122
|
}
|
|
152
|
-
|
|
153
|
-
|
|
123
|
+
const updatedChildQRItem = updatedChildQRItemOrItems;
|
|
124
|
+
if (updatedChildQRItem) {
|
|
125
|
+
updateQrItemsInGroup(updatedChildQRItem, null, qrItem !== null && qrItem !== void 0 ? qrItem : { linkId: qItem.linkId, text: qItem.text, item: [] }, indexMap);
|
|
154
126
|
}
|
|
155
127
|
}
|
|
156
128
|
return constructGroupItem(qItem, qrItem, calculatedExpressions);
|
|
@@ -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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"}
|
package/lib/utils/fhirpath.js
CHANGED
|
@@ -46,10 +46,6 @@ export function evaluateUpdatedExpressions(params) {
|
|
|
46
46
|
export function createFhirPathContext(questionnaireResponse, questionnaireResponseItemMap, variablesFhirPath, existingFhirPathContext) {
|
|
47
47
|
// Add latest resource to fhirPathContext
|
|
48
48
|
let fhirPathContext = Object.assign(Object.assign({}, existingFhirPathContext), { resource: questionnaireResponse, rootResource: questionnaireResponse });
|
|
49
|
-
// Exit early if there are no QR items
|
|
50
|
-
if (!questionnaireResponse.item) {
|
|
51
|
-
return fhirPathContext;
|
|
52
|
-
}
|
|
53
49
|
// Evaluate resource-level variables
|
|
54
50
|
fhirPathContext = evaluateQuestionnaireLevelVariables(questionnaireResponse, variablesFhirPath, fhirPathContext);
|
|
55
51
|
// Add variables of items that exist in questionnaireResponseItemMap into fhirPathContext
|
|
@@ -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;AAWvE,MAAM,UAAU,0BAA0B,CAAC,MAAwC;IAMjF,MAAM,EACJ,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACxB,GAAG,MAAM,CAAC;IAEX,MAAM,wBAAwB,GAC5B,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,MAAM,KAAK,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAClD,IAAI,wBAAwB,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;QACrD,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,4BAA4B,EAAE,qBAAqB;YACnD,4BAA4B,EAAE,qBAAqB;YACnD,sBAAsB,EAAE,uBAAuB;SAChD,CAAC;KACH;IAED,MAAM,sBAAsB,GAAG,qBAAqB,CAClD,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,CACxB,CAAC;IAEF,+BAA+B;IAC/B,MAAM,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,GAAG,6BAA6B,CAC7F,sBAAsB,EACtB,qBAAqB,CACtB,CAAC;IAEF,+BAA+B;IAC/B,MAAM,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,GAAG,6BAA6B,CAC7F,sBAAsB,EACtB,qBAAqB,CACtB,CAAC;IAEF,MAAM,SAAS,GAAG,uBAAuB,IAAI,uBAAuB,CAAC;IAErE,OAAO;QACL,SAAS;QACT,4BAA4B;QAC5B,4BAA4B;QAC5B,sBAAsB;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,qBAA4C,EAC5C,4BAAyE,EACzE,iBAA+C,EAC/C,uBAA4C;IAE5C,yCAAyC;IACzC,IAAI,eAAe,mCACd,uBAAuB,KAC1B,QAAQ,EAAE,qBAAqB,EAC/B,YAAY,EAAE,qBAAqB,GACpC,CAAC;IAEF,
|
|
1
|
+
{"version":3,"file":"fhirpath.js","sourceRoot":"","sources":["../../src/utils/fhirpath.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Questionnaire, QuestionnaireResponse } from 'fhir/r4';
|
|
1
|
+
import type { Questionnaire, QuestionnaireResponse, QuestionnaireResponseItem } from 'fhir/r4';
|
|
2
2
|
import type Client from 'fhirclient/lib/Client';
|
|
3
3
|
/**
|
|
4
4
|
* Build the form with an initial Questionnaire and an optional filled QuestionnaireResponse.
|
|
@@ -44,3 +44,9 @@ export declare function getResponse(): QuestionnaireResponse;
|
|
|
44
44
|
* @author Sean Fong
|
|
45
45
|
*/
|
|
46
46
|
export declare function removeEmptyAnswersFromResponse(questionnaire: Questionnaire, questionnaireResponse: QuestionnaireResponse): QuestionnaireResponse;
|
|
47
|
+
/**
|
|
48
|
+
* Check if a QuestionnaireResponseItem has either an item or an answer property.
|
|
49
|
+
*
|
|
50
|
+
* @author Sean Fong
|
|
51
|
+
*/
|
|
52
|
+
export declare function qrItemHasItemsOrAnswer(qrItem: QuestionnaireResponseItem): boolean;
|
package/lib/utils/manageForm.js
CHANGED
|
@@ -26,6 +26,7 @@ import { readEncounter, readPatient, readUser } from '../api/smartClient';
|
|
|
26
26
|
*/
|
|
27
27
|
export function buildForm(questionnaire, questionnaireResponse, readOnly, terminologyServerUrl, additionalVariables) {
|
|
28
28
|
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
// Reset terminology server
|
|
29
30
|
if (terminologyServerUrl) {
|
|
30
31
|
terminologyServerStore.getState().setUrl(terminologyServerUrl);
|
|
31
32
|
}
|
|
@@ -105,4 +106,12 @@ export function removeEmptyAnswersFromResponse(questionnaire, questionnaireRespo
|
|
|
105
106
|
enableWhenExpressions
|
|
106
107
|
});
|
|
107
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Check if a QuestionnaireResponseItem has either an item or an answer property.
|
|
111
|
+
*
|
|
112
|
+
* @author Sean Fong
|
|
113
|
+
*/
|
|
114
|
+
export function qrItemHasItemsOrAnswer(qrItem) {
|
|
115
|
+
return (!!qrItem.item && qrItem.item.length > 0) || (!!qrItem.answer && qrItem.answer.length > 0);
|
|
116
|
+
}
|
|
108
117
|
//# sourceMappingURL=manageForm.js.map
|