@aehrc/smart-forms-renderer 0.7.2 → 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.
Files changed (356) hide show
  1. package/lib/components/Alert.styles.d.ts +2 -7
  2. package/lib/components/Box.styles.d.ts +6 -21
  3. package/lib/components/FormComponents/BooleanItem/BooleanItem.d.ts +2 -2
  4. package/lib/components/FormComponents/BooleanItem/BooleanItem.js +5 -4
  5. package/lib/components/FormComponents/BooleanItem/BooleanItem.js.map +1 -1
  6. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.d.ts +2 -2
  7. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js +6 -6
  8. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js.map +1 -1
  9. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.d.ts +12 -0
  10. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.js +39 -0
  11. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.js.map +1 -0
  12. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.d.ts +3 -3
  13. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +17 -29
  14. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
  15. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.d.ts +13 -0
  16. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.js +42 -0
  17. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.js.map +1 -0
  18. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.d.ts +4 -3
  19. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +17 -24
  20. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
  21. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.d.ts +3 -2
  22. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js +8 -8
  23. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js.map +1 -1
  24. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.d.ts +12 -0
  25. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js +27 -0
  26. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js.map +1 -0
  27. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.d.ts +3 -3
  28. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +14 -29
  29. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js.map +1 -1
  30. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.d.ts +14 -0
  31. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js +42 -0
  32. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js.map +1 -0
  33. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.d.ts +3 -3
  34. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +14 -26
  35. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
  36. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.d.ts +11 -0
  37. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js +41 -0
  38. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js.map +1 -0
  39. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.d.ts +2 -2
  40. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +12 -27
  41. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
  42. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.d.ts +13 -0
  43. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js +42 -0
  44. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js.map +1 -0
  45. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.d.ts +2 -2
  46. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js +13 -22
  47. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js.map +1 -1
  48. package/lib/components/FormComponents/DateItem/DateItem.d.ts +2 -1
  49. package/lib/components/FormComponents/DateItem/DateItem.js +5 -4
  50. package/lib/components/FormComponents/DateItem/DateItem.js.map +1 -1
  51. package/lib/components/FormComponents/DateItem/DatePicker.d.ts +2 -0
  52. package/lib/components/FormComponents/DateItem/DatePicker.js +42 -0
  53. package/lib/components/FormComponents/DateItem/DatePicker.js.map +1 -0
  54. package/lib/components/FormComponents/DateItem/DatePickerField.d.ts +8 -0
  55. package/{src/components/FormComponents/Typography.styles.ts → lib/components/FormComponents/DateItem/DatePickerField.js} +8 -9
  56. package/lib/components/FormComponents/DateItem/DatePickerField.js.map +1 -0
  57. package/lib/components/FormComponents/DateTimeItem/DateTimeItem.d.ts +2 -2
  58. package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js +5 -4
  59. package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js.map +1 -1
  60. package/lib/components/FormComponents/DecimalItem/DecimalItem.d.ts +2 -2
  61. package/lib/components/FormComponents/DecimalItem/DecimalItem.js +5 -4
  62. package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
  63. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.d.ts +1 -0
  64. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js +2 -2
  65. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js.map +1 -1
  66. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.d.ts +2 -7
  67. package/lib/components/FormComponents/DisplayItem/DisplayItem.js +2 -2
  68. package/lib/components/FormComponents/DisplayItem/DisplayItem.js.map +1 -1
  69. package/lib/components/FormComponents/GridGroup/GridGroup.d.ts +2 -2
  70. package/lib/components/FormComponents/GridGroup/GridGroup.js +6 -4
  71. package/lib/components/FormComponents/GridGroup/GridGroup.js.map +1 -1
  72. package/lib/components/FormComponents/GridGroup/GridRow.d.ts +2 -1
  73. package/lib/components/FormComponents/GridGroup/GridRow.js +2 -2
  74. package/lib/components/FormComponents/GridGroup/GridRow.js.map +1 -1
  75. package/lib/components/FormComponents/GridGroup/GridTable.d.ts +2 -1
  76. package/lib/components/FormComponents/GridGroup/GridTable.js +2 -2
  77. package/lib/components/FormComponents/GridGroup/GridTable.js.map +1 -1
  78. package/lib/components/FormComponents/GroupItem/GroupHeading.d.ts +1 -0
  79. package/lib/components/FormComponents/GroupItem/GroupHeading.js +6 -5
  80. package/lib/components/FormComponents/GroupItem/GroupHeading.js.map +1 -1
  81. package/lib/components/FormComponents/GroupItem/GroupItem.d.ts +2 -3
  82. package/lib/components/FormComponents/GroupItem/GroupItem.js +5 -3
  83. package/lib/components/FormComponents/GroupItem/GroupItem.js.map +1 -1
  84. package/lib/components/FormComponents/GroupItem/GroupItem.styles.d.ts +2 -6
  85. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.d.ts +2 -2
  86. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +12 -12
  87. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -1
  88. package/lib/components/FormComponents/IntegerItem/IntegerItem.d.ts +2 -2
  89. package/lib/components/FormComponents/IntegerItem/IntegerItem.js +5 -4
  90. package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
  91. package/lib/components/FormComponents/Item.styles.d.ts +2 -6
  92. package/lib/components/FormComponents/Item.styles.js +2 -6
  93. package/lib/components/FormComponents/Item.styles.js.map +1 -1
  94. package/lib/components/FormComponents/ItemParts/ItemFieldGrid.d.ts +1 -0
  95. package/lib/components/FormComponents/ItemParts/ItemFieldGrid.js +3 -3
  96. package/lib/components/FormComponents/ItemParts/ItemFieldGrid.js.map +1 -1
  97. package/lib/components/FormComponents/ItemParts/ItemLabelText.d.ts +1 -0
  98. package/lib/components/FormComponents/ItemParts/ItemLabelText.js +4 -6
  99. package/lib/components/FormComponents/ItemParts/ItemLabelText.js.map +1 -1
  100. package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.d.ts +1 -0
  101. package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.js +2 -2
  102. package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.js.map +1 -1
  103. package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.d.ts +8 -0
  104. package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.js +37 -0
  105. package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.js.map +1 -0
  106. package/lib/components/FormComponents/ItemParts/RadioButtons.d.ts +8 -0
  107. package/lib/components/FormComponents/ItemParts/RadioButtons.js +37 -0
  108. package/lib/components/FormComponents/ItemParts/RadioButtons.js.map +1 -0
  109. package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.d.ts +8 -0
  110. package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.js +37 -0
  111. package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.js.map +1 -0
  112. package/lib/components/FormComponents/Lists.styles.d.ts +2 -9
  113. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.d.ts +21 -0
  114. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js +48 -0
  115. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js.map +1 -0
  116. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.d.ts +0 -0
  117. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.js +2 -0
  118. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.js.map +1 -0
  119. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.d.ts +2 -2
  120. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js +16 -39
  121. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js.map +1 -1
  122. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.d.ts +17 -0
  123. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.js +42 -0
  124. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.js.map +1 -0
  125. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.d.ts +3 -3
  126. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js +27 -39
  127. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js.map +1 -1
  128. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.d.ts +2 -2
  129. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js +6 -6
  130. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js.map +1 -1
  131. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.d.ts +15 -0
  132. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.js +29 -0
  133. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.js.map +1 -0
  134. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.d.ts +3 -3
  135. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js +10 -29
  136. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js.map +1 -1
  137. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.d.ts +12 -0
  138. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js +14 -0
  139. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js.map +1 -0
  140. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.d.ts +0 -0
  141. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.js +2 -0
  142. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.js.map +1 -0
  143. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.d.ts +2 -2
  144. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js +23 -27
  145. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js.map +1 -1
  146. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.d.ts +13 -0
  147. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js +16 -0
  148. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js.map +1 -0
  149. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.d.ts +2 -2
  150. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js +13 -18
  151. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js.map +1 -1
  152. package/lib/components/FormComponents/RepeatGroup/AddItemButton.d.ts +1 -0
  153. package/lib/components/FormComponents/RepeatGroup/AddItemButton.js +2 -2
  154. package/lib/components/FormComponents/RepeatGroup/AddItemButton.js.map +1 -1
  155. package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.d.ts +1 -0
  156. package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.js +2 -2
  157. package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.js.map +1 -1
  158. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.d.ts +2 -2
  159. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js +8 -6
  160. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js.map +1 -1
  161. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.d.ts +2 -2
  162. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js +5 -3
  163. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js.map +1 -1
  164. package/lib/components/FormComponents/RepeatItem/AddItemButton.d.ts +1 -0
  165. package/lib/components/FormComponents/RepeatItem/AddItemButton.js +2 -2
  166. package/lib/components/FormComponents/RepeatItem/AddItemButton.js.map +1 -1
  167. package/lib/components/FormComponents/RepeatItem/DeleteItemButton.d.ts +1 -0
  168. package/lib/components/FormComponents/RepeatItem/DeleteItemButton.js +2 -2
  169. package/lib/components/FormComponents/RepeatItem/DeleteItemButton.js.map +1 -1
  170. package/lib/components/FormComponents/RepeatItem/RepeatField.d.ts +2 -2
  171. package/lib/components/FormComponents/RepeatItem/RepeatField.js +5 -3
  172. package/lib/components/FormComponents/RepeatItem/RepeatField.js.map +1 -1
  173. package/lib/components/FormComponents/RepeatItem/RepeatItem.d.ts +2 -2
  174. package/lib/components/FormComponents/RepeatItem/RepeatItem.js +6 -5
  175. package/lib/components/FormComponents/RepeatItem/RepeatItem.js.map +1 -1
  176. package/lib/components/FormComponents/RepeatItem/RepeatItem.styles.d.ts +4 -18
  177. package/lib/components/FormComponents/SingleItem/SingleItem.d.ts +2 -2
  178. package/lib/components/FormComponents/SingleItem/SingleItem.js +4 -2
  179. package/lib/components/FormComponents/SingleItem/SingleItem.js.map +1 -1
  180. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.d.ts +2 -2
  181. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js +12 -12
  182. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -1
  183. package/lib/components/FormComponents/StringItem/StringItem.d.ts +2 -2
  184. package/lib/components/FormComponents/StringItem/StringItem.js +5 -4
  185. package/lib/components/FormComponents/StringItem/StringItem.js.map +1 -1
  186. package/lib/components/FormComponents/Tables/AddItemButton.d.ts +8 -0
  187. package/lib/components/FormComponents/Tables/AddItemButton.js +28 -0
  188. package/lib/components/FormComponents/Tables/AddItemButton.js.map +1 -0
  189. package/lib/components/FormComponents/Tables/AddRowButton.d.ts +9 -0
  190. package/lib/components/FormComponents/Tables/AddRowButton.js +28 -0
  191. package/lib/components/FormComponents/Tables/AddRowButton.js.map +1 -0
  192. package/lib/components/FormComponents/Tables/DeleteRowButton.d.ts +1 -0
  193. package/lib/components/FormComponents/Tables/DeleteRowButton.js +2 -2
  194. package/lib/components/FormComponents/Tables/DeleteRowButton.js.map +1 -1
  195. package/lib/components/FormComponents/Tables/GroupTable.d.ts +10 -0
  196. package/lib/components/FormComponents/Tables/GroupTable.js +110 -0
  197. package/lib/components/FormComponents/Tables/GroupTable.js.map +1 -0
  198. package/lib/components/FormComponents/Tables/GroupTableRow.d.ts +11 -0
  199. package/lib/components/FormComponents/Tables/GroupTableRow.js +46 -0
  200. package/lib/components/FormComponents/Tables/GroupTableRow.js.map +1 -0
  201. package/lib/components/FormComponents/Tables/QItemGroupTable.js +5 -7
  202. package/lib/components/FormComponents/Tables/QItemGroupTable.js.map +1 -1
  203. package/lib/components/FormComponents/Tables/QItemGroupTableRow.js +2 -2
  204. package/lib/components/FormComponents/Tables/QItemGroupTableRow.js.map +1 -1
  205. package/lib/components/FormComponents/Tables/index.d.ts +1 -1
  206. package/lib/components/FormComponents/Tables/index.js +1 -1
  207. package/lib/components/FormComponents/Tables/index.js.map +1 -1
  208. package/lib/components/FormComponents/TextItem/TextItem.d.ts +2 -2
  209. package/lib/components/FormComponents/TextItem/TextItem.js +5 -4
  210. package/lib/components/FormComponents/TextItem/TextItem.js.map +1 -1
  211. package/lib/components/FormComponents/TimeItem/TimeItem.d.ts +2 -2
  212. package/lib/components/FormComponents/TimeItem/TimeItem.js +5 -4
  213. package/lib/components/FormComponents/TimeItem/TimeItem.js.map +1 -1
  214. package/lib/components/FormComponents/UrlItem/UrlItem.d.ts +2 -2
  215. package/lib/components/FormComponents/UrlItem/UrlItem.js +5 -4
  216. package/lib/components/FormComponents/UrlItem/UrlItem.js.map +1 -1
  217. package/lib/components/Lists.styles.d.ts +2 -9
  218. package/lib/components/Renderer/FormBodyTabbed.js +1 -1
  219. package/lib/components/Renderer/FormBodyTabbed.js.map +1 -1
  220. package/lib/components/Renderer/FormTopLevelItem.js +7 -5
  221. package/lib/components/Renderer/FormTopLevelItem.js.map +1 -1
  222. package/lib/components/Tabs/FormBodySingleTab.js +1 -1
  223. package/lib/components/Tabs/FormBodyTabList.d.ts +1 -0
  224. package/lib/components/Tabs/FormBodyTabList.js +3 -4
  225. package/lib/components/Tabs/FormBodyTabList.js.map +1 -1
  226. package/lib/components/Tabs/FormBodyTabListWrapper.d.ts +1 -1
  227. package/lib/components/Tabs/FormBodyTabListWrapper.js +6 -13
  228. package/lib/components/Tabs/FormBodyTabListWrapper.js.map +1 -1
  229. package/lib/components/Tabs/ShowCompletedTabsSection.d.ts +7 -0
  230. package/lib/components/Tabs/ShowCompletedTabsSection.js +34 -0
  231. package/lib/components/Tabs/ShowCompletedTabsSection.js.map +1 -0
  232. package/lib/hooks/useContextDisplayItems.d.ts +6 -0
  233. package/lib/hooks/useContextDisplayItems.js +30 -0
  234. package/lib/hooks/useContextDisplayItems.js.map +1 -0
  235. package/lib/hooks/useInitialiseRenderer.js +2 -2
  236. package/lib/hooks/useInitialiseRenderer.js.map +1 -1
  237. package/lib/hooks/useInitialiseRepeatGroups.d.ts +1 -1
  238. package/lib/hooks/useMinimalStringCalculatedExpression.d.ts +11 -0
  239. package/lib/hooks/useMinimalStringCalculatedExpression.js +37 -0
  240. package/lib/hooks/useMinimalStringCalculatedExpression.js.map +1 -0
  241. package/lib/hooks/useNumberInput.d.ts +1 -1
  242. package/lib/hooks/useNumberInput.js.map +1 -1
  243. package/lib/hooks/useReadOnly.d.ts +3 -0
  244. package/lib/hooks/useReadOnly.js +26 -0
  245. package/lib/hooks/useReadOnly.js.map +1 -0
  246. package/lib/hooks/useStringInput.d.ts +1 -1
  247. package/lib/hooks/useStringInput.js.map +1 -1
  248. package/lib/hooks/useTerminologyServerQuery.js +3 -6
  249. package/lib/hooks/useTerminologyServerQuery.js.map +1 -1
  250. package/lib/index.js +2 -2
  251. package/lib/index.js.map +1 -1
  252. package/lib/interfaces/calculatedExpression.interface.d.ts +1 -1
  253. package/lib/interfaces/renderProps.interface.d.ts +6 -0
  254. package/lib/stores/useQuestionnaireResponseStore.d.ts +2 -1
  255. package/lib/stores/useQuestionnaireResponseStore.js +5 -3
  256. package/lib/stores/useQuestionnaireResponseStore.js.map +1 -1
  257. package/lib/theme/overrides/Typography.d.ts +13 -0
  258. package/lib/theme/overrides/Typography.js +31 -0
  259. package/lib/theme/overrides/Typography.js.map +1 -0
  260. package/lib/theme/typography.d.ts +0 -2
  261. package/lib/theme/typography.js +3 -5
  262. package/lib/theme/typography.js.map +1 -1
  263. package/lib/utils/calculatedExpression.d.ts +12 -0
  264. package/lib/utils/calculatedExpression.js +54 -8
  265. package/lib/utils/calculatedExpression.js.map +1 -1
  266. package/lib/utils/qrItem.d.ts +2 -3
  267. package/lib/utils/qrItem.js +2 -3
  268. package/lib/utils/qrItem.js.map +1 -1
  269. package/lib/utils/repopulateIntoResponse.d.ts +2 -2
  270. package/lib/utils/repopulateItems.js +0 -1
  271. package/lib/utils/repopulateItems.js.map +1 -1
  272. package/package.json +15 -15
  273. package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +8 -5
  274. package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +9 -7
  275. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.tsx +85 -0
  276. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +48 -60
  277. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.tsx +79 -0
  278. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +50 -52
  279. package/src/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.tsx +24 -9
  280. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.tsx +48 -0
  281. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +32 -59
  282. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.tsx +83 -0
  283. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +37 -56
  284. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +82 -0
  285. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +30 -60
  286. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.tsx +98 -0
  287. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +33 -66
  288. package/src/components/FormComponents/DateItem/DateItem.tsx +8 -6
  289. package/src/components/FormComponents/DateTimeItem/DateTimeItem.tsx +8 -6
  290. package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +7 -5
  291. package/src/components/FormComponents/DisplayItem/DisplayInstructions.tsx +6 -2
  292. package/src/components/FormComponents/DisplayItem/DisplayItem.tsx +2 -2
  293. package/src/components/FormComponents/GridGroup/GridGroup.tsx +13 -5
  294. package/src/components/FormComponents/GridGroup/GridRow.tsx +6 -2
  295. package/src/components/FormComponents/GridGroup/GridTable.tsx +6 -2
  296. package/src/components/FormComponents/GroupItem/GroupHeading.tsx +12 -6
  297. package/src/components/FormComponents/GroupItem/GroupItem.tsx +8 -2
  298. package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +31 -8
  299. package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +7 -5
  300. package/src/components/FormComponents/Item.styles.ts +2 -7
  301. package/src/components/FormComponents/ItemParts/ItemFieldGrid.tsx +4 -3
  302. package/src/components/FormComponents/ItemParts/ItemLabelText.tsx +10 -5
  303. package/src/components/FormComponents/ItemParts/ItemLabelWrapper.tsx +3 -2
  304. package/src/components/FormComponents/ItemParts/RadioAnswerOptionButtons.tsx +72 -0
  305. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.tsx +137 -0
  306. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +50 -99
  307. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.tsx +112 -0
  308. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +72 -80
  309. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.tsx +17 -5
  310. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.tsx +72 -0
  311. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +23 -67
  312. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx +60 -0
  313. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +50 -69
  314. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.tsx +69 -0
  315. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +33 -56
  316. package/src/components/FormComponents/RepeatGroup/AddItemButton.tsx +3 -2
  317. package/src/components/FormComponents/RepeatGroup/DeleteItemButton.tsx +3 -2
  318. package/src/components/FormComponents/RepeatGroup/RepeatGroup.tsx +17 -9
  319. package/src/components/FormComponents/RepeatGroup/RepeatGroupItem.tsx +13 -2
  320. package/src/components/FormComponents/RepeatItem/AddItemButton.tsx +3 -2
  321. package/src/components/FormComponents/RepeatItem/DeleteItemButton.tsx +3 -2
  322. package/src/components/FormComponents/RepeatItem/RepeatField.tsx +21 -3
  323. package/src/components/FormComponents/RepeatItem/RepeatItem.tsx +13 -6
  324. package/src/components/FormComponents/SingleItem/SingleItem.tsx +12 -3
  325. package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +21 -3
  326. package/src/components/FormComponents/StringItem/StringItem.tsx +7 -5
  327. package/src/components/FormComponents/Tables/AddRowButton.tsx +50 -0
  328. package/src/components/FormComponents/Tables/DeleteRowButton.tsx +3 -2
  329. package/src/components/FormComponents/Tables/{QItemGroupTable.tsx → GroupTable.tsx} +22 -22
  330. package/src/components/FormComponents/Tables/{QItemGroupTableRow.tsx → GroupTableRow.tsx} +8 -4
  331. package/src/components/FormComponents/Tables/index.ts +1 -1
  332. package/src/components/FormComponents/TextItem/TextItem.tsx +7 -5
  333. package/src/components/FormComponents/TimeItem/TimeItem.tsx +8 -6
  334. package/src/components/FormComponents/UrlItem/UrlItem.tsx +7 -5
  335. package/src/components/Renderer/FormBodyTabbed.tsx +1 -1
  336. package/src/components/Renderer/FormTopLevelItem.tsx +9 -4
  337. package/src/components/Tabs/FormBodySingleTab.tsx +1 -1
  338. package/src/components/Tabs/FormBodyTabList.tsx +5 -8
  339. package/src/components/Tabs/FormBodyTabListWrapper.tsx +15 -26
  340. package/src/components/Tabs/ShowCompletedTabsSection.tsx +52 -0
  341. package/src/hooks/useContextDisplayItems.ts +40 -0
  342. package/src/hooks/useInitialiseRenderer.ts +2 -2
  343. package/src/hooks/useInitialiseRepeatGroups.ts +1 -1
  344. package/src/hooks/useNumberInput.ts +2 -1
  345. package/src/hooks/useReadOnly.ts +30 -0
  346. package/src/hooks/useStringInput.ts +2 -1
  347. package/src/hooks/useTerminologyServerQuery.ts +3 -6
  348. package/src/index.ts +2 -2
  349. package/src/interfaces/calculatedExpression.interface.ts +1 -1
  350. package/src/interfaces/renderProps.interface.ts +8 -0
  351. package/src/stores/useQuestionnaireResponseStore.ts +5 -4
  352. package/src/theme/typography.ts +3 -5
  353. package/src/utils/calculatedExpression.ts +68 -12
  354. package/src/utils/qrItem.ts +4 -3
  355. package/src/utils/repopulateIntoResponse.ts +2 -2
  356. package/src/utils/repopulateItems.ts +0 -1
