@aehrc/smart-forms-renderer 0.7.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (347) hide show
  1. package/README.md +1 -1
  2. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js +1 -2
  3. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js.map +1 -1
  4. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.d.ts +12 -0
  5. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.js +39 -0
  6. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.js.map +1 -0
  7. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.d.ts +3 -3
  8. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +14 -27
  9. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
  10. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.d.ts +13 -0
  11. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.js +42 -0
  12. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.js.map +1 -0
  13. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.d.ts +4 -3
  14. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +14 -22
  15. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
  16. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.d.ts +2 -2
  17. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js +3 -3
  18. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js.map +1 -1
  19. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.d.ts +12 -0
  20. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js +27 -0
  21. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js.map +1 -0
  22. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.d.ts +1 -1
  23. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +9 -24
  24. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js.map +1 -1
  25. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.d.ts +14 -0
  26. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js +42 -0
  27. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js.map +1 -0
  28. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.d.ts +1 -1
  29. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +8 -21
  30. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
  31. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.d.ts +10 -0
  32. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js +41 -0
  33. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js.map +1 -0
  34. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +7 -23
  35. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
  36. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.d.ts +12 -0
  37. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js +42 -0
  38. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js.map +1 -0
  39. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js +8 -18
  40. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js.map +1 -1
  41. package/lib/components/FormComponents/DecimalItem/DecimalItem.js +3 -2
  42. package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
  43. package/lib/components/FormComponents/GridGroup/GridGroup.js +2 -2
  44. package/lib/components/FormComponents/GridGroup/GridGroup.js.map +1 -1
  45. package/lib/components/FormComponents/GridGroup/GridRow.js +2 -2
  46. package/lib/components/FormComponents/GridGroup/GridRow.js.map +1 -1
  47. package/lib/components/FormComponents/GroupItem/GroupChildItemSwitcher.d.ts +10 -0
  48. package/lib/components/FormComponents/GroupItem/GroupChildItemSwitcher.js +73 -0
  49. package/lib/components/FormComponents/GroupItem/GroupChildItemSwitcher.js.map +1 -0
  50. package/lib/components/FormComponents/GroupItem/GroupItem.js +3 -3
  51. package/lib/components/FormComponents/GroupItem/GroupItem.js.map +1 -1
  52. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +4 -4
  53. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -1
  54. package/lib/components/FormComponents/GroupItem/ItemSwitcher.d.ts +10 -0
  55. package/lib/components/FormComponents/GroupItem/ItemSwitcher.js +81 -0
  56. package/lib/components/FormComponents/GroupItem/ItemSwitcher.js.map +1 -0
  57. package/lib/components/FormComponents/GroupItem/TopLevelGroupItemSwitcher.d.ts +10 -0
  58. package/lib/components/FormComponents/GroupItem/TopLevelGroupItemSwitcher.js +45 -0
  59. package/lib/components/FormComponents/GroupItem/TopLevelGroupItemSwitcher.js.map +1 -0
  60. package/lib/components/FormComponents/IntegerItem/IntegerItem.js +3 -2
  61. package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
  62. package/lib/components/FormComponents/Item.styles.d.ts +2 -2
  63. package/lib/components/FormComponents/Item.styles.js +2 -2
  64. package/lib/components/FormComponents/Item.styles.js.map +1 -1
  65. package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.d.ts +8 -0
  66. package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.js +37 -0
  67. package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.js.map +1 -0
  68. package/lib/components/FormComponents/ItemParts/RadioButtons.d.ts +8 -0
  69. package/lib/components/FormComponents/ItemParts/RadioButtons.js +37 -0
  70. package/lib/components/FormComponents/ItemParts/RadioButtons.js.map +1 -0
  71. package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.d.ts +8 -0
  72. package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.js +37 -0
  73. package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.js.map +1 -0
  74. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.d.ts +20 -0
  75. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js +49 -0
  76. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js.map +1 -0
  77. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.d.ts +0 -0
  78. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.js +2 -0
  79. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.js.map +1 -0
  80. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js +11 -35
  81. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js.map +1 -1
  82. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.d.ts +17 -0
  83. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.js +42 -0
  84. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.js.map +1 -0
  85. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.d.ts +3 -3
  86. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js +23 -36
  87. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js.map +1 -1
  88. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.d.ts +2 -2
  89. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js +3 -3
  90. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js.map +1 -1
  91. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.d.ts +15 -0
  92. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.js +29 -0
  93. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.js.map +1 -0
  94. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.d.ts +1 -1
  95. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js +3 -23
  96. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js.map +1 -1
  97. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.d.ts +11 -0
  98. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js +14 -0
  99. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js.map +1 -0
  100. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.d.ts +0 -0
  101. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.js +2 -0
  102. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.js.map +1 -0
  103. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js +18 -23
  104. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js.map +1 -1
  105. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.d.ts +12 -0
  106. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js +16 -0
  107. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js.map +1 -0
  108. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js +8 -14
  109. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js.map +1 -1
  110. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js +4 -3
  111. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js.map +1 -1
  112. package/lib/components/FormComponents/RepeatGroup/index.d.ts +1 -0
  113. package/lib/components/FormComponents/RepeatGroup/index.js +18 -0
  114. package/lib/components/FormComponents/RepeatGroup/index.js.map +1 -0
  115. package/lib/components/FormComponents/RepeatItem/RepeatItem.js +1 -1
  116. package/lib/components/FormComponents/RepeatItem/RepeatItem.js.map +1 -1
  117. package/lib/components/FormComponents/SingleItem/SingleItem.d.ts +2 -2
  118. package/lib/components/FormComponents/SingleItem/SingleItem.js +2 -2
  119. package/lib/components/FormComponents/SingleItem/SingleItem.js.map +1 -1
  120. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.d.ts +2 -2
  121. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js +3 -3
  122. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -1
  123. package/lib/components/FormComponents/SingleItem/index.d.ts +1 -0
  124. package/lib/components/FormComponents/SingleItem/index.js +18 -0
  125. package/lib/components/FormComponents/SingleItem/index.js.map +1 -0
  126. package/lib/components/FormComponents/StringItem/StringItem.js +3 -2
  127. package/lib/components/FormComponents/StringItem/StringItem.js.map +1 -1
  128. package/lib/components/FormComponents/Tables/AddItemButton.d.ts +8 -0
  129. package/lib/components/FormComponents/Tables/AddItemButton.js +28 -0
  130. package/lib/components/FormComponents/Tables/AddItemButton.js.map +1 -0
  131. package/lib/components/FormComponents/Tables/AddRowButton.d.ts +8 -0
  132. package/lib/components/FormComponents/Tables/AddRowButton.js +28 -0
  133. package/lib/components/FormComponents/Tables/AddRowButton.js.map +1 -0
  134. package/lib/components/FormComponents/Tables/GroupTable.d.ts +10 -0
  135. package/lib/components/FormComponents/Tables/GroupTable.js +108 -0
  136. package/lib/components/FormComponents/Tables/GroupTable.js.map +1 -0
  137. package/lib/components/FormComponents/Tables/GroupTableRow.d.ts +10 -0
  138. package/lib/components/FormComponents/Tables/GroupTableRow.js +46 -0
  139. package/lib/components/FormComponents/Tables/GroupTableRow.js.map +1 -0
  140. package/lib/components/FormComponents/Tables/QItemGroupTable.js +7 -5
  141. package/lib/components/FormComponents/Tables/QItemGroupTable.js.map +1 -1
  142. package/lib/components/FormComponents/Tables/QItemGroupTableRow.js +2 -2
  143. package/lib/components/FormComponents/Tables/QItemGroupTableRow.js.map +1 -1
  144. package/lib/components/FormComponents/Tables/index.d.ts +1 -0
  145. package/lib/components/FormComponents/Tables/index.js +18 -0
  146. package/lib/components/FormComponents/Tables/index.js.map +1 -0
  147. package/lib/components/FormComponents/TextItem/TextItem.js +3 -2
  148. package/lib/components/FormComponents/TextItem/TextItem.js.map +1 -1
  149. package/lib/components/FormComponents/index.d.ts +3 -0
  150. package/lib/components/FormComponents/index.js +20 -0
  151. package/lib/components/FormComponents/index.js.map +1 -0
  152. package/lib/components/Renderer/BaseRenderer.js +26 -14
  153. package/lib/components/Renderer/BaseRenderer.js.map +1 -1
  154. package/lib/components/Renderer/FormBodyCollapsible.js +2 -2
  155. package/lib/components/Renderer/FormBodyCollapsible.js.map +1 -1
  156. package/lib/components/Renderer/FormBodyTabbed.js +3 -3
  157. package/lib/components/Renderer/FormBodyTabbed.js.map +1 -1
  158. package/lib/components/Renderer/FormTopLevelItem.d.ts +4 -4
  159. package/lib/components/Renderer/FormTopLevelItem.js +14 -1
  160. package/lib/components/Renderer/FormTopLevelItem.js.map +1 -1
  161. package/lib/components/Tabs/FormBodySingleTab.js +1 -1
  162. package/lib/components/Tabs/FormBodySingleTab.js.map +1 -1
  163. package/lib/components/Tabs/FormBodyTabList.d.ts +1 -0
  164. package/lib/components/Tabs/FormBodyTabList.js +3 -4
  165. package/lib/components/Tabs/FormBodyTabList.js.map +1 -1
  166. package/lib/components/Tabs/FormBodyTabListWrapper.d.ts +1 -1
  167. package/lib/components/Tabs/FormBodyTabListWrapper.js +6 -13
  168. package/lib/components/Tabs/FormBodyTabListWrapper.js.map +1 -1
  169. package/lib/components/Tabs/ShowCompletedTabsSection.d.ts +7 -0
  170. package/lib/components/Tabs/ShowCompletedTabsSection.js +34 -0
  171. package/lib/components/Tabs/ShowCompletedTabsSection.js.map +1 -0
  172. package/lib/components/index.d.ts +1 -0
  173. package/lib/components/index.js +1 -0
  174. package/lib/components/index.js.map +1 -1
  175. package/lib/hooks/index.d.ts +1 -0
  176. package/lib/hooks/index.js +2 -0
  177. package/lib/hooks/index.js.map +1 -0
  178. package/lib/hooks/useContextDisplayItems.d.ts +6 -0
  179. package/lib/hooks/useContextDisplayItems.js +30 -0
  180. package/lib/hooks/useContextDisplayItems.js.map +1 -0
  181. package/lib/hooks/useDecimalUpdateFromProp.d.ts +2 -0
  182. package/lib/hooks/useDecimalUpdateFromProp.js +29 -0
  183. package/lib/hooks/useDecimalUpdateFromProp.js.map +1 -0
  184. package/lib/hooks/useInitialiseRenderer.js +2 -2
  185. package/lib/hooks/useInitialiseRenderer.js.map +1 -1
  186. package/lib/hooks/useInitialiseRepeatAnswers.d.ts +2 -2
  187. package/lib/hooks/useInitialiseRepeatAnswers.js +21 -15
  188. package/lib/hooks/useInitialiseRepeatAnswers.js.map +1 -1
  189. package/lib/hooks/useInitialiseRepeatGroups.d.ts +2 -1
  190. package/lib/hooks/useInitialiseRepeatGroups.js +21 -15
  191. package/lib/hooks/useInitialiseRepeatGroups.js.map +1 -1
  192. package/lib/hooks/useIntegerUpdateFromProp.d.ts +2 -0
  193. package/lib/hooks/useIntegerUpdateFromProp.js +29 -0
  194. package/lib/hooks/useIntegerUpdateFromProp.js.map +1 -0
  195. package/lib/hooks/useNumberInput.d.ts +3 -0
  196. package/lib/hooks/useNumberInput.js +31 -0
  197. package/lib/hooks/useNumberInput.js.map +1 -0
  198. package/lib/hooks/useNumberUpdateFromProp.d.ts +2 -0
  199. package/lib/hooks/useNumberUpdateFromProp.js +29 -0
  200. package/lib/hooks/useNumberUpdateFromProp.js.map +1 -0
  201. package/lib/hooks/useRepeatItemState.d.ts +5 -0
  202. package/lib/hooks/useRepeatItemState.js +35 -0
  203. package/lib/hooks/useRepeatItemState.js.map +1 -0
  204. package/lib/hooks/useRepeatItemUpdateFromProp.d.ts +2 -0
  205. package/lib/hooks/useRepeatItemUpdateFromProp.js +29 -0
  206. package/lib/hooks/useRepeatItemUpdateFromProp.js.map +1 -0
  207. package/lib/hooks/useStringField.d.ts +2 -0
  208. package/lib/hooks/useStringField.js +29 -0
  209. package/lib/hooks/useStringField.js.map +1 -0
  210. package/lib/hooks/useStringInput.d.ts +3 -0
  211. package/lib/hooks/useStringInput.js +31 -0
  212. package/lib/hooks/useStringInput.js.map +1 -0
  213. package/lib/hooks/useStringUpdateFromProp.d.ts +2 -0
  214. package/lib/hooks/useStringUpdateFromProp.js +29 -0
  215. package/lib/hooks/useStringUpdateFromProp.js.map +1 -0
  216. package/lib/hooks/useTerminologyServerQuery.js +3 -6
  217. package/lib/hooks/useTerminologyServerQuery.js.map +1 -1
  218. package/lib/index.d.ts +16 -0
  219. package/lib/index.js +29 -2
  220. package/lib/index.js.map +1 -1
  221. package/lib/interfaces/questionnaireStore.interface.d.ts +1 -0
  222. package/lib/interfaces/renderProps.interface.d.ts +3 -0
  223. package/lib/stores/useQuestionnaireResponseStore.d.ts +2 -1
  224. package/lib/stores/useQuestionnaireResponseStore.js +17 -10
  225. package/lib/stores/useQuestionnaireResponseStore.js.map +1 -1
  226. package/lib/stores/useQuestionnaireStore.d.ts +2 -1
  227. package/lib/stores/useQuestionnaireStore.js +5 -2
  228. package/lib/stores/useQuestionnaireStore.js.map +1 -1
  229. package/lib/theme/overrides/Overrides.js +1 -2
  230. package/lib/theme/overrides/Overrides.js.map +1 -1
  231. package/lib/utils/calculatedExpression.js +2 -2
  232. package/lib/utils/calculatedExpression.js.map +1 -1
  233. package/lib/utils/formChanges.d.ts +18 -0
  234. package/lib/utils/formChanges.js +91 -0
  235. package/lib/utils/formChanges.js.map +1 -0
  236. package/lib/utils/formChangesOld.d.ts +18 -0
  237. package/lib/utils/formChangesOld.js +91 -0
  238. package/lib/utils/formChangesOld.js.map +1 -0
  239. package/lib/utils/index.d.ts +1 -0
  240. package/lib/utils/index.js +18 -0
  241. package/lib/utils/index.js.map +1 -0
  242. package/lib/utils/mapItem.d.ts +2 -2
  243. package/lib/utils/mapItem.js +3 -3
  244. package/lib/utils/mapItem.js.map +1 -1
  245. package/lib/utils/qItem.d.ts +2 -0
  246. package/lib/utils/qItem.js +22 -0
  247. package/lib/utils/qItem.js.map +1 -1
  248. package/lib/utils/qrItem.d.ts +3 -4
  249. package/lib/utils/qrItem.js +94 -96
  250. package/lib/utils/qrItem.js.map +1 -1
  251. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +4 -0
  252. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -1
  253. package/lib/utils/repopulate.d.ts +9 -0
  254. package/lib/utils/repopulate.js +133 -0
  255. package/lib/utils/repopulate.js.map +1 -0
  256. package/lib/utils/repopulateGenerateItems.d.ts +9 -0
  257. package/lib/utils/repopulateGenerateItems.js +133 -0
  258. package/lib/utils/repopulateGenerateItems.js.map +1 -0
  259. package/lib/utils/repopulateIntoResponse.d.ts +3 -0
  260. package/lib/utils/repopulateIntoResponse.js +92 -0
  261. package/lib/utils/repopulateIntoResponse.js.map +1 -0
  262. package/lib/utils/repopulateItems.d.ts +9 -0
  263. package/lib/utils/repopulateItems.js +130 -0
  264. package/lib/utils/repopulateItems.js.map +1 -0
  265. package/lib/utils/repopulateRepeatGroup.d.ts +4 -0
  266. package/lib/utils/repopulateRepeatGroup.js +54 -0
  267. package/lib/utils/repopulateRepeatGroup.js.map +1 -0
  268. package/package.json +7 -5
  269. package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +1 -2
  270. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.tsx +85 -0
  271. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +35 -58
  272. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.tsx +79 -0
  273. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +37 -50
  274. package/src/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.tsx +10 -5
  275. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.tsx +48 -0
  276. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +25 -53
  277. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.tsx +83 -0
  278. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +27 -49
  279. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +81 -0
  280. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +19 -54
  281. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.tsx +97 -0
  282. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +22 -60
  283. package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +3 -2
  284. package/src/components/FormComponents/GridGroup/GridGroup.tsx +2 -2
  285. package/src/components/FormComponents/GridGroup/GridRow.tsx +2 -2
  286. package/src/components/FormComponents/GroupItem/GroupItem.tsx +3 -3
  287. package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +4 -4
  288. package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +3 -2
  289. package/src/components/FormComponents/Item.styles.ts +2 -2
  290. package/src/components/FormComponents/ItemParts/RadioAnswerOptionButtons.tsx +72 -0
  291. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.tsx +131 -0
  292. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +38 -93
  293. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.tsx +112 -0
  294. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +57 -76
  295. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.tsx +8 -5
  296. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.tsx +72 -0
  297. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +12 -59
  298. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx +54 -0
  299. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +40 -64
  300. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.tsx +63 -0
  301. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +22 -50
  302. package/src/components/FormComponents/RepeatGroup/RepeatGroup.tsx +4 -3
  303. package/src/{theme/overrides/Backdrop.ts → components/FormComponents/RepeatGroup/index.ts} +1 -17
  304. package/src/components/FormComponents/RepeatItem/RepeatItem.tsx +1 -1
  305. package/src/components/FormComponents/SingleItem/SingleItem.tsx +6 -3
  306. package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +7 -3
  307. package/src/components/FormComponents/SingleItem/index.ts +18 -0
  308. package/src/components/FormComponents/StringItem/StringItem.tsx +3 -2
  309. package/src/components/FormComponents/Tables/AddRowButton.tsx +49 -0
  310. package/src/components/FormComponents/Tables/{QItemGroupTable.tsx → GroupTable.tsx} +21 -23
  311. package/src/components/FormComponents/Tables/{QItemGroupTableRow.tsx → GroupTableRow.tsx} +4 -4
  312. package/src/components/FormComponents/Tables/index.ts +18 -0
  313. package/src/components/FormComponents/TextItem/TextItem.tsx +3 -2
  314. package/src/components/FormComponents/index.ts +20 -0
  315. package/src/components/Renderer/BaseRenderer.tsx +39 -18
  316. package/src/components/Renderer/FormBodyCollapsible.tsx +2 -2
  317. package/src/components/Renderer/FormBodyTabbed.tsx +3 -3
  318. package/src/components/Renderer/FormTopLevelItem.tsx +33 -4
  319. package/src/components/Tabs/FormBodySingleTab.tsx +1 -1
  320. package/src/components/Tabs/FormBodyTabList.tsx +5 -8
  321. package/src/components/Tabs/FormBodyTabListWrapper.tsx +15 -26
  322. package/src/components/Tabs/ShowCompletedTabsSection.tsx +52 -0
  323. package/src/components/index.ts +1 -0
  324. package/src/hooks/index.ts +1 -0
  325. package/src/hooks/useContextDisplayItems.ts +40 -0
  326. package/src/hooks/useInitialiseRenderer.ts +2 -2
  327. package/src/hooks/useInitialiseRepeatAnswers.ts +28 -17
  328. package/src/hooks/useInitialiseRepeatGroups.ts +28 -17
  329. package/src/hooks/useNumberInput.ts +38 -0
  330. package/src/hooks/useStringInput.ts +38 -0
  331. package/src/hooks/useTerminologyServerQuery.ts +3 -6
  332. package/src/index.ts +45 -2
  333. package/src/interfaces/questionnaireStore.interface.ts +1 -0
  334. package/src/interfaces/renderProps.interface.ts +4 -0
  335. package/src/stores/useQuestionnaireResponseStore.ts +15 -10
  336. package/src/stores/useQuestionnaireStore.ts +10 -3
  337. package/src/theme/overrides/Overrides.ts +0 -2
  338. package/src/utils/calculatedExpression.ts +2 -2
  339. package/src/utils/formChanges.ts +141 -0
  340. package/src/utils/index.ts +18 -0
  341. package/src/utils/mapItem.ts +6 -4
  342. package/src/utils/qItem.ts +29 -0
  343. package/src/utils/qrItem.ts +108 -97
  344. package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +4 -0
  345. package/src/utils/repopulateIntoResponse.ts +153 -0
  346. package/src/utils/repopulateItems.ts +206 -0
  347. package/src/utils/repopulateRepeatGroup.ts +68 -0
