@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.
Files changed (199) hide show
  1. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js +0 -1
  2. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js.map +1 -1
  3. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.d.ts +12 -0
  4. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.js +39 -0
  5. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.js.map +1 -0
  6. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.d.ts +3 -3
  7. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +14 -27
  8. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
  9. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.d.ts +13 -0
  10. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.js +42 -0
  11. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.js.map +1 -0
  12. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.d.ts +4 -3
  13. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +14 -22
  14. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
  15. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.d.ts +2 -2
  16. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js +3 -3
  17. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js.map +1 -1
  18. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.d.ts +12 -0
  19. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js +27 -0
  20. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js.map +1 -0
  21. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.d.ts +1 -1
  22. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +9 -24
  23. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js.map +1 -1
  24. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.d.ts +14 -0
  25. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js +42 -0
  26. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js.map +1 -0
  27. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.d.ts +1 -1
  28. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +8 -21
  29. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
  30. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.d.ts +10 -0
  31. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js +41 -0
  32. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js.map +1 -0
  33. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +7 -23
  34. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
  35. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.d.ts +12 -0
  36. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js +42 -0
  37. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js.map +1 -0
  38. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js +8 -18
  39. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js.map +1 -1
  40. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +4 -4
  41. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -1
  42. package/lib/components/FormComponents/Item.styles.d.ts +2 -2
  43. package/lib/components/FormComponents/Item.styles.js +2 -2
  44. package/lib/components/FormComponents/Item.styles.js.map +1 -1
  45. package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.d.ts +8 -0
  46. package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.js +37 -0
  47. package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.js.map +1 -0
  48. package/lib/components/FormComponents/ItemParts/RadioButtons.d.ts +8 -0
  49. package/lib/components/FormComponents/ItemParts/RadioButtons.js +37 -0
  50. package/lib/components/FormComponents/ItemParts/RadioButtons.js.map +1 -0
  51. package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.d.ts +8 -0
  52. package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.js +37 -0
  53. package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.js.map +1 -0
  54. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.d.ts +20 -0
  55. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js +49 -0
  56. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js.map +1 -0
  57. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.d.ts +0 -0
  58. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.js +2 -0
  59. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.js.map +1 -0
  60. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js +11 -35
  61. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js.map +1 -1
  62. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.d.ts +17 -0
  63. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.js +42 -0
  64. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.js.map +1 -0
  65. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.d.ts +3 -3
  66. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js +23 -36
  67. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js.map +1 -1
  68. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.d.ts +2 -2
  69. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js +3 -3
  70. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js.map +1 -1
  71. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.d.ts +15 -0
  72. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.js +29 -0
  73. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.js.map +1 -0
  74. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.d.ts +1 -1
  75. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js +3 -23
  76. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js.map +1 -1
  77. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.d.ts +11 -0
  78. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js +14 -0
  79. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js.map +1 -0
  80. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.d.ts +0 -0
  81. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.js +2 -0
  82. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.js.map +1 -0
  83. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js +18 -23
  84. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js.map +1 -1
  85. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.d.ts +12 -0
  86. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js +16 -0
  87. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js.map +1 -0
  88. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js +8 -14
  89. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js.map +1 -1
  90. package/lib/components/FormComponents/SingleItem/SingleItem.d.ts +2 -2
  91. package/lib/components/FormComponents/SingleItem/SingleItem.js +2 -2
  92. package/lib/components/FormComponents/SingleItem/SingleItem.js.map +1 -1
  93. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.d.ts +2 -2
  94. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js +3 -3
  95. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -1
  96. package/lib/components/FormComponents/Tables/AddItemButton.d.ts +8 -0
  97. package/lib/components/FormComponents/Tables/AddItemButton.js +28 -0
  98. package/lib/components/FormComponents/Tables/AddItemButton.js.map +1 -0
  99. package/lib/components/FormComponents/Tables/AddRowButton.d.ts +8 -0
  100. package/lib/components/FormComponents/Tables/AddRowButton.js +28 -0
  101. package/lib/components/FormComponents/Tables/AddRowButton.js.map +1 -0
  102. package/lib/components/FormComponents/Tables/GroupTable.d.ts +10 -0
  103. package/lib/components/FormComponents/Tables/GroupTable.js +108 -0
  104. package/lib/components/FormComponents/Tables/GroupTable.js.map +1 -0
  105. package/lib/components/FormComponents/Tables/GroupTableRow.d.ts +10 -0
  106. package/lib/components/FormComponents/Tables/GroupTableRow.js +46 -0
  107. package/lib/components/FormComponents/Tables/GroupTableRow.js.map +1 -0
  108. package/lib/components/FormComponents/Tables/index.d.ts +1 -1
  109. package/lib/components/FormComponents/Tables/index.js +1 -1
  110. package/lib/components/FormComponents/Tables/index.js.map +1 -1
  111. package/lib/components/Renderer/FormBodyTabbed.js +1 -1
  112. package/lib/components/Renderer/FormBodyTabbed.js.map +1 -1
  113. package/lib/components/Tabs/FormBodySingleTab.js +1 -1
  114. package/lib/components/Tabs/FormBodySingleTab.js.map +1 -1
  115. package/lib/components/Tabs/FormBodyTabList.d.ts +1 -0
  116. package/lib/components/Tabs/FormBodyTabList.js +3 -4
  117. package/lib/components/Tabs/FormBodyTabList.js.map +1 -1
  118. package/lib/components/Tabs/FormBodyTabListWrapper.d.ts +1 -1
  119. package/lib/components/Tabs/FormBodyTabListWrapper.js +6 -13
  120. package/lib/components/Tabs/FormBodyTabListWrapper.js.map +1 -1
  121. package/lib/components/Tabs/ShowCompletedTabsSection.d.ts +7 -0
  122. package/lib/components/Tabs/ShowCompletedTabsSection.js +34 -0
  123. package/lib/components/Tabs/ShowCompletedTabsSection.js.map +1 -0
  124. package/lib/hooks/useContextDisplayItems.d.ts +6 -0
  125. package/lib/hooks/useContextDisplayItems.js +30 -0
  126. package/lib/hooks/useContextDisplayItems.js.map +1 -0
  127. package/lib/hooks/useInitialiseRenderer.js +2 -2
  128. package/lib/hooks/useInitialiseRenderer.js.map +1 -1
  129. package/lib/hooks/useInitialiseRepeatGroups.d.ts +1 -1
  130. package/lib/hooks/useNumberInput.d.ts +1 -1
  131. package/lib/hooks/useNumberInput.js.map +1 -1
  132. package/lib/hooks/useStringInput.d.ts +1 -1
  133. package/lib/hooks/useStringInput.js.map +1 -1
  134. package/lib/hooks/useTerminologyServerQuery.js +3 -6
  135. package/lib/hooks/useTerminologyServerQuery.js.map +1 -1
  136. package/lib/index.js +2 -2
  137. package/lib/index.js.map +1 -1
  138. package/lib/interfaces/renderProps.interface.d.ts +3 -0
  139. package/lib/stores/useQuestionnaireResponseStore.d.ts +2 -1
  140. package/lib/stores/useQuestionnaireResponseStore.js +5 -3
  141. package/lib/stores/useQuestionnaireResponseStore.js.map +1 -1
  142. package/lib/utils/qrItem.d.ts +2 -3
  143. package/lib/utils/qrItem.js +2 -3
  144. package/lib/utils/qrItem.js.map +1 -1
  145. package/lib/utils/repopulateIntoResponse.d.ts +2 -2
  146. package/lib/utils/repopulateItems.js +0 -1
  147. package/lib/utils/repopulateItems.js.map +1 -1
  148. package/package.json +7 -7
  149. package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +0 -1
  150. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.tsx +85 -0
  151. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +35 -58
  152. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.tsx +79 -0
  153. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +37 -50
  154. package/src/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.tsx +10 -5
  155. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.tsx +48 -0
  156. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +25 -53
  157. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.tsx +83 -0
  158. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +27 -49
  159. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +81 -0
  160. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +19 -54
  161. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.tsx +97 -0
  162. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +22 -60
  163. package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +4 -4
  164. package/src/components/FormComponents/Item.styles.ts +2 -2
  165. package/src/components/FormComponents/ItemParts/RadioAnswerOptionButtons.tsx +72 -0
  166. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.tsx +131 -0
  167. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +38 -93
  168. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.tsx +112 -0
  169. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +57 -76
  170. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.tsx +8 -5
  171. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.tsx +72 -0
  172. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +12 -59
  173. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx +54 -0
  174. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +40 -64
  175. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.tsx +63 -0
  176. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +22 -50
  177. package/src/components/FormComponents/SingleItem/SingleItem.tsx +6 -3
  178. package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +7 -3
  179. package/src/components/FormComponents/Tables/AddRowButton.tsx +49 -0
  180. package/src/components/FormComponents/Tables/{QItemGroupTable.tsx → GroupTable.tsx} +6 -17
  181. package/src/components/FormComponents/Tables/{QItemGroupTableRow.tsx → GroupTableRow.tsx} +2 -2
  182. package/src/components/FormComponents/Tables/index.ts +1 -1
  183. package/src/components/Renderer/FormBodyTabbed.tsx +1 -1
  184. package/src/components/Tabs/FormBodySingleTab.tsx +1 -1
  185. package/src/components/Tabs/FormBodyTabList.tsx +5 -8
  186. package/src/components/Tabs/FormBodyTabListWrapper.tsx +15 -26
  187. package/src/components/Tabs/ShowCompletedTabsSection.tsx +52 -0
  188. package/src/hooks/useContextDisplayItems.ts +40 -0
  189. package/src/hooks/useInitialiseRenderer.ts +2 -2
  190. package/src/hooks/useInitialiseRepeatGroups.ts +1 -1
  191. package/src/hooks/useNumberInput.ts +2 -1
  192. package/src/hooks/useStringInput.ts +2 -1
  193. package/src/hooks/useTerminologyServerQuery.ts +3 -6
  194. package/src/index.ts +2 -2
  195. package/src/interfaces/renderProps.interface.ts +4 -0
  196. package/src/stores/useQuestionnaireResponseStore.ts +5 -4
  197. package/src/utils/qrItem.ts +4 -3
  198. package/src/utils/repopulateIntoResponse.ts +2 -2
  199. package/src/utils/repopulateItems.ts +0 -1