@@ -29,6 +29,7 @@ import FormBodyCollapsible from './FormBodyCollapsible';
29
29
  import useResponsive from '../../hooks/useResponsive';
30
30
  import useHidden from '../../hooks/useHidden';
31
31
  import GroupItemSwitcher from '../FormComponents/GroupItem/GroupItemSwitcher';
32
+ import useReadOnly from '../../hooks/useReadOnly';
32
33
 
33
34
  interface FormTopLevelItemProps
34
35
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
@@ -43,10 +44,11 @@ function FormTopLevelItem(props: FormTopLevelItemProps) {
43
44
  const itemIsTabContainer = isTabContainer(topLevelQItem);
44
45
  const itemContainsTabs = containsTabs(topLevelQItem);
45
46
 
46
- const isDesktop = useResponsive('up', 'lg');
47
+ const isTablet = useResponsive('up', 'md');
47
48
 
48
49
  const itemIsGroup = topLevelQItem.type === 'group';
49
50
 
51
+ const readOnly = useReadOnly(topLevelQItem, false);
50
52
  const itemIsHidden = useHidden(topLevelQItem);
51
53
  if (itemIsHidden) {
52
54
  return null;
@@ -60,6 +62,7 @@ function FormTopLevelItem(props: FormTopLevelItemProps) {
60
62
  qItem={topLevelQItem}
61
63
  qrItemOrItems={topLevelQRItemOrItems}
62
64
  groupCardElevation={1}
65
+ parentIsReadOnly={readOnly}
63
66
  onQrItemChange={onQrItemChange}
64
67
  onQrRepeatGroupChange={onQrRepeatGroupChange}
65
68
  />
@@ -71,7 +74,7 @@ function FormTopLevelItem(props: FormTopLevelItemProps) {
71
74
 
72
75
  // If form is tabbed, it is rendered as a tabbed form
73
76
  if (itemContainsTabs || itemIsTabContainer) {
74
- if (isDesktop) {
77
+ if (isTablet) {
75
78
  return (
76
79
  <FormBodyTabbed
77
80
  key={topLevelQItem.linkId}
@@ -100,8 +103,9 @@ function FormTopLevelItem(props: FormTopLevelItemProps) {
100
103
  qItem={topLevelQItem}
101
104
  qrItem={topLevelQRItem}
102
105
  groupCardElevation={1}
103
- onQrItemChange={onQrItemChange}
104
106
  isRepeated={false}
107
+ parentIsReadOnly={readOnly}
108
+ onQrItemChange={onQrItemChange}
105
109
  />
106
110
  );
107
111
  }
@@ -112,9 +116,10 @@ function FormTopLevelItem(props: FormTopLevelItemProps) {
112
116
  key={topLevelQItem.linkId}
113
117
  qItem={topLevelQItem}
114
118
  qrItem={topLevelQRItem}
119
+ isRepeated={false}
115
120
  isTabled={false}
121
+ parentIsReadOnly={readOnly}
116
122
  onQrItemChange={onQrItemChange}
117
- isRepeated={false}
118
123
  />
119
124
  );
120
125
  }
@@ -46,7 +46,7 @@ const FormBodySingleTab = memo(function FormBodySingleTab(props: FormBodySingleT
46
46
  <>
47
47
  <ListItemButton
48
48
  selected={selected}
49
- sx={{ my: 0.2, minHeight: '36px' }}
49
+ sx={{ my: 0.1, minHeight: '36px' }}
50
50
  onClick={handleTabClick}>
51
51
  <ListItemText
52
52
  primary={
@@ -15,7 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import React, { memo, useMemo } from 'react';
18
+ import React, { memo } from 'react';
19
19
  import Collapse from '@mui/material/Collapse';
20
20
  import { TransitionGroup } from 'react-transition-group';
21
21
  import { getShortText } from '../../utils/itemControl';
@@ -23,27 +23,24 @@ import type { QuestionnaireItem } from 'fhir/r4';
23
23
  import FormBodySingleTab from './FormBodySingleTab';
24
24
  import type { Tabs } from '../../interfaces/tab.interface';
25
25
  import useQuestionnaireStore from '../../stores/useQuestionnaireStore';
26
- import { getContextDisplays, isTabHidden } from '../../utils/tabs';
26
+ import { isTabHidden } from '../../utils/tabs';
27
27
 
28
28
  interface FormBodyTabListProps {
29
29
  topLevelItems: QuestionnaireItem[];
30
30
  currentTabIndex: number;
31
31
  tabs: Tabs;
32
32
  completedTabsCollapsed: boolean;
33
+ allContextDisplayItems: QuestionnaireItem[][];
33
34
  }
34
35
 
35
36
  const FormBodyTabList = memo(function FormBodyTabList(props: FormBodyTabListProps) {
36
- const { topLevelItems, currentTabIndex, tabs, completedTabsCollapsed } = props;
37
+ const { topLevelItems, currentTabIndex, tabs, completedTabsCollapsed, allContextDisplayItems } =
38
+ props;
37
39
 
38
40
  const enableWhenIsActivated = useQuestionnaireStore((state) => state.enableWhenIsActivated);
39
41
  const enableWhenItems = useQuestionnaireStore((state) => state.enableWhenItems);
40
42
  const enableWhenExpressions = useQuestionnaireStore((state) => state.enableWhenExpressions);
41
43
 
42
- const allContextDisplayItems = useMemo(
43
- () => topLevelItems.map((topLevelItem) => getContextDisplays(topLevelItem)),
44
- [topLevelItems]
45
- );
46
-
47
44
  return (
48
45
  <TransitionGroup>
49
46
  {topLevelItems.map((qItem, i) => {
@@ -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={8.5}
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);
@@ -0,0 +1,30 @@
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 type { QuestionnaireItem } from 'fhir/r4';
19
+ import useRenderingExtensions from './useRenderingExtensions';
20
+
21
+ function useReadOnly(qItem: QuestionnaireItem, parentIsReadOnly: boolean | undefined): boolean {
22
+ let { readOnly } = useRenderingExtensions(qItem);
23
+ if (typeof parentIsReadOnly === 'boolean' && parentIsReadOnly) {
24
+ readOnly = parentIsReadOnly;
25
+ }
26
+
27
+ return readOnly;
28
+ }
29
+
30
+ export default useReadOnly;
@@ -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
 
@@ -1,4 +1,4 @@
1
1
  export interface CalculatedExpression {
2
2
  expression: string;
3
- value?: number | string;
3
+ value?: number | string | object;
4
4
  }
@@ -32,3 +32,11 @@ export interface PropsWithIsRepeatedAttribute {
32
32
  export interface PropsWithIsTabledAttribute {
33
33
  isTabled: boolean;
34
34
  }
35
+
36
+ export interface PropsWithTextShownAttribute {
37
+ textShown?: boolean;
38
+ }
39
+
40
+ export interface PropsWithParentIsReadOnlyAttribute {
41
+ parentIsReadOnly?: boolean;
42
+ }
@@ -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]
@@ -38,9 +38,7 @@ export function responsiveFontSizes(props: { sm: number; md: number; lg: number
38
38
 
39
39
  const typography = {
40
40
  fontFamily: ['Inter', 'sans-serif', 'Roboto', 'Arial', '"Helvetica Neue"', 'Helvetica'].join(','),
41
- fontWeightRegular: 400,
42
- fontWeightMedium: 600,
43
- fontWeightBold: 700,
41
+ fontWeightRegular: 500,
44
42
  h1: {
45
43
  fontWeight: 800,
46
44
  lineHeight: 80 / 64,
@@ -85,11 +83,11 @@ const typography = {
85
83
  subtitle2: {
86
84
  fontWeight: 600,
87
85
  lineHeight: 22 / 14,
88
- fontSize: pxToRem(11)
86
+ fontSize: pxToRem(11.5)
89
87
  },
90
88
  body1: {
91
89
  lineHeight: 1.5,
92
- fontSize: pxToRem(12)
90
+ fontSize: pxToRem(12.25)
93
91
  },
94
92
  body2: {
95
93
  lineHeight: 22 / 14,
@@ -22,6 +22,7 @@ import type {
22
22
  Expression,
23
23
  Questionnaire,
24
24
  QuestionnaireItem,
25
+ QuestionnaireItemAnswerOption,
25
26
  QuestionnaireResponse,
26
27
  QuestionnaireResponseItem,
27
28
  QuestionnaireResponseItemAnswer
@@ -32,6 +33,8 @@ import { createFhirPathContext } from './fhirpath';
32
33
  import { getQrItemsIndex, mapQItemsIndex } from './mapItem';
33
34
  import { updateQrItemsInGroup } from './qrItem';
34
35
  import cloneDeep from 'lodash.clonedeep';
36
+ import dayjs from 'dayjs';
37
+ import moment from 'moment';
35
38
 
36
39
  interface EvaluateInitialCalculatedExpressionsParams {
37
40
  initialResponse: QuestionnaireResponse;
@@ -49,15 +52,17 @@ export function evaluateInitialCalculatedExpressions(
49
52
  return calculatedExpressions;
50
53
  }
51
54
 
52
- const initialExpressions: Record<string, CalculatedExpression> = { ...calculatedExpressions };
55
+ const initialCalculatedExpressions: Record<string, CalculatedExpression> = {
56
+ ...calculatedExpressions
57
+ };
53
58
 
54
- if (Object.keys(initialExpressions).length > 0) {
59
+ if (Object.keys(initialCalculatedExpressions).length > 0) {
55
60
  const fhirPathContext: Record<string, any> = createFhirPathContext(
56
61
  initialResponse,
57
62
  variablesFhirPath
58
63
  );
59
64
 
60
- for (const linkId in initialExpressions) {
65
+ for (const linkId in initialCalculatedExpressions) {
61
66
  try {
62
67
  const result = fhirpath.evaluate(
63
68
  initialResponse,
@@ -66,8 +71,8 @@ export function evaluateInitialCalculatedExpressions(
66
71
  fhirpath_r4_model
67
72
  );
68
73
 
69
- if (calculatedExpressions[linkId].value !== result[0]) {
70
- initialExpressions[linkId].value = result[0];
74
+ if (!_isEqual(calculatedExpressions[linkId].value, result[0])) {
75
+ initialCalculatedExpressions[linkId].value = result[0];
71
76
  }
72
77
  } catch (e) {
73
78
  console.warn(
@@ -77,7 +82,7 @@ export function evaluateInitialCalculatedExpressions(
77
82
  }
78
83
  }
79
84
  }
80
- return initialExpressions;
85
+ return initialCalculatedExpressions;
81
86
  }
82
87
 
83
88
  export function evaluateCalculatedExpressions(
@@ -102,7 +107,7 @@ export function evaluateCalculatedExpressions(
102
107
  );
103
108
 
104
109
  if (result.length > 0) {
105
- if (calculatedExpressions[linkId].value !== result[0]) {
110
+ if (!_isEqual(calculatedExpressions[linkId].value, result[0])) {
106
111
  isUpdated = true;
107
112
  updatedCalculatedExpressions[linkId].value = result[0];
108
113
  }
@@ -283,17 +288,68 @@ function constructSingleItem(
283
288
  };
284
289
  }
285
290
 
286
- function parseValueToAnswer(
287
- qItem: QuestionnaireItem,
288
- value: string | number
289
- ): QuestionnaireResponseItemAnswer {
291
+ // duplicate functions in sdc-populate
292
+ function parseValueToAnswer(qItem: QuestionnaireItem, value: any): QuestionnaireResponseItemAnswer {
293
+ if (qItem.answerOption) {
294
+ const answerOption = qItem.answerOption.find(
295
+ (option: QuestionnaireItemAnswerOption) => option.valueCoding?.code === value?.code
296
+ );
297
+
298
+ if (answerOption) {
299
+ return answerOption;
300
+ }
301
+ }
302
+
303
+ if (typeof value === 'boolean' && qItem.type === 'boolean') {
304
+ return { valueBoolean: value };
305
+ }
306
+
290
307
  if (typeof value === 'number') {
308
+ if (qItem.type === 'decimal') {
309
+ return { valueDecimal: value };
310
+ }
291
311
  if (qItem.type === 'integer') {
292
312
  return { valueInteger: value };
293
313
  }
314
+ }
315
+
316
+ if (typeof value === 'object') {
317
+ return { valueCoding: value };
318
+ }
319
+
320
+ // Value is string at this point
321
+ if (qItem.type === 'date' && checkIsDateTime(value)) {
322
+ return { valueDate: value };
323
+ }
294
324
 
295
- return { valueDecimal: value };
325
+ if (qItem.type === 'dateTime' && checkIsDateTime(value)) {
326
+ return { valueDateTime: value };
327
+ }
328
+
329
+ if (qItem.type === 'time' && checkIsTime(value)) {
330
+ return { valueTime: value };
296
331
  }
297
332
 
298
333
  return { valueString: value };
299
334
  }
335
+
336
+ /**
337
+ * Check if an answer is a datetime in the format YYYY, YYYY-MM, YYYY-MM-DD, YYYY-MM-DDThh:mm:ss+zz:zz
338
+ *
339
+ * @author Sean Fong
340
+ */
341
+ export function checkIsDateTime(value: string): boolean {
342
+ const acceptedFormats = ['YYYY', 'YYYY-MM', 'YYYY-MM-DD', 'YYYY-MM-DDTHH:mm:ssZ'];
343
+ const formattedDate = dayjs(value).format();
344
+ return moment(formattedDate, acceptedFormats, true).isValid();
345
+ }
346
+
347
+ /**
348
+ * Check if an answer is in a time format - Regex: ([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]+)?
349
+ *
350
+ * @author Sean Fong
351
+ */
352
+ export function checkIsTime(value: string): boolean {
353
+ const timeRegex = /^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]+)?$/;
354
+ return timeRegex.test(value);
355
+ }
@@ -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