@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,19 +15,15 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import type { ChangeEvent } from 'react';
19
18
  import React, { useState } from 'react';
20
19
  import Grid from '@mui/material/Grid';
21
- import { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
20
+ import type { ChoiceItemOrientation } from '../../../interfaces/choice.enum';
22
21
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
23
22
  import { createEmptyQrItem } from '../../../utils/qrItem';
24
23
  import { getOpenLabelText } from '../../../utils/itemControl';
25
- import { QRadioGroup } from '../Item.styles';
26
24
  import { getOldOpenLabelAnswer } from '../../../utils/openChoice';
27
25
  import { FullWidthFormComponentBox } from '../../Box.styles';
28
- import ChoiceRadioSingle from '../ChoiceItems/ChoiceRadioSingle';
29
26
  import { findInAnswerOptions, getQrChoiceValue } from '../../../utils/choice';
30
- import RadioButtonWithOpenLabel from '../ItemParts/RadioButtonWithOpenLabel';
31
27
  import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
32
28
  import type {
33
29
  PropsWithIsRepeatedAttribute,
@@ -35,6 +31,7 @@ import type {
35
31
  } from '../../../interfaces/renderProps.interface';
36
32
  import DisplayInstructions from '../DisplayItem/DisplayInstructions';
37
33
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
34
+ import OpenChoiceRadioAnswerOptionFields from './OpenChoiceRadioAnswerOptionFields';
38
35
 
39
36
  interface OpenChoiceRadioAnswerOptionItemProps
40
37
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
@@ -119,59 +116,6 @@ function OpenChoiceRadioAnswerOptionItem(props: OpenChoiceRadioAnswerOptionItemP
119
116
  }
120
117
  }
121
118
 
122
- const openChoiceRadio = (
123
- <QRadioGroup
124
- row={orientation === ChoiceItemOrientation.Horizontal}
125
- name={qItem.text}
126
- id={qItem.id}
127
- onChange={(e: ChangeEvent<HTMLInputElement>) => handleValueChange(e.target.value, null)}
128
- value={valueRadio}
129
- data-test="q-item-radio-group">
130
- {qItem.answerOption?.map((option) => {
131
- if (option['valueCoding']) {
132
- return (
133
- <ChoiceRadioSingle
134
- key={option.valueCoding.code ?? ''}
135
- value={option.valueCoding.code ?? ''}
136
- label={option.valueCoding.display ?? `${option.valueCoding.code}`}
137
- readOnly={readOnly}
138
- />
139
- );
140
- } else if (option['valueString']) {
141
- return (
142
- <ChoiceRadioSingle
143
- key={option.valueString}
144
- value={option.valueString}
145
- label={option.valueString}
146
- readOnly={readOnly}
147
- />
148
- );
149
- } else if (option['valueInteger']) {
150
- return (
151
- <ChoiceRadioSingle
152
- key={option.valueInteger}
153
- value={option.valueInteger.toString()}
154
- label={option.valueInteger.toString()}
155
- readOnly={readOnly}
156
- />
157
- );
158
- } else {
159
- return null;
160
- }
161
- })}
162
-
163
- {openLabelText ? (
164
- <RadioButtonWithOpenLabel
165
- value={openLabelValue}
166
- label={openLabelText}
167
- readOnly={readOnly}
168
- isSelected={openLabelSelected}
169
- onInputChange={(input) => handleValueChange(null, input)}
170
- />
171
- ) : null}
172
- </QRadioGroup>
173
- );
174
-
175
119
  return (
176
120
  <FullWidthFormComponentBox data-test="q-item-open-choice-radio-answer-option-box">
177
121
  <Grid container columnSpacing={6}>
@@ -179,7 +123,16 @@ function OpenChoiceRadioAnswerOptionItem(props: OpenChoiceRadioAnswerOptionItemP
179
123
  <LabelWrapper qItem={qItem} />
180
124
  </Grid>
181
125
  <Grid item xs={7}>
182
- {openChoiceRadio}
126
+ <OpenChoiceRadioAnswerOptionFields
127
+ qItem={qItem}
128
+ valueRadio={valueRadio}
129
+ openLabelText={openLabelText}
130
+ openLabelValue={openLabelValue}
131
+ openLabelSelected={openLabelSelected}
132
+ orientation={orientation}
133
+ readOnly={readOnly}
134
+ onValueChange={handleValueChange}
135
+ />
183
136
  <DisplayInstructions displayInstructions={displayInstructions} />
184
137
  </Grid>
185
138
  </Grid>
@@ -0,0 +1,54 @@
1
+ import React from 'react';
2
+ import { getAnswerOptionLabel } from '../../../utils/openChoice';
3
+ import { StandardTextField } from '../Textfield.styles';
4
+ import Autocomplete from '@mui/material/Autocomplete';
5
+ import type { QuestionnaireItem, QuestionnaireItemAnswerOption } from 'fhir/r4';
6
+ import type { PropsWithIsTabledAttribute } from '../../../interfaces/renderProps.interface';
7
+ import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
8
+
9
+ interface OpenChoiceSelectAnswerOptionFieldProps extends PropsWithIsTabledAttribute {
10
+ qItem: QuestionnaireItem;
11
+ options: QuestionnaireItemAnswerOption[];
12
+ valueSelect: QuestionnaireItemAnswerOption | null;
13
+ onChange: (newValue: QuestionnaireItemAnswerOption | string | null) => void;
14
+ }
15
+
16
+ function OpenChoiceSelectAnswerOptionField(props: OpenChoiceSelectAnswerOptionFieldProps) {
17
+ const { qItem, options, valueSelect, isTabled, onChange } = props;
18
+
19
+ const { displayUnit, displayPrompt, readOnly, entryFormat } = useRenderingExtensions(qItem);
20
+
21
+ return (
22
+ <Autocomplete
23
+ id={qItem.id}
24
+ value={valueSelect ?? null}
25
+ options={options}
26
+ getOptionLabel={(option) => getAnswerOptionLabel(option)}
27
+ onChange={(_, newValue) => onChange(newValue)}
28
+ freeSolo
29
+ autoHighlight
30
+ sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 160, flexGrow: 1 }}
31
+ disabled={readOnly}
32
+ size="small"
33
+ placeholder={entryFormat}
34
+ renderInput={(params) => (
35
+ <StandardTextField
36
+ isTabled={isTabled}
37
+ label={displayPrompt}
38
+ {...params}
39
+ InputProps={{
40
+ ...params.InputProps,
41
+ endAdornment: (
42
+ <>
43
+ {params.InputProps.endAdornment}
44
+ {displayUnit}
45
+ </>
46
+ )
47
+ }}
48
+ />
49
+ )}
50
+ />
51
+ );
52
+ }
53
+
54
+ export default OpenChoiceSelectAnswerOptionField;
@@ -15,18 +15,14 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import type { SyntheticEvent } from 'react';
19
18
  import React from 'react';
20
- import Autocomplete from '@mui/material/Autocomplete';
21
19
  import Grid from '@mui/material/Grid';
22
20
  import type {
23
21
  QuestionnaireItem,
24
22
  QuestionnaireItemAnswerOption,
25
23
  QuestionnaireResponseItem
26
24
  } from 'fhir/r4';
27
- import { getAnswerOptionLabel } from '../../../utils/openChoice';
28
25
  import { createEmptyQrItem } from '../../../utils/qrItem';
29
- import { StandardTextField } from '../Textfield.styles';
30
26
  import { FullWidthFormComponentBox } from '../../Box.styles';
31
27
  import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
32
28
  import type {
@@ -36,6 +32,7 @@ import type {
36
32
  } from '../../../interfaces/renderProps.interface';
37
33
  import DisplayInstructions from '../DisplayItem/DisplayInstructions';
38
34
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
35
+ import OpenChoiceSelectAnswerOptionField from './OpenChoiceSelectAnswerOptionField';
39
36
 
40
37
  interface OpenChoiceSelectAnswerOptionItemProps
41
38
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
@@ -49,88 +46,61 @@ function OpenChoiceSelectAnswerOptionItem(props: OpenChoiceSelectAnswerOptionIte
49
46
  const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
50
47
 
51
48
  // Get additional rendering extensions
52
- const { displayUnit, displayPrompt, displayInstructions, readOnly, entryFormat } =
53
- useRenderingExtensions(qItem);
49
+ const { displayInstructions } = useRenderingExtensions(qItem);
54
50
 
55
51
  // Init input value
56
52
  const answerOptions = qItem.answerOption;
57
53
  if (!answerOptions) return null;
58
54
 
59
55
  const qrOpenChoice = qrItem ?? createEmptyQrItem(qItem);
60
- let valueSelect: QuestionnaireItemAnswerOption | undefined = undefined;
56
+ let valueSelect: QuestionnaireItemAnswerOption | null = null;
61
57
  if (qrOpenChoice.answer) {
62
- valueSelect = qrOpenChoice.answer[0];
58
+ valueSelect = qrOpenChoice.answer[0] ?? null;
63
59
  }
64
60
 
65
61
  // Event handlers
66
- function handleChange(
67
- _: SyntheticEvent<Element, Event>,
68
- newValue: QuestionnaireItemAnswerOption | string | null
69
- ) {
62
+ function handleChange(newValue: QuestionnaireItemAnswerOption | string | null) {
70
63
  if (newValue) {
71
64
  if (typeof newValue === 'string') {
72
65
  onQrItemChange({
73
66
  ...qrOpenChoice,
74
67
  answer: [{ valueString: newValue }]
75
68
  });
76
- } else {
77
- const option = newValue;
78
- if (option['valueCoding']) {
79
- onQrItemChange({
80
- ...qrOpenChoice,
81
- answer: [{ valueCoding: option.valueCoding }]
82
- });
83
- } else if (option['valueString']) {
84
- onQrItemChange({
85
- ...qrOpenChoice,
86
- answer: [{ valueString: option.valueString }]
87
- });
88
- } else if (option['valueInteger']) {
89
- onQrItemChange({
90
- ...qrOpenChoice,
91
- answer: [{ valueInteger: option.valueInteger }]
92
- });
93
- }
69
+ return;
70
+ }
71
+
72
+ const option = newValue;
73
+ if (option['valueCoding']) {
74
+ onQrItemChange({
75
+ ...qrOpenChoice,
76
+ answer: [{ valueCoding: option.valueCoding }]
77
+ });
78
+ } else if (option['valueString']) {
79
+ onQrItemChange({
80
+ ...qrOpenChoice,
81
+ answer: [{ valueString: option.valueString }]
82
+ });
83
+ } else if (option['valueInteger']) {
84
+ onQrItemChange({
85
+ ...qrOpenChoice,
86
+ answer: [{ valueInteger: option.valueInteger }]
87
+ });
94
88
  }
95
89
  return;
96
90
  }
97
91
  onQrItemChange(createEmptyQrItem(qItem));
98
92
  }
99
93
 
100
- const openOpenChoiceSelectAnswerOption = (
101
- <Autocomplete
102
- id={qItem.id}
103
- value={valueSelect ?? null}
104
- options={answerOptions}
105
- getOptionLabel={(option) => getAnswerOptionLabel(option)}
106
- onChange={handleChange}
107
- freeSolo
108
- autoHighlight
109
- sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 160, flexGrow: 1 }}
110
- disabled={readOnly}
111
- size="small"
112
- placeholder={entryFormat}
113
- renderInput={(params) => (
114
- <StandardTextField
115
- isTabled={isTabled}
116
- label={displayPrompt}
117
- {...params}
118
- InputProps={{
119
- ...params.InputProps,
120
- endAdornment: (
121
- <>
122
- {params.InputProps.endAdornment}
123
- {displayUnit}
124
- </>
125
- )
126
- }}
127
- />
128
- )}
129
- />
130
- );
131
-
132
94
  if (isRepeated) {
133
- return <>{openOpenChoiceSelectAnswerOption}</>;
95
+ return (
96
+ <OpenChoiceSelectAnswerOptionField
97
+ qItem={qItem}
98
+ options={answerOptions}
99
+ valueSelect={valueSelect}
100
+ isTabled={isTabled}
101
+ onChange={handleChange}
102
+ />
103
+ );
134
104
  }
135
105
 
136
106
  return (
@@ -140,7 +110,13 @@ function OpenChoiceSelectAnswerOptionItem(props: OpenChoiceSelectAnswerOptionIte
140
110
  <LabelWrapper qItem={qItem} />
141
111
  </Grid>
142
112
  <Grid item xs={7}>
143
- {openOpenChoiceSelectAnswerOption}
113
+ <OpenChoiceSelectAnswerOptionField
114
+ qItem={qItem}
115
+ options={answerOptions}
116
+ valueSelect={valueSelect}
117
+ isTabled={isTabled}
118
+ onChange={handleChange}
119
+ />
144
120
  <DisplayInstructions displayInstructions={displayInstructions} />
145
121
  </Grid>
146
122
  </Grid>
@@ -0,0 +1,63 @@
1
+ import React from 'react';
2
+ import Autocomplete from '@mui/material/Autocomplete';
3
+ import { StandardTextField } from '../Textfield.styles';
4
+ import Typography from '@mui/material/Typography';
5
+ import type { PropsWithIsTabledAttribute } from '../../../interfaces/renderProps.interface';
6
+ import type { Coding, QuestionnaireItem } from 'fhir/r4';
7
+ import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
8
+
9
+ interface OpenChoiceSelectAnswerValueSetFieldProps extends PropsWithIsTabledAttribute {
10
+ qItem: QuestionnaireItem;
11
+ options: Coding[];
12
+ valueSelect: Coding | null;
13
+ serverError: Error | null;
14
+ onValueChange: (newValue: Coding | string | null) => void;
15
+ }
16
+
17
+ function OpenChoiceSelectAnswerValueSetField(props: OpenChoiceSelectAnswerValueSetFieldProps) {
18
+ const { qItem, options, valueSelect, serverError, isTabled, onValueChange } = props;
19
+
20
+ const { displayUnit, displayPrompt, readOnly, entryFormat } = useRenderingExtensions(qItem);
21
+
22
+ return (
23
+ <>
24
+ <Autocomplete
25
+ id={qItem.id}
26
+ value={valueSelect ?? null}
27
+ options={options}
28
+ getOptionLabel={(option) => (typeof option === 'string' ? option : `${option.display}`)}
29
+ onChange={(_, newValue) => onValueChange(newValue)}
30
+ onInputChange={(_, newValue) => onValueChange(newValue)}
31
+ freeSolo
32
+ autoHighlight
33
+ sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 160, flexGrow: 1 }}
34
+ disabled={readOnly}
35
+ size="small"
36
+ placeholder={entryFormat}
37
+ renderInput={(params) => (
38
+ <StandardTextField
39
+ isTabled={isTabled}
40
+ label={displayPrompt}
41
+ {...params}
42
+ InputProps={{
43
+ ...params.InputProps,
44
+ endAdornment: (
45
+ <>
46
+ {params.InputProps.endAdornment}
47
+ {displayUnit}
48
+ </>
49
+ )
50
+ }}
51
+ />
52
+ )}
53
+ />
54
+ {serverError ? (
55
+ <Typography variant="subtitle2">
56
+ There was an error fetching options from the terminology server.
57
+ </Typography>
58
+ ) : null}
59
+ </>
60
+ );
61
+ }
62
+
63
+ export default OpenChoiceSelectAnswerValueSetField;
@@ -15,14 +15,10 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import type { SyntheticEvent } from 'react';
19
18
  import React from 'react';
20
- import Autocomplete from '@mui/material/Autocomplete';
21
19
  import Grid from '@mui/material/Grid';
22
- import Typography from '@mui/material/Typography';
23
20
  import type { Coding, QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
24
21
  import { createEmptyQrItem } from '../../../utils/qrItem';
25
- import { StandardTextField } from '../Textfield.styles';
26
22
  import { FullWidthFormComponentBox } from '../../Box.styles';
27
23
  import useValueSetCodings from '../../../hooks/useValueSetCodings';
28
24
  import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
@@ -33,6 +29,7 @@ import type {
33
29
  } from '../../../interfaces/renderProps.interface';
34
30
  import DisplayInstructions from '../DisplayItem/DisplayInstructions';
35
31
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
32
+ import OpenChoiceSelectAnswerValueSetField from './OpenChoiceSelectAnswerValueSetField';
36
33
 
37
34
  interface OpenChoiceSelectAnswerValueSetItemProps
38
35
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
@@ -47,20 +44,19 @@ function OpenChoiceSelectAnswerValueSetItem(props: OpenChoiceSelectAnswerValueSe
47
44
 
48
45
  // Init input value
49
46
  const qrOpenChoice = qrItem ?? createEmptyQrItem(qItem);
50
- let valueSelect: Coding | undefined = undefined;
47
+ let valueSelect: Coding | null = null;
51
48
  if (qrOpenChoice['answer']) {
52
- valueSelect = qrOpenChoice['answer'][0].valueCoding;
49
+ valueSelect = qrOpenChoice['answer'][0].valueCoding ?? null;
53
50
  }
54
51
 
55
52
  // Get codings/options from valueSet
56
53
  const { codings, serverError } = useValueSetCodings(qItem);
57
54
 
58
55
  // Get additional rendering extensions
59
- const { displayUnit, displayPrompt, displayInstructions, readOnly, entryFormat } =
60
- useRenderingExtensions(qItem);
56
+ const { displayInstructions } = useRenderingExtensions(qItem);
61
57
 
62
58
  // Event handlers
63
- function handleValueChange(_: SyntheticEvent<Element, Event>, newValue: Coding | string | null) {
59
+ function handleValueChange(newValue: Coding | string | null) {
64
60
  if (newValue) {
65
61
  if (typeof newValue === 'string') {
66
62
  onQrItemChange({
@@ -78,48 +74,17 @@ function OpenChoiceSelectAnswerValueSetItem(props: OpenChoiceSelectAnswerValueSe
78
74
  onQrItemChange(createEmptyQrItem(qItem));
79
75
  }
80
76
 
81
- const openChoiceSelectAnswerValueSet = (
82
- <>
83
- <Autocomplete
84
- id={qItem.id}
85
- value={valueSelect ?? null}
77
+ if (isRepeated) {
78
+ return (
79
+ <OpenChoiceSelectAnswerValueSetField
80
+ qItem={qItem}
86
81
  options={codings}
87
- getOptionLabel={(option) => (typeof option === 'string' ? option : `${option.display}`)}
88
- onChange={handleValueChange}
89
- onInputChange={(event, newValue) => handleValueChange(event, newValue)}
90
- freeSolo
91
- autoHighlight
92
- sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 160, flexGrow: 1 }}
93
- disabled={readOnly}
94
- size="small"
95
- placeholder={entryFormat}
96
- renderInput={(params) => (
97
- <StandardTextField
98
- isTabled={isTabled}
99
- label={displayPrompt}
100
- {...params}
101
- InputProps={{
102
- ...params.InputProps,
103
- endAdornment: (
104
- <>
105
- {params.InputProps.endAdornment}
106
- {displayUnit}
107
- </>
108
- )
109
- }}
110
- />
111
- )}
82
+ valueSelect={valueSelect}
83
+ serverError={serverError}
84
+ isTabled={isTabled}
85
+ onValueChange={handleValueChange}
112
86
  />
113
- {serverError ? (
114
- <Typography variant="subtitle2">
115
- There was an error fetching options from the terminology server.
116
- </Typography>
117
- ) : null}
118
- </>
119
- );
120
-
121
- if (isRepeated) {
122
- return <>{openChoiceSelectAnswerValueSet}</>;
87
+ );
123
88
  }
124
89
 
125
90
  return (
@@ -129,7 +94,14 @@ function OpenChoiceSelectAnswerValueSetItem(props: OpenChoiceSelectAnswerValueSe
129
94
  <LabelWrapper qItem={qItem} />
130
95
  </Grid>
131
96
  <Grid item xs={7}>
132
- {openChoiceSelectAnswerValueSet}
97
+ <OpenChoiceSelectAnswerValueSetField
98
+ qItem={qItem}
99
+ options={codings}
100
+ valueSelect={valueSelect}
101
+ serverError={serverError}
102
+ isTabled={isTabled}
103
+ onValueChange={handleValueChange}
104
+ />
133
105
  <DisplayInstructions displayInstructions={displayInstructions} />
134
106
  </Grid>
135
107
  </Grid>
@@ -31,6 +31,7 @@ import { nanoid } from 'nanoid';
31
31
  import RepeatGroupItem from './RepeatGroupItem';
32
32
  import AddItemButton from './AddItemButton';
33
33
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
34
+ import cloneDeep from 'lodash.clonedeep';
34
35
 
35
36
  interface RepeatGroupProps extends PropsWithQrRepeatGroupChangeHandler {
36
37
  qItem: QuestionnaireItem;
@@ -41,7 +42,7 @@ interface RepeatGroupProps extends PropsWithQrRepeatGroupChangeHandler {
41
42
  function RepeatGroup(props: RepeatGroupProps) {
42
43
  const { qItem, qrItems, groupCardElevation, onQrRepeatGroupChange } = props;
43
44
 
44
- const initialRepeatGroups = useInitialiseRepeatGroups(qrItems);
45
+ const initialRepeatGroups = useInitialiseRepeatGroups(qItem, qrItems);
45
46
 
46
47
  const [repeatGroups, setRepeatGroups] = useState(initialRepeatGroups);
47
48
 
@@ -60,7 +61,7 @@ function RepeatGroup(props: RepeatGroupProps) {
60
61
  onQrRepeatGroupChange({
61
62
  linkId: qItem.linkId,
62
63
  qrItems: updatedRepeatGroups.flatMap((singleGroup) =>
63
- singleGroup.qrItem ? [singleGroup.qrItem] : []
64
+ singleGroup.qrItem ? [cloneDeep(singleGroup.qrItem)] : []
64
65
  )
65
66
  });
66
67
  }
@@ -74,7 +75,7 @@ function RepeatGroup(props: RepeatGroupProps) {
74
75
  onQrRepeatGroupChange({
75
76
  linkId: qItem.linkId,
76
77
  qrItems: updatedRepeatGroups.flatMap((singleGroup) =>
77
- singleGroup.qrItem ? [singleGroup.qrItem] : []
78
+ singleGroup.qrItem ? [cloneDeep(singleGroup.qrItem)] : []
78
79
  )
79
80
  });
80
81
  }
@@ -15,20 +15,4 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import type { Theme } from '@mui/material/styles';
19
- import { alpha } from '@mui/material/styles';
20
-
21
- export default function Backdrop(theme: Theme) {
22
- return {
23
- MuiBackdrop: {
24
- styleOverrides: {
25
- root: {
26
- backgroundColor: alpha(theme.palette.grey[800], 0.8)
27
- },
28
- invisible: {
29
- background: 'transparent'
30
- }
31
- }
32
- }
33
- };
34
- }
18
+ export { default as RepeatGroup } from './RepeatGroup';
@@ -40,7 +40,7 @@ function RepeatItem(props: RepeatItemProps) {
40
40
  // Get additional rendering extensions
41
41
  const { displayInstructions } = useRenderingExtensions(qItem);
42
42
 
43
- const initialRepeatAnswers = useInitialiseRepeatAnswers(qrItem);
43
+ const initialRepeatAnswers = useInitialiseRepeatAnswers(qItem, qrItem);
44
44
 
45
45
  const [repeatAnswers, setRepeatAnswers] = useState(initialRepeatAnswers);
46
46
 
@@ -20,7 +20,8 @@ import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
20
20
  import type {
21
21
  PropsWithIsRepeatedAttribute,
22
22
  PropsWithIsTabledAttribute,
23
- PropsWithQrItemChangeHandler
23
+ PropsWithQrItemChangeHandler,
24
+ PropsWithTextShownAttribute
24
25
  } from '../../../interfaces/renderProps.interface';
25
26
  import useQuestionnaireStore from '../../../stores/useQuestionnaireStore';
26
27
  import SingleItemSwitcher from './SingleItemSwitcher';
@@ -29,13 +30,14 @@ import useHidden from '../../../hooks/useHidden';
29
30
  interface SingleItemProps
30
31
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
31
32
  PropsWithIsRepeatedAttribute,
32
- PropsWithIsTabledAttribute {
33
+ PropsWithIsTabledAttribute,
34
+ PropsWithTextShownAttribute {
33
35
  qItem: QuestionnaireItem;
34
36
  qrItem: QuestionnaireResponseItem;
35
37
  }
36
38
 
37
39
  function SingleItem(props: SingleItemProps) {
38
- const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
40
+ const { qItem, qrItem, isRepeated, isTabled, textShown, onQrItemChange } = props;
39
41
 
40
42
  const updateEnableWhenItem = useQuestionnaireStore((state) => state.updateEnableWhenItem);
41
43
 
@@ -60,6 +62,7 @@ function SingleItem(props: SingleItemProps) {
60
62
  qrItem={qrItem}
61
63
  isRepeated={isRepeated}
62
64
  isTabled={isTabled}
65
+ textShown={textShown}
63
66
  onQrItemChange={handleQrItemChange}
64
67
  />
65
68
  );
@@ -23,7 +23,8 @@ import Typography from '@mui/material/Typography';
23
23
  import type {
24
24
  PropsWithIsRepeatedAttribute,
25
25
  PropsWithIsTabledAttribute,
26
- PropsWithQrItemChangeHandler
26
+ PropsWithQrItemChangeHandler,
27
+ PropsWithTextShownAttribute
27
28
  } from '../../../interfaces/renderProps.interface';
28
29
  import StringItem from '../StringItem/StringItem';
29
30
  import BooleanItem from '../BooleanItem/BooleanItem';
@@ -39,13 +40,14 @@ import UrlItem from '../UrlItem/UrlItem';
39
40
  interface SingleItemSwitcherProps
40
41
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
41
42
  PropsWithIsRepeatedAttribute,
42
- PropsWithIsTabledAttribute {
43
+ PropsWithIsTabledAttribute,
44
+ PropsWithTextShownAttribute {
43
45
  qItem: QuestionnaireItem;
44
46
  qrItem: QuestionnaireResponseItem;
45
47
  }
46
48
 
47
49
  function SingleItemSwitcher(props: SingleItemSwitcherProps) {
48
- const { qItem, qrItem, isRepeated, isTabled, onQrItemChange } = props;
50
+ const { qItem, qrItem, isRepeated, isTabled, textShown, onQrItemChange } = props;
49
51
 
50
52
  switch (qItem.type) {
51
53
  case 'string':
@@ -136,6 +138,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
136
138
  qrItem={qrItem}
137
139
  isRepeated={isRepeated}
138
140
  isTabled={isTabled}
141
+ textShown={textShown}
139
142
  onQrItemChange={onQrItemChange}
140
143
  />
141
144
  );
@@ -146,6 +149,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
146
149
  qrItem={qrItem}
147
150
  isRepeated={isRepeated}
148
151
  isTabled={isTabled}
152
+ textShown={textShown}
149
153
  onQrItemChange={onQrItemChange}
150
154
  />
151
155
  );
@@ -0,0 +1,18 @@
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
+ export { default as SingleItem } from './SingleItem';