@aehrc/smart-forms-renderer 1.0.0-alpha.45 → 1.0.0-alpha.46
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/OpenChoiceItems/OpenChoiceAutocompleteField.d.ts +2 -3
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js +27 -10
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.d.ts +2 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js +11 -3
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.d.ts +3 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js +33 -5
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js.map +1 -1
- package/lib/hooks/useRendererQueryClient.d.ts +2 -2
- package/lib/hooks/useRendererQueryClient.js +5 -4
- package/lib/hooks/useRendererQueryClient.js.map +1 -1
- package/lib/theme/typography.d.ts +1 -1
- package/package.json +1 -1
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.tsx +8 -9
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +35 -18
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx +8 -3
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +16 -5
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.tsx +8 -4
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +45 -7
- package/src/components/Renderer/FormBodyTabbed.tsx +1 -1
- package/src/hooks/useRendererQueryClient.ts +5 -4
- package/src/theme/typography.ts +1 -1
- package/lib/components/Renderer/FormBodyPage.d.ts +0 -8
- package/lib/components/Renderer/FormBodyPage.js +0 -41
- package/lib/components/Renderer/FormBodyPage.js.map +0 -1
- package/lib/components/Renderer/FormBodySinglePage.d.ts +0 -8
- package/lib/components/Renderer/FormBodySinglePage.js +0 -42
- package/lib/components/Renderer/FormBodySinglePage.js.map +0 -1
- package/lib/components/Renderer/FormTopLevelPage.d.ts +0 -8
- package/lib/components/Renderer/FormTopLevelPage.js +0 -26
- package/lib/components/Renderer/FormTopLevelPage.js.map +0 -1
- package/lib/interfaces/computedChanges.interface.d.ts +0 -5
- package/lib/interfaces/computedChanges.interface.js +0 -2
- package/lib/interfaces/computedChanges.interface.js.map +0 -1
- package/lib/interfaces/parameterisedValueSets.interface.d.ts +0 -13
- package/lib/interfaces/parameterisedValueSets.interface.js +0 -2
- package/lib/interfaces/parameterisedValueSets.interface.js.map +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AutocompleteChangeReason } from '@mui/material/Autocomplete';
|
|
1
2
|
import type { Coding, QuestionnaireItem } from 'fhir/r4';
|
|
2
3
|
import type { PropsWithIsTabledRequiredAttribute, PropsWithParentIsReadOnlyAttribute, PropsWithRenderingExtensionsAttribute } from '../../../interfaces/renderProps.interface';
|
|
3
4
|
import type { AlertColor } from '@mui/material/Alert';
|
|
@@ -12,9 +13,7 @@ interface OpenChoiceAutocompleteFieldProps extends PropsWithIsTabledRequiredAttr
|
|
|
12
13
|
color: AlertColor;
|
|
13
14
|
} | null;
|
|
14
15
|
readOnly: boolean;
|
|
15
|
-
|
|
16
|
-
onValueChange: (newValue: Coding | string | null) => void;
|
|
17
|
-
onUnfocus: () => void;
|
|
16
|
+
onValueChange: (newValue: Coding | string | null, reason: AutocompleteChangeReason | string) => void;
|
|
18
17
|
}
|
|
19
18
|
declare function OpenChoiceAutocompleteField(props: OpenChoiceAutocompleteFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
20
19
|
export default OpenChoiceAutocompleteField;
|
|
@@ -13,11 +13,11 @@ import ErrorIcon from '@mui/icons-material/Error';
|
|
|
13
13
|
import { useRendererStylingStore } from '../../../stores';
|
|
14
14
|
import DisplayUnitText from '../ItemParts/DisplayUnitText';
|
|
15
15
|
function OpenChoiceAutocompleteField(props) {
|
|
16
|
-
const { qItem, options, valueAutocomplete, input, loading, feedback, readOnly, isTabled, renderingExtensions,
|
|
16
|
+
const { qItem, options, valueAutocomplete, input, loading, feedback, readOnly, isTabled, renderingExtensions, onValueChange } = props;
|
|
17
17
|
const readOnlyVisualStyle = useRendererStylingStore.use.readOnlyVisualStyle();
|
|
18
18
|
const textFieldWidth = useRendererStylingStore.use.textFieldWidth();
|
|
19
19
|
const { displayUnit, displayPrompt, entryFormat } = renderingExtensions;
|
|
20
|
-
return (_jsx(Box, Object.assign({ display: "flex" }, { children: _jsx(Autocomplete, { id: qItem.type + '-' + qItem.linkId, value: valueAutocomplete, options: options, getOptionLabel: (option) => { var _a; return typeof option === 'string' ? option : ((_a = option.display) !== null && _a !== void 0 ? _a : `${option.code}`); }, disabled: readOnly && readOnlyVisualStyle === 'disabled', readOnly: readOnly && readOnlyVisualStyle === 'readonly', loading: loading, loadingText: 'Fetching results...', clearOnEscape: true, freeSolo: true, sx: { maxWidth: !isTabled ? textFieldWidth : 3000, minWidth: 220, flexGrow: 1 }, onChange: (_, newValue) => onValueChange(newValue), filterOptions: (x) => x, renderInput: (params) => (_jsx(StandardTextField, Object.assign({}, params, { value: input,
|
|
20
|
+
return (_jsx(Box, Object.assign({ display: "flex" }, { children: _jsx(Autocomplete, { id: qItem.type + '-' + qItem.linkId, value: valueAutocomplete, options: options, getOptionLabel: (option) => { var _a; return typeof option === 'string' ? option : ((_a = option.display) !== null && _a !== void 0 ? _a : `${option.code}`); }, disabled: readOnly && readOnlyVisualStyle === 'disabled', readOnly: readOnly && readOnlyVisualStyle === 'readonly', loading: loading, loadingText: 'Fetching results...', clearOnEscape: true, freeSolo: true, sx: { maxWidth: !isTabled ? textFieldWidth : 3000, minWidth: 220, flexGrow: 1 }, onChange: (_, newValue, reason) => onValueChange(newValue, reason), onInputChange: (_, newValue, reason) => onValueChange(newValue, reason), filterOptions: (x) => x, renderInput: (params) => (_jsx(StandardTextField, Object.assign({}, params, { value: input, textFieldWidth: textFieldWidth, isTabled: isTabled, label: displayPrompt, size: "small", placeholder: entryFormat, slotProps: {
|
|
21
21
|
input: Object.assign(Object.assign({}, params.InputProps), { readOnly: readOnly && readOnlyVisualStyle === 'readonly', startAdornment: (_jsxs(_Fragment, { children: [!valueAutocomplete || valueAutocomplete === '' ? (_jsx(SearchIcon, { fontSize: "small", sx: { ml: 0.5 } })) : null, params.InputProps.startAdornment] })),
|
|
22
22
|
// Warning indicator should not show up in open-choice autocomplete
|
|
23
23
|
endAdornment: (_jsxs(_Fragment, { children: [loading ? (_jsx(CircularProgress, { color: "inherit", size: 16 })) : feedback && feedback.color !== 'warning' ? (_jsx(Fade, Object.assign({ in: !!feedback, timeout: 300 }, { children: _jsx(Tooltip, Object.assign({ title: feedback.message, arrow: true, sx: { ml: 1 } }, { children: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenChoiceAutocompleteField.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.tsx"],"names":[],"mappings":";AAkBA,OAAO,GAAG,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"OpenChoiceAutocompleteField.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -60,14 +60,37 @@ function OpenChoiceAutocompleteItem(props) {
|
|
|
60
60
|
return null;
|
|
61
61
|
}
|
|
62
62
|
// Event handlers
|
|
63
|
-
function
|
|
63
|
+
// Handler function which handles both input change and selection change
|
|
64
|
+
function handleValueChange(newValue, reason) {
|
|
65
|
+
//if the reason is reset, then we don't change the value, otherwise you will end up with looped setState calls
|
|
66
|
+
if (reason === 'reset') {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
//if the text input is changed, and only if hte input is a string the set the state.
|
|
70
|
+
if (newValue && typeof newValue === 'string' && reason === 'input') {
|
|
71
|
+
setInput(newValue);
|
|
72
|
+
// return;
|
|
73
|
+
}
|
|
64
74
|
if (newValue === null) {
|
|
65
75
|
setInput('');
|
|
66
76
|
newValue = '';
|
|
67
77
|
}
|
|
68
78
|
if (typeof newValue === 'string') {
|
|
69
79
|
if (newValue !== '') {
|
|
70
|
-
|
|
80
|
+
// Check if the newValue in in the options, first check options.display, then check options.code
|
|
81
|
+
const foundOption = options.find((option) => {
|
|
82
|
+
if (option.display) {
|
|
83
|
+
return option.display === newValue;
|
|
84
|
+
}
|
|
85
|
+
return option.code === newValue;
|
|
86
|
+
});
|
|
87
|
+
if (foundOption) {
|
|
88
|
+
newValue = foundOption;
|
|
89
|
+
onQrItemChange(Object.assign(Object.assign({}, qrOpenChoice), { answer: [{ id: answerKey, valueCoding: newValue }] }));
|
|
90
|
+
} //if newValue is not in the options list, treat it as a string
|
|
91
|
+
else {
|
|
92
|
+
onQrItemChange(Object.assign(Object.assign({}, createEmptyQrItem(qItem, answerKey)), { answer: [{ id: answerKey, valueString: newValue }] }));
|
|
93
|
+
}
|
|
71
94
|
}
|
|
72
95
|
else {
|
|
73
96
|
onQrItemChange(createEmptyQrItem(qItem, answerKey));
|
|
@@ -77,16 +100,10 @@ function OpenChoiceAutocompleteItem(props) {
|
|
|
77
100
|
onQrItemChange(Object.assign(Object.assign({}, createEmptyQrItem(qItem, answerKey)), { answer: [{ id: answerKey, valueCoding: newValue }] }));
|
|
78
101
|
}
|
|
79
102
|
}
|
|
80
|
-
function handleUnfocus() {
|
|
81
|
-
// set answer to current input when text field is unfocused
|
|
82
|
-
if (!valueAutocomplete && input !== '') {
|
|
83
|
-
onQrItemChange(Object.assign(Object.assign({}, createEmptyQrItem(qItem, answerKey)), { answer: [{ id: answerKey, valueString: input }] }));
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
103
|
if (isRepeated) {
|
|
87
|
-
return (_jsx(OpenChoiceAutocompleteField, { qItem: qItem, options: options, valueAutocomplete: valueAutocomplete, input: input, loading: loading, feedback: feedback, readOnly: readOnly, isTabled: isTabled, renderingExtensions: renderingExtensions,
|
|
104
|
+
return (_jsx(OpenChoiceAutocompleteField, { qItem: qItem, options: options, valueAutocomplete: valueAutocomplete, input: input, loading: loading, feedback: feedback, readOnly: readOnly, isTabled: isTabled, renderingExtensions: renderingExtensions, onValueChange: handleValueChange }));
|
|
88
105
|
}
|
|
89
|
-
return (_jsx(FullWidthFormComponentBox, Object.assign({ "data-test": "q-item-open-choice-autocomplete-box", "data-linkid": qItem.linkId, onClick: () => onFocusLinkId(qItem.linkId) }, { children: _jsx(ItemFieldGrid, { qItem: qItem, readOnly: readOnly, labelChildren: _jsx(ItemLabel, { qItem: qItem, readOnly: readOnly }), fieldChildren: _jsx(OpenChoiceAutocompleteField, { qItem: qItem, options: options, valueAutocomplete: valueAutocomplete, input: input, loading: loading, feedback: feedback, readOnly: readOnly, isTabled: isTabled, renderingExtensions: renderingExtensions,
|
|
106
|
+
return (_jsx(FullWidthFormComponentBox, Object.assign({ "data-test": "q-item-open-choice-autocomplete-box", "data-linkid": qItem.linkId, onClick: () => onFocusLinkId(qItem.linkId) }, { children: _jsx(ItemFieldGrid, { qItem: qItem, readOnly: readOnly, labelChildren: _jsx(ItemLabel, { qItem: qItem, readOnly: readOnly }), fieldChildren: _jsx(OpenChoiceAutocompleteField, { qItem: qItem, options: options, valueAutocomplete: valueAutocomplete, input: input, loading: loading, feedback: feedback, readOnly: readOnly, isTabled: isTabled, renderingExtensions: renderingExtensions, onValueChange: handleValueChange }) }) })));
|
|
90
107
|
}
|
|
91
108
|
export default OpenChoiceAutocompleteItem;
|
|
92
109
|
//# sourceMappingURL=OpenChoiceAutocompleteItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenChoiceAutocompleteItem.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAIxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,WAAW,MAAM,4BAA4B,CAAC;AACrD,OAAO,yBAAyB,MAAM,0CAA0C,CAAC;AASjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,2BAA2B,MAAM,+BAA+B,CAAC;AACxE,OAAO,WAAW,MAAM,4BAA4B,CAAC;AACrD,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,qBAAqB,MAAM,sCAAsC,CAAC;AAEzE,OAAO,SAAS,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"OpenChoiceAutocompleteItem.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx"],"names":[],"mappings":"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"}
|
package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AutocompleteChangeReason } from '@mui/material/Autocomplete';
|
|
1
2
|
import type { QuestionnaireItem, QuestionnaireItemAnswerOption } from 'fhir/r4';
|
|
2
3
|
import type { PropsWithIsTabledRequiredAttribute, PropsWithParentIsReadOnlyAttribute, PropsWithRenderingExtensionsAttribute } from '../../../interfaces/renderProps.interface';
|
|
3
4
|
interface OpenChoiceSelectAnswerOptionFieldProps extends PropsWithIsTabledRequiredAttribute, PropsWithParentIsReadOnlyAttribute, PropsWithRenderingExtensionsAttribute {
|
|
@@ -6,7 +7,7 @@ interface OpenChoiceSelectAnswerOptionFieldProps extends PropsWithIsTabledRequir
|
|
|
6
7
|
valueSelect: QuestionnaireItemAnswerOption | null;
|
|
7
8
|
feedback: string;
|
|
8
9
|
readOnly: boolean;
|
|
9
|
-
|
|
10
|
+
onValueChange: (newValue: QuestionnaireItemAnswerOption | string | null, reason: AutocompleteChangeReason | string) => void;
|
|
10
11
|
}
|
|
11
12
|
declare function OpenChoiceSelectAnswerOptionField(props: OpenChoiceSelectAnswerOptionFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
12
13
|
export default OpenChoiceSelectAnswerOptionField;
|
|
@@ -6,11 +6,11 @@ import { useRendererStylingStore } from '../../../stores';
|
|
|
6
6
|
import { StyledRequiredTypography } from '../Item.styles';
|
|
7
7
|
import DisplayUnitText from '../ItemParts/DisplayUnitText';
|
|
8
8
|
function OpenChoiceSelectAnswerOptionField(props) {
|
|
9
|
-
const { qItem, options, valueSelect, feedback, readOnly, isTabled, renderingExtensions,
|
|
9
|
+
const { qItem, options, valueSelect, feedback, readOnly, isTabled, renderingExtensions, onValueChange } = props;
|
|
10
10
|
const readOnlyVisualStyle = useRendererStylingStore.use.readOnlyVisualStyle();
|
|
11
11
|
const textFieldWidth = useRendererStylingStore.use.textFieldWidth();
|
|
12
12
|
const { displayUnit, displayPrompt, entryFormat } = renderingExtensions;
|
|
13
|
-
return (_jsxs(_Fragment, { children: [_jsx(Autocomplete, { id: qItem.type + '-' + qItem.linkId, value: valueSelect !== null && valueSelect !== void 0 ? valueSelect : null, options: options, getOptionLabel: (option) => getAnswerOptionLabel(option), onChange: (_, newValue) =>
|
|
13
|
+
return (_jsxs(_Fragment, { children: [_jsx(Autocomplete, { id: qItem.type + '-' + qItem.linkId, value: valueSelect !== null && valueSelect !== void 0 ? valueSelect : null, options: options, getOptionLabel: (option) => getAnswerOptionLabel(option), onChange: (_, newValue, reason) => onValueChange(newValue, reason), onInputChange: (_, newValue, reason) => onValueChange(newValue, reason), freeSolo: true, autoHighlight: true, sx: { maxWidth: !isTabled ? textFieldWidth : 3000, minWidth: 160, flexGrow: 1 }, disabled: readOnly && readOnlyVisualStyle === 'disabled', readOnly: readOnly && readOnlyVisualStyle === 'readonly', size: "small", renderInput: (params) => (_jsx(StandardTextField, Object.assign({ textFieldWidth: textFieldWidth, isTabled: isTabled, label: displayPrompt, placeholder: entryFormat }, params, { slotProps: {
|
|
14
14
|
input: Object.assign(Object.assign({}, params.InputProps), { readOnly: readOnly && readOnlyVisualStyle === 'readonly', endAdornment: (_jsxs(_Fragment, { children: [params.InputProps.endAdornment, _jsx(DisplayUnitText, Object.assign({ readOnly: readOnly }, { children: displayUnit }))] })) })
|
|
15
15
|
} }))) }), feedback ? _jsx(StyledRequiredTypography, { children: feedback }) : null] }));
|
|
16
16
|
}
|
package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenChoiceSelectAnswerOptionField.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"OpenChoiceSelectAnswerOptionField.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,YAAY,MAAM,4BAA4B,CAAC;AAOtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,eAAe,MAAM,8BAA8B,CAAC;AAiB3D,SAAS,iCAAiC,CAAC,KAA6C;IACtF,MAAM,EACJ,KAAK,EACL,OAAO,EACP,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,mBAAmB,EACnB,aAAa,EACd,GAAG,KAAK,CAAC;IAEV,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;IAC9E,MAAM,cAAc,GAAG,uBAAuB,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;IAEpE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,mBAAmB,CAAC;IAExE,OAAO,CACL,8BACE,KAAC,YAAY,IACX,EAAE,EAAE,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,EACnC,KAAK,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,EAC1B,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,EACxD,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,EAClE,aAAa,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,EACvE,QAAQ,QACR,aAAa,QACb,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,EAC/E,QAAQ,EAAE,QAAQ,IAAI,mBAAmB,KAAK,UAAU,EACxD,QAAQ,EAAE,QAAQ,IAAI,mBAAmB,KAAK,UAAU,EACxD,IAAI,EAAC,OAAO,EACZ,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,iBAAiB,kBAChB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,WAAW,IACpB,MAAM,IACV,SAAS,EAAE;wBACT,KAAK,kCACA,MAAM,CAAC,UAAU,KACpB,QAAQ,EAAE,QAAQ,IAAI,mBAAmB,KAAK,UAAU,EACxD,YAAY,EAAE,CACZ,8BACG,MAAM,CAAC,UAAU,CAAC,YAAY,EAC/B,KAAC,eAAe,kBAAC,QAAQ,EAAE,QAAQ,gBAAG,WAAW,IAAmB,IACnE,CACJ,GACF;qBACF,IACD,CACH,GACD,EAED,QAAQ,CAAC,CAAC,CAAC,KAAC,wBAAwB,cAAE,QAAQ,GAA4B,CAAC,CAAC,CAAC,IAAI,IACjF,CACJ,CAAC;AACJ,CAAC;AAED,eAAe,iCAAiC,CAAC"}
|
|
@@ -25,12 +25,20 @@ function OpenChoiceSelectAnswerOptionItem(props) {
|
|
|
25
25
|
valueSelect = (_b = qrOpenChoice.answer[0]) !== null && _b !== void 0 ? _b : null;
|
|
26
26
|
}
|
|
27
27
|
// Event handlers
|
|
28
|
-
function
|
|
28
|
+
// Handler function which handles both input change and selection change
|
|
29
|
+
function handleValueChange(newValue, reason) {
|
|
30
|
+
//if the reason is reset, then we don't change the value, otherwise you will end up with looped setState calls
|
|
31
|
+
if (reason === 'reset') {
|
|
32
|
+
// console.log("Reason: ", reason)
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
29
35
|
if (newValue) {
|
|
36
|
+
//If the value is a string (i.e from freeSolo input)
|
|
30
37
|
if (typeof newValue === 'string') {
|
|
31
38
|
onQrItemChange(Object.assign(Object.assign({}, qrOpenChoice), { answer: [{ id: answerKey, valueString: newValue }] }));
|
|
32
39
|
return;
|
|
33
40
|
}
|
|
41
|
+
//If the value is not a string, then it is a coding.
|
|
34
42
|
const option = newValue;
|
|
35
43
|
if (option['valueCoding']) {
|
|
36
44
|
onQrItemChange(Object.assign(Object.assign({}, qrOpenChoice), { answer: [{ id: answerKey, valueCoding: option.valueCoding }] }));
|
|
@@ -46,9 +54,9 @@ function OpenChoiceSelectAnswerOptionItem(props) {
|
|
|
46
54
|
onQrItemChange(createEmptyQrItem(qItem, answerKey));
|
|
47
55
|
}
|
|
48
56
|
if (isRepeated) {
|
|
49
|
-
return (_jsx(OpenChoiceSelectAnswerOptionField, { qItem: qItem, options: answerOptions, valueSelect: valueSelect, feedback: feedback, readOnly: readOnly, isTabled: isTabled, renderingExtensions: renderingExtensions,
|
|
57
|
+
return (_jsx(OpenChoiceSelectAnswerOptionField, { qItem: qItem, options: answerOptions, valueSelect: valueSelect, feedback: feedback, readOnly: readOnly, isTabled: isTabled, renderingExtensions: renderingExtensions, onValueChange: handleValueChange }));
|
|
50
58
|
}
|
|
51
|
-
return (_jsx(FullWidthFormComponentBox, Object.assign({ "data-test": "q-item-open-choice-select-answer-option-box", "data-linkid": qItem.linkId, onClick: () => onFocusLinkId(qItem.linkId) }, { children: _jsx(ItemFieldGrid, { qItem: qItem, readOnly: readOnly, labelChildren: _jsx(ItemLabel, { qItem: qItem, readOnly: readOnly }), fieldChildren: _jsx(OpenChoiceSelectAnswerOptionField, { qItem: qItem, options: answerOptions, valueSelect: valueSelect, feedback: feedback, readOnly: readOnly, isTabled: isTabled, renderingExtensions: renderingExtensions,
|
|
59
|
+
return (_jsx(FullWidthFormComponentBox, Object.assign({ "data-test": "q-item-open-choice-select-answer-option-box", "data-linkid": qItem.linkId, onClick: () => onFocusLinkId(qItem.linkId) }, { children: _jsx(ItemFieldGrid, { qItem: qItem, readOnly: readOnly, labelChildren: _jsx(ItemLabel, { qItem: qItem, readOnly: readOnly }), fieldChildren: _jsx(OpenChoiceSelectAnswerOptionField, { qItem: qItem, options: answerOptions, valueSelect: valueSelect, feedback: feedback, readOnly: readOnly, isTabled: isTabled, renderingExtensions: renderingExtensions, onValueChange: handleValueChange }) }) })));
|
|
52
60
|
}
|
|
53
61
|
export default OpenChoiceSelectAnswerOptionItem;
|
|
54
62
|
//# sourceMappingURL=OpenChoiceSelectAnswerOptionItem.js.map
|
package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenChoiceSelectAnswerOptionItem.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx"],"names":[],"mappings":";AAuBA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAS7D,OAAO,iCAAiC,MAAM,qCAAqC,CAAC;AACpF,OAAO,WAAW,MAAM,4BAA4B,CAAC;AACrD,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,qBAAqB,MAAM,sCAAsC,CAAC;AACzE,OAAO,SAAS,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"OpenChoiceSelectAnswerOptionItem.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx"],"names":[],"mappings":"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"}
|
package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import type { AutocompleteChangeReason } from '@mui/material/Autocomplete';
|
|
1
2
|
import type { PropsWithIsTabledRequiredAttribute, PropsWithParentIsReadOnlyAttribute, PropsWithRenderingExtensionsAttribute } from '../../../interfaces/renderProps.interface';
|
|
2
3
|
import type { Coding, QuestionnaireItem } from 'fhir/r4';
|
|
3
4
|
import type { TerminologyError } from '../../../hooks/useValueSetCodings';
|
|
4
5
|
interface OpenChoiceSelectAnswerValueSetFieldProps extends PropsWithIsTabledRequiredAttribute, PropsWithParentIsReadOnlyAttribute, PropsWithRenderingExtensionsAttribute {
|
|
5
6
|
qItem: QuestionnaireItem;
|
|
6
7
|
options: Coding[];
|
|
7
|
-
valueSelect: Coding | null;
|
|
8
|
+
valueSelect: Coding | string | null;
|
|
8
9
|
terminologyError: TerminologyError;
|
|
9
10
|
feedback: string;
|
|
10
11
|
readOnly: boolean;
|
|
11
|
-
onValueChange: (newValue: Coding | string | null) => void;
|
|
12
|
+
onValueChange: (newValue: Coding | string | null, reason: AutocompleteChangeReason | string) => void;
|
|
12
13
|
}
|
|
13
14
|
declare function OpenChoiceSelectAnswerValueSetField(props: OpenChoiceSelectAnswerValueSetFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
14
15
|
export default OpenChoiceSelectAnswerValueSetField;
|
package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js
CHANGED
|
@@ -10,7 +10,7 @@ function OpenChoiceSelectAnswerValueSetField(props) {
|
|
|
10
10
|
const readOnlyVisualStyle = useRendererStylingStore.use.readOnlyVisualStyle();
|
|
11
11
|
const textFieldWidth = useRendererStylingStore.use.textFieldWidth();
|
|
12
12
|
const { displayUnit, displayPrompt, entryFormat } = renderingExtensions;
|
|
13
|
-
return (_jsxs(_Fragment, { children: [_jsx(Autocomplete, { id: qItem.type + '-' + qItem.linkId, value: valueSelect !== null && valueSelect !== void 0 ? valueSelect : null, options: options, getOptionLabel: (option) => { var _a; return typeof option === 'string' ? option : ((_a = option.display) !== null && _a !== void 0 ? _a : `${option.code}`); }, onChange: (_, newValue) => onValueChange(newValue), onInputChange: (_, newValue) => onValueChange(newValue), freeSolo: true, autoHighlight: true, sx: { maxWidth: !isTabled ? textFieldWidth : 3000, minWidth: 160, flexGrow: 1 }, disabled: readOnly && readOnlyVisualStyle === 'disabled', readOnly: readOnly && readOnlyVisualStyle === 'readonly', size: "small", renderInput: (params) => (_jsx(StandardTextField, Object.assign({ textFieldWidth: textFieldWidth, isTabled: isTabled, label: displayPrompt, placeholder: entryFormat }, params, { slotProps: {
|
|
13
|
+
return (_jsxs(_Fragment, { children: [_jsx(Autocomplete, { id: qItem.type + '-' + qItem.linkId, value: valueSelect !== null && valueSelect !== void 0 ? valueSelect : null, options: options, getOptionLabel: (option) => { var _a; return typeof option === 'string' ? option : ((_a = option.display) !== null && _a !== void 0 ? _a : `${option.code}`); }, onChange: (_, newValue, reason) => onValueChange(newValue, reason), onInputChange: (_, newValue, reason) => onValueChange(newValue, reason), freeSolo: true, autoHighlight: true, sx: { maxWidth: !isTabled ? textFieldWidth : 3000, minWidth: 160, flexGrow: 1 }, disabled: readOnly && readOnlyVisualStyle === 'disabled', readOnly: readOnly && readOnlyVisualStyle === 'readonly', size: "small", renderInput: (params) => (_jsx(StandardTextField, Object.assign({ textFieldWidth: textFieldWidth, isTabled: isTabled, label: displayPrompt, placeholder: entryFormat }, params, { slotProps: {
|
|
14
14
|
input: Object.assign(Object.assign({}, params.InputProps), { readOnly: readOnly && readOnlyVisualStyle === 'readonly', endAdornment: (_jsxs(_Fragment, { children: [params.InputProps.endAdornment, _jsx(DisplayUnitText, Object.assign({ readOnly: readOnly }, { children: displayUnit }))] })) })
|
|
15
15
|
} }))) }), terminologyError.error ? (_jsxs(Typography, { children: ["There was an error fetching options from the terminology server for", ' ', terminologyError.answerValueSet] })) : null, feedback ? _jsx(StyledRequiredTypography, { children: feedback }) : null] }));
|
|
16
16
|
}
|
package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenChoiceSelectAnswerValueSetField.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"OpenChoiceSelectAnswerValueSetField.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.tsx"],"names":[],"mappings":";AAEA,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAQlD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,eAAe,MAAM,8BAA8B,CAAC;AAkB3D,SAAS,mCAAmC,CAAC,KAA+C;IAC1F,MAAM,EACJ,KAAK,EACL,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,mBAAmB,EACnB,aAAa,EACd,GAAG,KAAK,CAAC;IAEV,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;IAC9E,MAAM,cAAc,GAAG,uBAAuB,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;IAEpE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,mBAAmB,CAAC;IAExE,OAAO,CACL,8BACE,KAAC,YAAY,IACX,EAAE,EAAE,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,EACnC,KAAK,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,EAC1B,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,WACzB,OAAA,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAA,MAAM,CAAC,OAAO,mCAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA,EAAA,EAE5E,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,EAClE,aAAa,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,EACvE,QAAQ,QACR,aAAa,QACb,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,EAC/E,QAAQ,EAAE,QAAQ,IAAI,mBAAmB,KAAK,UAAU,EACxD,QAAQ,EAAE,QAAQ,IAAI,mBAAmB,KAAK,UAAU,EACxD,IAAI,EAAC,OAAO,EACZ,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,iBAAiB,kBAChB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,WAAW,IACpB,MAAM,IACV,SAAS,EAAE;wBACT,KAAK,kCACA,MAAM,CAAC,UAAU,KACpB,QAAQ,EAAE,QAAQ,IAAI,mBAAmB,KAAK,UAAU,EACxD,YAAY,EAAE,CACZ,8BACG,MAAM,CAAC,UAAU,CAAC,YAAY,EAC/B,KAAC,eAAe,kBAAC,QAAQ,EAAE,QAAQ,gBAAG,WAAW,IAAmB,IACnE,CACJ,GACF;qBACF,IACD,CACH,GACD,EACD,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CACxB,MAAC,UAAU,sFAC2D,GAAG,EACtE,gBAAgB,CAAC,cAAc,IACrB,CACd,CAAC,CAAC,CAAC,IAAI,EAEP,QAAQ,CAAC,CAAC,CAAC,KAAC,wBAAwB,cAAE,QAAQ,GAA4B,CAAC,CAAC,CAAC,IAAI,IACjF,CACJ,CAAC;AACJ,CAAC;AAED,eAAe,mCAAmC,CAAC"}
|
|
@@ -9,7 +9,7 @@ import { useQuestionnaireStore } from '../../../stores';
|
|
|
9
9
|
import useValidationFeedback from '../../../hooks/useValidationFeedback';
|
|
10
10
|
import ItemLabel from '../ItemParts/ItemLabel';
|
|
11
11
|
function OpenChoiceSelectAnswerValueSetItem(props) {
|
|
12
|
-
var _a
|
|
12
|
+
var _a;
|
|
13
13
|
const { qItem, qrItem, isRepeated, isTabled, renderingExtensions, parentIsReadOnly, feedbackFromParent, onQrItemChange } = props;
|
|
14
14
|
const onFocusLinkId = useQuestionnaireStore.use.onFocusLinkId();
|
|
15
15
|
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
@@ -20,17 +20,45 @@ function OpenChoiceSelectAnswerValueSetItem(props) {
|
|
|
20
20
|
const qrOpenChoice = qrItem !== null && qrItem !== void 0 ? qrItem : createEmptyQrItem(qItem, answerKey);
|
|
21
21
|
let valueSelect = null;
|
|
22
22
|
if (qrOpenChoice['answer']) {
|
|
23
|
-
|
|
23
|
+
//check if answer has valueCoding or valueString and assign it to valueSelect and null if not present
|
|
24
|
+
if (qrOpenChoice['answer'][0].valueString) {
|
|
25
|
+
valueSelect = qrOpenChoice['answer'][0].valueString;
|
|
26
|
+
}
|
|
27
|
+
else if (qrOpenChoice['answer'][0].valueCoding) {
|
|
28
|
+
valueSelect = qrOpenChoice['answer'][0].valueCoding;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
valueSelect = null;
|
|
32
|
+
}
|
|
24
33
|
}
|
|
25
34
|
// Get codings/options from valueSet
|
|
26
35
|
// TODO use dynamicCodingsUpdated to trigger a "refresh" icon when codings are dynamically updated
|
|
27
36
|
const { codings, terminologyError } = useValueSetCodings(qItem);
|
|
28
37
|
// Event handlers
|
|
29
|
-
function
|
|
38
|
+
// Handler function which handles both input change and selection change
|
|
39
|
+
function handleValueChange(newValue, reason) {
|
|
40
|
+
//if the reason is reset, then we don't change the value, otherwise you will end up with looped setState calls
|
|
41
|
+
if (reason === 'reset') {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
30
44
|
if (newValue) {
|
|
31
45
|
if (typeof newValue === 'string') {
|
|
32
|
-
|
|
33
|
-
|
|
46
|
+
// Check if the newValue in in the options, first check options.display, then check options.code
|
|
47
|
+
const foundOption = codings.find((option) => {
|
|
48
|
+
if (option.display) {
|
|
49
|
+
return option.display === newValue;
|
|
50
|
+
}
|
|
51
|
+
return option.code === newValue;
|
|
52
|
+
});
|
|
53
|
+
//if the option.display is not present, then compare to code.
|
|
54
|
+
if (foundOption) {
|
|
55
|
+
newValue = foundOption;
|
|
56
|
+
onQrItemChange(Object.assign(Object.assign({}, qrOpenChoice), { answer: [{ id: answerKey, valueCoding: newValue }] }));
|
|
57
|
+
} //if newValue is not in the options list, treat it as a string
|
|
58
|
+
else {
|
|
59
|
+
onQrItemChange(Object.assign(Object.assign({}, qrOpenChoice), { answer: [{ id: answerKey, valueString: newValue }] }));
|
|
60
|
+
}
|
|
61
|
+
} //if the newValue is not a string, then it is coding
|
|
34
62
|
else {
|
|
35
63
|
onQrItemChange(Object.assign(Object.assign({}, qrOpenChoice), { answer: [{ id: answerKey, valueCoding: newValue }] }));
|
|
36
64
|
}
|
package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenChoiceSelectAnswerValueSetItem.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx"],"names":[],"mappings":";AAmBA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,kBAAkB,MAAM,mCAAmC,CAAC;AASnE,OAAO,mCAAmC,MAAM,uCAAuC,CAAC;AACxF,OAAO,WAAW,MAAM,4BAA4B,CAAC;AACrD,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,qBAAqB,MAAM,sCAAsC,CAAC;AACzE,OAAO,SAAS,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"OpenChoiceSelectAnswerValueSetItem.js","sourceRoot":"","sources":["../../../../src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { QueryClient } from '@tanstack/react-query';
|
|
2
2
|
/**
|
|
3
3
|
* Default QueryClient used by the renderer.
|
|
4
|
-
* You can customise your own QueryClient with your own options, use
|
|
5
|
-
* @see {@link https://tanstack.com/query/
|
|
4
|
+
* You can customise your own QueryClient with your own options, use v5 of @tanstack/react-query.
|
|
5
|
+
* @see {@link https://tanstack.com/query/v5/docs/reference/QueryClient}
|
|
6
6
|
*
|
|
7
7
|
* @author Sean Fong
|
|
8
8
|
*/
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
* See the License for the specific language governing permissions and
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
|
-
import { QueryClient } from '@tanstack/react-query';
|
|
17
|
+
import { keepPreviousData, QueryClient } from '@tanstack/react-query';
|
|
18
18
|
/**
|
|
19
19
|
* Default QueryClient used by the renderer.
|
|
20
|
-
* You can customise your own QueryClient with your own options, use
|
|
21
|
-
* @see {@link https://tanstack.com/query/
|
|
20
|
+
* You can customise your own QueryClient with your own options, use v5 of @tanstack/react-query.
|
|
21
|
+
* @see {@link https://tanstack.com/query/v5/docs/reference/QueryClient}
|
|
22
22
|
*
|
|
23
23
|
* @author Sean Fong
|
|
24
24
|
*/
|
|
@@ -26,7 +26,8 @@ function useRendererQueryClient() {
|
|
|
26
26
|
return new QueryClient({
|
|
27
27
|
defaultOptions: {
|
|
28
28
|
queries: {
|
|
29
|
-
refetchOnWindowFocus: false
|
|
29
|
+
refetchOnWindowFocus: false,
|
|
30
|
+
placeholderData: keepPreviousData
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
33
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRendererQueryClient.js","sourceRoot":"","sources":["../../src/hooks/useRendererQueryClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"useRendererQueryClient.js","sourceRoot":"","sources":["../../src/hooks/useRendererQueryClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEtE;;;;;;GAMG;AACH,SAAS,sBAAsB;IAC7B,OAAO,IAAI,WAAW,CAAC;QACrB,cAAc,EAAE;YACd,OAAO,EAAE;gBACP,oBAAoB,EAAE,KAAK;gBAC3B,eAAe,EAAE,gBAAgB;aAClC;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,eAAe,sBAAsB,CAAC"}
|
package/package.json
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
import React from 'react';
|
|
19
19
|
import Box from '@mui/material/Box';
|
|
20
|
+
import type { AutocompleteChangeReason } from '@mui/material/Autocomplete';
|
|
20
21
|
import Autocomplete from '@mui/material/Autocomplete';
|
|
21
22
|
import { StandardTextField } from '../Textfield.styles';
|
|
22
23
|
import SearchIcon from '@mui/icons-material/Search';
|
|
@@ -48,9 +49,10 @@ interface OpenChoiceAutocompleteFieldProps
|
|
|
48
49
|
loading: boolean;
|
|
49
50
|
feedback: { message: string; color: AlertColor } | null;
|
|
50
51
|
readOnly: boolean;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
onValueChange: (
|
|
53
|
+
newValue: Coding | string | null,
|
|
54
|
+
reason: AutocompleteChangeReason | string
|
|
55
|
+
) => void;
|
|
54
56
|
}
|
|
55
57
|
|
|
56
58
|
function OpenChoiceAutocompleteField(props: OpenChoiceAutocompleteFieldProps) {
|
|
@@ -64,9 +66,7 @@ function OpenChoiceAutocompleteField(props: OpenChoiceAutocompleteFieldProps) {
|
|
|
64
66
|
readOnly,
|
|
65
67
|
isTabled,
|
|
66
68
|
renderingExtensions,
|
|
67
|
-
|
|
68
|
-
onValueChange,
|
|
69
|
-
onUnfocus
|
|
69
|
+
onValueChange
|
|
70
70
|
} = props;
|
|
71
71
|
|
|
72
72
|
const readOnlyVisualStyle = useRendererStylingStore.use.readOnlyVisualStyle();
|
|
@@ -90,14 +90,13 @@ function OpenChoiceAutocompleteField(props: OpenChoiceAutocompleteFieldProps) {
|
|
|
90
90
|
clearOnEscape
|
|
91
91
|
freeSolo
|
|
92
92
|
sx={{ maxWidth: !isTabled ? textFieldWidth : 3000, minWidth: 220, flexGrow: 1 }}
|
|
93
|
-
onChange={(_, newValue) => onValueChange(newValue)}
|
|
93
|
+
onChange={(_, newValue, reason) => onValueChange(newValue, reason)}
|
|
94
|
+
onInputChange={(_, newValue, reason) => onValueChange(newValue, reason)}
|
|
94
95
|
filterOptions={(x) => x}
|
|
95
96
|
renderInput={(params) => (
|
|
96
97
|
<StandardTextField
|
|
97
98
|
{...params}
|
|
98
99
|
value={input}
|
|
99
|
-
onBlur={onUnfocus}
|
|
100
|
-
onChange={(e) => onInputChange(e.target.value)}
|
|
101
100
|
textFieldWidth={textFieldWidth}
|
|
102
101
|
isTabled={isTabled}
|
|
103
102
|
label={displayPrompt}
|
|
@@ -39,6 +39,7 @@ import { useQuestionnaireStore } from '../../../stores';
|
|
|
39
39
|
import useValidationFeedback from '../../../hooks/useValidationFeedback';
|
|
40
40
|
import type { AlertColor } from '@mui/material/Alert';
|
|
41
41
|
import ItemLabel from '../ItemParts/ItemLabel';
|
|
42
|
+
import type { AutocompleteChangeReason } from '@mui/material';
|
|
42
43
|
|
|
43
44
|
interface OpenChoiceAutocompleteItemProps
|
|
44
45
|
extends PropsWithQrItemChangeHandler,
|
|
@@ -107,7 +108,21 @@ function OpenChoiceAutocompleteItem(props: OpenChoiceAutocompleteItemProps) {
|
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
// Event handlers
|
|
110
|
-
function
|
|
111
|
+
// Handler function which handles both input change and selection change
|
|
112
|
+
function handleValueChange(
|
|
113
|
+
newValue: Coding | string | null,
|
|
114
|
+
reason: AutocompleteChangeReason | string
|
|
115
|
+
) {
|
|
116
|
+
//if the reason is reset, then we don't change the value, otherwise you will end up with looped setState calls
|
|
117
|
+
if (reason === 'reset') {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
//if the text input is changed, and only if hte input is a string the set the state.
|
|
121
|
+
if (newValue && typeof newValue === 'string' && reason === 'input') {
|
|
122
|
+
setInput(newValue);
|
|
123
|
+
// return;
|
|
124
|
+
}
|
|
125
|
+
|
|
111
126
|
if (newValue === null) {
|
|
112
127
|
setInput('');
|
|
113
128
|
newValue = '';
|
|
@@ -115,10 +130,26 @@ function OpenChoiceAutocompleteItem(props: OpenChoiceAutocompleteItemProps) {
|
|
|
115
130
|
|
|
116
131
|
if (typeof newValue === 'string') {
|
|
117
132
|
if (newValue !== '') {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
133
|
+
// Check if the newValue in in the options, first check options.display, then check options.code
|
|
134
|
+
const foundOption = options.find((option) => {
|
|
135
|
+
if (option.display) {
|
|
136
|
+
return option.display === newValue;
|
|
137
|
+
}
|
|
138
|
+
return option.code === newValue;
|
|
121
139
|
});
|
|
140
|
+
if (foundOption) {
|
|
141
|
+
newValue = foundOption;
|
|
142
|
+
onQrItemChange({
|
|
143
|
+
...qrOpenChoice,
|
|
144
|
+
answer: [{ id: answerKey, valueCoding: newValue }]
|
|
145
|
+
});
|
|
146
|
+
} //if newValue is not in the options list, treat it as a string
|
|
147
|
+
else {
|
|
148
|
+
onQrItemChange({
|
|
149
|
+
...createEmptyQrItem(qItem, answerKey),
|
|
150
|
+
answer: [{ id: answerKey, valueString: newValue }]
|
|
151
|
+
});
|
|
152
|
+
}
|
|
122
153
|
} else {
|
|
123
154
|
onQrItemChange(createEmptyQrItem(qItem, answerKey));
|
|
124
155
|
}
|
|
@@ -130,16 +161,6 @@ function OpenChoiceAutocompleteItem(props: OpenChoiceAutocompleteItemProps) {
|
|
|
130
161
|
}
|
|
131
162
|
}
|
|
132
163
|
|
|
133
|
-
function handleUnfocus() {
|
|
134
|
-
// set answer to current input when text field is unfocused
|
|
135
|
-
if (!valueAutocomplete && input !== '') {
|
|
136
|
-
onQrItemChange({
|
|
137
|
-
...createEmptyQrItem(qItem, answerKey),
|
|
138
|
-
answer: [{ id: answerKey, valueString: input }]
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
164
|
if (isRepeated) {
|
|
144
165
|
return (
|
|
145
166
|
<OpenChoiceAutocompleteField
|
|
@@ -152,9 +173,7 @@ function OpenChoiceAutocompleteItem(props: OpenChoiceAutocompleteItemProps) {
|
|
|
152
173
|
readOnly={readOnly}
|
|
153
174
|
isTabled={isTabled}
|
|
154
175
|
renderingExtensions={renderingExtensions}
|
|
155
|
-
onInputChange={(newValue) => setInput(newValue)}
|
|
156
176
|
onValueChange={handleValueChange}
|
|
157
|
-
onUnfocus={handleUnfocus}
|
|
158
177
|
/>
|
|
159
178
|
);
|
|
160
179
|
}
|
|
@@ -179,9 +198,7 @@ function OpenChoiceAutocompleteItem(props: OpenChoiceAutocompleteItemProps) {
|
|
|
179
198
|
readOnly={readOnly}
|
|
180
199
|
isTabled={isTabled}
|
|
181
200
|
renderingExtensions={renderingExtensions}
|
|
182
|
-
onInputChange={(newValue) => setInput(newValue)}
|
|
183
201
|
onValueChange={handleValueChange}
|
|
184
|
-
onUnfocus={handleUnfocus}
|
|
185
202
|
/>
|
|
186
203
|
}
|
|
187
204
|
/>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { getAnswerOptionLabel } from '../../../utils/openChoice';
|
|
3
3
|
import { StandardTextField } from '../Textfield.styles';
|
|
4
|
+
import type { AutocompleteChangeReason } from '@mui/material/Autocomplete';
|
|
4
5
|
import Autocomplete from '@mui/material/Autocomplete';
|
|
5
6
|
import type { QuestionnaireItem, QuestionnaireItemAnswerOption } from 'fhir/r4';
|
|
6
7
|
import type {
|
|
@@ -21,7 +22,10 @@ interface OpenChoiceSelectAnswerOptionFieldProps
|
|
|
21
22
|
valueSelect: QuestionnaireItemAnswerOption | null;
|
|
22
23
|
feedback: string;
|
|
23
24
|
readOnly: boolean;
|
|
24
|
-
|
|
25
|
+
onValueChange: (
|
|
26
|
+
newValue: QuestionnaireItemAnswerOption | string | null,
|
|
27
|
+
reason: AutocompleteChangeReason | string
|
|
28
|
+
) => void;
|
|
25
29
|
}
|
|
26
30
|
|
|
27
31
|
function OpenChoiceSelectAnswerOptionField(props: OpenChoiceSelectAnswerOptionFieldProps) {
|
|
@@ -33,7 +37,7 @@ function OpenChoiceSelectAnswerOptionField(props: OpenChoiceSelectAnswerOptionFi
|
|
|
33
37
|
readOnly,
|
|
34
38
|
isTabled,
|
|
35
39
|
renderingExtensions,
|
|
36
|
-
|
|
40
|
+
onValueChange
|
|
37
41
|
} = props;
|
|
38
42
|
|
|
39
43
|
const readOnlyVisualStyle = useRendererStylingStore.use.readOnlyVisualStyle();
|
|
@@ -48,7 +52,8 @@ function OpenChoiceSelectAnswerOptionField(props: OpenChoiceSelectAnswerOptionFi
|
|
|
48
52
|
value={valueSelect ?? null}
|
|
49
53
|
options={options}
|
|
50
54
|
getOptionLabel={(option) => getAnswerOptionLabel(option)}
|
|
51
|
-
onChange={(_, newValue) =>
|
|
55
|
+
onChange={(_, newValue, reason) => onValueChange(newValue, reason)}
|
|
56
|
+
onInputChange={(_, newValue, reason) => onValueChange(newValue, reason)}
|
|
52
57
|
freeSolo
|
|
53
58
|
autoHighlight
|
|
54
59
|
sx={{ maxWidth: !isTabled ? textFieldWidth : 3000, minWidth: 160, flexGrow: 1 }}
|
|
@@ -37,6 +37,7 @@ import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
|
|
|
37
37
|
import { useQuestionnaireStore } from '../../../stores';
|
|
38
38
|
import useValidationFeedback from '../../../hooks/useValidationFeedback';
|
|
39
39
|
import ItemLabel from '../ItemParts/ItemLabel';
|
|
40
|
+
import type { AutocompleteChangeReason } from '@mui/material';
|
|
40
41
|
|
|
41
42
|
interface OpenChoiceSelectAnswerOptionItemProps
|
|
42
43
|
extends PropsWithQrItemChangeHandler,
|
|
@@ -74,14 +75,24 @@ function OpenChoiceSelectAnswerOptionItem(props: OpenChoiceSelectAnswerOptionIte
|
|
|
74
75
|
if (!answerOptions) return null;
|
|
75
76
|
|
|
76
77
|
const qrOpenChoice = qrItem ?? createEmptyQrItem(qItem, answerKey);
|
|
77
|
-
let valueSelect: QuestionnaireItemAnswerOption | null = null;
|
|
78
|
+
let valueSelect: QuestionnaireItemAnswerOption | string | null = null;
|
|
78
79
|
if (qrOpenChoice.answer) {
|
|
79
80
|
valueSelect = qrOpenChoice.answer[0] ?? null;
|
|
80
81
|
}
|
|
81
82
|
|
|
82
83
|
// Event handlers
|
|
83
|
-
function
|
|
84
|
+
// Handler function which handles both input change and selection change
|
|
85
|
+
function handleValueChange(
|
|
86
|
+
newValue: QuestionnaireItemAnswerOption | string | null,
|
|
87
|
+
reason: AutocompleteChangeReason | string
|
|
88
|
+
) {
|
|
89
|
+
//if the reason is reset, then we don't change the value, otherwise you will end up with looped setState calls
|
|
90
|
+
if (reason === 'reset') {
|
|
91
|
+
// console.log("Reason: ", reason)
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
84
94
|
if (newValue) {
|
|
95
|
+
//If the value is a string (i.e from freeSolo input)
|
|
85
96
|
if (typeof newValue === 'string') {
|
|
86
97
|
onQrItemChange({
|
|
87
98
|
...qrOpenChoice,
|
|
@@ -89,7 +100,7 @@ function OpenChoiceSelectAnswerOptionItem(props: OpenChoiceSelectAnswerOptionIte
|
|
|
89
100
|
});
|
|
90
101
|
return;
|
|
91
102
|
}
|
|
92
|
-
|
|
103
|
+
//If the value is not a string, then it is a coding.
|
|
93
104
|
const option = newValue;
|
|
94
105
|
if (option['valueCoding']) {
|
|
95
106
|
onQrItemChange({
|
|
@@ -122,7 +133,7 @@ function OpenChoiceSelectAnswerOptionItem(props: OpenChoiceSelectAnswerOptionIte
|
|
|
122
133
|
readOnly={readOnly}
|
|
123
134
|
isTabled={isTabled}
|
|
124
135
|
renderingExtensions={renderingExtensions}
|
|
125
|
-
|
|
136
|
+
onValueChange={handleValueChange}
|
|
126
137
|
/>
|
|
127
138
|
);
|
|
128
139
|
}
|
|
@@ -145,7 +156,7 @@ function OpenChoiceSelectAnswerOptionItem(props: OpenChoiceSelectAnswerOptionIte
|
|
|
145
156
|
readOnly={readOnly}
|
|
146
157
|
isTabled={isTabled}
|
|
147
158
|
renderingExtensions={renderingExtensions}
|
|
148
|
-
|
|
159
|
+
onValueChange={handleValueChange}
|
|
149
160
|
/>
|
|
150
161
|
}
|
|
151
162
|
/>
|
package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.tsx
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import type { AutocompleteChangeReason } from '@mui/material/Autocomplete';
|
|
2
3
|
import Autocomplete from '@mui/material/Autocomplete';
|
|
3
4
|
import { StandardTextField } from '../Textfield.styles';
|
|
4
5
|
import Typography from '@mui/material/Typography';
|
|
@@ -19,11 +20,14 @@ interface OpenChoiceSelectAnswerValueSetFieldProps
|
|
|
19
20
|
PropsWithRenderingExtensionsAttribute {
|
|
20
21
|
qItem: QuestionnaireItem;
|
|
21
22
|
options: Coding[];
|
|
22
|
-
valueSelect: Coding | null;
|
|
23
|
+
valueSelect: Coding | string | null;
|
|
23
24
|
terminologyError: TerminologyError;
|
|
24
25
|
feedback: string;
|
|
25
26
|
readOnly: boolean;
|
|
26
|
-
onValueChange: (
|
|
27
|
+
onValueChange: (
|
|
28
|
+
newValue: Coding | string | null,
|
|
29
|
+
reason: AutocompleteChangeReason | string
|
|
30
|
+
) => void;
|
|
27
31
|
}
|
|
28
32
|
|
|
29
33
|
function OpenChoiceSelectAnswerValueSetField(props: OpenChoiceSelectAnswerValueSetFieldProps) {
|
|
@@ -53,8 +57,8 @@ function OpenChoiceSelectAnswerValueSetField(props: OpenChoiceSelectAnswerValueS
|
|
|
53
57
|
getOptionLabel={(option) =>
|
|
54
58
|
typeof option === 'string' ? option : (option.display ?? `${option.code}`)
|
|
55
59
|
}
|
|
56
|
-
onChange={(_, newValue) => onValueChange(newValue)}
|
|
57
|
-
onInputChange={(_, newValue) => onValueChange(newValue)}
|
|
60
|
+
onChange={(_, newValue, reason) => onValueChange(newValue, reason)}
|
|
61
|
+
onInputChange={(_, newValue, reason) => onValueChange(newValue, reason)}
|
|
58
62
|
freeSolo
|
|
59
63
|
autoHighlight
|
|
60
64
|
sx={{ maxWidth: !isTabled ? textFieldWidth : 3000, minWidth: 160, flexGrow: 1 }}
|
package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx
CHANGED
|
@@ -34,6 +34,7 @@ import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
|
|
|
34
34
|
import { useQuestionnaireStore } from '../../../stores';
|
|
35
35
|
import useValidationFeedback from '../../../hooks/useValidationFeedback';
|
|
36
36
|
import ItemLabel from '../ItemParts/ItemLabel';
|
|
37
|
+
import type { AutocompleteChangeReason } from '@mui/material';
|
|
37
38
|
|
|
38
39
|
interface OpenChoiceSelectAnswerValueSetItemProps
|
|
39
40
|
extends PropsWithQrItemChangeHandler,
|
|
@@ -69,9 +70,16 @@ function OpenChoiceSelectAnswerValueSetItem(props: OpenChoiceSelectAnswerValueSe
|
|
|
69
70
|
const answerKey = qrItem?.answer?.[0].id;
|
|
70
71
|
const qrOpenChoice = qrItem ?? createEmptyQrItem(qItem, answerKey);
|
|
71
72
|
|
|
72
|
-
let valueSelect: Coding | null = null;
|
|
73
|
+
let valueSelect: Coding | string | null = null;
|
|
73
74
|
if (qrOpenChoice['answer']) {
|
|
74
|
-
|
|
75
|
+
//check if answer has valueCoding or valueString and assign it to valueSelect and null if not present
|
|
76
|
+
if (qrOpenChoice['answer'][0].valueString) {
|
|
77
|
+
valueSelect = qrOpenChoice['answer'][0].valueString;
|
|
78
|
+
} else if (qrOpenChoice['answer'][0].valueCoding) {
|
|
79
|
+
valueSelect = qrOpenChoice['answer'][0].valueCoding;
|
|
80
|
+
} else {
|
|
81
|
+
valueSelect = null;
|
|
82
|
+
}
|
|
75
83
|
}
|
|
76
84
|
|
|
77
85
|
// Get codings/options from valueSet
|
|
@@ -79,14 +87,44 @@ function OpenChoiceSelectAnswerValueSetItem(props: OpenChoiceSelectAnswerValueSe
|
|
|
79
87
|
const { codings, terminologyError } = useValueSetCodings(qItem);
|
|
80
88
|
|
|
81
89
|
// Event handlers
|
|
82
|
-
function
|
|
90
|
+
// Handler function which handles both input change and selection change
|
|
91
|
+
function handleValueChange(
|
|
92
|
+
newValue: Coding | string | null,
|
|
93
|
+
reason: AutocompleteChangeReason | string
|
|
94
|
+
) {
|
|
95
|
+
//if the reason is reset, then we don't change the value, otherwise you will end up with looped setState calls
|
|
96
|
+
|
|
97
|
+
if (reason === 'reset') {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
|
|
83
101
|
if (newValue) {
|
|
84
102
|
if (typeof newValue === 'string') {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
103
|
+
// Check if the newValue in in the options, first check options.display, then check options.code
|
|
104
|
+
const foundOption = codings.find((option) => {
|
|
105
|
+
if (option.display) {
|
|
106
|
+
return option.display === newValue;
|
|
107
|
+
}
|
|
108
|
+
return option.code === newValue;
|
|
88
109
|
});
|
|
89
|
-
|
|
110
|
+
|
|
111
|
+
//if the option.display is not present, then compare to code.
|
|
112
|
+
|
|
113
|
+
if (foundOption) {
|
|
114
|
+
newValue = foundOption;
|
|
115
|
+
onQrItemChange({
|
|
116
|
+
...qrOpenChoice,
|
|
117
|
+
answer: [{ id: answerKey, valueCoding: newValue }]
|
|
118
|
+
});
|
|
119
|
+
} //if newValue is not in the options list, treat it as a string
|
|
120
|
+
else {
|
|
121
|
+
onQrItemChange({
|
|
122
|
+
...qrOpenChoice,
|
|
123
|
+
answer: [{ id: answerKey, valueString: newValue }]
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
} //if the newValue is not a string, then it is coding
|
|
127
|
+
else {
|
|
90
128
|
onQrItemChange({
|
|
91
129
|
...qrOpenChoice,
|
|
92
130
|
answer: [{ id: answerKey, valueCoding: newValue }]
|
|
@@ -29,7 +29,7 @@ import type {
|
|
|
29
29
|
PropsWithQrItemChangeHandler
|
|
30
30
|
} from '../../interfaces/renderProps.interface';
|
|
31
31
|
import { useQuestionnaireStore, useRendererStylingStore } from '../../stores';
|
|
32
|
-
import { GridProps } from '@mui/material/Grid';
|
|
32
|
+
import type { GridProps } from '@mui/material/Grid';
|
|
33
33
|
|
|
34
34
|
interface FormBodyTabbedProps
|
|
35
35
|
extends PropsWithQrItemChangeHandler,
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { QueryClient } from '@tanstack/react-query';
|
|
18
|
+
import { keepPreviousData, QueryClient } from '@tanstack/react-query';
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Default QueryClient used by the renderer.
|
|
22
|
-
* You can customise your own QueryClient with your own options, use
|
|
23
|
-
* @see {@link https://tanstack.com/query/
|
|
22
|
+
* You can customise your own QueryClient with your own options, use v5 of @tanstack/react-query.
|
|
23
|
+
* @see {@link https://tanstack.com/query/v5/docs/reference/QueryClient}
|
|
24
24
|
*
|
|
25
25
|
* @author Sean Fong
|
|
26
26
|
*/
|
|
@@ -28,7 +28,8 @@ function useRendererQueryClient() {
|
|
|
28
28
|
return new QueryClient({
|
|
29
29
|
defaultOptions: {
|
|
30
30
|
queries: {
|
|
31
|
-
refetchOnWindowFocus: false
|
|
31
|
+
refetchOnWindowFocus: false,
|
|
32
|
+
placeholderData: keepPreviousData
|
|
32
33
|
}
|
|
33
34
|
}
|
|
34
35
|
});
|
package/src/theme/typography.ts
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { TypographyVariantsOptions } from '@mui/material';
|
|
18
|
+
import type { TypographyVariantsOptions } from '@mui/material';
|
|
19
19
|
import type { CSSProperties } from 'react';
|
|
20
20
|
|
|
21
21
|
declare module '@mui/material/styles' {
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
2
|
-
import type { PropsWithParentIsReadOnlyAttribute, PropsWithQrItemChangeHandler } from '../../interfaces/renderProps.interface';
|
|
3
|
-
interface FormBodyPageProps extends PropsWithQrItemChangeHandler, PropsWithParentIsReadOnlyAttribute {
|
|
4
|
-
topLevelQItem: QuestionnaireItem;
|
|
5
|
-
topLevelQRItem: QuestionnaireResponseItem | null;
|
|
6
|
-
}
|
|
7
|
-
declare function FormBodyPage(props: FormBodyPageProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
-
export default FormBodyPage;
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useMemo } from 'react';
|
|
3
|
-
import Grid from '@mui/material/Grid';
|
|
4
|
-
import TabContext from '@mui/lab/TabContext';
|
|
5
|
-
import TabPanel from '@mui/lab/TabPanel';
|
|
6
|
-
import GroupItem from '../FormComponents/GroupItem/GroupItem';
|
|
7
|
-
import { useQuestionnaireStore } from '../../stores';
|
|
8
|
-
import { getQrItemsIndex, mapQItemsIndex } from '../../utils/mapItem';
|
|
9
|
-
import { createEmptyQrGroup, updateQrItemsInGroup } from '../../utils/qrItem';
|
|
10
|
-
function FormBodyPage(props) {
|
|
11
|
-
const { topLevelQItem, topLevelQRItem, parentIsReadOnly, onQrItemChange } = props;
|
|
12
|
-
const pages = useQuestionnaireStore.use.pages();
|
|
13
|
-
const currentPage = useQuestionnaireStore.use.currentPageIndex();
|
|
14
|
-
const indexMap = useMemo(() => mapQItemsIndex(topLevelQItem), [topLevelQItem]);
|
|
15
|
-
const nonNullTopLevelQRItem = topLevelQRItem !== null && topLevelQRItem !== void 0 ? topLevelQRItem : createEmptyQrGroup(topLevelQItem);
|
|
16
|
-
const qItems = topLevelQItem.item;
|
|
17
|
-
const qrItems = nonNullTopLevelQRItem.item;
|
|
18
|
-
function handleQrGroupChange(qrItem) {
|
|
19
|
-
updateQrItemsInGroup(qrItem, null, nonNullTopLevelQRItem, indexMap);
|
|
20
|
-
onQrItemChange(nonNullTopLevelQRItem);
|
|
21
|
-
}
|
|
22
|
-
if (!qItems || !qrItems) {
|
|
23
|
-
return _jsx(_Fragment, { children: "Unable to load form" });
|
|
24
|
-
}
|
|
25
|
-
const qrItemsByIndex = getQrItemsIndex(qItems, qrItems, indexMap);
|
|
26
|
-
return (_jsx(Grid, Object.assign({ container: true, spacing: 1.5 }, { children: _jsx(TabContext, Object.assign({ value: currentPage.toString() }, { children: _jsx(Grid, Object.assign({ item: true, xs: 12, md: 12, lg: 12 }, { children: qItems.map((qItem, i) => {
|
|
27
|
-
var _a, _b;
|
|
28
|
-
const qrItem = qrItemsByIndex[i];
|
|
29
|
-
const isNotRepeatGroup = !Array.isArray(qrItem);
|
|
30
|
-
const isPage = !!pages[qItem.linkId];
|
|
31
|
-
if (!isPage || !isNotRepeatGroup) {
|
|
32
|
-
// Something has gone horribly wrong
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
35
|
-
const isRepeated = (_a = qItem.repeats) !== null && _a !== void 0 ? _a : false;
|
|
36
|
-
const pageIsMarkedAsComplete = (_b = pages[qItem.linkId].isComplete) !== null && _b !== void 0 ? _b : false;
|
|
37
|
-
return (_jsx(TabPanel, Object.assign({ sx: { p: 0 }, value: i.toString(), "data-test": "renderer-page-panel" }, { children: _jsx(GroupItem, { qItem: qItem, qrItem: qrItem !== null && qrItem !== void 0 ? qrItem : null, isRepeated: isRepeated, groupCardElevation: 1, pageIsMarkedAsComplete: pageIsMarkedAsComplete, pages: pages, currentPageIndex: currentPage, parentIsReadOnly: parentIsReadOnly, onQrItemChange: handleQrGroupChange }) }), qItem.linkId));
|
|
38
|
-
}) })) })) })));
|
|
39
|
-
}
|
|
40
|
-
export default FormBodyPage;
|
|
41
|
-
//# sourceMappingURL=FormBodyPage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FormBodyPage.js","sourceRoot":"","sources":["../../../src/components/Renderer/FormBodyPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
2
|
-
import type { PropsWithParentIsReadOnlyAttribute, PropsWithQrItemChangeHandler } from '../../interfaces/renderProps.interface';
|
|
3
|
-
interface FormBodySinglePageProps extends PropsWithQrItemChangeHandler, PropsWithParentIsReadOnlyAttribute {
|
|
4
|
-
topLevelQItem: QuestionnaireItem;
|
|
5
|
-
topLevelQRItem: QuestionnaireResponseItem | null;
|
|
6
|
-
}
|
|
7
|
-
declare function FormBodySinglePage(props: FormBodySinglePageProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
-
export default FormBodySinglePage;
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useMemo } from 'react';
|
|
3
|
-
import Grid from '@mui/material/Grid';
|
|
4
|
-
import TabContext from '@mui/lab/TabContext';
|
|
5
|
-
import TabPanel from '@mui/lab/TabPanel';
|
|
6
|
-
import GroupItem from '../FormComponents/GroupItem/GroupItem';
|
|
7
|
-
import { useQuestionnaireStore } from '../../stores';
|
|
8
|
-
import { getQrItemsIndex, mapQItemsIndex } from '../../utils/mapItem';
|
|
9
|
-
import { createEmptyQrGroup, updateQrItemsInGroup } from '../../utils/qrItem';
|
|
10
|
-
function FormBodySinglePage(props) {
|
|
11
|
-
const { topLevelQItem, topLevelQRItem, parentIsReadOnly, onQrItemChange } = props;
|
|
12
|
-
const pages = useQuestionnaireStore.use.pages();
|
|
13
|
-
console.log(pages);
|
|
14
|
-
const currentPage = useQuestionnaireStore.use.currentPageIndex();
|
|
15
|
-
const indexMap = useMemo(() => mapQItemsIndex(topLevelQItem), [topLevelQItem]);
|
|
16
|
-
const nonNullTopLevelQRItem = topLevelQRItem !== null && topLevelQRItem !== void 0 ? topLevelQRItem : createEmptyQrGroup(topLevelQItem);
|
|
17
|
-
const qItems = topLevelQItem.item;
|
|
18
|
-
const qrItems = nonNullTopLevelQRItem.item;
|
|
19
|
-
function handleQrGroupChange(qrItem) {
|
|
20
|
-
updateQrItemsInGroup(qrItem, null, nonNullTopLevelQRItem, indexMap);
|
|
21
|
-
onQrItemChange(nonNullTopLevelQRItem);
|
|
22
|
-
}
|
|
23
|
-
if (!qItems || !qrItems) {
|
|
24
|
-
return _jsx(_Fragment, { children: "Unable to load form" });
|
|
25
|
-
}
|
|
26
|
-
const qrItemsByIndex = getQrItemsIndex(qItems, qrItems, indexMap);
|
|
27
|
-
return (_jsx(Grid, Object.assign({ container: true, spacing: 1.5 }, { children: _jsx(TabContext, Object.assign({ value: currentPage.toString() }, { children: _jsx(Grid, Object.assign({ item: true, xs: 12, md: 12, lg: 12 }, { children: qItems.map((qItem, i) => {
|
|
28
|
-
var _a, _b;
|
|
29
|
-
const qrItem = qrItemsByIndex[i];
|
|
30
|
-
const isNotRepeatGroup = !Array.isArray(qrItem);
|
|
31
|
-
const isPage = !!pages[qItem.linkId];
|
|
32
|
-
if (!isPage || !isNotRepeatGroup) {
|
|
33
|
-
// Something has gone horribly wrong
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
const isRepeated = (_a = qItem.repeats) !== null && _a !== void 0 ? _a : false;
|
|
37
|
-
const pageIsMarkedAsComplete = (_b = pages[qItem.linkId].isComplete) !== null && _b !== void 0 ? _b : false;
|
|
38
|
-
return (_jsx(TabPanel, Object.assign({ sx: { p: 0 }, value: i.toString(), "data-test": "renderer-page-panel" }, { children: _jsx(GroupItem, { qItem: qItem, qrItem: qrItem !== null && qrItem !== void 0 ? qrItem : null, isRepeated: isRepeated, groupCardElevation: 1, pageIsMarkedAsComplete: pageIsMarkedAsComplete, pages: pages, currentPageIndex: currentPage, parentIsReadOnly: parentIsReadOnly, onQrItemChange: handleQrGroupChange }) }), qItem.linkId));
|
|
39
|
-
}) })) })) })));
|
|
40
|
-
}
|
|
41
|
-
export default FormBodySinglePage;
|
|
42
|
-
//# sourceMappingURL=FormBodySinglePage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FormBodySinglePage.js","sourceRoot":"","sources":["../../../src/components/Renderer/FormBodySinglePage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
2
|
-
import type { PropsWithParentIsReadOnlyAttribute, PropsWithQrItemChangeHandler } from '../../interfaces/renderProps.interface';
|
|
3
|
-
interface FormTopLevelPageProps extends PropsWithQrItemChangeHandler, PropsWithParentIsReadOnlyAttribute {
|
|
4
|
-
topLevelQItems: QuestionnaireItem[];
|
|
5
|
-
topLevelQRItems: (QuestionnaireResponseItem | QuestionnaireResponseItem[] | undefined)[];
|
|
6
|
-
}
|
|
7
|
-
declare function FormTopLevelPage(props: FormTopLevelPageProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
-
export default FormTopLevelPage;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import Grid from '@mui/material/Grid';
|
|
3
|
-
import TabContext from '@mui/lab/TabContext';
|
|
4
|
-
import TabPanel from '@mui/lab/TabPanel';
|
|
5
|
-
import GroupItem from '../FormComponents/GroupItem/GroupItem';
|
|
6
|
-
import { useQuestionnaireStore } from '../../stores';
|
|
7
|
-
function FormTopLevelPage(props) {
|
|
8
|
-
const { topLevelQItems, topLevelQRItems, parentIsReadOnly, onQrItemChange } = props;
|
|
9
|
-
const pages = useQuestionnaireStore.use.pages();
|
|
10
|
-
const currentPage = useQuestionnaireStore.use.currentPageIndex();
|
|
11
|
-
return (_jsx(Grid, Object.assign({ container: true, spacing: 1.5 }, { children: _jsx(TabContext, Object.assign({ value: currentPage.toString() }, { children: _jsx(Grid, Object.assign({ item: true, xs: 12, md: 12, lg: 12 }, { children: topLevelQItems.map((qItem, i) => {
|
|
12
|
-
var _a, _b;
|
|
13
|
-
const qrItem = topLevelQRItems[i];
|
|
14
|
-
const isNotRepeatGroup = !Array.isArray(qrItem);
|
|
15
|
-
const isPage = !!pages[qItem.linkId];
|
|
16
|
-
if (!isPage || !isNotRepeatGroup) {
|
|
17
|
-
// Something has gone horribly wrong
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
const isRepeated = (_a = qItem.repeats) !== null && _a !== void 0 ? _a : false;
|
|
21
|
-
const pageIsMarkedAsComplete = (_b = pages[qItem.linkId].isComplete) !== null && _b !== void 0 ? _b : false;
|
|
22
|
-
return (_jsx(TabPanel, Object.assign({ sx: { p: 0 }, value: i.toString(), "data-test": "renderer-page-panel" }, { children: _jsx(GroupItem, { qItem: qItem, qrItem: qrItem !== null && qrItem !== void 0 ? qrItem : null, isRepeated: isRepeated, groupCardElevation: 1, pageIsMarkedAsComplete: pageIsMarkedAsComplete, pages: pages, currentPageIndex: currentPage, parentIsReadOnly: parentIsReadOnly, onQrItemChange: onQrItemChange }) }), qItem.linkId));
|
|
23
|
-
}) })) })) })));
|
|
24
|
-
}
|
|
25
|
-
export default FormTopLevelPage;
|
|
26
|
-
//# sourceMappingURL=FormTopLevelPage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FormTopLevelPage.js","sourceRoot":"","sources":["../../../src/components/Renderer/FormTopLevelPage.tsx"],"names":[],"mappings":";AACA,OAAO,IAAI,MAAM,oBAAoB,CAAC;AAEtC,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAC7C,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,SAAS,MAAM,uCAAuC,CAAC;AAK9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AASrD,SAAS,gBAAgB,CAAC,KAA4B;IACpD,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAEpF,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IAChD,MAAM,WAAW,GAAG,qBAAqB,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAEjE,OAAO,CACL,KAAC,IAAI,kBAAC,SAAS,QAAC,OAAO,EAAE,GAAG,gBAC1B,KAAC,UAAU,kBAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE,gBACvC,KAAC,IAAI,kBAAC,IAAI,QAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,gBAC9B,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;;oBAC/B,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;oBAElC,MAAM,gBAAgB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAChD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAErC,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE;wBAChC,oCAAoC;wBACpC,OAAO,IAAI,CAAC;qBACb;oBAED,MAAM,UAAU,GAAG,MAAA,KAAK,CAAC,OAAO,mCAAI,KAAK,CAAC;oBAC1C,MAAM,sBAAsB,GAAG,MAAA,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,UAAU,mCAAI,KAAK,CAAC;oBAEvE,OAAO,CACL,KAAC,QAAQ,kBAEP,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EACZ,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,eACT,qBAAqB,gBAC/B,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI,EACtB,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,CAAC,EACrB,sBAAsB,EAAE,sBAAsB,EAC9C,KAAK,EAAE,KAAK,EACZ,gBAAgB,EAAE,WAAW,EAC7B,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,cAAc,GAC9B,KAdG,KAAK,CAAC,MAAM,CAeR,CACZ,CAAC;gBACJ,CAAC,CAAC,IACG,IACI,IACR,CACR,CAAC;AACJ,CAAC;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"computedChanges.interface.js","sourceRoot":"","sources":["../../src/interfaces/computedChanges.interface.ts"],"names":[],"mappings":""}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { Expression, Extension } from 'fhir/r4';
|
|
2
|
-
export interface ParameterisedValueSet {
|
|
3
|
-
valueSetUrl: string;
|
|
4
|
-
bindingParameters: BindingParameter[];
|
|
5
|
-
}
|
|
6
|
-
export interface BindingParameter {
|
|
7
|
-
name: string;
|
|
8
|
-
expression: BindingParameterExpression;
|
|
9
|
-
}
|
|
10
|
-
export interface BindingParameterExpression extends Extension {
|
|
11
|
-
valueExpression?: Expression;
|
|
12
|
-
valueString?: string;
|
|
13
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parameterisedValueSets.interface.js","sourceRoot":"","sources":["../../src/interfaces/parameterisedValueSets.interface.ts"],"names":[],"mappings":""}
|