@aehrc/smart-forms-renderer 0.8.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/Alert.styles.d.ts +2 -7
- package/lib/components/Box.styles.d.ts +6 -21
- package/lib/components/FormComponents/BooleanItem/BooleanItem.d.ts +2 -2
- package/lib/components/FormComponents/BooleanItem/BooleanItem.js +5 -4
- package/lib/components/FormComponents/BooleanItem/BooleanItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js +6 -5
- package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +7 -6
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +7 -6
- package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.d.ts +2 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js +8 -8
- package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +6 -6
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +6 -5
- package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.d.ts +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +8 -7
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.d.ts +1 -0
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js.map +1 -1
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.d.ts +2 -2
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js +8 -7
- package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/DateItem/DateItem.d.ts +2 -1
- package/lib/components/FormComponents/DateItem/DateItem.js +5 -4
- package/lib/components/FormComponents/DateItem/DateItem.js.map +1 -1
- package/lib/components/FormComponents/DateItem/DatePicker.d.ts +2 -0
- package/lib/components/FormComponents/DateItem/DatePicker.js +42 -0
- package/lib/components/FormComponents/DateItem/DatePicker.js.map +1 -0
- package/lib/components/FormComponents/DateItem/DatePickerField.d.ts +8 -0
- package/{src/components/FormComponents/Typography.styles.ts → lib/components/FormComponents/DateItem/DatePickerField.js} +8 -9
- package/lib/components/FormComponents/DateItem/DatePickerField.js.map +1 -0
- package/lib/components/FormComponents/DateTimeItem/DateTimeItem.d.ts +2 -2
- package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js +5 -4
- package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js.map +1 -1
- package/lib/components/FormComponents/DecimalItem/DecimalItem.d.ts +2 -2
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js +5 -4
- package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.d.ts +1 -0
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js +2 -2
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js.map +1 -1
- package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.d.ts +2 -7
- package/lib/components/FormComponents/DisplayItem/DisplayItem.js +2 -2
- package/lib/components/FormComponents/DisplayItem/DisplayItem.js.map +1 -1
- package/lib/components/FormComponents/GridGroup/GridGroup.d.ts +2 -2
- package/lib/components/FormComponents/GridGroup/GridGroup.js +6 -4
- package/lib/components/FormComponents/GridGroup/GridGroup.js.map +1 -1
- package/lib/components/FormComponents/GridGroup/GridRow.d.ts +2 -1
- package/lib/components/FormComponents/GridGroup/GridRow.js +2 -2
- package/lib/components/FormComponents/GridGroup/GridRow.js.map +1 -1
- package/lib/components/FormComponents/GridGroup/GridTable.d.ts +2 -1
- package/lib/components/FormComponents/GridGroup/GridTable.js +2 -2
- package/lib/components/FormComponents/GridGroup/GridTable.js.map +1 -1
- package/lib/components/FormComponents/GroupItem/GroupHeading.d.ts +1 -0
- package/lib/components/FormComponents/GroupItem/GroupHeading.js +6 -5
- package/lib/components/FormComponents/GroupItem/GroupHeading.js.map +1 -1
- package/lib/components/FormComponents/GroupItem/GroupItem.d.ts +2 -3
- package/lib/components/FormComponents/GroupItem/GroupItem.js +5 -3
- package/lib/components/FormComponents/GroupItem/GroupItem.js.map +1 -1
- package/lib/components/FormComponents/GroupItem/GroupItem.styles.d.ts +2 -6
- package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.d.ts +2 -2
- package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +10 -10
- package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/IntegerItem/IntegerItem.d.ts +2 -2
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js +5 -4
- package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
- package/lib/components/FormComponents/Item.styles.d.ts +0 -4
- package/lib/components/FormComponents/Item.styles.js +0 -4
- package/lib/components/FormComponents/Item.styles.js.map +1 -1
- package/lib/components/FormComponents/ItemParts/ItemFieldGrid.d.ts +1 -0
- package/lib/components/FormComponents/ItemParts/ItemFieldGrid.js +3 -3
- package/lib/components/FormComponents/ItemParts/ItemFieldGrid.js.map +1 -1
- package/lib/components/FormComponents/ItemParts/ItemLabelText.d.ts +1 -0
- package/lib/components/FormComponents/ItemParts/ItemLabelText.js +4 -6
- package/lib/components/FormComponents/ItemParts/ItemLabelText.js.map +1 -1
- package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.d.ts +1 -0
- package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.js +2 -2
- package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.js.map +1 -1
- package/lib/components/FormComponents/Lists.styles.d.ts +2 -9
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.d.ts +3 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js +2 -3
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.d.ts +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js +8 -7
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.d.ts +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js +8 -7
- 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 +6 -6
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.d.ts +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js +7 -6
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.d.ts +3 -2
- 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.d.ts +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js +7 -6
- 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 +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js.map +1 -1
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.d.ts +2 -2
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js +8 -7
- package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js.map +1 -1
- package/lib/components/FormComponents/RepeatGroup/AddItemButton.d.ts +1 -0
- package/lib/components/FormComponents/RepeatGroup/AddItemButton.js +2 -2
- package/lib/components/FormComponents/RepeatGroup/AddItemButton.js.map +1 -1
- package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.d.ts +1 -0
- package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.js +2 -2
- package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.js.map +1 -1
- package/lib/components/FormComponents/RepeatGroup/RepeatGroup.d.ts +2 -2
- package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js +8 -6
- package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js.map +1 -1
- package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.d.ts +2 -2
- package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js +5 -3
- package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js.map +1 -1
- package/lib/components/FormComponents/RepeatItem/AddItemButton.d.ts +1 -0
- package/lib/components/FormComponents/RepeatItem/AddItemButton.js +2 -2
- package/lib/components/FormComponents/RepeatItem/AddItemButton.js.map +1 -1
- package/lib/components/FormComponents/RepeatItem/DeleteItemButton.d.ts +1 -0
- package/lib/components/FormComponents/RepeatItem/DeleteItemButton.js +2 -2
- package/lib/components/FormComponents/RepeatItem/DeleteItemButton.js.map +1 -1
- package/lib/components/FormComponents/RepeatItem/RepeatField.d.ts +2 -2
- package/lib/components/FormComponents/RepeatItem/RepeatField.js +5 -3
- package/lib/components/FormComponents/RepeatItem/RepeatField.js.map +1 -1
- package/lib/components/FormComponents/RepeatItem/RepeatItem.d.ts +2 -2
- package/lib/components/FormComponents/RepeatItem/RepeatItem.js +6 -5
- package/lib/components/FormComponents/RepeatItem/RepeatItem.js.map +1 -1
- package/lib/components/FormComponents/RepeatItem/RepeatItem.styles.d.ts +4 -18
- package/lib/components/FormComponents/SingleItem/SingleItem.d.ts +2 -2
- package/lib/components/FormComponents/SingleItem/SingleItem.js +4 -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 +12 -12
- package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -1
- package/lib/components/FormComponents/StringItem/StringItem.d.ts +2 -2
- package/lib/components/FormComponents/StringItem/StringItem.js +5 -4
- package/lib/components/FormComponents/StringItem/StringItem.js.map +1 -1
- package/lib/components/FormComponents/Tables/AddRowButton.d.ts +1 -0
- package/lib/components/FormComponents/Tables/AddRowButton.js +2 -2
- package/lib/components/FormComponents/Tables/AddRowButton.js.map +1 -1
- package/lib/components/FormComponents/Tables/DeleteRowButton.d.ts +1 -0
- package/lib/components/FormComponents/Tables/DeleteRowButton.js +2 -2
- package/lib/components/FormComponents/Tables/DeleteRowButton.js.map +1 -1
- package/lib/components/FormComponents/Tables/GroupTable.d.ts +2 -2
- package/lib/components/FormComponents/Tables/GroupTable.js +8 -6
- package/lib/components/FormComponents/Tables/GroupTable.js.map +1 -1
- package/lib/components/FormComponents/Tables/GroupTableRow.d.ts +2 -1
- package/lib/components/FormComponents/Tables/GroupTableRow.js +2 -2
- package/lib/components/FormComponents/Tables/GroupTableRow.js.map +1 -1
- package/lib/components/FormComponents/Tables/QItemGroupTable.js +5 -7
- package/lib/components/FormComponents/Tables/QItemGroupTable.js.map +1 -1
- package/lib/components/FormComponents/Tables/QItemGroupTableRow.js +2 -2
- package/lib/components/FormComponents/Tables/QItemGroupTableRow.js.map +1 -1
- package/lib/components/FormComponents/TextItem/TextItem.d.ts +2 -2
- package/lib/components/FormComponents/TextItem/TextItem.js +5 -4
- package/lib/components/FormComponents/TextItem/TextItem.js.map +1 -1
- package/lib/components/FormComponents/TimeItem/TimeItem.d.ts +2 -2
- package/lib/components/FormComponents/TimeItem/TimeItem.js +5 -4
- package/lib/components/FormComponents/TimeItem/TimeItem.js.map +1 -1
- package/lib/components/FormComponents/UrlItem/UrlItem.d.ts +2 -2
- package/lib/components/FormComponents/UrlItem/UrlItem.js +5 -4
- package/lib/components/FormComponents/UrlItem/UrlItem.js.map +1 -1
- package/lib/components/Lists.styles.d.ts +2 -9
- package/lib/components/Renderer/FormTopLevelItem.js +7 -5
- package/lib/components/Renderer/FormTopLevelItem.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/ShowCompletedTabsSection.js +1 -1
- package/lib/components/Tabs/ShowCompletedTabsSection.js.map +1 -1
- package/lib/hooks/useMinimalStringCalculatedExpression.d.ts +11 -0
- package/lib/hooks/useMinimalStringCalculatedExpression.js +37 -0
- package/lib/hooks/useMinimalStringCalculatedExpression.js.map +1 -0
- package/lib/hooks/useReadOnly.d.ts +3 -0
- package/lib/hooks/useReadOnly.js +26 -0
- package/lib/hooks/useReadOnly.js.map +1 -0
- package/lib/interfaces/calculatedExpression.interface.d.ts +1 -1
- package/lib/interfaces/renderProps.interface.d.ts +3 -0
- package/lib/theme/overrides/Typography.d.ts +13 -0
- package/lib/theme/overrides/Typography.js +31 -0
- package/lib/theme/overrides/Typography.js.map +1 -0
- package/lib/theme/typography.d.ts +0 -2
- package/lib/theme/typography.js +3 -5
- package/lib/theme/typography.js.map +1 -1
- package/lib/utils/calculatedExpression.d.ts +12 -0
- package/lib/utils/calculatedExpression.js +54 -8
- package/lib/utils/calculatedExpression.js.map +1 -1
- package/package.json +12 -12
- package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +8 -5
- package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +9 -6
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +18 -7
- package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +18 -7
- package/src/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.tsx +17 -7
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +9 -8
- package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +10 -7
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +3 -2
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +14 -9
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.tsx +3 -2
- package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +12 -7
- package/src/components/FormComponents/DateItem/DateItem.tsx +8 -6
- package/src/components/FormComponents/DateTimeItem/DateTimeItem.tsx +8 -6
- package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +7 -5
- package/src/components/FormComponents/DisplayItem/DisplayInstructions.tsx +6 -2
- package/src/components/FormComponents/DisplayItem/DisplayItem.tsx +2 -2
- package/src/components/FormComponents/GridGroup/GridGroup.tsx +13 -5
- package/src/components/FormComponents/GridGroup/GridRow.tsx +6 -2
- package/src/components/FormComponents/GridGroup/GridTable.tsx +6 -2
- package/src/components/FormComponents/GroupItem/GroupHeading.tsx +12 -6
- package/src/components/FormComponents/GroupItem/GroupItem.tsx +8 -2
- package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +27 -4
- package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +7 -5
- package/src/components/FormComponents/Item.styles.ts +0 -5
- package/src/components/FormComponents/ItemParts/ItemFieldGrid.tsx +4 -3
- package/src/components/FormComponents/ItemParts/ItemLabelText.tsx +10 -5
- package/src/components/FormComponents/ItemParts/ItemLabelWrapper.tsx +3 -2
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.tsx +10 -4
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +13 -7
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +20 -9
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.tsx +11 -2
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +11 -8
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx +10 -4
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +10 -5
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.tsx +10 -4
- package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +12 -7
- package/src/components/FormComponents/RepeatGroup/AddItemButton.tsx +3 -2
- package/src/components/FormComponents/RepeatGroup/DeleteItemButton.tsx +3 -2
- package/src/components/FormComponents/RepeatGroup/RepeatGroup.tsx +17 -9
- package/src/components/FormComponents/RepeatGroup/RepeatGroupItem.tsx +13 -2
- package/src/components/FormComponents/RepeatItem/AddItemButton.tsx +3 -2
- package/src/components/FormComponents/RepeatItem/DeleteItemButton.tsx +3 -2
- package/src/components/FormComponents/RepeatItem/RepeatField.tsx +21 -3
- package/src/components/FormComponents/RepeatItem/RepeatItem.tsx +13 -6
- package/src/components/FormComponents/SingleItem/SingleItem.tsx +8 -2
- package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +16 -2
- package/src/components/FormComponents/StringItem/StringItem.tsx +7 -5
- package/src/components/FormComponents/Tables/AddRowButton.tsx +3 -2
- package/src/components/FormComponents/Tables/DeleteRowButton.tsx +3 -2
- package/src/components/FormComponents/Tables/GroupTable.tsx +17 -6
- package/src/components/FormComponents/Tables/GroupTableRow.tsx +6 -2
- package/src/components/FormComponents/TextItem/TextItem.tsx +7 -5
- package/src/components/FormComponents/TimeItem/TimeItem.tsx +8 -6
- package/src/components/FormComponents/UrlItem/UrlItem.tsx +7 -5
- package/src/components/Renderer/FormTopLevelItem.tsx +9 -4
- package/src/components/Tabs/FormBodySingleTab.tsx +1 -1
- package/src/components/Tabs/ShowCompletedTabsSection.tsx +1 -1
- package/src/hooks/useReadOnly.ts +30 -0
- package/src/interfaces/calculatedExpression.interface.ts +1 -1
- package/src/interfaces/renderProps.interface.ts +4 -0
- package/src/theme/typography.ts +3 -5
- package/src/utils/calculatedExpression.ts +68 -12
package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.tsx
CHANGED
|
@@ -2,22 +2,28 @@ import React from 'react';
|
|
|
2
2
|
import Autocomplete from '@mui/material/Autocomplete';
|
|
3
3
|
import { StandardTextField } from '../Textfield.styles';
|
|
4
4
|
import Typography from '@mui/material/Typography';
|
|
5
|
-
import type {
|
|
5
|
+
import type {
|
|
6
|
+
PropsWithIsTabledAttribute,
|
|
7
|
+
PropsWithParentIsReadOnlyAttribute
|
|
8
|
+
} from '../../../interfaces/renderProps.interface';
|
|
6
9
|
import type { Coding, QuestionnaireItem } from 'fhir/r4';
|
|
7
10
|
import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
|
|
8
11
|
|
|
9
|
-
interface OpenChoiceSelectAnswerValueSetFieldProps
|
|
12
|
+
interface OpenChoiceSelectAnswerValueSetFieldProps
|
|
13
|
+
extends PropsWithIsTabledAttribute,
|
|
14
|
+
PropsWithParentIsReadOnlyAttribute {
|
|
10
15
|
qItem: QuestionnaireItem;
|
|
11
16
|
options: Coding[];
|
|
12
17
|
valueSelect: Coding | null;
|
|
13
18
|
serverError: Error | null;
|
|
19
|
+
readOnly: boolean;
|
|
14
20
|
onValueChange: (newValue: Coding | string | null) => void;
|
|
15
21
|
}
|
|
16
22
|
|
|
17
23
|
function OpenChoiceSelectAnswerValueSetField(props: OpenChoiceSelectAnswerValueSetFieldProps) {
|
|
18
|
-
const { qItem, options, valueSelect, serverError, isTabled, onValueChange } = props;
|
|
24
|
+
const { qItem, options, valueSelect, serverError, readOnly, isTabled, onValueChange } = props;
|
|
19
25
|
|
|
20
|
-
const { displayUnit, displayPrompt,
|
|
26
|
+
const { displayUnit, displayPrompt, entryFormat } = useRenderingExtensions(qItem);
|
|
21
27
|
|
|
22
28
|
return (
|
|
23
29
|
<>
|
package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx
CHANGED
|
@@ -25,22 +25,28 @@ import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
|
|
|
25
25
|
import type {
|
|
26
26
|
PropsWithIsRepeatedAttribute,
|
|
27
27
|
PropsWithIsTabledAttribute,
|
|
28
|
+
PropsWithParentIsReadOnlyAttribute,
|
|
28
29
|
PropsWithQrItemChangeHandler
|
|
29
30
|
} from '../../../interfaces/renderProps.interface';
|
|
30
31
|
import DisplayInstructions from '../DisplayItem/DisplayInstructions';
|
|
31
32
|
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
32
33
|
import OpenChoiceSelectAnswerValueSetField from './OpenChoiceSelectAnswerValueSetField';
|
|
34
|
+
import useReadOnly from '../../../hooks/useReadOnly';
|
|
33
35
|
|
|
34
36
|
interface OpenChoiceSelectAnswerValueSetItemProps
|
|
35
37
|
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
36
38
|
PropsWithIsRepeatedAttribute,
|
|
37
|
-
PropsWithIsTabledAttribute
|
|
39
|
+
PropsWithIsTabledAttribute,
|
|
40
|
+
PropsWithParentIsReadOnlyAttribute {
|
|
38
41
|
qItem: QuestionnaireItem;
|
|
39
42
|
qrItem: QuestionnaireResponseItem;
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
function OpenChoiceSelectAnswerValueSetItem(props: OpenChoiceSelectAnswerValueSetItemProps) {
|
|
43
|
-
const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
|
|
46
|
+
const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
|
|
47
|
+
|
|
48
|
+
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
49
|
+
const { displayInstructions } = useRenderingExtensions(qItem);
|
|
44
50
|
|
|
45
51
|
// Init input value
|
|
46
52
|
const qrOpenChoice = qrItem ?? createEmptyQrItem(qItem);
|
|
@@ -52,9 +58,6 @@ function OpenChoiceSelectAnswerValueSetItem(props: OpenChoiceSelectAnswerValueSe
|
|
|
52
58
|
// Get codings/options from valueSet
|
|
53
59
|
const { codings, serverError } = useValueSetCodings(qItem);
|
|
54
60
|
|
|
55
|
-
// Get additional rendering extensions
|
|
56
|
-
const { displayInstructions } = useRenderingExtensions(qItem);
|
|
57
|
-
|
|
58
61
|
// Event handlers
|
|
59
62
|
function handleValueChange(newValue: Coding | string | null) {
|
|
60
63
|
if (newValue) {
|
|
@@ -82,6 +85,7 @@ function OpenChoiceSelectAnswerValueSetItem(props: OpenChoiceSelectAnswerValueSe
|
|
|
82
85
|
valueSelect={valueSelect}
|
|
83
86
|
serverError={serverError}
|
|
84
87
|
isTabled={isTabled}
|
|
88
|
+
readOnly={readOnly}
|
|
85
89
|
onValueChange={handleValueChange}
|
|
86
90
|
/>
|
|
87
91
|
);
|
|
@@ -91,7 +95,7 @@ function OpenChoiceSelectAnswerValueSetItem(props: OpenChoiceSelectAnswerValueSe
|
|
|
91
95
|
<FullWidthFormComponentBox>
|
|
92
96
|
<Grid container columnSpacing={6}>
|
|
93
97
|
<Grid item xs={5}>
|
|
94
|
-
<LabelWrapper qItem={qItem} />
|
|
98
|
+
<LabelWrapper qItem={qItem} readOnly={readOnly} />
|
|
95
99
|
</Grid>
|
|
96
100
|
<Grid item xs={7}>
|
|
97
101
|
<OpenChoiceSelectAnswerValueSetField
|
|
@@ -100,9 +104,10 @@ function OpenChoiceSelectAnswerValueSetItem(props: OpenChoiceSelectAnswerValueSe
|
|
|
100
104
|
valueSelect={valueSelect}
|
|
101
105
|
serverError={serverError}
|
|
102
106
|
isTabled={isTabled}
|
|
107
|
+
readOnly={readOnly}
|
|
103
108
|
onValueChange={handleValueChange}
|
|
104
109
|
/>
|
|
105
|
-
<DisplayInstructions displayInstructions={displayInstructions} />
|
|
110
|
+
<DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
|
|
106
111
|
</Grid>
|
|
107
112
|
</Grid>
|
|
108
113
|
</FullWidthFormComponentBox>
|
|
@@ -23,13 +23,14 @@ import type { RepeatGroupSingle } from '../../../interfaces/repeatGroup.interfac
|
|
|
23
23
|
|
|
24
24
|
interface AddItemButtonProps {
|
|
25
25
|
repeatGroups: RepeatGroupSingle[];
|
|
26
|
+
readOnly: boolean;
|
|
26
27
|
onAddItem: () => void;
|
|
27
28
|
}
|
|
28
29
|
|
|
29
30
|
function AddItemButton(props: AddItemButtonProps) {
|
|
30
|
-
const { repeatGroups, onAddItem } = props;
|
|
31
|
+
const { repeatGroups, readOnly, onAddItem } = props;
|
|
31
32
|
|
|
32
|
-
const isDisabled = repeatGroups[repeatGroups.length - 1].qrItem === null;
|
|
33
|
+
const isDisabled = repeatGroups[repeatGroups.length - 1].qrItem === null || readOnly;
|
|
33
34
|
|
|
34
35
|
return (
|
|
35
36
|
<Box display="flex" flexDirection="row-reverse">
|
|
@@ -24,13 +24,14 @@ import type { QuestionnaireResponseItem } from 'fhir/r4';
|
|
|
24
24
|
interface DeleteItemButtonProps {
|
|
25
25
|
nullableQrItem: QuestionnaireResponseItem | null;
|
|
26
26
|
numOfRepeatGroups: number;
|
|
27
|
+
readOnly: boolean;
|
|
27
28
|
onDeleteItem: () => void;
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
function DeleteItemButton(props: DeleteItemButtonProps) {
|
|
31
|
-
const { nullableQrItem, numOfRepeatGroups, onDeleteItem } = props;
|
|
32
|
+
const { nullableQrItem, numOfRepeatGroups, readOnly, onDeleteItem } = props;
|
|
32
33
|
|
|
33
|
-
const isDisabled = nullableQrItem === null || numOfRepeatGroups === 1;
|
|
34
|
+
const isDisabled = nullableQrItem === null || numOfRepeatGroups === 1 || readOnly;
|
|
34
35
|
|
|
35
36
|
return (
|
|
36
37
|
<RepeatDeleteTooltip className="repeat-group-delete" title="Delete item">
|
|
@@ -16,15 +16,16 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import React, { useState } from 'react';
|
|
19
|
-
import type {
|
|
19
|
+
import type {
|
|
20
|
+
PropsWithParentIsReadOnlyAttribute,
|
|
21
|
+
PropsWithQrRepeatGroupChangeHandler
|
|
22
|
+
} from '../../../interfaces/renderProps.interface';
|
|
20
23
|
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
21
24
|
import useInitialiseRepeatGroups from '../../../hooks/useInitialiseRepeatGroups';
|
|
22
25
|
import { QGroupContainerBox } from '../../Box.styles';
|
|
23
26
|
import Card from '@mui/material/Card';
|
|
24
27
|
import Collapse from '@mui/material/Collapse';
|
|
25
28
|
import Divider from '@mui/material/Divider';
|
|
26
|
-
|
|
27
|
-
import { QGroupHeadingTypography } from '../Typography.styles';
|
|
28
29
|
import { TransitionGroup } from 'react-transition-group';
|
|
29
30
|
import { createEmptyQrItem } from '../../../utils/qrItem';
|
|
30
31
|
import { nanoid } from 'nanoid';
|
|
@@ -32,15 +33,21 @@ import RepeatGroupItem from './RepeatGroupItem';
|
|
|
32
33
|
import AddItemButton from './AddItemButton';
|
|
33
34
|
import LabelWrapper from '../ItemParts/ItemLabelWrapper';
|
|
34
35
|
import cloneDeep from 'lodash.clonedeep';
|
|
36
|
+
import useReadOnly from '../../../hooks/useReadOnly';
|
|
37
|
+
import Typography from '@mui/material/Typography';
|
|
35
38
|
|
|
36
|
-
interface RepeatGroupProps
|
|
39
|
+
interface RepeatGroupProps
|
|
40
|
+
extends PropsWithQrRepeatGroupChangeHandler,
|
|
41
|
+
PropsWithParentIsReadOnlyAttribute {
|
|
37
42
|
qItem: QuestionnaireItem;
|
|
38
43
|
qrItems: QuestionnaireResponseItem[];
|
|
39
44
|
groupCardElevation: number;
|
|
40
45
|
}
|
|
41
46
|
|
|
42
47
|
function RepeatGroup(props: RepeatGroupProps) {
|
|
43
|
-
const { qItem, qrItems, groupCardElevation, onQrRepeatGroupChange } = props;
|
|
48
|
+
const { qItem, qrItems, groupCardElevation, parentIsReadOnly, onQrRepeatGroupChange } = props;
|
|
49
|
+
|
|
50
|
+
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
44
51
|
|
|
45
52
|
const initialRepeatGroups = useInitialiseRepeatGroups(qItem, qrItems);
|
|
46
53
|
|
|
@@ -93,9 +100,9 @@ function RepeatGroup(props: RepeatGroupProps) {
|
|
|
93
100
|
return (
|
|
94
101
|
<QGroupContainerBox key={qItem.linkId} cardElevation={groupCardElevation} isRepeated={true}>
|
|
95
102
|
<Card elevation={groupCardElevation} sx={{ p: 3, py: 2.5, mb: 3.5 }}>
|
|
96
|
-
<
|
|
97
|
-
<LabelWrapper qItem={qItem} />
|
|
98
|
-
</
|
|
103
|
+
<Typography variant="h6" color={readOnly ? 'text.secondary' : 'text.primary'}>
|
|
104
|
+
<LabelWrapper qItem={qItem} readOnly={readOnly} />
|
|
105
|
+
</Typography>
|
|
99
106
|
<Divider sx={{ mt: 1, mb: 1.5 }} light />
|
|
100
107
|
<TransitionGroup>
|
|
101
108
|
{repeatGroups.map(({ nanoId, qrItem: nullableQrItem }, index) => {
|
|
@@ -112,6 +119,7 @@ function RepeatGroup(props: RepeatGroupProps) {
|
|
|
112
119
|
nullableQrItem={nullableQrItem}
|
|
113
120
|
numOfRepeatGroups={repeatGroups.length}
|
|
114
121
|
groupCardElevation={groupCardElevation + 1}
|
|
122
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
115
123
|
onDeleteItem={() => handleDeleteItem(index)}
|
|
116
124
|
onQrItemChange={(newQrItem) => handleAnswerChange(newQrItem, index)}
|
|
117
125
|
/>
|
|
@@ -120,7 +128,7 @@ function RepeatGroup(props: RepeatGroupProps) {
|
|
|
120
128
|
})}
|
|
121
129
|
</TransitionGroup>
|
|
122
130
|
|
|
123
|
-
<AddItemButton repeatGroups={repeatGroups} onAddItem={handleAddItem} />
|
|
131
|
+
<AddItemButton repeatGroups={repeatGroups} readOnly={readOnly} onAddItem={handleAddItem} />
|
|
124
132
|
</Card>
|
|
125
133
|
</QGroupContainerBox>
|
|
126
134
|
);
|
|
@@ -19,11 +19,17 @@ import React from 'react';
|
|
|
19
19
|
import { RepeatGroupContainerStack } from '../RepeatItem/RepeatItem.styles';
|
|
20
20
|
import Box from '@mui/material/Box';
|
|
21
21
|
import GroupItem from '../GroupItem/GroupItem';
|
|
22
|
-
import type {
|
|
22
|
+
import type {
|
|
23
|
+
PropsWithParentIsReadOnlyAttribute,
|
|
24
|
+
PropsWithQrItemChangeHandler
|
|
25
|
+
} from '../../../interfaces/renderProps.interface';
|
|
23
26
|
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
24
27
|
import DeleteItemButton from './DeleteItemButton';
|
|
28
|
+
import useReadOnly from '../../../hooks/useReadOnly';
|
|
25
29
|
|
|
26
|
-
interface RepeatGroupItemProps
|
|
30
|
+
interface RepeatGroupItemProps
|
|
31
|
+
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
32
|
+
PropsWithParentIsReadOnlyAttribute {
|
|
27
33
|
qItem: QuestionnaireItem;
|
|
28
34
|
answeredQrItem: QuestionnaireResponseItem;
|
|
29
35
|
nullableQrItem: QuestionnaireResponseItem | null;
|
|
@@ -39,10 +45,13 @@ function RepeatGroupItem(props: RepeatGroupItemProps) {
|
|
|
39
45
|
nullableQrItem,
|
|
40
46
|
numOfRepeatGroups,
|
|
41
47
|
groupCardElevation,
|
|
48
|
+
parentIsReadOnly,
|
|
42
49
|
onDeleteItem,
|
|
43
50
|
onQrItemChange
|
|
44
51
|
} = props;
|
|
45
52
|
|
|
53
|
+
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
54
|
+
|
|
46
55
|
return (
|
|
47
56
|
<RepeatGroupContainerStack direction="row" justifyContent="end">
|
|
48
57
|
<Box sx={{ flexGrow: 1 }}>
|
|
@@ -50,6 +59,7 @@ function RepeatGroupItem(props: RepeatGroupItemProps) {
|
|
|
50
59
|
qItem={qItem}
|
|
51
60
|
qrItem={answeredQrItem}
|
|
52
61
|
isRepeated={true}
|
|
62
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
53
63
|
groupCardElevation={groupCardElevation + 1}
|
|
54
64
|
onQrItemChange={onQrItemChange}
|
|
55
65
|
/>
|
|
@@ -57,6 +67,7 @@ function RepeatGroupItem(props: RepeatGroupItemProps) {
|
|
|
57
67
|
<DeleteItemButton
|
|
58
68
|
nullableQrItem={nullableQrItem}
|
|
59
69
|
numOfRepeatGroups={numOfRepeatGroups}
|
|
70
|
+
readOnly={readOnly}
|
|
60
71
|
onDeleteItem={onDeleteItem}
|
|
61
72
|
/>
|
|
62
73
|
</RepeatGroupContainerStack>
|
|
@@ -23,13 +23,14 @@ import type { RepeatAnswer } from '../../../interfaces/repeatItem.interface';
|
|
|
23
23
|
|
|
24
24
|
interface AddItemButtonProps {
|
|
25
25
|
repeatAnswers: RepeatAnswer[];
|
|
26
|
+
readOnly: boolean;
|
|
26
27
|
onAddItem: () => void;
|
|
27
28
|
}
|
|
28
29
|
|
|
29
30
|
function AddItemButton(props: AddItemButtonProps) {
|
|
30
|
-
const { repeatAnswers, onAddItem } = props;
|
|
31
|
+
const { repeatAnswers, readOnly, onAddItem } = props;
|
|
31
32
|
|
|
32
|
-
const isDisabled = repeatAnswers[repeatAnswers.length - 1].answer === null;
|
|
33
|
+
const isDisabled = repeatAnswers[repeatAnswers.length - 1].answer === null || readOnly;
|
|
33
34
|
|
|
34
35
|
return (
|
|
35
36
|
<Box display="flex" flexDirection="row-reverse">
|
|
@@ -24,13 +24,14 @@ import type { QuestionnaireResponseItemAnswer } from 'fhir/r4';
|
|
|
24
24
|
interface DeleteItemButtonProps {
|
|
25
25
|
answer: QuestionnaireResponseItemAnswer | null;
|
|
26
26
|
numOfRepeatAnswers: number;
|
|
27
|
+
readOnly: boolean;
|
|
27
28
|
onDeleteAnswer: () => void;
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
function DeleteItemButton(props: DeleteItemButtonProps) {
|
|
31
|
-
const { answer, numOfRepeatAnswers, onDeleteAnswer } = props;
|
|
32
|
+
const { answer, numOfRepeatAnswers, readOnly, onDeleteAnswer } = props;
|
|
32
33
|
|
|
33
|
-
const isDisabled = answer === null || numOfRepeatAnswers === 1;
|
|
34
|
+
const isDisabled = answer === null || numOfRepeatAnswers === 1 || readOnly;
|
|
34
35
|
|
|
35
36
|
return (
|
|
36
37
|
<RepeatDeleteTooltip className="repeat-item-delete" title="Delete item">
|
|
@@ -24,10 +24,16 @@ import type {
|
|
|
24
24
|
QuestionnaireResponseItem,
|
|
25
25
|
QuestionnaireResponseItemAnswer
|
|
26
26
|
} from 'fhir/r4';
|
|
27
|
-
import type {
|
|
27
|
+
import type {
|
|
28
|
+
PropsWithParentIsReadOnlyAttribute,
|
|
29
|
+
PropsWithQrItemChangeHandler
|
|
30
|
+
} from '../../../interfaces/renderProps.interface';
|
|
28
31
|
import DeleteItemButton from './DeleteItemButton';
|
|
32
|
+
import useReadOnly from '../../../hooks/useReadOnly';
|
|
29
33
|
|
|
30
|
-
interface RepeatFieldProps
|
|
34
|
+
interface RepeatFieldProps
|
|
35
|
+
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
36
|
+
PropsWithParentIsReadOnlyAttribute {
|
|
31
37
|
qItem: QuestionnaireItem;
|
|
32
38
|
qrItem: QuestionnaireResponseItem;
|
|
33
39
|
answer: QuestionnaireResponseItemAnswer | null;
|
|
@@ -36,7 +42,17 @@ interface RepeatFieldProps extends PropsWithQrItemChangeHandler<QuestionnaireRes
|
|
|
36
42
|
}
|
|
37
43
|
|
|
38
44
|
function RepeatField(props: RepeatFieldProps) {
|
|
39
|
-
const {
|
|
45
|
+
const {
|
|
46
|
+
qItem,
|
|
47
|
+
qrItem,
|
|
48
|
+
answer,
|
|
49
|
+
numOfRepeatAnswers,
|
|
50
|
+
parentIsReadOnly,
|
|
51
|
+
onDeleteAnswer,
|
|
52
|
+
onQrItemChange
|
|
53
|
+
} = props;
|
|
54
|
+
|
|
55
|
+
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
40
56
|
|
|
41
57
|
return (
|
|
42
58
|
<RepeatItemContainerStack direction="row">
|
|
@@ -46,12 +62,14 @@ function RepeatField(props: RepeatFieldProps) {
|
|
|
46
62
|
qrItem={qrItem}
|
|
47
63
|
isRepeated={qItem.repeats ?? false}
|
|
48
64
|
isTabled={false}
|
|
65
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
49
66
|
onQrItemChange={onQrItemChange}
|
|
50
67
|
/>
|
|
51
68
|
</Box>
|
|
52
69
|
<DeleteItemButton
|
|
53
70
|
answer={answer}
|
|
54
71
|
numOfRepeatAnswers={numOfRepeatAnswers}
|
|
72
|
+
readOnly={readOnly}
|
|
55
73
|
onDeleteAnswer={onDeleteAnswer}
|
|
56
74
|
/>
|
|
57
75
|
</RepeatItemContainerStack>
|
|
@@ -16,7 +16,10 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import React, { useState } from 'react';
|
|
19
|
-
import type {
|
|
19
|
+
import type {
|
|
20
|
+
PropsWithParentIsReadOnlyAttribute,
|
|
21
|
+
PropsWithQrItemChangeHandler
|
|
22
|
+
} from '../../../interfaces/renderProps.interface';
|
|
20
23
|
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
21
24
|
import { nanoid } from 'nanoid';
|
|
22
25
|
import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
|
|
@@ -28,16 +31,19 @@ import RepeatField from './RepeatField';
|
|
|
28
31
|
import Collapse from '@mui/material/Collapse';
|
|
29
32
|
import useInitialiseRepeatAnswers from '../../../hooks/useInitialiseRepeatAnswers';
|
|
30
33
|
import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
|
|
34
|
+
import useReadOnly from '../../../hooks/useReadOnly';
|
|
31
35
|
|
|
32
|
-
interface RepeatItemProps
|
|
36
|
+
interface RepeatItemProps
|
|
37
|
+
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
38
|
+
PropsWithParentIsReadOnlyAttribute {
|
|
33
39
|
qItem: QuestionnaireItem;
|
|
34
40
|
qrItem: QuestionnaireResponseItem;
|
|
35
41
|
}
|
|
36
42
|
|
|
37
43
|
function RepeatItem(props: RepeatItemProps) {
|
|
38
|
-
const { qItem, qrItem, onQrItemChange } = props;
|
|
44
|
+
const { qItem, qrItem, parentIsReadOnly, onQrItemChange } = props;
|
|
39
45
|
|
|
40
|
-
|
|
46
|
+
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
41
47
|
const { displayInstructions } = useRenderingExtensions(qItem);
|
|
42
48
|
|
|
43
49
|
const initialRepeatAnswers = useInitialiseRepeatAnswers(qItem, qrItem);
|
|
@@ -84,7 +90,7 @@ function RepeatItem(props: RepeatItemProps) {
|
|
|
84
90
|
|
|
85
91
|
return (
|
|
86
92
|
<FullWidthFormComponentBox data-test="q-item-repeat-box">
|
|
87
|
-
<ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions}>
|
|
93
|
+
<ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions} readOnly={readOnly}>
|
|
88
94
|
<TransitionGroup>
|
|
89
95
|
{repeatAnswers.map(({ nanoId, answer }, index) => {
|
|
90
96
|
const repeatAnswerQrItem = createEmptyQrItem(qItem);
|
|
@@ -99,6 +105,7 @@ function RepeatItem(props: RepeatItemProps) {
|
|
|
99
105
|
qrItem={repeatAnswerQrItem}
|
|
100
106
|
answer={answer}
|
|
101
107
|
numOfRepeatAnswers={repeatAnswers.length}
|
|
108
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
102
109
|
onDeleteAnswer={() => handleDeleteItem(index)}
|
|
103
110
|
onQrItemChange={(newQrItem) => handleAnswerChange(newQrItem, index)}
|
|
104
111
|
/>
|
|
@@ -108,7 +115,7 @@ function RepeatItem(props: RepeatItemProps) {
|
|
|
108
115
|
</TransitionGroup>
|
|
109
116
|
</ItemFieldGrid>
|
|
110
117
|
|
|
111
|
-
<AddItemButton repeatAnswers={repeatAnswers} onAddItem={handleAddItem} />
|
|
118
|
+
<AddItemButton repeatAnswers={repeatAnswers} readOnly={readOnly} onAddItem={handleAddItem} />
|
|
112
119
|
</FullWidthFormComponentBox>
|
|
113
120
|
);
|
|
114
121
|
}
|
|
@@ -20,24 +20,28 @@ import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
|
20
20
|
import type {
|
|
21
21
|
PropsWithIsRepeatedAttribute,
|
|
22
22
|
PropsWithIsTabledAttribute,
|
|
23
|
+
PropsWithParentIsReadOnlyAttribute,
|
|
23
24
|
PropsWithQrItemChangeHandler,
|
|
24
25
|
PropsWithTextShownAttribute
|
|
25
26
|
} from '../../../interfaces/renderProps.interface';
|
|
26
27
|
import useQuestionnaireStore from '../../../stores/useQuestionnaireStore';
|
|
27
28
|
import SingleItemSwitcher from './SingleItemSwitcher';
|
|
28
29
|
import useHidden from '../../../hooks/useHidden';
|
|
30
|
+
import useReadOnly from '../../../hooks/useReadOnly';
|
|
29
31
|
|
|
30
32
|
interface SingleItemProps
|
|
31
33
|
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
32
34
|
PropsWithIsRepeatedAttribute,
|
|
33
35
|
PropsWithIsTabledAttribute,
|
|
34
|
-
PropsWithTextShownAttribute
|
|
36
|
+
PropsWithTextShownAttribute,
|
|
37
|
+
PropsWithParentIsReadOnlyAttribute {
|
|
35
38
|
qItem: QuestionnaireItem;
|
|
36
39
|
qrItem: QuestionnaireResponseItem;
|
|
37
40
|
}
|
|
38
41
|
|
|
39
42
|
function SingleItem(props: SingleItemProps) {
|
|
40
|
-
const { qItem, qrItem, isRepeated, isTabled, textShown, onQrItemChange } =
|
|
43
|
+
const { qItem, qrItem, isRepeated, isTabled, textShown, parentIsReadOnly, onQrItemChange } =
|
|
44
|
+
props;
|
|
41
45
|
|
|
42
46
|
const updateEnableWhenItem = useQuestionnaireStore((state) => state.updateEnableWhenItem);
|
|
43
47
|
|
|
@@ -51,6 +55,7 @@ function SingleItem(props: SingleItemProps) {
|
|
|
51
55
|
[updateEnableWhenItem, onQrItemChange, qItem.linkId]
|
|
52
56
|
);
|
|
53
57
|
|
|
58
|
+
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
54
59
|
const itemIsHidden = useHidden(qItem);
|
|
55
60
|
if (itemIsHidden) {
|
|
56
61
|
return null;
|
|
@@ -63,6 +68,7 @@ function SingleItem(props: SingleItemProps) {
|
|
|
63
68
|
isRepeated={isRepeated}
|
|
64
69
|
isTabled={isTabled}
|
|
65
70
|
textShown={textShown}
|
|
71
|
+
parentIsReadOnly={readOnly}
|
|
66
72
|
onQrItemChange={handleQrItemChange}
|
|
67
73
|
/>
|
|
68
74
|
);
|
|
@@ -23,6 +23,7 @@ import Typography from '@mui/material/Typography';
|
|
|
23
23
|
import type {
|
|
24
24
|
PropsWithIsRepeatedAttribute,
|
|
25
25
|
PropsWithIsTabledAttribute,
|
|
26
|
+
PropsWithParentIsReadOnlyAttribute,
|
|
26
27
|
PropsWithQrItemChangeHandler,
|
|
27
28
|
PropsWithTextShownAttribute
|
|
28
29
|
} from '../../../interfaces/renderProps.interface';
|
|
@@ -41,13 +42,15 @@ interface SingleItemSwitcherProps
|
|
|
41
42
|
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
42
43
|
PropsWithIsRepeatedAttribute,
|
|
43
44
|
PropsWithIsTabledAttribute,
|
|
44
|
-
PropsWithTextShownAttribute
|
|
45
|
+
PropsWithTextShownAttribute,
|
|
46
|
+
PropsWithParentIsReadOnlyAttribute {
|
|
45
47
|
qItem: QuestionnaireItem;
|
|
46
48
|
qrItem: QuestionnaireResponseItem;
|
|
47
49
|
}
|
|
48
50
|
|
|
49
51
|
function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
50
|
-
const { qItem, qrItem, isRepeated, isTabled, textShown, onQrItemChange } =
|
|
52
|
+
const { qItem, qrItem, isRepeated, isTabled, textShown, parentIsReadOnly, onQrItemChange } =
|
|
53
|
+
props;
|
|
51
54
|
|
|
52
55
|
switch (qItem.type) {
|
|
53
56
|
case 'string':
|
|
@@ -57,6 +60,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
57
60
|
qrItem={qrItem}
|
|
58
61
|
isRepeated={isRepeated}
|
|
59
62
|
isTabled={isTabled}
|
|
63
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
60
64
|
onQrItemChange={onQrItemChange}
|
|
61
65
|
/>
|
|
62
66
|
);
|
|
@@ -67,6 +71,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
67
71
|
qrItem={qrItem}
|
|
68
72
|
isRepeated={isRepeated}
|
|
69
73
|
isTabled={isTabled}
|
|
74
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
70
75
|
onQrItemChange={onQrItemChange}
|
|
71
76
|
/>
|
|
72
77
|
);
|
|
@@ -77,6 +82,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
77
82
|
qrItem={qrItem}
|
|
78
83
|
isRepeated={isRepeated}
|
|
79
84
|
isTabled={isTabled}
|
|
85
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
80
86
|
onQrItemChange={onQrItemChange}
|
|
81
87
|
/>
|
|
82
88
|
);
|
|
@@ -87,6 +93,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
87
93
|
qrItem={qrItem}
|
|
88
94
|
isRepeated={isRepeated}
|
|
89
95
|
isTabled={isTabled}
|
|
96
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
90
97
|
onQrItemChange={onQrItemChange}
|
|
91
98
|
/>
|
|
92
99
|
);
|
|
@@ -97,6 +104,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
97
104
|
qrItem={qrItem}
|
|
98
105
|
isRepeated={isRepeated}
|
|
99
106
|
isTabled={isTabled}
|
|
107
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
100
108
|
onQrItemChange={onQrItemChange}
|
|
101
109
|
/>
|
|
102
110
|
);
|
|
@@ -106,6 +114,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
106
114
|
qItem={qItem}
|
|
107
115
|
qrItem={qrItem}
|
|
108
116
|
isRepeated={isRepeated}
|
|
117
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
109
118
|
onQrItemChange={onQrItemChange}
|
|
110
119
|
/>
|
|
111
120
|
);
|
|
@@ -118,6 +127,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
118
127
|
qrItem={qrItem}
|
|
119
128
|
isRepeated={isRepeated}
|
|
120
129
|
isTabled={isTabled}
|
|
130
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
121
131
|
onQrItemChange={onQrItemChange}
|
|
122
132
|
/>
|
|
123
133
|
);
|
|
@@ -128,6 +138,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
128
138
|
qrItem={qrItem}
|
|
129
139
|
isRepeated={isRepeated}
|
|
130
140
|
isTabled={isTabled}
|
|
141
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
131
142
|
onQrItemChange={onQrItemChange}
|
|
132
143
|
/>
|
|
133
144
|
);
|
|
@@ -139,6 +150,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
139
150
|
isRepeated={isRepeated}
|
|
140
151
|
isTabled={isTabled}
|
|
141
152
|
textShown={textShown}
|
|
153
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
142
154
|
onQrItemChange={onQrItemChange}
|
|
143
155
|
/>
|
|
144
156
|
);
|
|
@@ -150,6 +162,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
150
162
|
isRepeated={isRepeated}
|
|
151
163
|
isTabled={isTabled}
|
|
152
164
|
textShown={textShown}
|
|
165
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
153
166
|
onQrItemChange={onQrItemChange}
|
|
154
167
|
/>
|
|
155
168
|
);
|
|
@@ -160,6 +173,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
|
|
|
160
173
|
qrItem={qrItem}
|
|
161
174
|
isRepeated={isRepeated}
|
|
162
175
|
isTabled={isTabled}
|
|
176
|
+
parentIsReadOnly={parentIsReadOnly}
|
|
163
177
|
onQrItemChange={onQrItemChange}
|
|
164
178
|
/>
|
|
165
179
|
);
|
|
@@ -19,6 +19,7 @@ import React, { useCallback } from 'react';
|
|
|
19
19
|
import type {
|
|
20
20
|
PropsWithIsRepeatedAttribute,
|
|
21
21
|
PropsWithIsTabledAttribute,
|
|
22
|
+
PropsWithParentIsReadOnlyAttribute,
|
|
22
23
|
PropsWithQrItemChangeHandler
|
|
23
24
|
} from '../../../interfaces/renderProps.interface';
|
|
24
25
|
import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
|
|
@@ -32,23 +33,24 @@ import StringField from './StringField';
|
|
|
32
33
|
import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
|
|
33
34
|
import useStringCalculatedExpression from '../../../hooks/useStringCalculatedExpression';
|
|
34
35
|
import useStringInput from '../../../hooks/useStringInput';
|
|
36
|
+
import useReadOnly from '../../../hooks/useReadOnly';
|
|
35
37
|
|
|
36
38
|
interface StringItemProps
|
|
37
39
|
extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
|
|
38
40
|
PropsWithIsRepeatedAttribute,
|
|
39
|
-
PropsWithIsTabledAttribute
|
|
41
|
+
PropsWithIsTabledAttribute,
|
|
42
|
+
PropsWithParentIsReadOnlyAttribute {
|
|
40
43
|
qItem: QuestionnaireItem;
|
|
41
44
|
qrItem: QuestionnaireResponseItem;
|
|
42
45
|
}
|
|
43
46
|
function StringItem(props: StringItemProps) {
|
|
44
|
-
const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
|
|
47
|
+
const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
|
|
45
48
|
|
|
46
|
-
|
|
49
|
+
const readOnly = useReadOnly(qItem, parentIsReadOnly);
|
|
47
50
|
const {
|
|
48
51
|
displayUnit,
|
|
49
52
|
displayPrompt,
|
|
50
53
|
displayInstructions,
|
|
51
|
-
readOnly,
|
|
52
54
|
entryFormat,
|
|
53
55
|
regexValidation,
|
|
54
56
|
maxLength
|
|
@@ -111,7 +113,7 @@ function StringItem(props: StringItemProps) {
|
|
|
111
113
|
}
|
|
112
114
|
return (
|
|
113
115
|
<FullWidthFormComponentBox data-test="q-item-string-box">
|
|
114
|
-
<ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions}>
|
|
116
|
+
<ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions} readOnly={readOnly}>
|
|
115
117
|
<StringField
|
|
116
118
|
linkId={qItem.linkId}
|
|
117
119
|
input={input}
|
|
@@ -23,13 +23,14 @@ import type { RepeatGroupSingle } from '../../../interfaces/repeatGroup.interfac
|
|
|
23
23
|
|
|
24
24
|
interface AddItemButtonProps {
|
|
25
25
|
repeatGroups: RepeatGroupSingle[];
|
|
26
|
+
readOnly: boolean;
|
|
26
27
|
onAddItem: () => void;
|
|
27
28
|
}
|
|
28
29
|
|
|
29
30
|
function AddRowButton(props: AddItemButtonProps) {
|
|
30
|
-
const { repeatGroups, onAddItem } = props;
|
|
31
|
+
const { repeatGroups, readOnly, onAddItem } = props;
|
|
31
32
|
|
|
32
|
-
const isDisabled = repeatGroups[repeatGroups.length - 1].qrItem === null;
|
|
33
|
+
const isDisabled = repeatGroups[repeatGroups.length - 1].qrItem === null || readOnly;
|
|
33
34
|
|
|
34
35
|
return (
|
|
35
36
|
<Box display="flex" flexDirection="row-reverse">
|
|
@@ -26,13 +26,14 @@ import type { QuestionnaireResponseItem } from 'fhir/r4';
|
|
|
26
26
|
interface DeleteRowButtonProps {
|
|
27
27
|
nullableQrItem: QuestionnaireResponseItem | null;
|
|
28
28
|
numOfRows: number;
|
|
29
|
+
readOnly: boolean;
|
|
29
30
|
onDeleteItem: () => void;
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
function DeleteRowButton(props: DeleteRowButtonProps) {
|
|
33
|
-
const { nullableQrItem, numOfRows, onDeleteItem } = props;
|
|
34
|
+
const { nullableQrItem, numOfRows, readOnly, onDeleteItem } = props;
|
|
34
35
|
|
|
35
|
-
const isDisabled = nullableQrItem === null || numOfRows === 1;
|
|
36
|
+
const isDisabled = nullableQrItem === null || numOfRows === 1 || readOnly;
|
|
36
37
|
return (
|
|
37
38
|
<DeleteButtonTableCell>
|
|
38
39
|
<Tooltip title="Delete item">
|