@aehrc/smart-forms-renderer 0.7.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js +0 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.d.ts +12 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.js +39 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.js.map +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.d.ts +3 -3
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +14 -27
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.d.ts +13 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.js +42 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.js.map +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.d.ts +4 -3
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +14 -22
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js +3 -3
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.d.ts +12 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js +27 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js.map +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.d.ts +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +9 -24
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.d.ts +14 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js +42 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js.map +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.d.ts +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +8 -21
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.d.ts +10 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js +41 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js.map +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +7 -23
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.d.ts +12 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js +42 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js.map +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js +8 -18
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +4 -4
- package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/Item.styles.d.ts +2 -2
- package/lib/components/FormComponents/Item.styles.js +2 -2
- package/lib/components/FormComponents/Item.styles.js.map +1 -1
- package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.d.ts +8 -0
- package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.js +37 -0
- package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.js.map +1 -0
- package/lib/components/FormComponents/ItemParts/RadioButtons.d.ts +8 -0
- package/lib/components/FormComponents/ItemParts/RadioButtons.js +37 -0
- package/lib/components/FormComponents/ItemParts/RadioButtons.js.map +1 -0
- package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.d.ts +8 -0
- package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.js +37 -0
- package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.js.map +1 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.d.ts +20 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js +49 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js.map +1 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.d.ts +0 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.js +2 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.js.map +1 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js +11 -35
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.d.ts +17 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.js +42 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.js.map +1 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.d.ts +3 -3
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js +23 -36
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.d.ts +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js +3 -3
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.d.ts +15 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.js +29 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.js.map +1 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.d.ts +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js +3 -23
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.d.ts +11 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js +14 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js.map +1 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.d.ts +0 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.js +2 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.js.map +1 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js +18 -23
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.d.ts +12 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js +16 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js.map +1 -0
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js +8 -14
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/SingleItem/SingleItem.d.ts +2 -2
- package/lib/components/FormComponents/SingleItem/SingleItem.js +2 -2
- package/lib/components/FormComponents/SingleItem/SingleItem.js.map +1 -1
- package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.d.ts +2 -2
- package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js +3 -3
- package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/Tables/AddItemButton.d.ts +8 -0
- package/lib/components/FormComponents/Tables/AddItemButton.js +28 -0
- package/lib/components/FormComponents/Tables/AddItemButton.js.map +1 -0
- package/lib/components/FormComponents/Tables/AddRowButton.d.ts +8 -0
- package/lib/components/FormComponents/Tables/AddRowButton.js +28 -0
- package/lib/components/FormComponents/Tables/AddRowButton.js.map +1 -0
- package/lib/components/FormComponents/Tables/GroupTable.d.ts +10 -0
- package/lib/components/FormComponents/Tables/GroupTable.js +108 -0
- package/lib/components/FormComponents/Tables/GroupTable.js.map +1 -0
- package/lib/components/FormComponents/Tables/GroupTableRow.d.ts +10 -0
- package/lib/components/FormComponents/Tables/GroupTableRow.js +46 -0
- package/lib/components/FormComponents/Tables/GroupTableRow.js.map +1 -0
- package/lib/components/FormComponents/Tables/index.d.ts +1 -1
- package/lib/components/FormComponents/Tables/index.js +1 -1
- package/lib/components/FormComponents/Tables/index.js.map +1 -1
- package/lib/components/Renderer/FormBodyTabbed.js +1 -1
- package/lib/components/Renderer/FormBodyTabbed.js.map +1 -1
- package/lib/components/Tabs/FormBodySingleTab.js +1 -1
- package/lib/components/Tabs/FormBodySingleTab.js.map +1 -1
- package/lib/components/Tabs/FormBodyTabList.d.ts +1 -0
- package/lib/components/Tabs/FormBodyTabList.js +3 -4
- package/lib/components/Tabs/FormBodyTabList.js.map +1 -1
- package/lib/components/Tabs/FormBodyTabListWrapper.d.ts +1 -1
- package/lib/components/Tabs/FormBodyTabListWrapper.js +6 -13
- package/lib/components/Tabs/FormBodyTabListWrapper.js.map +1 -1
- package/lib/components/Tabs/ShowCompletedTabsSection.d.ts +7 -0
- package/lib/components/Tabs/ShowCompletedTabsSection.js +34 -0
- package/lib/components/Tabs/ShowCompletedTabsSection.js.map +1 -0
- package/lib/hooks/useContextDisplayItems.d.ts +6 -0
- package/lib/hooks/useContextDisplayItems.js +30 -0
- package/lib/hooks/useContextDisplayItems.js.map +1 -0
- package/lib/hooks/useInitialiseRenderer.js +2 -2
- package/lib/hooks/useInitialiseRenderer.js.map +1 -1
- package/lib/hooks/useInitialiseRepeatGroups.d.ts +1 -1
- package/lib/hooks/useNumberInput.d.ts +1 -1
- package/lib/hooks/useNumberInput.js.map +1 -1
- package/lib/hooks/useStringInput.d.ts +1 -1
- package/lib/hooks/useStringInput.js.map +1 -1
- package/lib/hooks/useTerminologyServerQuery.js +3 -6
- package/lib/hooks/useTerminologyServerQuery.js.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/interfaces/renderProps.interface.d.ts +3 -0
- package/lib/stores/useQuestionnaireResponseStore.d.ts +2 -1
- package/lib/stores/useQuestionnaireResponseStore.js +5 -3
- package/lib/stores/useQuestionnaireResponseStore.js.map +1 -1
- package/lib/utils/qrItem.d.ts +2 -3
- package/lib/utils/qrItem.js +2 -3
- package/lib/utils/qrItem.js.map +1 -1
- package/lib/utils/repopulateIntoResponse.d.ts +2 -2
- package/lib/utils/repopulateItems.js +0 -1
- package/lib/utils/repopulateItems.js.map +1 -1
- package/package.json +7 -7
- package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +0 -1
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.tsx +85 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +35 -58
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.tsx +79 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +37 -50
- package/src/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.tsx +10 -5
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.tsx +48 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +25 -53
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.tsx +83 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +27 -49
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +81 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +19 -54
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.tsx +97 -0
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +22 -60
- package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +4 -4
- package/src/components/FormComponents/Item.styles.ts +2 -2
- package/src/components/FormComponents/ItemParts/RadioAnswerOptionButtons.tsx +72 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.tsx +131 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +38 -93
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.tsx +112 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +57 -76
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.tsx +8 -5
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.tsx +72 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +12 -59
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx +54 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +40 -64
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.tsx +63 -0
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +22 -50
- package/src/components/FormComponents/SingleItem/SingleItem.tsx +6 -3
- package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +7 -3
- package/src/components/FormComponents/Tables/AddRowButton.tsx +49 -0
- package/src/components/FormComponents/Tables/{QItemGroupTable.tsx → GroupTable.tsx} +6 -17
- package/src/components/FormComponents/Tables/{QItemGroupTableRow.tsx → GroupTableRow.tsx} +2 -2
- package/src/components/FormComponents/Tables/index.ts +1 -1
- package/src/components/Renderer/FormBodyTabbed.tsx +1 -1
- package/src/components/Tabs/FormBodySingleTab.tsx +1 -1
- package/src/components/Tabs/FormBodyTabList.tsx +5 -8
- package/src/components/Tabs/FormBodyTabListWrapper.tsx +15 -26
- package/src/components/Tabs/ShowCompletedTabsSection.tsx +52 -0
- package/src/hooks/useContextDisplayItems.ts +40 -0
- package/src/hooks/useInitialiseRenderer.ts +2 -2
- package/src/hooks/useInitialiseRepeatGroups.ts +1 -1
- package/src/hooks/useNumberInput.ts +2 -1
- package/src/hooks/useStringInput.ts +2 -1
- package/src/hooks/useTerminologyServerQuery.ts +3 -6
- package/src/index.ts +2 -2
- package/src/interfaces/renderProps.interface.ts +4 -0
- package/src/stores/useQuestionnaireResponseStore.ts +5 -4
- package/src/utils/qrItem.ts +4 -3
- package/src/utils/repopulateIntoResponse.ts +2 -2
- package/src/utils/repopulateItems.ts +0 -1
|
@@ -29,19 +29,22 @@ import ChoiceCheckboxAnswerValueSetItem from './ChoiceCheckboxAnswerValueSetItem
|
|
|
29
29
|
import type {
|
|
30
30
|
PropsWithIsRepeatedAttribute,
|
|
31
31
|
PropsWithIsTabledAttribute,
|
|
32
|
-
PropsWithQrItemChangeHandler
|
|
32
|
+
PropsWithQrItemChangeHandler,
|
|
33
|
+
PropsWithTextShownAttribute
|
|
33
34
|
} from '../../../interfaces/renderProps.interface';
|
|
34
35
|
|
|
35
36
|
interface ChoiceItemSwitcherProps
|
|
36
37
|
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
37
38
|
PropsWithIsRepeatedAttribute,
|
|
38
|
-
PropsWithIsTabledAttribute
|
|
39
|
+
PropsWithIsTabledAttribute,
|
|
40
|
+
PropsWithTextShownAttribute {
|
|
39
41
|
qItem: QuestionnaireItem;
|
|
40
42
|
qrItem: QuestionnaireResponseItem;
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
function ChoiceItemSwitcher(props: ChoiceItemSwitcherProps) {
|
|
44
|
-
const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
|
|
46
|
+
const { qItem, qrItem, isRepeated, isTabled, textShown, onQrItemChange } = props;
|
|
47
|
+
|
|
45
48
|
const orientation = getChoiceOrientation(qItem);
|
|
46
49
|
const choiceControlType = getChoiceControlType(qItem);
|
|
47
50
|
|
|
@@ -74,9 +77,10 @@ function ChoiceItemSwitcher(props: ChoiceItemSwitcherProps) {
|
|
|
74
77
|
<ChoiceCheckboxAnswerOptionItem
|
|
75
78
|
qItem={qItem}
|
|
76
79
|
qrItem={qrItem}
|
|
77
|
-
isRepeated={qItem
|
|
80
|
+
isRepeated={qItem.repeats ?? false}
|
|
78
81
|
onQrItemChange={onQrItemChange}
|
|
79
82
|
orientation={orientation}
|
|
83
|
+
textShown={textShown}
|
|
80
84
|
/>
|
|
81
85
|
);
|
|
82
86
|
} else {
|
|
@@ -84,9 +88,10 @@ function ChoiceItemSwitcher(props: ChoiceItemSwitcherProps) {
|
|
|
84
88
|
<ChoiceCheckboxAnswerValueSetItem
|
|
85
89
|
qItem={qItem}
|
|
86
90
|
qrItem={qrItem}
|
|
87
|
-
isRepeated={qItem
|
|
91
|
+
isRepeated={qItem.repeats ?? false}
|
|
88
92
|
onQrItemChange={onQrItemChange}
|
|
89
93
|
orientation={orientation}
|
|
94
|
+
textShown={textShown}
|
|
90
95
|
/>
|
|
91
96
|
);
|
|
92
97
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 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
|
+
|
|
18
|
+
import React from 'react';
|
|
19
|
+
import { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
|
|
20
|
+
import type { QuestionnaireItem } from 'fhir/r4';
|
|
21
|
+
import RadioAnswerOptionButtons from '../ItemParts/RadioAnswerOptionButtons';
|
|
22
|
+
import { StyledRadioGroup } from '../Item.styles';
|
|
23
|
+
|
|
24
|
+
interface ChoiceRadioAnswerOptionFieldsProps {
|
|
25
|
+
qItem: QuestionnaireItem;
|
|
26
|
+
valueRadio: string | null;
|
|
27
|
+
orientation: ChoiceItemOrientation;
|
|
28
|
+
readOnly: boolean;
|
|
29
|
+
onCheckedChange: (newValue: string) => void;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function ChoiceRadioAnswerOptionFields(props: ChoiceRadioAnswerOptionFieldsProps) {
|
|
33
|
+
const { qItem, valueRadio, orientation, readOnly, onCheckedChange } = props;
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<StyledRadioGroup
|
|
37
|
+
row={orientation === ChoiceItemOrientation.Horizontal}
|
|
38
|
+
name={qItem.text}
|
|
39
|
+
id={qItem.id}
|
|
40
|
+
onChange={(e) => onCheckedChange(e.target.value)}
|
|
41
|
+
value={valueRadio}
|
|
42
|
+
data-test="q-item-radio-group">
|
|
43
|
+
<RadioAnswerOptionButtons qItem={qItem} readOnly={readOnly} />
|
|
44
|
+
</StyledRadioGroup>
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export default ChoiceRadioAnswerOptionFields;
|
|
@@ -15,15 +15,12 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import type { ChangeEvent } from 'react';
|
|
19
18
|
import React from 'react';
|
|
20
19
|
import Grid from '@mui/material/Grid';
|
|
21
|
-
import { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
|
|
20
|
+
import type { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
|
|
22
21
|
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
23
22
|
import { findInAnswerOptions, getQrChoiceValue } from '../../../utils/choice';
|
|
24
|
-
import ChoiceRadioSingle from './ChoiceRadioSingle';
|
|
25
23
|
import { createEmptyQrItem } from '../../../utils/qrItem';
|
|
26
|
-
import { QRadioGroup } from '../Item.styles';
|
|
27
24
|
import { FullWidthFormComponentBox } from '../../Box.styles';
|
|
28
25
|
import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
|
|
29
26
|
import type {
|
|
@@ -32,6 +29,7 @@ import type {
|
|
|
32
29
|
} from '../../../interfaces/renderProps.interface';
|
|
33
30
|
import DisplayInstructions from '../DisplayItem/DisplayInstructions';
|
|
34
31
|
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
32
|
+
import ChoiceRadioAnswerOptionFields from './ChoiceRadioAnswerOptionFields';
|
|
35
33
|
|
|
36
34
|
interface ChoiceRadioAnswerOptionItemProps
|
|
37
35
|
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
@@ -52,74 +50,48 @@ function ChoiceRadioAnswerOptionItem(props: ChoiceRadioAnswerOptionItemProps) {
|
|
|
52
50
|
const { displayInstructions, readOnly } = useRenderingExtensions(qItem);
|
|
53
51
|
|
|
54
52
|
// Event handlers
|
|
55
|
-
function handleChange(
|
|
53
|
+
function handleChange(newValue: string) {
|
|
56
54
|
if (qItem.answerOption) {
|
|
57
|
-
const qrAnswer = findInAnswerOptions(qItem.answerOption,
|
|
55
|
+
const qrAnswer = findInAnswerOptions(qItem.answerOption, newValue);
|
|
58
56
|
if (qrAnswer) {
|
|
59
57
|
onQrItemChange({ ...createEmptyQrItem(qItem), answer: [qrAnswer] });
|
|
60
58
|
}
|
|
61
59
|
}
|
|
62
60
|
}
|
|
63
61
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
value={option.valueCoding.code ?? ''}
|
|
78
|
-
label={option.valueCoding.display ?? `${option.valueCoding.code}`}
|
|
79
|
-
readOnly={readOnly}
|
|
80
|
-
/>
|
|
81
|
-
);
|
|
82
|
-
} else if (option['valueString']) {
|
|
83
|
-
return (
|
|
84
|
-
<ChoiceRadioSingle
|
|
85
|
-
key={option.valueString}
|
|
86
|
-
value={option.valueString}
|
|
87
|
-
label={option.valueString}
|
|
88
|
-
readOnly={readOnly}
|
|
89
|
-
/>
|
|
90
|
-
);
|
|
91
|
-
} else if (option['valueInteger']) {
|
|
92
|
-
return (
|
|
93
|
-
<ChoiceRadioSingle
|
|
94
|
-
key={option.valueInteger}
|
|
95
|
-
value={option.valueInteger.toString()}
|
|
96
|
-
label={option.valueInteger.toString()}
|
|
97
|
-
readOnly={readOnly}
|
|
98
|
-
/>
|
|
99
|
-
);
|
|
100
|
-
} else {
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
})}
|
|
104
|
-
</QRadioGroup>
|
|
105
|
-
);
|
|
62
|
+
// TODO need to put in showText? in repopulate
|
|
63
|
+
|
|
64
|
+
if (isRepeated) {
|
|
65
|
+
return (
|
|
66
|
+
<ChoiceRadioAnswerOptionFields
|
|
67
|
+
qItem={qItem}
|
|
68
|
+
valueRadio={valueRadio}
|
|
69
|
+
orientation={orientation}
|
|
70
|
+
readOnly={readOnly}
|
|
71
|
+
onCheckedChange={handleChange}
|
|
72
|
+
/>
|
|
73
|
+
);
|
|
74
|
+
}
|
|
106
75
|
|
|
107
|
-
|
|
108
|
-
<>{choiceRadio}</>
|
|
109
|
-
) : (
|
|
76
|
+
return (
|
|
110
77
|
<FullWidthFormComponentBox data-test="q-item-choice-radio-answer-option-box">
|
|
111
78
|
<Grid container columnSpacing={6}>
|
|
112
79
|
<Grid item xs={5}>
|
|
113
80
|
<LabelWrapper qItem={qItem} />
|
|
114
81
|
</Grid>
|
|
115
82
|
<Grid item xs={7}>
|
|
116
|
-
|
|
83
|
+
<ChoiceRadioAnswerOptionFields
|
|
84
|
+
qItem={qItem}
|
|
85
|
+
valueRadio={valueRadio}
|
|
86
|
+
orientation={orientation}
|
|
87
|
+
readOnly={readOnly}
|
|
88
|
+
onCheckedChange={handleChange}
|
|
89
|
+
/>
|
|
117
90
|
<DisplayInstructions displayInstructions={displayInstructions} />
|
|
118
91
|
</Grid>
|
|
119
92
|
</Grid>
|
|
120
93
|
</FullWidthFormComponentBox>
|
|
121
94
|
);
|
|
122
|
-
return <>{renderQItemChoiceRadio}</>;
|
|
123
95
|
}
|
|
124
96
|
|
|
125
97
|
export default ChoiceRadioAnswerOptionItem;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 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
|
+
|
|
18
|
+
import React from 'react';
|
|
19
|
+
import Typography from '@mui/material/Typography';
|
|
20
|
+
import { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
|
|
21
|
+
import type { Coding, QuestionnaireItem } from 'fhir/r4';
|
|
22
|
+
import ChoiceRadioSingle from './ChoiceRadioSingle';
|
|
23
|
+
import { StyledRadioGroup } from '../Item.styles';
|
|
24
|
+
import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';
|
|
25
|
+
import { StyledAlert } from '../../Alert.styles';
|
|
26
|
+
|
|
27
|
+
interface ChoiceRadioAnswerValueSetFieldsProps {
|
|
28
|
+
qItem: QuestionnaireItem;
|
|
29
|
+
codings: Coding[];
|
|
30
|
+
valueRadio: string | null;
|
|
31
|
+
orientation: ChoiceItemOrientation;
|
|
32
|
+
readOnly: boolean;
|
|
33
|
+
serverError: Error | null;
|
|
34
|
+
onCheckedChange: (newValue: string) => void;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function ChoiceRadioAnswerValueSetFields(props: ChoiceRadioAnswerValueSetFieldsProps) {
|
|
38
|
+
const { qItem, codings, valueRadio, orientation, readOnly, serverError, onCheckedChange } = props;
|
|
39
|
+
|
|
40
|
+
if (codings.length > 0) {
|
|
41
|
+
return (
|
|
42
|
+
<StyledRadioGroup
|
|
43
|
+
row={orientation === ChoiceItemOrientation.Horizontal}
|
|
44
|
+
name={qItem.text}
|
|
45
|
+
id={qItem.id}
|
|
46
|
+
onChange={(e) => onCheckedChange(e.target.value)}
|
|
47
|
+
value={valueRadio ?? null}>
|
|
48
|
+
{codings.map((coding: Coding) => {
|
|
49
|
+
return (
|
|
50
|
+
<ChoiceRadioSingle
|
|
51
|
+
key={coding.code ?? ''}
|
|
52
|
+
value={coding.code ?? ''}
|
|
53
|
+
label={coding.display ?? `${coding.code}`}
|
|
54
|
+
readOnly={readOnly}
|
|
55
|
+
/>
|
|
56
|
+
);
|
|
57
|
+
})}
|
|
58
|
+
</StyledRadioGroup>
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (serverError) {
|
|
63
|
+
return (
|
|
64
|
+
<StyledAlert color="error">
|
|
65
|
+
<ErrorOutlineIcon color="error" sx={{ pr: 0.75 }} />
|
|
66
|
+
<Typography variant="subtitle2">
|
|
67
|
+
There was an error fetching options from the terminology server
|
|
68
|
+
</Typography>
|
|
69
|
+
</StyledAlert>
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return (
|
|
74
|
+
<StyledAlert color="error">
|
|
75
|
+
<ErrorOutlineIcon color="error" sx={{ pr: 0.75 }} />
|
|
76
|
+
<Typography variant="subtitle2">
|
|
77
|
+
Unable to fetch options from the questionnaire or launch context
|
|
78
|
+
</Typography>
|
|
79
|
+
</StyledAlert>
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export default ChoiceRadioAnswerValueSetFields;
|
|
@@ -15,27 +15,22 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import type { ChangeEvent } from 'react';
|
|
19
18
|
import React from 'react';
|
|
20
19
|
import Grid from '@mui/material/Grid';
|
|
21
|
-
import
|
|
22
|
-
import {
|
|
23
|
-
import type { Coding, QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
20
|
+
import type { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
|
|
21
|
+
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
24
22
|
import { findInAnswerValueSetCodings } from '../../../utils/choice';
|
|
25
|
-
import ChoiceRadioSingle from './ChoiceRadioSingle';
|
|
26
23
|
import { createEmptyQrItem } from '../../../utils/qrItem';
|
|
27
|
-
import { QRadioGroup } from '../Item.styles';
|
|
28
24
|
import { FullWidthFormComponentBox } from '../../Box.styles';
|
|
29
25
|
import useValueSetCodings from '../../../hooks/useValueSetCodings';
|
|
30
26
|
import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
|
|
31
|
-
import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';
|
|
32
27
|
import type {
|
|
33
28
|
PropsWithIsRepeatedAttribute,
|
|
34
29
|
PropsWithQrItemChangeHandler
|
|
35
30
|
} from '../../../interfaces/renderProps.interface';
|
|
36
|
-
import { StyledAlert } from '../../Alert.styles';
|
|
37
31
|
import DisplayInstructions from '../DisplayItem/DisplayInstructions';
|
|
38
32
|
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
33
|
+
import ChoiceRadioAnswerValueSetFields from './ChoiceRadioAnswerValueSetFields';
|
|
39
34
|
|
|
40
35
|
interface ChoiceRadioAnswerValueSetItemProps
|
|
41
36
|
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
@@ -51,9 +46,9 @@ function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps
|
|
|
51
46
|
// Init input value
|
|
52
47
|
const qrChoiceRadio = qrItem ?? createEmptyQrItem(qItem);
|
|
53
48
|
|
|
54
|
-
let valueRadio: string |
|
|
49
|
+
let valueRadio: string | null = null;
|
|
55
50
|
if (qrChoiceRadio.answer) {
|
|
56
|
-
valueRadio = qrChoiceRadio.answer[0].valueCoding?.code;
|
|
51
|
+
valueRadio = qrChoiceRadio.answer[0].valueCoding?.code ?? null;
|
|
57
52
|
}
|
|
58
53
|
|
|
59
54
|
// Get additional rendering extensions
|
|
@@ -62,9 +57,9 @@ function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps
|
|
|
62
57
|
// Get codings/options from valueSet
|
|
63
58
|
const { codings, serverError } = useValueSetCodings(qItem);
|
|
64
59
|
|
|
65
|
-
function handleChange(
|
|
60
|
+
function handleChange(newValue: string) {
|
|
66
61
|
if (codings.length > 0) {
|
|
67
|
-
const qrAnswer = findInAnswerValueSetCodings(codings,
|
|
62
|
+
const qrAnswer = findInAnswerValueSetCodings(codings, newValue);
|
|
68
63
|
if (qrAnswer) {
|
|
69
64
|
onQrItemChange({
|
|
70
65
|
...createEmptyQrItem(qItem),
|
|
@@ -74,43 +69,18 @@ function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps
|
|
|
74
69
|
}
|
|
75
70
|
}
|
|
76
71
|
|
|
77
|
-
const choiceRadio =
|
|
78
|
-
codings.length > 0 ? (
|
|
79
|
-
<QRadioGroup
|
|
80
|
-
row={orientation === ChoiceItemOrientation.Horizontal}
|
|
81
|
-
name={qItem.text}
|
|
82
|
-
id={qItem.id}
|
|
83
|
-
onChange={handleChange}
|
|
84
|
-
value={valueRadio ?? null}>
|
|
85
|
-
{codings.map((coding: Coding) => {
|
|
86
|
-
return (
|
|
87
|
-
<ChoiceRadioSingle
|
|
88
|
-
key={coding.code ?? ''}
|
|
89
|
-
value={coding.code ?? ''}
|
|
90
|
-
label={coding.display ?? `${coding.code}`}
|
|
91
|
-
readOnly={readOnly}
|
|
92
|
-
/>
|
|
93
|
-
);
|
|
94
|
-
})}
|
|
95
|
-
</QRadioGroup>
|
|
96
|
-
) : serverError ? (
|
|
97
|
-
<StyledAlert color="error">
|
|
98
|
-
<ErrorOutlineIcon color="error" sx={{ pr: 0.75 }} />
|
|
99
|
-
<Typography variant="subtitle2">
|
|
100
|
-
There was an error fetching options from the terminology server
|
|
101
|
-
</Typography>
|
|
102
|
-
</StyledAlert>
|
|
103
|
-
) : (
|
|
104
|
-
<StyledAlert color="error">
|
|
105
|
-
<ErrorOutlineIcon color="error" sx={{ pr: 0.75 }} />
|
|
106
|
-
<Typography variant="subtitle2">
|
|
107
|
-
Unable to fetch options from the questionnaire or launch context
|
|
108
|
-
</Typography>
|
|
109
|
-
</StyledAlert>
|
|
110
|
-
);
|
|
111
|
-
|
|
112
72
|
if (isRepeated) {
|
|
113
|
-
return
|
|
73
|
+
return (
|
|
74
|
+
<ChoiceRadioAnswerValueSetFields
|
|
75
|
+
qItem={qItem}
|
|
76
|
+
codings={codings}
|
|
77
|
+
valueRadio={valueRadio}
|
|
78
|
+
orientation={orientation}
|
|
79
|
+
readOnly={readOnly}
|
|
80
|
+
serverError={serverError}
|
|
81
|
+
onCheckedChange={handleChange}
|
|
82
|
+
/>
|
|
83
|
+
);
|
|
114
84
|
}
|
|
115
85
|
|
|
116
86
|
return (
|
|
@@ -120,7 +90,15 @@ function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps
|
|
|
120
90
|
<LabelWrapper qItem={qItem} />
|
|
121
91
|
</Grid>
|
|
122
92
|
<Grid item xs={7}>
|
|
123
|
-
|
|
93
|
+
<ChoiceRadioAnswerValueSetFields
|
|
94
|
+
qItem={qItem}
|
|
95
|
+
codings={codings}
|
|
96
|
+
valueRadio={valueRadio}
|
|
97
|
+
orientation={orientation}
|
|
98
|
+
readOnly={readOnly}
|
|
99
|
+
serverError={serverError}
|
|
100
|
+
onCheckedChange={handleChange}
|
|
101
|
+
/>
|
|
124
102
|
<DisplayInstructions displayInstructions={displayInstructions} />
|
|
125
103
|
</Grid>
|
|
126
104
|
</Grid>
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 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
|
+
|
|
18
|
+
import React, { Fragment } from 'react';
|
|
19
|
+
import InputAdornment from '@mui/material/InputAdornment';
|
|
20
|
+
import MenuItem from '@mui/material/MenuItem';
|
|
21
|
+
import Select from '@mui/material/Select';
|
|
22
|
+
import type { QuestionnaireItem } from 'fhir/r4';
|
|
23
|
+
import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
|
|
24
|
+
import type { PropsWithIsTabledAttribute } from '../../../interfaces/renderProps.interface';
|
|
25
|
+
|
|
26
|
+
interface ChoiceSelectAnswerOptionFieldsProps extends PropsWithIsTabledAttribute {
|
|
27
|
+
qItem: QuestionnaireItem;
|
|
28
|
+
valueSelect: string;
|
|
29
|
+
onSelectChange: (newValue: string) => void;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function ChoiceSelectAnswerOptionFields(props: ChoiceSelectAnswerOptionFieldsProps) {
|
|
33
|
+
const { qItem, valueSelect, isTabled, onSelectChange } = props;
|
|
34
|
+
|
|
35
|
+
const { displayUnit, displayPrompt, readOnly, entryFormat } = useRenderingExtensions(qItem);
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<Select
|
|
39
|
+
id={qItem.id}
|
|
40
|
+
name={qItem.text}
|
|
41
|
+
value={valueSelect}
|
|
42
|
+
disabled={readOnly}
|
|
43
|
+
fullWidth
|
|
44
|
+
placeholder={entryFormat}
|
|
45
|
+
label={displayPrompt}
|
|
46
|
+
endAdornment={<InputAdornment position={'end'}>{displayUnit}</InputAdornment>}
|
|
47
|
+
sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 160 }}
|
|
48
|
+
size="small"
|
|
49
|
+
onChange={(e) => onSelectChange(e.target.value)}>
|
|
50
|
+
{qItem.answerOption?.map((option, index) => {
|
|
51
|
+
if (option['valueCoding']) {
|
|
52
|
+
return (
|
|
53
|
+
<MenuItem key={option.valueCoding.code} value={option.valueCoding.code}>
|
|
54
|
+
{option.valueCoding.display ?? option.valueCoding.code}
|
|
55
|
+
</MenuItem>
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (option['valueString']) {
|
|
60
|
+
return (
|
|
61
|
+
<MenuItem key={option.valueString} value={option.valueString}>
|
|
62
|
+
{option.valueString}
|
|
63
|
+
</MenuItem>
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (option['valueInteger']) {
|
|
68
|
+
return (
|
|
69
|
+
<MenuItem key={option.valueInteger} value={option.valueInteger.toString()}>
|
|
70
|
+
{option.valueInteger}
|
|
71
|
+
</MenuItem>
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return <Fragment key={index} />;
|
|
76
|
+
})}
|
|
77
|
+
</Select>
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export default ChoiceSelectAnswerOptionFields;
|
|
@@ -15,12 +15,8 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import React
|
|
18
|
+
import React from 'react';
|
|
19
19
|
import Grid from '@mui/material/Grid';
|
|
20
|
-
import InputAdornment from '@mui/material/InputAdornment';
|
|
21
|
-
import MenuItem from '@mui/material/MenuItem';
|
|
22
|
-
import type { SelectChangeEvent } from '@mui/material/Select';
|
|
23
|
-
import Select from '@mui/material/Select';
|
|
24
20
|
|
|
25
21
|
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
26
22
|
import { findInAnswerOptions, getQrChoiceValue } from '../../../utils/choice';
|
|
@@ -34,6 +30,7 @@ import type {
|
|
|
34
30
|
} from '../../../interfaces/renderProps.interface';
|
|
35
31
|
import DisplayInstructions from '../DisplayItem/DisplayInstructions';
|
|
36
32
|
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
33
|
+
import ChoiceSelectAnswerOptionFields from './ChoiceSelectAnswerOptionFields';
|
|
37
34
|
|
|
38
35
|
interface ChoiceSelectAnswerOptionItemProps
|
|
39
36
|
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
@@ -54,13 +51,12 @@ function ChoiceSelectAnswerOptionItem(props: ChoiceSelectAnswerOptionItemProps)
|
|
|
54
51
|
}
|
|
55
52
|
|
|
56
53
|
// Get additional rendering extensions
|
|
57
|
-
const {
|
|
58
|
-
useRenderingExtensions(qItem);
|
|
54
|
+
const { displayInstructions } = useRenderingExtensions(qItem);
|
|
59
55
|
|
|
60
56
|
// Event handlers
|
|
61
|
-
function handleChange(
|
|
57
|
+
function handleChange(newValue: string) {
|
|
62
58
|
if (qItem.answerOption) {
|
|
63
|
-
const qrAnswer = findInAnswerOptions(qItem.answerOption,
|
|
59
|
+
const qrAnswer = findInAnswerOptions(qItem.answerOption, newValue);
|
|
64
60
|
if (qrAnswer) {
|
|
65
61
|
onQrItemChange({ ...createEmptyQrItem(qItem), answer: [qrAnswer] });
|
|
66
62
|
return;
|
|
@@ -69,51 +65,15 @@ function ChoiceSelectAnswerOptionItem(props: ChoiceSelectAnswerOptionItemProps)
|
|
|
69
65
|
onQrItemChange(createEmptyQrItem(qItem));
|
|
70
66
|
}
|
|
71
67
|
|
|
72
|
-
const choiceSelectAnswerOption = (
|
|
73
|
-
<Select
|
|
74
|
-
id={qItem.id}
|
|
75
|
-
name={qItem.text}
|
|
76
|
-
value={valueSelect}
|
|
77
|
-
disabled={readOnly}
|
|
78
|
-
fullWidth
|
|
79
|
-
placeholder={entryFormat}
|
|
80
|
-
label={displayPrompt}
|
|
81
|
-
endAdornment={<InputAdornment position={'end'}>{displayUnit}</InputAdornment>}
|
|
82
|
-
sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 160 }}
|
|
83
|
-
size="small"
|
|
84
|
-
onChange={handleChange}>
|
|
85
|
-
{qItem.answerOption?.map((option, index) => {
|
|
86
|
-
if (option['valueCoding']) {
|
|
87
|
-
return (
|
|
88
|
-
<MenuItem key={option.valueCoding.code} value={option.valueCoding.code}>
|
|
89
|
-
{option.valueCoding.display ?? option.valueCoding.code}
|
|
90
|
-
</MenuItem>
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (option['valueString']) {
|
|
95
|
-
return (
|
|
96
|
-
<MenuItem key={option.valueString} value={option.valueString}>
|
|
97
|
-
{option.valueString}
|
|
98
|
-
</MenuItem>
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
if (option['valueInteger']) {
|
|
103
|
-
return (
|
|
104
|
-
<MenuItem key={option.valueInteger} value={option.valueInteger.toString()}>
|
|
105
|
-
{option.valueInteger}
|
|
106
|
-
</MenuItem>
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return <Fragment key={index} />;
|
|
111
|
-
})}
|
|
112
|
-
</Select>
|
|
113
|
-
);
|
|
114
|
-
|
|
115
68
|
if (isRepeated) {
|
|
116
|
-
return
|
|
69
|
+
return (
|
|
70
|
+
<ChoiceSelectAnswerOptionFields
|
|
71
|
+
qItem={qItem}
|
|
72
|
+
valueSelect={valueSelect}
|
|
73
|
+
onSelectChange={handleChange}
|
|
74
|
+
isTabled={isTabled}
|
|
75
|
+
/>
|
|
76
|
+
);
|
|
117
77
|
}
|
|
118
78
|
|
|
119
79
|
return (
|
|
@@ -123,7 +83,12 @@ function ChoiceSelectAnswerOptionItem(props: ChoiceSelectAnswerOptionItemProps)
|
|
|
123
83
|
<LabelWrapper qItem={qItem} />
|
|
124
84
|
</Grid>
|
|
125
85
|
<Grid item xs={7}>
|
|
126
|
-
|
|
86
|
+
<ChoiceSelectAnswerOptionFields
|
|
87
|
+
qItem={qItem}
|
|
88
|
+
valueSelect={valueSelect}
|
|
89
|
+
onSelectChange={handleChange}
|
|
90
|
+
isTabled={isTabled}
|
|
91
|
+
/>
|
|
127
92
|
<DisplayInstructions displayInstructions={displayInstructions} />
|
|
128
93
|
</Grid>
|
|
129
94
|
</Grid>
|