@@ -21,15 +21,13 @@ import Card from '@mui/material/Card';
21
21
  import { PrimarySelectableList } from '../Lists.styles';
22
22
  import type { QuestionnaireItem } from 'fhir/r4';
23
23
  import type { Tabs } from '../../interfaces/tab.interface';
24
- import { IconButton } from '@mui/material';
25
- import ExpandLess from '@mui/icons-material/ExpandLess';
26
- import ExpandMore from '@mui/icons-material/ExpandMore';
27
- import Typography from '@mui/material/Typography';
28
24
  import Divider from '@mui/material/Divider';
29
25
  import FormBodyTabList from './FormBodyTabList';
26
+ import ShowCompletedTabsSection from './ShowCompletedTabsSection';
27
+ import useContextDisplayItems from '../../hooks/useContextDisplayItems';
30
28
 
31
29
  interface FormBodyTabListWrapperProps {
32
- qFormItems: QuestionnaireItem[];
30
+ topLevelItems: QuestionnaireItem[];
33
31
  currentTabIndex: number;
34
32
  tabs: Tabs;
35
33
  }
@@ -37,39 +35,30 @@ interface FormBodyTabListWrapperProps {
37
35
  const FormBodyTabListWrapper = memo(function FormBodyTabListWrapper(
38
36
  props: FormBodyTabListWrapperProps
39
37
  ) {
40
- const { qFormItems, currentTabIndex, tabs } = props;
38
+ const { topLevelItems, currentTabIndex, tabs } = props;
41
39
 
42
40
  const [completedTabsExpanded, setCompletedTabsExpanded] = useState(true);
43
41
 
42
+ const { allContextDisplayItems, completedDisplayItemExists } =
43
+ useContextDisplayItems(topLevelItems);
44
+
44
45
  return (
45
46
  <Card sx={{ p: 0.75, mb: 2 }}>
46
47
  <Box sx={{ flexGrow: 1 }}>
47
48
  <PrimarySelectableList dense disablePadding sx={{ mb: 1 }} data-test="renderer-tab-list">
48
- <Box display="flex" justifyContent="center" alignItems="center" mx={2} columnGap={0.5}>
49
- <Typography
50
- variant="overline"
51
- fontSize={9}
52
- color={completedTabsExpanded ? 'text.secondary' : 'text.disabled'}>
53
- Completed tabs {completedTabsExpanded ? 'shown' : 'hidden'}
54
- </Typography>
55
- <IconButton
56
- size="small"
57
- onClick={() => {
58
- setCompletedTabsExpanded(!completedTabsExpanded);
59
- }}>
60
- {completedTabsExpanded ? (
61
- <ExpandLess fontSize="small" />
62
- ) : (
63
- <ExpandMore fontSize="small" />
64
- )}
65
- </IconButton>
66
- </Box>
49
+ {completedDisplayItemExists ? (
50
+ <ShowCompletedTabsSection
51
+ completedTabsExpanded={completedTabsExpanded}
52
+ setCompletedTabsExpanded={setCompletedTabsExpanded}
53
+ />
54
+ ) : null}
67
55
  <Divider sx={{ mx: 1 }} light />
68
56
  <FormBodyTabList
69
- topLevelItems={qFormItems}
57
+ topLevelItems={topLevelItems}
70
58
  currentTabIndex={currentTabIndex}
71
59
  tabs={tabs}
72
60
  completedTabsCollapsed={!completedTabsExpanded}
61
+ allContextDisplayItems={allContextDisplayItems}
73
62
  />
74
63
  </PrimarySelectableList>
75
64
  </Box>
@@ -0,0 +1,52 @@
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 Box from '@mui/material/Box';
20
+ import Typography from '@mui/material/Typography';
21
+ import { IconButton } from '@mui/material';
22
+ import ExpandLess from '@mui/icons-material/ExpandLess';
23
+ import ExpandMore from '@mui/icons-material/ExpandMore';
24
+
25
+ interface ShowCompletedTabsSectionProps {
26
+ completedTabsExpanded: boolean;
27
+ setCompletedTabsExpanded: (newExpanded: boolean) => void;
28
+ }
29
+
30
+ function ShowCompletedTabsSection(props: ShowCompletedTabsSectionProps) {
31
+ const { completedTabsExpanded, setCompletedTabsExpanded } = props;
32
+
33
+ return (
34
+ <Box display="flex" justifyContent="center" alignItems="center" mx={2} columnGap={0.5}>
35
+ <Typography
36
+ variant="overline"
37
+ fontSize={9}
38
+ color={completedTabsExpanded ? 'text.secondary' : 'text.disabled'}>
39
+ Completed tabs {completedTabsExpanded ? 'shown' : 'hidden'}
40
+ </Typography>
41
+ <IconButton
42
+ size="small"
43
+ onClick={() => {
44
+ setCompletedTabsExpanded(!completedTabsExpanded);
45
+ }}>
46
+ {completedTabsExpanded ? <ExpandLess fontSize="small" /> : <ExpandMore fontSize="small" />}
47
+ </IconButton>
48
+ </Box>
49
+ );
50
+ }
51
+
52
+ export default ShowCompletedTabsSection;
@@ -0,0 +1,40 @@
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 { useMemo } from 'react';
19
+ import { getContextDisplays } from '../utils/tabs';
20
+ import type { QuestionnaireItem } from 'fhir/r4';
21
+
22
+ function useContextDisplayItems(topLevelItems: QuestionnaireItem[]) {
23
+ return useMemo(() => {
24
+ let completedDisplayItemExists = false;
25
+
26
+ const allContextDisplayItems = topLevelItems.map((topLevelItem) =>
27
+ getContextDisplays(topLevelItem)
28
+ );
29
+
30
+ completedDisplayItemExists = allContextDisplayItems.some((contextDisplayItems) => {
31
+ return contextDisplayItems.some(
32
+ (contextDisplayItem) => contextDisplayItem.text === 'Complete'
33
+ );
34
+ });
35
+
36
+ return { allContextDisplayItems, completedDisplayItemExists };
37
+ }, [topLevelItems]);
38
+ }
39
+
40
+ export default useContextDisplayItems;
@@ -17,7 +17,7 @@
17
17
 
18
18
  import type { Questionnaire, QuestionnaireResponse } from 'fhir/r4';
19
19
  import { useLayoutEffect, useState } from 'react';
20
- import { createQuestionnaireResponse } from '../utils/qrItem';
20
+ import { createEmptyQuestionnaireResponse } from '../utils/qrItem';
21
21
  import useQuestionnaireStore from '../stores/useQuestionnaireStore';
22
22
  import useQuestionnaireResponseStore from '../stores/useQuestionnaireResponseStore';
23
23
  import type Client from 'fhirclient/lib/Client';
@@ -80,7 +80,7 @@ function useInitialiseRenderer(
80
80
  additionalVariables,
81
81
  terminologyServerUrl
82
82
  ).then(() => {
83
- buildSourceResponse(createQuestionnaireResponse(questionnaire));
83
+ buildSourceResponse(createEmptyQuestionnaireResponse(questionnaire));
84
84
 
85
85
  if (questionnaireResponse) {
86
86
  const updatedResponse = updatePopulatedProperties(questionnaireResponse);
@@ -16,7 +16,7 @@
16
16
  */
17
17
 
18
18
  import type { QuestionnaireResponseItem } from 'fhir/r4';
19
- import { QuestionnaireItem } from 'fhir/r4';
19
+ import type { QuestionnaireItem } from 'fhir/r4';
20
20
  import { nanoid } from 'nanoid';
21
21
  import type { RepeatGroupSingle } from '../interfaces/repeatGroup.interface';
22
22
  import { useMemo } from 'react';
@@ -15,7 +15,8 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import { Dispatch, SetStateAction, useEffect, useState } from 'react';
18
+ import type { Dispatch, SetStateAction } from 'react';
19
+ import { useEffect, useState } from 'react';
19
20
 
20
21
  function useNumberInput(valueFromProps: number): [number, Dispatch<SetStateAction<number>>] {
21
22
  const [value, setValue] = useState(valueFromProps);
@@ -15,7 +15,8 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import { Dispatch, SetStateAction, useEffect, useState } from 'react';
18
+ import type { Dispatch, SetStateAction } from 'react';
19
+ import { useEffect, useState } from 'react';
19
20
 
20
21
  function useStringInput(valueFromProps: string): [string, Dispatch<SetStateAction<string>>] {
21
22
  const [input, setInput] = useState(valueFromProps);
@@ -34,7 +34,6 @@ function useTerminologyServerQuery(
34
34
 
35
35
  let fullUrl = '';
36
36
  let options: Coding[] = [];
37
- let loading = false;
38
37
  let feedback: { message: string; color: AlertColor } | undefined;
39
38
 
40
39
  if (input.length === 0) {
@@ -64,7 +63,7 @@ function useTerminologyServerQuery(
64
63
 
65
64
  // Perform query
66
65
  const terminologyServerUrl = getTerminologyServerUrl(qItem) ?? defaultTerminologyServerUrl;
67
- const { isInitialLoading, error, data } = useQuery<ValueSet>(
66
+ const { isFetching, error, data } = useQuery<ValueSet>(
68
67
  ['expandValueSet', fullUrl],
69
68
  () => getValueSetPromise(fullUrl, terminologyServerUrl),
70
69
  {
@@ -72,9 +71,7 @@ function useTerminologyServerQuery(
72
71
  }
73
72
  );
74
73
 
75
- if (isInitialLoading) {
76
- loading = true;
77
- }
74
+ console.log(isFetching);
78
75
 
79
76
  if (error) {
80
77
  console.warn('Ontoserver query failed. Details below: \n' + error);
@@ -95,6 +92,6 @@ function useTerminologyServerQuery(
95
92
  }
96
93
  }
97
94
 
98
- return { options, loading, feedback };
95
+ return { options, loading: isFetching, feedback };
99
96
  }
100
97
  export default useTerminologyServerQuery;
package/src/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import useQuestionnaireStore from './stores/useQuestionnaireStore';
2
2
  import type { Questionnaire, QuestionnaireResponse } from 'fhir/r4';
3
- import { createQuestionnaireResponse } from './utils/qrItem';
3
+ import { createEmptyQuestionnaireResponse } from './utils/qrItem';
4
4
  import useQuestionnaireResponseStore from './stores/useQuestionnaireResponseStore';
5
5
  import { removeHiddenAnswers } from './utils/removeHidden';
6
6
  import type { ItemToRepopulate } from './utils/repopulateItems';
@@ -28,7 +28,7 @@ export async function buildForm(
28
28
  if (!questionnaireResponse) {
29
29
  useQuestionnaireResponseStore
30
30
  .getState()
31
- .buildSourceResponse(createQuestionnaireResponse(questionnaire));
31
+ .buildSourceResponse(createEmptyQuestionnaireResponse(questionnaire));
32
32
  return;
33
33
  }
34
34
 
@@ -32,3 +32,7 @@ export interface PropsWithIsRepeatedAttribute {
32
32
  export interface PropsWithIsTabledAttribute {
33
33
  isTabled: boolean;
34
34
  }
35
+
36
+ export interface PropsWithTextShownAttribute {
37
+ textShown?: boolean;
38
+ }
@@ -2,12 +2,13 @@ import { create } from 'zustand';
2
2
  import type { QuestionnaireResponse } from 'fhir/r4';
3
3
  import { emptyResponse } from '../utils/emptyResource';
4
4
  import cloneDeep from 'lodash.clonedeep';
5
- import { diff } from 'json-diff';
5
+ import type { Diff } from 'deep-diff';
6
+ import { diff } from 'deep-diff';
6
7
 
7
8
  export interface UseQuestionnaireResponseStoreType {
8
9
  sourceResponse: QuestionnaireResponse;
9
10
  updatableResponse: QuestionnaireResponse;
10
- formChangesHistory: object[];
11
+ formChangesHistory: (Diff<QuestionnaireResponse, QuestionnaireResponse>[] | null)[];
11
12
  buildSourceResponse: (response: QuestionnaireResponse) => void;
12
13
  setUpdatableResponseAsPopulated: (populatedResponse: QuestionnaireResponse) => void;
13
14
  updateResponse: (updatedResponse: QuestionnaireResponse) => void;
@@ -27,14 +28,14 @@ const useQuestionnaireResponseStore = create<UseQuestionnaireResponseStoreType>(
27
28
  }));
28
29
  },
29
30
  setUpdatableResponseAsPopulated: (populatedResponse: QuestionnaireResponse) => {
30
- const formChanges = diff(get().updatableResponse, populatedResponse, { full: true });
31
+ const formChanges = diff(get().updatableResponse, populatedResponse) ?? null;
31
32
  set(() => ({
32
33
  updatableResponse: populatedResponse,
33
34
  formChangesHistory: [...get().formChangesHistory, formChanges]
34
35
  }));
35
36
  },
36
37
  updateResponse: (updatedResponse: QuestionnaireResponse) => {
37
- const formChanges = diff(get().updatableResponse, updatedResponse, { full: true });
38
+ const formChanges = diff(get().updatableResponse, updatedResponse) ?? null;
38
39
  set(() => ({
39
40
  updatableResponse: updatedResponse,
40
41
  formChangesHistory: [...get().formChangesHistory, formChanges]
@@ -25,12 +25,13 @@ import type {
25
25
  import type { QrRepeatGroup } from '../interfaces/repeatGroup.interface';
26
26
 
27
27
  /**
28
- * Create a questionnaireResponse from a given questionnaire form item
29
- * A questionnaire form item is the first item of a questionnaire
28
+ * Create an empty questionnaireResponse from a given questionnaire
30
29
  *
31
30
  * @author Sean Fong
32
31
  */
33
- export function createQuestionnaireResponse(questionnaire: Questionnaire): QuestionnaireResponse {
32
+ export function createEmptyQuestionnaireResponse(
33
+ questionnaire: Questionnaire
34
+ ): QuestionnaireResponse {
34
35
  const questionnaireResponse: QuestionnaireResponse = {
35
36
  resourceType: 'QuestionnaireResponse',
36
37
  status: 'in-progress'
@@ -1,10 +1,10 @@
1
- import {
1
+ import type {
2
2
  Questionnaire,
3
3
  QuestionnaireItem,
4
4
  QuestionnaireResponse,
5
5
  QuestionnaireResponseItem
6
6
  } from 'fhir/r4';
7
- import { ItemToRepopulate } from './repopulateItems';
7
+ import type { ItemToRepopulate } from './repopulateItems';
8
8
  import { getQrItemsIndex, mapQItemsIndex } from './mapItem';
9
9
  import { updateQrItemsInGroup } from './qrItem';
10
10
 
@@ -114,7 +114,6 @@ function getCorrespondingQuestionnaireItemsRecursive(
114
114
  }
115
115
 
116
116
  // TODO it seems like there can only be one answer per linkId, we might need to do repeat groups differently
117
- // so we need to fix this one first it seems like
118
117
 
119
118
  /* Repeat group implementation */
120
119
  if (qItem.type === 'group' && qItem.repeats) {