@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aehrc/smart-forms-renderer",
3
- "version": "0.7.1",
3
+ "version": "0.8.0",
4
4
  "description": "FHIR Structured Data Captured (SDC) rendering engine for Smart Forms",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -23,6 +23,7 @@
23
23
  },
24
24
  "homepage": "https://github.com/aehrc/smart-forms#readme",
25
25
  "dependencies": {
26
+ "deep-diff": "^1.0.2",
26
27
  "@iconify/react": "^4.1.1",
27
28
  "dayjs": "^1.11.9",
28
29
  "fhirclient": "^2.5.2",
@@ -48,27 +49,28 @@
48
49
  "react-dom": ">=18.0.0"
49
50
  },
50
51
  "devDependencies": {
51
- "@babel/core": "^7.15.0",
52
+ "@babel/core": "^7.22.17",
52
53
  "@storybook/addon-essentials": "^7.4.0",
53
54
  "@storybook/addon-interactions": "^7.4.0",
54
55
  "@storybook/addon-links": "^7.4.0",
55
56
  "@storybook/addon-onboarding": "^1.0.8",
56
57
  "@storybook/addon-styling": "^1.3.7",
57
58
  "@storybook/blocks": "^7.4.0",
58
- "@storybook/react": "^7.4.0",
59
+ "@storybook/react": "^7.4.3",
59
60
  "@storybook/react-vite": "^7.4.0",
60
- "@storybook/testing-library": "^0.2.0",
61
+ "@storybook/testing-library": "^0.2.1",
61
62
  "@testing-library/jest-dom": "^6.1.2",
62
63
  "@testing-library/react": "^14.0.0",
63
64
  "@testing-library/react-hooks": "^7.0.2",
64
65
  "@types/jest": "^29.5.4",
66
+ "@types/deep-diff": "^1.0.2",
65
67
  "@types/react": "^18.2.18",
66
68
  "@types/react-dom": "^18.2.7",
67
69
  "jest": "^29.6.4",
68
70
  "jest-environment-jsdom": "^29.6.4",
69
71
  "react": "^18.2.0",
70
72
  "react-dom": "^18.2.0",
71
- "storybook": "^7.4.0",
73
+ "storybook": "^7.4.2",
72
74
  "ts-jest": "^29.1.1",
73
75
  "tslib": "^2.6.2",
74
76
  "typescript": "^5.2.2"
@@ -66,7 +66,6 @@ function ChoiceAutocompleteItem(props: ChoiceAutocompleteItemProps) {
66
66
  const { displayUnit, displayPrompt, displayInstructions, readOnly, entryFormat } =
67
67
  useRenderingExtensions(qItem);
68
68
 
69
- // Query ontoserver for options
70
69
  const maxList = 10;
71
70
 
72
71
  const [input, setInput] = useState('');
@@ -106,6 +105,7 @@ function ChoiceAutocompleteItem(props: ChoiceAutocompleteItemProps) {
106
105
  options={options}
107
106
  getOptionLabel={(option) => `${option.display}`}
108
107
  isOptionEqualToValue={(option, value) => option.id === value.id}
108
+ disabled={readOnly}
109
109
  loading={loading}
110
110
  loadingText={'Fetching results...'}
111
111
  clearOnEscape
@@ -118,7 +118,6 @@ function ChoiceAutocompleteItem(props: ChoiceAutocompleteItemProps) {
118
118
  {...params}
119
119
  onChange={(e: ChangeEvent<HTMLInputElement>) => setInput(e.target.value)}
120
120
  isTabled={isTabled}
121
- disabled={readOnly}
122
121
  label={displayPrompt}
123
122
  size="small"
124
123
  InputProps={{
@@ -0,0 +1,85 @@
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 { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
20
+ import type { QuestionnaireItem, QuestionnaireResponseItemAnswer } from 'fhir/r4';
21
+ import QItemChoiceCheckboxSingle from '../ItemParts/CheckboxSingle';
22
+ import { StyledFormGroup } from '../Item.styles';
23
+
24
+ interface ChoiceCheckboxAnswerOptionFieldsProps {
25
+ qItem: QuestionnaireItem;
26
+ answers: QuestionnaireResponseItemAnswer[];
27
+ orientation: ChoiceItemOrientation;
28
+ readOnly: boolean;
29
+ onCheckedChange: (newValue: string) => void;
30
+ }
31
+
32
+ function ChoiceCheckboxAnswerOptionFields(props: ChoiceCheckboxAnswerOptionFieldsProps) {
33
+ const { qItem, answers, orientation, readOnly, onCheckedChange } = props;
34
+
35
+ return (
36
+ <StyledFormGroup row={orientation === ChoiceItemOrientation.Horizontal}>
37
+ {qItem.answerOption?.map((option) => {
38
+ if (option['valueCoding']) {
39
+ return (
40
+ <QItemChoiceCheckboxSingle
41
+ key={option.valueCoding.code ?? ''}
42
+ value={option.valueCoding.code ?? ''}
43
+ label={option.valueCoding.display ?? `${option.valueCoding.code}`}
44
+ readOnly={readOnly}
45
+ isChecked={answers.some(
46
+ (answer) => JSON.stringify(answer) === JSON.stringify(option)
47
+ )}
48
+ onCheckedChange={onCheckedChange}
49
+ />
50
+ );
51
+ }
52
+
53
+ if (option['valueString']) {
54
+ return (
55
+ <QItemChoiceCheckboxSingle
56
+ key={option.valueString}
57
+ value={option.valueString}
58
+ label={option.valueString}
59
+ readOnly={readOnly}
60
+ isChecked={answers.some((answer) => answer.valueString === option.valueString)}
61
+ onCheckedChange={onCheckedChange}
62
+ />
63
+ );
64
+ }
65
+
66
+ if (option['valueInteger']) {
67
+ return (
68
+ <QItemChoiceCheckboxSingle
69
+ key={option.valueInteger}
70
+ value={option.valueInteger.toString()}
71
+ label={option.valueInteger.toString()}
72
+ readOnly={readOnly}
73
+ isChecked={answers.some((answer) => answer.valueInteger === option.valueInteger)}
74
+ onCheckedChange={onCheckedChange}
75
+ />
76
+ );
77
+ }
78
+
79
+ return null;
80
+ })}
81
+ </StyledFormGroup>
82
+ );
83
+ }
84
+
85
+ export default ChoiceCheckboxAnswerOptionFields;
@@ -17,31 +17,32 @@
17
17
 
18
18
  import React from 'react';
19
19
  import Grid from '@mui/material/Grid';
20
- import { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
20
+ import type { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
21
21
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
22
- import QItemChoiceCheckboxSingle from '../ItemParts/CheckboxSingle';
23
22
  import { createEmptyQrItem } from '../../../utils/qrItem';
24
- import { QFormGroup } from '../Item.styles';
25
23
  import { updateQrCheckboxAnswers } from '../../../utils/choice';
26
24
  import { FullWidthFormComponentBox } from '../../Box.styles';
27
25
  import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
28
26
  import type {
29
27
  PropsWithIsRepeatedAttribute,
30
- PropsWithQrItemChangeHandler
28
+ PropsWithQrItemChangeHandler,
29
+ PropsWithTextShownAttribute
31
30
  } from '../../../interfaces/renderProps.interface';
32
31
  import DisplayInstructions from '../DisplayItem/DisplayInstructions';
33
32
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
33
+ import ChoiceCheckboxAnswerValueSetFields from './ChoiceCheckboxAnswerOptionFields';
34
34
 
35
35
  interface ChoiceCheckboxAnswerOptionItemProps
36
36
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
37
- PropsWithIsRepeatedAttribute {
37
+ PropsWithIsRepeatedAttribute,
38
+ PropsWithTextShownAttribute {
38
39
  qItem: QuestionnaireItem;
39
40
  qrItem: QuestionnaireResponseItem;
40
41
  orientation: ChoiceItemOrientation;
41
42
  }
42
43
 
43
44
  function ChoiceCheckboxAnswerOptionItem(props: ChoiceCheckboxAnswerOptionItemProps) {
44
- const { qItem, qrItem, isRepeated, onQrItemChange, orientation } = props;
45
+ const { qItem, qrItem, isRepeated, onQrItemChange, orientation, textShown = true } = props;
45
46
 
46
47
  // Init input value
47
48
  const qrChoiceCheckbox = qrItem ?? createEmptyQrItem(qItem);
@@ -68,63 +69,39 @@ function ChoiceCheckboxAnswerOptionItem(props: ChoiceCheckboxAnswerOptionItemPro
68
69
  }
69
70
  }
70
71
 
71
- const choiceCheckbox = (
72
- <QFormGroup row={orientation === ChoiceItemOrientation.Horizontal}>
73
- {qItem.answerOption?.map((option) => {
74
- if (option['valueCoding']) {
75
- return (
76
- <QItemChoiceCheckboxSingle
77
- key={option.valueCoding.code ?? ''}
78
- value={option.valueCoding.code ?? ''}
79
- label={option.valueCoding.display ?? `${option.valueCoding.code}`}
72
+ if (textShown) {
73
+ return (
74
+ <FullWidthFormComponentBox data-test="q-item-choice-checkbox-answer-option-box">
75
+ <Grid container columnSpacing={6}>
76
+ <Grid item xs={5}>
77
+ <LabelWrapper qItem={qItem} />
78
+ </Grid>
79
+ <Grid item xs={7}>
80
+ <ChoiceCheckboxAnswerValueSetFields
81
+ qItem={qItem}
82
+ answers={answers}
83
+ orientation={orientation}
80
84
  readOnly={readOnly}
81
- isChecked={answers.some(
82
- (answer) => JSON.stringify(answer) === JSON.stringify(option)
83
- )}
84
85
  onCheckedChange={handleCheckedChange}
85
86
  />
86
- );
87
- } else if (option['valueString']) {
88
- return (
89
- <QItemChoiceCheckboxSingle
90
- key={option.valueString}
91
- value={option.valueString}
92
- label={option.valueString}
93
- readOnly={readOnly}
94
- isChecked={answers.some((answer) => answer.valueString === option.valueString)}
95
- onCheckedChange={handleCheckedChange}
96
- />
97
- );
98
- } else if (option['valueInteger']) {
99
- return (
100
- <QItemChoiceCheckboxSingle
101
- key={option.valueInteger}
102
- value={option.valueInteger.toString()}
103
- label={option.valueInteger.toString()}
104
- readOnly={readOnly}
105
- isChecked={answers.some((answer) => answer.valueInteger === option.valueInteger)}
106
- onCheckedChange={handleCheckedChange}
107
- />
108
- );
109
- } else {
110
- return null;
111
- }
112
- })}
113
- </QFormGroup>
114
- );
87
+ <DisplayInstructions displayInstructions={displayInstructions} />
88
+ </Grid>
89
+ </Grid>
90
+ </FullWidthFormComponentBox>
91
+ );
92
+ }
115
93
 
116
94
  return (
117
- <FullWidthFormComponentBox data-test="q-item-choice-checkbox-answer-option-box">
118
- <Grid container columnSpacing={6}>
119
- <Grid item xs={5}>
120
- <LabelWrapper qItem={qItem} />
121
- </Grid>
122
- <Grid item xs={7}>
123
- {choiceCheckbox}
124
- <DisplayInstructions displayInstructions={displayInstructions} />
125
- </Grid>
126
- </Grid>
127
- </FullWidthFormComponentBox>
95
+ <>
96
+ <ChoiceCheckboxAnswerValueSetFields
97
+ qItem={qItem}
98
+ answers={answers}
99
+ orientation={orientation}
100
+ readOnly={readOnly}
101
+ onCheckedChange={handleCheckedChange}
102
+ />
103
+ <DisplayInstructions displayInstructions={displayInstructions} />
104
+ </>
128
105
  );
129
106
  }
130
107
 
@@ -0,0 +1,79 @@
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 { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
20
+ import type { Coding, QuestionnaireResponseItemAnswer } from 'fhir/r4';
21
+ import CheckboxSingle from '../ItemParts/CheckboxSingle';
22
+ import { StyledFormGroup } from '../Item.styles';
23
+ import { StyledAlert } from '../../Alert.styles';
24
+ import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';
25
+ import Typography from '@mui/material/Typography';
26
+
27
+ interface ChoiceCheckboxAnswerValueSetFieldsProps {
28
+ codings: Coding[];
29
+ answers: QuestionnaireResponseItemAnswer[];
30
+ orientation: ChoiceItemOrientation;
31
+ readOnly: boolean;
32
+ serverError: Error | null;
33
+ onCheckedChange: (newValue: string) => void;
34
+ }
35
+
36
+ function ChoiceCheckboxAnswerValueSetFields(props: ChoiceCheckboxAnswerValueSetFieldsProps) {
37
+ const { codings, answers, orientation, readOnly, serverError, onCheckedChange } = props;
38
+
39
+ if (codings.length > 0) {
40
+ return (
41
+ <StyledFormGroup row={orientation === ChoiceItemOrientation.Horizontal}>
42
+ {codings.map((coding) => (
43
+ <CheckboxSingle
44
+ key={coding.code ?? ''}
45
+ value={coding.code ?? ''}
46
+ label={coding.display ?? `${coding.code}`}
47
+ readOnly={readOnly}
48
+ isChecked={answers.some(
49
+ (answer) => JSON.stringify(answer.valueCoding) === JSON.stringify(coding)
50
+ )}
51
+ onCheckedChange={onCheckedChange}
52
+ />
53
+ ))}
54
+ </StyledFormGroup>
55
+ );
56
+ }
57
+
58
+ if (serverError) {
59
+ return (
60
+ <StyledAlert color="error">
61
+ <ErrorOutlineIcon color="error" sx={{ pr: 0.75 }} />
62
+ <Typography variant="subtitle2">
63
+ There was an error fetching options from the terminology server
64
+ </Typography>
65
+ </StyledAlert>
66
+ );
67
+ }
68
+
69
+ return (
70
+ <StyledAlert color="error">
71
+ <ErrorOutlineIcon color="error" sx={{ pr: 0.75 }} />
72
+ <Typography variant="subtitle2">
73
+ Unable to fetch options from the questionnaire or launch context
74
+ </Typography>
75
+ </StyledAlert>
76
+ );
77
+ }
78
+
79
+ export default ChoiceCheckboxAnswerValueSetFields;
@@ -17,36 +17,34 @@
17
17
 
18
18
  import React from 'react';
19
19
  import Grid from '@mui/material/Grid';
20
- import Typography from '@mui/material/Typography';
21
-
22
20
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
23
21
  import { createEmptyQrItem } from '../../../utils/qrItem';
24
22
  import useValueSetCodings from '../../../hooks/useValueSetCodings';
25
- import { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
23
+ import type { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
26
24
  import { mapCodingsToOptions, updateQrCheckboxAnswers } from '../../../utils/choice';
27
- import CheckboxSingle from '../ItemParts/CheckboxSingle';
28
- import { QFormGroup } from '../Item.styles';
29
25
  import { FullWidthFormComponentBox } from '../../Box.styles';
30
26
  import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
31
- import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';
32
27
  import type {
33
28
  PropsWithIsRepeatedAttribute,
34
- PropsWithQrItemChangeHandler
29
+ PropsWithQrItemChangeHandler,
30
+ PropsWithTextShownAttribute
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 ChoiceCheckboxAnswerValueSetFields from './ChoiceCheckboxAnswerValueSetFields';
39
35
 
40
36
  interface ChoiceCheckboxAnswerValueSetItemProps
41
37
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
42
- PropsWithIsRepeatedAttribute {
38
+ PropsWithIsRepeatedAttribute,
39
+ PropsWithTextShownAttribute {
43
40
  qItem: QuestionnaireItem;
44
41
  qrItem: QuestionnaireResponseItem;
45
42
  orientation: ChoiceItemOrientation;
43
+ showText?: boolean;
46
44
  }
47
45
 
48
46
  function ChoiceCheckboxAnswerValueSetItem(props: ChoiceCheckboxAnswerValueSetItemProps) {
49
- const { qItem, qrItem, isRepeated, onQrItemChange, orientation } = props;
47
+ const { qItem, qrItem, orientation, isRepeated, textShown = true, onQrItemChange } = props;
50
48
 
51
49
  // Init input value
52
50
  const qrChoiceCheckbox = qrItem ?? createEmptyQrItem(qItem);
@@ -75,52 +73,41 @@ function ChoiceCheckboxAnswerValueSetItem(props: ChoiceCheckboxAnswerValueSetIte
75
73
  }
76
74
  }
77
75
 
78
- const choiceCheckbox =
79
- codings.length > 0 ? (
80
- <QFormGroup row={orientation === ChoiceItemOrientation.Horizontal}>
81
- {codings.map((coding) => {
82
- return (
83
- <CheckboxSingle
84
- key={coding.code ?? ''}
85
- value={coding.code ?? ''}
86
- label={coding.display ?? `${coding.code}`}
76
+ if (textShown) {
77
+ return (
78
+ <FullWidthFormComponentBox data-test="q-item-choice-checkbox-answer-value-set-box">
79
+ <Grid container columnSpacing={6}>
80
+ <Grid item xs={5}>
81
+ <LabelWrapper qItem={qItem} />
82
+ </Grid>
83
+ <Grid item xs={7}>
84
+ <ChoiceCheckboxAnswerValueSetFields
85
+ codings={codings}
86
+ answers={answers}
87
+ orientation={orientation}
87
88
  readOnly={readOnly}
88
- isChecked={answers.some(
89
- (answer) => JSON.stringify(answer.valueCoding) === JSON.stringify(coding)
90
- )}
89
+ serverError={serverError}
91
90
  onCheckedChange={handleCheckedChange}
92
91
  />
93
- );
94
- })}
95
- </QFormGroup>
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>
92
+ <DisplayInstructions displayInstructions={displayInstructions} />
93
+ </Grid>
94
+ </Grid>
95
+ </FullWidthFormComponentBox>
110
96
  );
97
+ }
111
98
 
112
99
  return (
113
- <FullWidthFormComponentBox data-test="q-item-choice-checkbox-answer-value-set-box">
114
- <Grid container columnSpacing={6}>
115
- <Grid item xs={5}>
116
- <LabelWrapper qItem={qItem} />
117
- </Grid>
118
- <Grid item xs={7}>
119
- {choiceCheckbox}
120
- <DisplayInstructions displayInstructions={displayInstructions} />
121
- </Grid>
122
- </Grid>
123
- </FullWidthFormComponentBox>
100
+ <>
101
+ <ChoiceCheckboxAnswerValueSetFields
102
+ codings={codings}
103
+ answers={answers}
104
+ orientation={orientation}
105
+ readOnly={readOnly}
106
+ serverError={serverError}
107
+ onCheckedChange={handleCheckedChange}
108
+ />
109
+ <DisplayInstructions displayInstructions={displayInstructions} />
110
+ </>
124
111
  );
125
112
  }
126
113
 
@@ -29,19 +29,22 @@ import ChoiceCheckboxAnswerValueSetItem from './ChoiceCheckboxAnswerValueSetItem
29
29
  import type {
30
30
  PropsWithIsRepeatedAttribute,
31
31
  PropsWithIsTabledAttribute,
32
- PropsWithQrItemChangeHandler
32
+ PropsWithQrItemChangeHandler,
33
+ PropsWithTextShownAttribute
33
34
  } from '../../../interfaces/renderProps.interface';
34
35
 
35
36
  interface ChoiceItemSwitcherProps
36
37
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
37
38
  PropsWithIsRepeatedAttribute,
38
- PropsWithIsTabledAttribute {
39
+ PropsWithIsTabledAttribute,
40
+ PropsWithTextShownAttribute {
39
41
  qItem: QuestionnaireItem;
40
42
  qrItem: QuestionnaireResponseItem;
41
43
  }
42
44
 
43
45
  function ChoiceItemSwitcher(props: ChoiceItemSwitcherProps) {
44
- const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
46
+ const { qItem, qrItem, isRepeated, isTabled, textShown, onQrItemChange } = props;
47
+
45
48
  const orientation = getChoiceOrientation(qItem);
46
49
  const choiceControlType = getChoiceControlType(qItem);
47
50
 
@@ -74,9 +77,10 @@ function ChoiceItemSwitcher(props: ChoiceItemSwitcherProps) {
74
77
  <ChoiceCheckboxAnswerOptionItem
75
78
  qItem={qItem}
76
79
  qrItem={qrItem}
77
- isRepeated={qItem['repeats'] ?? false}
80
+ isRepeated={qItem.repeats ?? false}
78
81
  onQrItemChange={onQrItemChange}
79
82
  orientation={orientation}
83
+ textShown={textShown}
80
84
  />
81
85
  );
82
86
  } else {
@@ -84,9 +88,10 @@ function ChoiceItemSwitcher(props: ChoiceItemSwitcherProps) {
84
88
  <ChoiceCheckboxAnswerValueSetItem
85
89
  qItem={qItem}
86
90
  qrItem={qrItem}
87
- isRepeated={qItem['repeats'] ?? false}
91
+ isRepeated={qItem.repeats ?? false}
88
92
  onQrItemChange={onQrItemChange}
89
93
  orientation={orientation}
94
+ textShown={textShown}
90
95
  />
91
96
  );
92
97
  }
@@ -0,0 +1,48 @@
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 { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
20
+ import type { QuestionnaireItem } from 'fhir/r4';
21
+ import RadioAnswerOptionButtons from '../ItemParts/RadioAnswerOptionButtons';
22
+ import { StyledRadioGroup } from '../Item.styles';
23
+
24
+ interface ChoiceRadioAnswerOptionFieldsProps {
25
+ qItem: QuestionnaireItem;
26
+ valueRadio: string | null;
27
+ orientation: ChoiceItemOrientation;
28
+ readOnly: boolean;
29
+ onCheckedChange: (newValue: string) => void;
30
+ }
31
+
32
+ function ChoiceRadioAnswerOptionFields(props: ChoiceRadioAnswerOptionFieldsProps) {
33
+ const { qItem, valueRadio, orientation, readOnly, onCheckedChange } = props;
34
+
35
+ return (
36
+ <StyledRadioGroup
37
+ row={orientation === ChoiceItemOrientation.Horizontal}
38
+ name={qItem.text}
39
+ id={qItem.id}
40
+ onChange={(e) => onCheckedChange(e.target.value)}
41
+ value={valueRadio}
42
+ data-test="q-item-radio-group">
43
+ <RadioAnswerOptionButtons qItem={qItem} readOnly={readOnly} />
44
+ </StyledRadioGroup>
45
+ );
46
+ }
47
+
48
+ export default ChoiceRadioAnswerOptionFields;