@@ -15,27 +15,15 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import type { ChangeEvent, SyntheticEvent } from 'react';
19
18
  import React, { useState } from 'react';
20
- import Autocomplete from '@mui/material/Autocomplete';
21
- import Box from '@mui/material/Box';
22
- import CircularProgress from '@mui/material/CircularProgress';
23
- import Fade from '@mui/material/Fade';
24
19
  import Grid from '@mui/material/Grid';
25
- import Tooltip from '@mui/material/Tooltip';
26
20
 
27
21
  import type { Coding, QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
28
22
 
29
23
  import { createEmptyQrItem } from '../../../utils/qrItem';
30
- import { StandardTextField } from '../Textfield.styles';
31
24
  import { FullWidthFormComponentBox } from '../../Box.styles';
32
- import SearchIcon from '@mui/icons-material/Search';
33
25
  import useDebounce from '../../../hooks/useDebounce';
34
26
  import useTerminologyServerQuery from '../../../hooks/useTerminologyServerQuery';
35
- import WarningAmberIcon from '@mui/icons-material/WarningAmber';
36
- import InfoIcon from '@mui/icons-material/Info';
37
- import DoneIcon from '@mui/icons-material/Done';
38
- import ErrorIcon from '@mui/icons-material/Error';
39
27
  import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
40
28
  import type {
41
29
  PropsWithIsRepeatedAttribute,
@@ -45,6 +33,7 @@ import type {
45
33
  import { AUTOCOMPLETE_DEBOUNCE_DURATION } from '../../../utils/debounce';
46
34
  import DisplayInstructions from '../DisplayItem/DisplayInstructions';
47
35
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
36
+ import OpenChoiceAutocompleteField from './OpenChoiceAutocompleteField';
48
37
 
49
38
  interface OpenChoiceAutocompleteItemProps
50
39
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
@@ -70,10 +59,8 @@ function OpenChoiceAutocompleteItem(props: OpenChoiceAutocompleteItemProps) {
70
59
  }
71
60
 
72
61
  // Get additional rendering extensions
73
- const { displayUnit, displayPrompt, displayInstructions, readOnly, entryFormat } =
74
- useRenderingExtensions(qItem);
62
+ const { displayInstructions } = useRenderingExtensions(qItem);
75
63
 
76
- // Query ontoserver for options
77
64
  const maxList = 10;
78
65
 
79
66
  const [input, setInput] = useState('');
@@ -91,7 +78,7 @@ function OpenChoiceAutocompleteItem(props: OpenChoiceAutocompleteItemProps) {
91
78
  }
92
79
 
93
80
  // Event handlers
94
- function handleValueChange(_: SyntheticEvent<Element, Event>, newValue: Coding | string | null) {
81
+ function handleValueChange(newValue: Coding | string | null) {
95
82
  if (newValue === null) {
96
83
  setInput('');
97
84
  newValue = '';
@@ -114,84 +101,31 @@ function OpenChoiceAutocompleteItem(props: OpenChoiceAutocompleteItemProps) {
114
101
  }
115
102
  }
116
103
 
117
- const openChoiceAutocomplete = (
118
- <>
119
- <Box display="flex">
120
- <Autocomplete
121
- id={qItem.id}
122
- value={valueAutocomplete}
123
- options={options}
124
- getOptionLabel={(option) => (typeof option === 'string' ? option : `${option.display}`)}
125
- loading={loading}
126
- loadingText={'Fetching results...'}
127
- clearOnEscape
128
- freeSolo
129
- autoHighlight
130
- sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 220, flexGrow: 1 }}
131
- placeholder={entryFormat}
132
- onChange={handleValueChange}
133
- filterOptions={(x) => x}
134
- renderInput={(params) => (
135
- <StandardTextField
136
- {...params}
137
- value={input}
138
- onBlur={() => {
139
- // set answer to current input when text field is unfocused
140
- if (!valueAutocomplete && input !== '') {
141
- onQrItemChange({
142
- ...createEmptyQrItem(qItem),
143
- answer: [{ valueString: input }]
144
- });
145
- }
146
- }}
147
- onChange={(e: ChangeEvent<HTMLInputElement>) => setInput(e.target.value)}
148
- isTabled={isTabled}
149
- disabled={readOnly}
150
- label={displayPrompt}
151
- size="small"
152
- InputProps={{
153
- ...params.InputProps,
154
- startAdornment: (
155
- <>
156
- {!valueAutocomplete || valueAutocomplete === '' ? (
157
- <SearchIcon fontSize="small" sx={{ ml: 0.5 }} />
158
- ) : null}
159
- {params.InputProps.startAdornment}
160
- </>
161
- ),
162
- endAdornment: (
163
- <>
164
- {loading ? (
165
- <CircularProgress color="inherit" size={16} />
166
- ) : feedback ? (
167
- <Fade in={!!feedback} timeout={300}>
168
- <Tooltip title={feedback.message} arrow sx={{ ml: 1 }}>
169
- {
170
- {
171
- info: <InfoIcon fontSize="small" color="info" />,
172
- warning: <WarningAmberIcon fontSize="small" color="warning" />,
173
- success: <DoneIcon fontSize="small" color="success" />,
174
- error: <ErrorIcon fontSize="small" color="error" />
175
- }[feedback.color]
176
- }
177
- </Tooltip>
178
- </Fade>
179
- ) : null}
180
- {params.InputProps.endAdornment}
181
- {displayUnit}
182
- </>
183
- )
184
- }}
185
- data-test="q-item-open-choice-autocomplete-field"
186
- />
187
- )}
188
- />
189
- </Box>
190
- </>
191
- );
104
+ function handleUnfocus() {
105
+ // set answer to current input when text field is unfocused
106
+ if (!valueAutocomplete && input !== '') {
107
+ onQrItemChange({
108
+ ...createEmptyQrItem(qItem),
109
+ answer: [{ valueString: input }]
110
+ });
111
+ }
112
+ }
192
113
 
193
114
  if (isRepeated) {
194
- return <>{openChoiceAutocomplete}</>;
115
+ return (
116
+ <OpenChoiceAutocompleteField
117
+ qItem={qItem}
118
+ options={options}
119
+ valueAutocomplete={valueAutocomplete}
120
+ input={input}
121
+ loading={loading}
122
+ feedback={feedback ?? null}
123
+ isTabled={isTabled}
124
+ onInputChange={(newValue) => setInput(newValue)}
125
+ onValueChange={handleValueChange}
126
+ onUnfocus={handleUnfocus}
127
+ />
128
+ );
195
129
  }
196
130
 
197
131
  return (
@@ -201,7 +135,18 @@ function OpenChoiceAutocompleteItem(props: OpenChoiceAutocompleteItemProps) {
201
135
  <LabelWrapper qItem={qItem} />
202
136
  </Grid>
203
137
  <Grid item xs={7}>
204
- {openChoiceAutocomplete}
138
+ <OpenChoiceAutocompleteField
139
+ qItem={qItem}
140
+ options={options}
141
+ valueAutocomplete={valueAutocomplete}
142
+ input={input}
143
+ loading={loading}
144
+ feedback={feedback ?? null}
145
+ isTabled={isTabled}
146
+ onInputChange={(newValue) => setInput(newValue)}
147
+ onValueChange={handleValueChange}
148
+ onUnfocus={handleUnfocus}
149
+ />
205
150
  <DisplayInstructions displayInstructions={displayInstructions} />
206
151
  </Grid>
207
152
  </Grid>
@@ -0,0 +1,112 @@
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 { StyledFormGroup } from '../Item.styles';
20
+ import { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
21
+ import CheckboxSingle from '../ItemParts/CheckboxSingle';
22
+ import CheckboxSingleWithOpenLabel from '../ItemParts/CheckboxSingleWithOpenLabel';
23
+ import type { QuestionnaireItem, QuestionnaireResponseItemAnswer } from 'fhir/r4';
24
+
25
+ interface OpenChoiceCheckboxAnswerOptionFieldsProps {
26
+ qItem: QuestionnaireItem;
27
+ answers: QuestionnaireResponseItemAnswer[];
28
+ openLabelText: string | null;
29
+ openLabelValue: string;
30
+ openLabelChecked: boolean;
31
+ readOnly: boolean;
32
+ orientation: ChoiceItemOrientation;
33
+ onValueChange: (changedOptionValue: string | null, changedOpenLabelValue: string | null) => void;
34
+ onOpenLabelCheckedChange: (checked: boolean) => void;
35
+ onOpenLabelInputChange: (input: string) => void;
36
+ }
37
+
38
+ function OpenChoiceCheckboxAnswerOptionFields(props: OpenChoiceCheckboxAnswerOptionFieldsProps) {
39
+ const {
40
+ qItem,
41
+ answers,
42
+ openLabelText,
43
+ openLabelValue,
44
+ openLabelChecked,
45
+ readOnly,
46
+ orientation,
47
+ onValueChange,
48
+ onOpenLabelCheckedChange,
49
+ onOpenLabelInputChange
50
+ } = props;
51
+
52
+ return (
53
+ <StyledFormGroup row={orientation === ChoiceItemOrientation.Horizontal}>
54
+ {qItem.answerOption?.map((option) => {
55
+ if (option['valueCoding']) {
56
+ return (
57
+ <CheckboxSingle
58
+ key={option.valueCoding.code ?? ''}
59
+ value={option.valueCoding.code ?? ''}
60
+ label={option.valueCoding.display ?? `${option.valueCoding.code}`}
61
+ readOnly={readOnly}
62
+ isChecked={answers.some(
63
+ (answer) => JSON.stringify(answer) === JSON.stringify(option)
64
+ )}
65
+ onCheckedChange={(changedValue) => onValueChange(changedValue, null)}
66
+ />
67
+ );
68
+ }
69
+
70
+ if (option['valueString']) {
71
+ return (
72
+ <CheckboxSingle
73
+ key={option.valueString}
74
+ value={option.valueString}
75
+ label={option.valueString}
76
+ readOnly={readOnly}
77
+ isChecked={answers.some((answer) => answer.valueString === option.valueString)}
78
+ onCheckedChange={(changedValue) => onValueChange(changedValue, null)}
79
+ />
80
+ );
81
+ }
82
+
83
+ if (option['valueInteger']) {
84
+ return (
85
+ <CheckboxSingle
86
+ key={option.valueInteger}
87
+ value={option.valueInteger.toString()}
88
+ label={option.valueInteger.toString()}
89
+ readOnly={readOnly}
90
+ isChecked={answers.some((answer) => answer.valueInteger === option.valueInteger)}
91
+ onCheckedChange={(changedValue) => onValueChange(changedValue, null)}
92
+ />
93
+ );
94
+ }
95
+
96
+ return null;
97
+ })}
98
+
99
+ {openLabelText ? (
100
+ <CheckboxSingleWithOpenLabel
101
+ value={openLabelValue}
102
+ label={openLabelText}
103
+ isChecked={openLabelChecked}
104
+ onCheckedChange={onOpenLabelCheckedChange}
105
+ onInputChange={onOpenLabelInputChange}
106
+ />
107
+ ) : null}
108
+ </StyledFormGroup>
109
+ );
110
+ }
111
+
112
+ export default OpenChoiceCheckboxAnswerOptionFields;
@@ -17,13 +17,11 @@
17
17
 
18
18
  import React, { useCallback, useMemo, useState } from 'react';
19
19
  import Grid from '@mui/material/Grid';
20
- import { CheckBoxOption, ChoiceItemOrientation } from '../../../interfaces/choice.enum';
20
+ import type { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
21
+ import { CheckBoxOption } from '../../../interfaces/choice.enum';
21
22
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
22
23
  import { createEmptyQrItem } from '../../../utils/qrItem';
23
- import CheckboxSingle from '../ItemParts/CheckboxSingle';
24
24
  import { getOpenLabelText } from '../../../utils/itemControl';
25
- import CheckboxSingleWithOpenLabel from '../ItemParts/CheckboxSingleWithOpenLabel';
26
- import { QFormGroup } from '../Item.styles';
27
25
  import {
28
26
  getOldOpenLabelAnswer,
29
27
  updateQrOpenChoiceCheckboxAnswers
@@ -33,22 +31,25 @@ import debounce from 'lodash.debounce';
33
31
  import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
34
32
  import type {
35
33
  PropsWithIsRepeatedAttribute,
36
- PropsWithQrItemChangeHandler
34
+ PropsWithQrItemChangeHandler,
35
+ PropsWithTextShownAttribute
37
36
  } from '../../../interfaces/renderProps.interface';
38
37
  import { DEBOUNCE_DURATION } from '../../../utils/debounce';
39
38
  import DisplayInstructions from '../DisplayItem/DisplayInstructions';
40
39
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
40
+ import OpenChoiceCheckboxAnswerOptionFields from './OpenChoiceCheckboxAnswerOptionFields';
41
41
 
42
42
  interface OpenChoiceCheckboxAnswerOptionItemProps
43
43
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
44
- PropsWithIsRepeatedAttribute {
44
+ PropsWithIsRepeatedAttribute,
45
+ PropsWithTextShownAttribute {
45
46
  qItem: QuestionnaireItem;
46
47
  qrItem: QuestionnaireResponseItem;
47
48
  orientation: ChoiceItemOrientation;
48
49
  }
49
50
 
50
51
  function OpenChoiceCheckboxAnswerOptionItem(props: OpenChoiceCheckboxAnswerOptionItemProps) {
51
- const { qItem, qrItem, isRepeated, onQrItemChange, orientation } = props;
52
+ const { qItem, qrItem, orientation, isRepeated, textShown = true, onQrItemChange } = props;
52
53
 
53
54
  // Init answers
54
55
  const qrOpenChoiceCheckbox = qrItem ?? createEmptyQrItem(qItem);
@@ -115,79 +116,59 @@ function OpenChoiceCheckboxAnswerOptionItem(props: OpenChoiceCheckboxAnswerOptio
115
116
  [handleValueChange]
116
117
  ); // Dependencies are tested, debounce is causing eslint to not recognise dependencies
117
118
 
118
- const openChoiceCheckbox = (
119
- <QFormGroup row={orientation === ChoiceItemOrientation.Horizontal}>
120
- {qItem.answerOption?.map((option) => {
121
- if (option['valueCoding']) {
122
- return (
123
- <CheckboxSingle
124
- key={option.valueCoding.code ?? ''}
125
- value={option.valueCoding.code ?? ''}
126
- label={option.valueCoding.display ?? `${option.valueCoding.code}`}
127
- readOnly={readOnly}
128
- isChecked={answers.some(
129
- (answer) => JSON.stringify(answer) === JSON.stringify(option)
130
- )}
131
- onCheckedChange={(changedValue) => handleValueChange(changedValue, null)}
132
- />
133
- );
134
- } else if (option['valueString']) {
135
- return (
136
- <CheckboxSingle
137
- key={option.valueString}
138
- value={option.valueString}
139
- label={option.valueString}
140
- readOnly={readOnly}
141
- isChecked={answers.some((answer) => answer.valueString === option.valueString)}
142
- onCheckedChange={(changedValue) => handleValueChange(changedValue, null)}
143
- />
144
- );
145
- } else if (option['valueInteger']) {
146
- return (
147
- <CheckboxSingle
148
- key={option.valueInteger}
149
- value={option.valueInteger.toString()}
150
- label={option.valueInteger.toString()}
119
+ function handleOpenLabelCheckedChange(checked: boolean) {
120
+ handleValueChange(null, openLabelValue);
121
+ setOpenLabelChecked(checked);
122
+ }
123
+
124
+ function handleOpenLabelInputChange(newValue: string) {
125
+ setOpenLabelValue(newValue);
126
+ updateOpenLabelValueWithDebounce(newValue);
127
+ }
128
+
129
+ if (textShown) {
130
+ return (
131
+ <FullWidthFormComponentBox data-test="q-item-open-choice-checkbox-answer-option-box">
132
+ <Grid container columnSpacing={6}>
133
+ <Grid item xs={5}>
134
+ <LabelWrapper qItem={qItem} />
135
+ </Grid>
136
+ <Grid item xs={7}>
137
+ <OpenChoiceCheckboxAnswerOptionFields
138
+ qItem={qItem}
139
+ answers={answers}
140
+ openLabelText={openLabelText}
141
+ openLabelValue={openLabelValue}
142
+ openLabelChecked={openLabelChecked}
151
143
  readOnly={readOnly}
152
- isChecked={answers.some((answer) => answer.valueInteger === option.valueInteger)}
153
- onCheckedChange={(changedValue) => handleValueChange(changedValue, null)}
144
+ orientation={orientation}
145
+ onValueChange={handleValueChange}
146
+ onOpenLabelCheckedChange={handleOpenLabelCheckedChange}
147
+ onOpenLabelInputChange={handleOpenLabelInputChange}
154
148
  />
155
- );
156
- } else {
157
- return null;
158
- }
159
- })}
160
-
161
- {openLabelText ? (
162
- <CheckboxSingleWithOpenLabel
163
- value={openLabelValue}
164
- label={openLabelText}
165
- isChecked={openLabelChecked}
166
- onCheckedChange={(checked) => {
167
- handleValueChange(null, openLabelValue);
168
- setOpenLabelChecked(checked);
169
- }}
170
- onInputChange={(input) => {
171
- setOpenLabelValue(input);
172
- updateOpenLabelValueWithDebounce(input);
173
- }}
174
- />
175
- ) : null}
176
- </QFormGroup>
177
- );
149
+ <DisplayInstructions displayInstructions={displayInstructions} />
150
+ </Grid>
151
+ </Grid>
152
+ </FullWidthFormComponentBox>
153
+ );
154
+ }
178
155
 
179
156
  return (
180
- <FullWidthFormComponentBox data-test="q-item-open-choice-checkbox-answer-option-box">
181
- <Grid container columnSpacing={6}>
182
- <Grid item xs={5}>
183
- <LabelWrapper qItem={qItem} />
184
- </Grid>
185
- <Grid item xs={7}>
186
- {openChoiceCheckbox}
187
- <DisplayInstructions displayInstructions={displayInstructions} />
188
- </Grid>
189
- </Grid>
190
- </FullWidthFormComponentBox>
157
+ <>
158
+ <OpenChoiceCheckboxAnswerOptionFields
159
+ qItem={qItem}
160
+ answers={answers}
161
+ openLabelText={openLabelText}
162
+ openLabelValue={openLabelValue}
163
+ openLabelChecked={openLabelChecked}
164
+ readOnly={readOnly}
165
+ orientation={orientation}
166
+ onValueChange={handleValueChange}
167
+ onOpenLabelCheckedChange={handleOpenLabelCheckedChange}
168
+ onOpenLabelInputChange={handleOpenLabelInputChange}
169
+ />
170
+ <DisplayInstructions displayInstructions={displayInstructions} />
171
+ </>
191
172
  );
192
173
  }
193
174
 
@@ -28,19 +28,21 @@ import OpenChoiceRadioAnswerOptionItem from './OpenChoiceRadioAnswerOptionItem';
28
28
  import type {
29
29
  PropsWithIsRepeatedAttribute,
30
30
  PropsWithIsTabledAttribute,
31
- PropsWithQrItemChangeHandler
31
+ PropsWithQrItemChangeHandler,
32
+ PropsWithTextShownAttribute
32
33
  } from '../../../interfaces/renderProps.interface';
33
34
 
34
35
  interface OpenChoiceItemSwitcherProps
35
36
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
36
37
  PropsWithIsRepeatedAttribute,
37
- PropsWithIsTabledAttribute {
38
+ PropsWithIsTabledAttribute,
39
+ PropsWithTextShownAttribute {
38
40
  qItem: QuestionnaireItem;
39
41
  qrItem: QuestionnaireResponseItem;
40
42
  }
41
43
 
42
44
  function OpenChoiceItemSwitcher(props: OpenChoiceItemSwitcherProps) {
43
- const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
45
+ const { qItem, qrItem, isRepeated, isTabled, textShown, onQrItemChange } = props;
44
46
  const orientation = getChoiceOrientation(qItem);
45
47
 
46
48
  switch (getOpenChoiceControlType(qItem)) {
@@ -49,9 +51,10 @@ function OpenChoiceItemSwitcher(props: OpenChoiceItemSwitcherProps) {
49
51
  <OpenChoiceCheckboxAnswerOptionItem
50
52
  qItem={qItem}
51
53
  qrItem={qrItem}
54
+ orientation={orientation}
52
55
  isRepeated={qItem['repeats'] ?? false}
56
+ textShown={textShown}
53
57
  onQrItemChange={onQrItemChange}
54
- orientation={orientation}
55
58
  />
56
59
  );
57
60
  case OpenChoiceItemControl.Radio:
@@ -59,9 +62,9 @@ function OpenChoiceItemSwitcher(props: OpenChoiceItemSwitcherProps) {
59
62
  <OpenChoiceRadioAnswerOptionItem
60
63
  qItem={qItem}
61
64
  qrItem={qrItem}
65
+ orientation={orientation}
62
66
  isRepeated={qItem['repeats'] ?? false}
63
67
  onQrItemChange={onQrItemChange}
64
- orientation={orientation}
65
68
  />
66
69
  );
67
70
  case OpenChoiceItemControl.Autocomplete:
@@ -0,0 +1,72 @@
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 { ChangeEvent } from 'react';
19
+ import React from 'react';
20
+ import { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
21
+ import type { QuestionnaireItem } from 'fhir/r4';
22
+ import { StyledRadioGroup } from '../Item.styles';
23
+ import RadioButtonWithOpenLabel from '../ItemParts/RadioButtonWithOpenLabel';
24
+ import RadioAnswerOptionButtons from '../ItemParts/RadioAnswerOptionButtons';
25
+
26
+ interface OpenChoiceRadioAnswerOptionFieldsProps {
27
+ qItem: QuestionnaireItem;
28
+ valueRadio: string | null;
29
+ openLabelText: string | null;
30
+ openLabelValue: string | null;
31
+ openLabelSelected: boolean;
32
+ orientation: ChoiceItemOrientation;
33
+ readOnly: boolean;
34
+ onValueChange: (changedOptionValue: string | null, changedOpenLabelValue: string | null) => void;
35
+ }
36
+
37
+ function OpenChoiceRadioAnswerOptionFields(props: OpenChoiceRadioAnswerOptionFieldsProps) {
38
+ const {
39
+ qItem,
40
+ valueRadio,
41
+ openLabelText,
42
+ openLabelValue,
43
+ openLabelSelected,
44
+ orientation,
45
+ readOnly,
46
+ onValueChange
47
+ } = props;
48
+
49
+ return (
50
+ <StyledRadioGroup
51
+ row={orientation === ChoiceItemOrientation.Horizontal}
52
+ name={qItem.text}
53
+ id={qItem.id}
54
+ onChange={(e: ChangeEvent<HTMLInputElement>) => onValueChange(e.target.value, null)}
55
+ value={valueRadio}
56
+ data-test="q-item-radio-group">
57
+ <RadioAnswerOptionButtons qItem={qItem} readOnly={readOnly} />
58
+
59
+ {openLabelText ? (
60
+ <RadioButtonWithOpenLabel
61
+ value={openLabelValue}
62
+ label={openLabelText}
63
+ readOnly={readOnly}
64
+ isSelected={openLabelSelected}
65
+ onInputChange={(input) => onValueChange(null, input)}
66
+ />
67
+ ) : null}
68
+ </StyledRadioGroup>
69
+ );
70
+ }
71
+
72
+ export default OpenChoiceRadioAnswerOptionFields;