@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
@@ -15,56 +15,54 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import type { ChangeEvent } from 'react';
19
18
  import React from 'react';
20
19
  import Grid from '@mui/material/Grid';
21
- import Typography from '@mui/material/Typography';
22
- import { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
23
- import type { Coding, QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
20
+ import type { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
21
+ import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
24
22
  import { findInAnswerValueSetCodings } from '../../../utils/choice';
25
- import ChoiceRadioSingle from './ChoiceRadioSingle';
26
23
  import { createEmptyQrItem } from '../../../utils/qrItem';
27
- import { QRadioGroup } from '../Item.styles';
28
24
  import { FullWidthFormComponentBox } from '../../Box.styles';
29
25
  import useValueSetCodings from '../../../hooks/useValueSetCodings';
30
26
  import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
31
- import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';
32
27
  import type {
33
28
  PropsWithIsRepeatedAttribute,
29
+ PropsWithParentIsReadOnlyAttribute,
34
30
  PropsWithQrItemChangeHandler
35
31
  } from '../../../interfaces/renderProps.interface';
36
- import { StyledAlert } from '../../Alert.styles';
37
32
  import DisplayInstructions from '../DisplayItem/DisplayInstructions';
38
33
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
34
+ import ChoiceRadioAnswerValueSetFields from './ChoiceRadioAnswerValueSetFields';
35
+ import useReadOnly from '../../../hooks/useReadOnly';
39
36
 
40
37
  interface ChoiceRadioAnswerValueSetItemProps
41
38
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
42
- PropsWithIsRepeatedAttribute {
39
+ PropsWithIsRepeatedAttribute,
40
+ PropsWithParentIsReadOnlyAttribute {
43
41
  qItem: QuestionnaireItem;
44
42
  qrItem: QuestionnaireResponseItem;
45
43
  orientation: ChoiceItemOrientation;
46
44
  }
47
45
 
48
46
  function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps) {
49
- const { qItem, qrItem, isRepeated, onQrItemChange, orientation } = props;
47
+ const { qItem, qrItem, orientation, isRepeated, parentIsReadOnly, onQrItemChange } = props;
48
+
49
+ const readOnly = useReadOnly(qItem, parentIsReadOnly);
50
+ const { displayInstructions } = useRenderingExtensions(qItem);
50
51
 
51
52
  // Init input value
52
53
  const qrChoiceRadio = qrItem ?? createEmptyQrItem(qItem);
53
54
 
54
- let valueRadio: string | undefined;
55
+ let valueRadio: string | null = null;
55
56
  if (qrChoiceRadio.answer) {
56
- valueRadio = qrChoiceRadio.answer[0].valueCoding?.code;
57
+ valueRadio = qrChoiceRadio.answer[0].valueCoding?.code ?? null;
57
58
  }
58
59
 
59
- // Get additional rendering extensions
60
- const { displayInstructions, readOnly } = useRenderingExtensions(qItem);
61
-
62
60
  // Get codings/options from valueSet
63
61
  const { codings, serverError } = useValueSetCodings(qItem);
64
62
 
65
- function handleChange(event: ChangeEvent<HTMLInputElement>) {
63
+ function handleChange(newValue: string) {
66
64
  if (codings.length > 0) {
67
- const qrAnswer = findInAnswerValueSetCodings(codings, event.target.value);
65
+ const qrAnswer = findInAnswerValueSetCodings(codings, newValue);
68
66
  if (qrAnswer) {
69
67
  onQrItemChange({
70
68
  ...createEmptyQrItem(qItem),
@@ -74,54 +72,37 @@ function ChoiceRadioAnswerValueSetItem(props: ChoiceRadioAnswerValueSetItemProps
74
72
  }
75
73
  }
76
74
 
77
- const choiceRadio =
78
- codings.length > 0 ? (
79
- <QRadioGroup
80
- row={orientation === ChoiceItemOrientation.Horizontal}
81
- name={qItem.text}
82
- id={qItem.id}
83
- onChange={handleChange}
84
- value={valueRadio ?? null}>
85
- {codings.map((coding: Coding) => {
86
- return (
87
- <ChoiceRadioSingle
88
- key={coding.code ?? ''}
89
- value={coding.code ?? ''}
90
- label={coding.display ?? `${coding.code}`}
91
- readOnly={readOnly}
92
- />
93
- );
94
- })}
95
- </QRadioGroup>
96
- ) : serverError ? (
97
- <StyledAlert color="error">
98
- <ErrorOutlineIcon color="error" sx={{ pr: 0.75 }} />
99
- <Typography variant="subtitle2">
100
- There was an error fetching options from the terminology server
101
- </Typography>
102
- </StyledAlert>
103
- ) : (
104
- <StyledAlert color="error">
105
- <ErrorOutlineIcon color="error" sx={{ pr: 0.75 }} />
106
- <Typography variant="subtitle2">
107
- Unable to fetch options from the questionnaire or launch context
108
- </Typography>
109
- </StyledAlert>
110
- );
111
-
112
75
  if (isRepeated) {
113
- return <>{choiceRadio}</>;
76
+ return (
77
+ <ChoiceRadioAnswerValueSetFields
78
+ qItem={qItem}
79
+ codings={codings}
80
+ valueRadio={valueRadio}
81
+ orientation={orientation}
82
+ readOnly={readOnly}
83
+ serverError={serverError}
84
+ onCheckedChange={handleChange}
85
+ />
86
+ );
114
87
  }
115
88
 
116
89
  return (
117
90
  <FullWidthFormComponentBox data-test="q-item-choice-radio-answer-value-set-box">
118
91
  <Grid container columnSpacing={6}>
119
92
  <Grid item xs={5}>
120
- <LabelWrapper qItem={qItem} />
93
+ <LabelWrapper qItem={qItem} readOnly={readOnly} />
121
94
  </Grid>
122
95
  <Grid item xs={7}>
123
- {choiceRadio}
124
- <DisplayInstructions displayInstructions={displayInstructions} />
96
+ <ChoiceRadioAnswerValueSetFields
97
+ qItem={qItem}
98
+ codings={codings}
99
+ valueRadio={valueRadio}
100
+ orientation={orientation}
101
+ readOnly={readOnly}
102
+ serverError={serverError}
103
+ onCheckedChange={handleChange}
104
+ />
105
+ <DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
125
106
  </Grid>
126
107
  </Grid>
127
108
  </FullWidthFormComponentBox>
@@ -0,0 +1,82 @@
1
+ /*
2
+ * Copyright 2023 Commonwealth Scientific and Industrial Research
3
+ * Organisation (CSIRO) ABN 41 687 119 230.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ import React, { Fragment } from 'react';
19
+ import InputAdornment from '@mui/material/InputAdornment';
20
+ import MenuItem from '@mui/material/MenuItem';
21
+ import Select from '@mui/material/Select';
22
+ import type { QuestionnaireItem } from 'fhir/r4';
23
+ import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
24
+ import type { PropsWithIsTabledAttribute } from '../../../interfaces/renderProps.interface';
25
+
26
+ interface ChoiceSelectAnswerOptionFieldsProps extends PropsWithIsTabledAttribute {
27
+ qItem: QuestionnaireItem;
28
+ valueSelect: string;
29
+ readOnly: boolean;
30
+ onSelectChange: (newValue: string) => void;
31
+ }
32
+
33
+ function ChoiceSelectAnswerOptionFields(props: ChoiceSelectAnswerOptionFieldsProps) {
34
+ const { qItem, valueSelect, readOnly, isTabled, onSelectChange } = props;
35
+
36
+ const { displayUnit, displayPrompt, entryFormat } = useRenderingExtensions(qItem);
37
+
38
+ return (
39
+ <Select
40
+ id={qItem.id}
41
+ name={qItem.text}
42
+ value={valueSelect}
43
+ disabled={readOnly}
44
+ fullWidth
45
+ placeholder={entryFormat}
46
+ label={displayPrompt}
47
+ endAdornment={<InputAdornment position={'end'}>{displayUnit}</InputAdornment>}
48
+ sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 160 }}
49
+ size="small"
50
+ onChange={(e) => onSelectChange(e.target.value)}>
51
+ {qItem.answerOption?.map((option, index) => {
52
+ if (option['valueCoding']) {
53
+ return (
54
+ <MenuItem key={option.valueCoding.code} value={option.valueCoding.code}>
55
+ {option.valueCoding.display ?? option.valueCoding.code}
56
+ </MenuItem>
57
+ );
58
+ }
59
+
60
+ if (option['valueString']) {
61
+ return (
62
+ <MenuItem key={option.valueString} value={option.valueString}>
63
+ {option.valueString}
64
+ </MenuItem>
65
+ );
66
+ }
67
+
68
+ if (option['valueInteger']) {
69
+ return (
70
+ <MenuItem key={option.valueInteger} value={option.valueInteger.toString()}>
71
+ {option.valueInteger}
72
+ </MenuItem>
73
+ );
74
+ }
75
+
76
+ return <Fragment key={index} />;
77
+ })}
78
+ </Select>
79
+ );
80
+ }
81
+
82
+ export default ChoiceSelectAnswerOptionFields;
@@ -15,12 +15,8 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import React, { Fragment } from 'react';
18
+ import React from 'react';
19
19
  import Grid from '@mui/material/Grid';
20
- import InputAdornment from '@mui/material/InputAdornment';
21
- import MenuItem from '@mui/material/MenuItem';
22
- import type { SelectChangeEvent } from '@mui/material/Select';
23
- import Select from '@mui/material/Select';
24
20
 
25
21
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
26
22
  import { findInAnswerOptions, getQrChoiceValue } from '../../../utils/choice';
@@ -30,21 +26,28 @@ import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
30
26
  import type {
31
27
  PropsWithIsRepeatedAttribute,
32
28
  PropsWithIsTabledAttribute,
29
+ PropsWithParentIsReadOnlyAttribute,
33
30
  PropsWithQrItemChangeHandler
34
31
  } from '../../../interfaces/renderProps.interface';
35
32
  import DisplayInstructions from '../DisplayItem/DisplayInstructions';
36
33
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
34
+ import ChoiceSelectAnswerOptionFields from './ChoiceSelectAnswerOptionFields';
35
+ import useReadOnly from '../../../hooks/useReadOnly';
37
36
 
38
37
  interface ChoiceSelectAnswerOptionItemProps
39
38
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
40
39
  PropsWithIsRepeatedAttribute,
41
- PropsWithIsTabledAttribute {
40
+ PropsWithIsTabledAttribute,
41
+ PropsWithParentIsReadOnlyAttribute {
42
42
  qItem: QuestionnaireItem;
43
43
  qrItem: QuestionnaireResponseItem;
44
44
  }
45
45
 
46
46
  function ChoiceSelectAnswerOptionItem(props: ChoiceSelectAnswerOptionItemProps) {
47
- const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
47
+ const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
48
+
49
+ const readOnly = useReadOnly(qItem, parentIsReadOnly);
50
+ const { displayInstructions } = useRenderingExtensions(qItem);
48
51
 
49
52
  // Init input value
50
53
  const qrChoiceSelect = qrItem ?? createEmptyQrItem(qItem);
@@ -53,14 +56,10 @@ function ChoiceSelectAnswerOptionItem(props: ChoiceSelectAnswerOptionItemProps)
53
56
  valueSelect = '';
54
57
  }
55
58
 
56
- // Get additional rendering extensions
57
- const { displayUnit, displayPrompt, displayInstructions, readOnly, entryFormat } =
58
- useRenderingExtensions(qItem);
59
-
60
59
  // Event handlers
61
- function handleChange(e: SelectChangeEvent) {
60
+ function handleChange(newValue: string) {
62
61
  if (qItem.answerOption) {
63
- const qrAnswer = findInAnswerOptions(qItem.answerOption, e.target.value);
62
+ const qrAnswer = findInAnswerOptions(qItem.answerOption, newValue);
64
63
  if (qrAnswer) {
65
64
  onQrItemChange({ ...createEmptyQrItem(qItem), answer: [qrAnswer] });
66
65
  return;
@@ -69,62 +68,33 @@ function ChoiceSelectAnswerOptionItem(props: ChoiceSelectAnswerOptionItemProps)
69
68
  onQrItemChange(createEmptyQrItem(qItem));
70
69
  }
71
70
 
72
- const choiceSelectAnswerOption = (
73
- <Select
74
- id={qItem.id}
75
- name={qItem.text}
76
- value={valueSelect}
77
- disabled={readOnly}
78
- fullWidth
79
- placeholder={entryFormat}
80
- label={displayPrompt}
81
- endAdornment={<InputAdornment position={'end'}>{displayUnit}</InputAdornment>}
82
- sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 160 }}
83
- size="small"
84
- onChange={handleChange}>
85
- {qItem.answerOption?.map((option, index) => {
86
- if (option['valueCoding']) {
87
- return (
88
- <MenuItem key={option.valueCoding.code} value={option.valueCoding.code}>
89
- {option.valueCoding.display ?? option.valueCoding.code}
90
- </MenuItem>
91
- );
92
- }
93
-
94
- if (option['valueString']) {
95
- return (
96
- <MenuItem key={option.valueString} value={option.valueString}>
97
- {option.valueString}
98
- </MenuItem>
99
- );
100
- }
101
-
102
- if (option['valueInteger']) {
103
- return (
104
- <MenuItem key={option.valueInteger} value={option.valueInteger.toString()}>
105
- {option.valueInteger}
106
- </MenuItem>
107
- );
108
- }
109
-
110
- return <Fragment key={index} />;
111
- })}
112
- </Select>
113
- );
114
-
115
71
  if (isRepeated) {
116
- return <>{choiceSelectAnswerOption}</>;
72
+ return (
73
+ <ChoiceSelectAnswerOptionFields
74
+ qItem={qItem}
75
+ valueSelect={valueSelect}
76
+ readOnly={readOnly}
77
+ isTabled={isTabled}
78
+ onSelectChange={handleChange}
79
+ />
80
+ );
117
81
  }
118
82
 
119
83
  return (
120
84
  <FullWidthFormComponentBox data-test="q-item-choice-select-answer-option-box">
121
85
  <Grid container columnSpacing={6}>
122
86
  <Grid item xs={5}>
123
- <LabelWrapper qItem={qItem} />
87
+ <LabelWrapper qItem={qItem} readOnly={readOnly} />
124
88
  </Grid>
125
89
  <Grid item xs={7}>
126
- {choiceSelectAnswerOption}
127
- <DisplayInstructions displayInstructions={displayInstructions} />
90
+ <ChoiceSelectAnswerOptionFields
91
+ qItem={qItem}
92
+ valueSelect={valueSelect}
93
+ readOnly={readOnly}
94
+ isTabled={isTabled}
95
+ onSelectChange={handleChange}
96
+ />
97
+ <DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
128
98
  </Grid>
129
99
  </Grid>
130
100
  </FullWidthFormComponentBox>
@@ -0,0 +1,98 @@
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 Autocomplete from '@mui/material/Autocomplete';
20
+ import { StandardTextField } from '../Textfield.styles';
21
+ import { StyledAlert } from '../../Alert.styles';
22
+ import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';
23
+ import Typography from '@mui/material/Typography';
24
+ import type { Coding, QuestionnaireItem } from 'fhir/r4';
25
+ import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
26
+ import type { PropsWithIsTabledAttribute } from '../../../interfaces/renderProps.interface';
27
+
28
+ interface ChoiceSelectAnswerValueSetFieldsProps extends PropsWithIsTabledAttribute {
29
+ qItem: QuestionnaireItem;
30
+ codings: Coding[];
31
+ valueCoding: Coding | null;
32
+ serverError: Error | null;
33
+ readOnly: boolean;
34
+ onSelectChange: (newValue: Coding | null) => void;
35
+ }
36
+
37
+ function ChoiceSelectAnswerValueSetFields(props: ChoiceSelectAnswerValueSetFieldsProps) {
38
+ const { qItem, codings, valueCoding, serverError, readOnly, isTabled, onSelectChange } = props;
39
+
40
+ const { displayUnit, displayPrompt, entryFormat } = useRenderingExtensions(qItem);
41
+
42
+ if (codings.length > 0) {
43
+ return (
44
+ <Autocomplete
45
+ id={qItem.id}
46
+ options={codings}
47
+ getOptionLabel={(option) => `${option.display}`}
48
+ value={valueCoding ?? null}
49
+ onChange={(_, newValue) => onSelectChange(newValue)}
50
+ openOnFocus
51
+ autoHighlight
52
+ sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 160, flexGrow: 1 }}
53
+ size="small"
54
+ disabled={readOnly}
55
+ placeholder={entryFormat}
56
+ renderInput={(params) => (
57
+ <StandardTextField
58
+ isTabled={isTabled}
59
+ label={displayPrompt}
60
+ {...params}
61
+ InputProps={{
62
+ ...params.InputProps,
63
+ endAdornment: (
64
+ <>
65
+ {params.InputProps.endAdornment}
66
+ {displayUnit}
67
+ </>
68
+ )
69
+ }}
70
+ data-test="q-item-choice-dropdown-answer-value-set-field"
71
+ />
72
+ )}
73
+ />
74
+ );
75
+ }
76
+
77
+ if (serverError) {
78
+ return (
79
+ <StyledAlert color="error">
80
+ <ErrorOutlineIcon color="error" sx={{ pr: 0.75 }} />
81
+ <Typography variant="subtitle2">
82
+ There was an error fetching options from the terminology server
83
+ </Typography>
84
+ </StyledAlert>
85
+ );
86
+ }
87
+
88
+ return (
89
+ <StyledAlert color="error">
90
+ <ErrorOutlineIcon color="error" sx={{ pr: 0.75 }} />
91
+ <Typography variant="subtitle2">
92
+ Unable to fetch options from the questionnaire or launch context
93
+ </Typography>
94
+ </StyledAlert>
95
+ );
96
+ }
97
+
98
+ export default ChoiceSelectAnswerValueSetFields;
@@ -15,50 +15,47 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import type { SyntheticEvent } from 'react';
19
18
  import React, { useEffect, useMemo } from 'react';
20
- import Autocomplete from '@mui/material/Autocomplete';
21
19
  import Grid from '@mui/material/Grid';
22
- import Typography from '@mui/material/Typography';
23
20
 
24
21
  import type { Coding, QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
25
22
  import { createEmptyQrItem } from '../../../utils/qrItem';
26
- import { StandardTextField } from '../Textfield.styles';
27
23
  import { FullWidthFormComponentBox } from '../../Box.styles';
28
24
  import useValueSetCodings from '../../../hooks/useValueSetCodings';
29
25
  import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
30
- import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';
31
26
  import type {
32
27
  PropsWithIsRepeatedAttribute,
33
28
  PropsWithIsTabledAttribute,
29
+ PropsWithParentIsReadOnlyAttribute,
34
30
  PropsWithQrItemChangeHandler
35
31
  } from '../../../interfaces/renderProps.interface';
36
- import { StyledAlert } from '../../Alert.styles';
37
32
  import DisplayInstructions from '../DisplayItem/DisplayInstructions';
38
33
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
34
+ import ChoiceSelectAnswerValueSetFields from './ChoiceSelectAnswerValueSetFields';
35
+ import useReadOnly from '../../../hooks/useReadOnly';
39
36
 
40
37
  interface ChoiceSelectAnswerValueSetItemProps
41
38
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
42
39
  PropsWithIsRepeatedAttribute,
43
- PropsWithIsTabledAttribute {
40
+ PropsWithIsTabledAttribute,
41
+ PropsWithParentIsReadOnlyAttribute {
44
42
  qItem: QuestionnaireItem;
45
43
  qrItem: QuestionnaireResponseItem;
46
44
  }
47
45
 
48
46
  function ChoiceSelectAnswerValueSetItem(props: ChoiceSelectAnswerValueSetItemProps) {
49
- const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
47
+ const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
48
+
49
+ const readOnly = useReadOnly(qItem, parentIsReadOnly);
50
+ const { displayInstructions } = useRenderingExtensions(qItem);
50
51
 
51
52
  // Init input value
52
53
  const qrChoiceSelect = qrItem ?? createEmptyQrItem(qItem);
53
- let valueCoding: Coding | undefined;
54
+ let valueCoding: Coding | null = null;
54
55
  if (qrChoiceSelect.answer) {
55
- valueCoding = qrChoiceSelect.answer[0].valueCoding;
56
+ valueCoding = qrChoiceSelect.answer[0].valueCoding ?? null;
56
57
  }
57
58
 
58
- // Get additional rendering extensions
59
- const { displayUnit, displayPrompt, displayInstructions, readOnly, entryFormat } =
60
- useRenderingExtensions(qItem);
61
-
62
59
  // Get codings/options from valueSet
63
60
  const { codings, serverError } = useValueSetCodings(qItem);
64
61
 
@@ -84,7 +81,7 @@ function ChoiceSelectAnswerValueSetItem(props: ChoiceSelectAnswerValueSetItemPro
84
81
  );
85
82
 
86
83
  // Event handlers
87
- function handleChange(_: SyntheticEvent<Element, Event>, newValue: Coding | null) {
84
+ function handleChange(newValue: Coding | null) {
88
85
  if (newValue) {
89
86
  onQrItemChange({
90
87
  ...createEmptyQrItem(qItem),
@@ -95,67 +92,37 @@ function ChoiceSelectAnswerValueSetItem(props: ChoiceSelectAnswerValueSetItemPro
95
92
  onQrItemChange(createEmptyQrItem(qItem));
96
93
  }
97
94
 
98
- const choiceSelectAnswerValueSet =
99
- codings.length > 0 ? (
100
- <Autocomplete
101
- id={qItem.id}
102
- options={codings}
103
- getOptionLabel={(option) => `${option.display}`}
104
- value={valueCoding ?? null}
105
- onChange={handleChange}
106
- openOnFocus
107
- autoHighlight
108
- sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 160, flexGrow: 1 }}
109
- size="small"
110
- disabled={readOnly}
111
- placeholder={entryFormat}
112
- renderInput={(params) => (
113
- <StandardTextField
114
- isTabled={isTabled}
115
- label={displayPrompt}
116
- {...params}
117
- InputProps={{
118
- ...params.InputProps,
119
- endAdornment: (
120
- <>
121
- {params.InputProps.endAdornment}
122
- {displayUnit}
123
- </>
124
- )
125
- }}
126
- data-test="q-item-choice-dropdown-answer-value-set-field"
127
- />
128
- )}
95
+ if (isRepeated) {
96
+ return (
97
+ <ChoiceSelectAnswerValueSetFields
98
+ qItem={qItem}
99
+ codings={codings}
100
+ valueCoding={valueCoding}
101
+ serverError={serverError}
102
+ readOnly={readOnly}
103
+ isTabled={isTabled}
104
+ onSelectChange={handleChange}
129
105
  />
130
- ) : serverError ? (
131
- <StyledAlert color="error">
132
- <ErrorOutlineIcon color="error" sx={{ pr: 0.75 }} />
133
- <Typography variant="subtitle2">
134
- There was an error fetching options from the terminology server
135
- </Typography>
136
- </StyledAlert>
137
- ) : (
138
- <StyledAlert color="error">
139
- <ErrorOutlineIcon color="error" sx={{ pr: 0.75 }} />
140
- <Typography variant="subtitle2">
141
- Unable to fetch options from the questionnaire or launch context
142
- </Typography>
143
- </StyledAlert>
144
106
  );
145
-
146
- if (isRepeated) {
147
- return <>{choiceSelectAnswerValueSet}</>;
148
107
  }
149
108
 
150
109
  return (
151
110
  <FullWidthFormComponentBox data-test="q-item-choice-dropdown-answer-value-set-box">
152
111
  <Grid container columnSpacing={6}>
153
112
  <Grid item xs={5}>
154
- <LabelWrapper qItem={qItem} />
113
+ <LabelWrapper qItem={qItem} readOnly={readOnly} />
155
114
  </Grid>
156
115
  <Grid item xs={7}>
157
- {choiceSelectAnswerValueSet}
158
- <DisplayInstructions displayInstructions={displayInstructions} />
116
+ <ChoiceSelectAnswerValueSetFields
117
+ qItem={qItem}
118
+ codings={codings}
119
+ valueCoding={valueCoding}
120
+ serverError={serverError}
121
+ readOnly={readOnly}
122
+ isTabled={isTabled}
123
+ onSelectChange={handleChange}
124
+ />
125
+ <DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
159
126
  </Grid>
160
127
  </Grid>
161
128
  </FullWidthFormComponentBox>
@@ -21,6 +21,7 @@ import type {
21
21
  PropsWithIsTabledAttribute,
22
22
  PropsWithQrItemChangeHandler
23
23
  } from '../../../interfaces/renderProps.interface';
24
+ import type { PropsWithParentIsReadOnlyAttribute } from '../../../interfaces/renderProps.interface';
24
25
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
25
26
  import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
26
27
  import { createEmptyQrItem } from '../../../utils/qrItem';
@@ -29,21 +30,22 @@ import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
29
30
  import DateField from './DateField';
30
31
  import type { Dayjs } from 'dayjs';
31
32
  import dayjs from 'dayjs';
33
+ import useReadOnly from '../../../hooks/useReadOnly';
32
34
 
33
35
  interface DateItemProps
34
36
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
35
37
  PropsWithIsRepeatedAttribute,
36
- PropsWithIsTabledAttribute {
38
+ PropsWithIsTabledAttribute,
39
+ PropsWithParentIsReadOnlyAttribute {
37
40
  qItem: QuestionnaireItem;
38
41
  qrItem: QuestionnaireResponseItem;
39
42
  }
40
43
 
41
44
  function DateItem(props: DateItemProps) {
42
- const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
45
+ const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
43
46
 
44
- // Get additional rendering extensions
45
- const { displayPrompt, displayInstructions, readOnly, entryFormat } =
46
- useRenderingExtensions(qItem);
47
+ const readOnly = useReadOnly(qItem, parentIsReadOnly);
48
+ const { displayPrompt, displayInstructions, entryFormat } = useRenderingExtensions(qItem);
47
49
 
48
50
  // Init input value
49
51
  let dateString: string | null = null;
@@ -83,7 +85,7 @@ function DateItem(props: DateItemProps) {
83
85
 
84
86
  return (
85
87
  <FullWidthFormComponentBox data-test="q-item-date-box">
86
- <ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions}>
88
+ <ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions} readOnly={readOnly}>
87
89
  <DateField
88
90
  value={dateDayJs}
89
91
  displayPrompt={displayPrompt}