@aehrc/smart-forms-renderer 0.7.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (347) hide show
  1. package/README.md +1 -1
  2. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js +1 -2
  3. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js.map +1 -1
  4. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.d.ts +12 -0
  5. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.js +39 -0
  6. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.js.map +1 -0
  7. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.d.ts +3 -3
  8. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +14 -27
  9. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
  10. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.d.ts +13 -0
  11. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.js +42 -0
  12. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.js.map +1 -0
  13. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.d.ts +4 -3
  14. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +14 -22
  15. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
  16. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.d.ts +2 -2
  17. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js +3 -3
  18. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js.map +1 -1
  19. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.d.ts +12 -0
  20. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js +27 -0
  21. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js.map +1 -0
  22. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.d.ts +1 -1
  23. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +9 -24
  24. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js.map +1 -1
  25. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.d.ts +14 -0
  26. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js +42 -0
  27. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js.map +1 -0
  28. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.d.ts +1 -1
  29. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +8 -21
  30. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
  31. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.d.ts +10 -0
  32. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js +41 -0
  33. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js.map +1 -0
  34. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +7 -23
  35. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
  36. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.d.ts +12 -0
  37. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js +42 -0
  38. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js.map +1 -0
  39. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js +8 -18
  40. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js.map +1 -1
  41. package/lib/components/FormComponents/DecimalItem/DecimalItem.js +3 -2
  42. package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
  43. package/lib/components/FormComponents/GridGroup/GridGroup.js +2 -2
  44. package/lib/components/FormComponents/GridGroup/GridGroup.js.map +1 -1
  45. package/lib/components/FormComponents/GridGroup/GridRow.js +2 -2
  46. package/lib/components/FormComponents/GridGroup/GridRow.js.map +1 -1
  47. package/lib/components/FormComponents/GroupItem/GroupChildItemSwitcher.d.ts +10 -0
  48. package/lib/components/FormComponents/GroupItem/GroupChildItemSwitcher.js +73 -0
  49. package/lib/components/FormComponents/GroupItem/GroupChildItemSwitcher.js.map +1 -0
  50. package/lib/components/FormComponents/GroupItem/GroupItem.js +3 -3
  51. package/lib/components/FormComponents/GroupItem/GroupItem.js.map +1 -1
  52. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +4 -4
  53. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -1
  54. package/lib/components/FormComponents/GroupItem/ItemSwitcher.d.ts +10 -0
  55. package/lib/components/FormComponents/GroupItem/ItemSwitcher.js +81 -0
  56. package/lib/components/FormComponents/GroupItem/ItemSwitcher.js.map +1 -0
  57. package/lib/components/FormComponents/GroupItem/TopLevelGroupItemSwitcher.d.ts +10 -0
  58. package/lib/components/FormComponents/GroupItem/TopLevelGroupItemSwitcher.js +45 -0
  59. package/lib/components/FormComponents/GroupItem/TopLevelGroupItemSwitcher.js.map +1 -0
  60. package/lib/components/FormComponents/IntegerItem/IntegerItem.js +3 -2
  61. package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
  62. package/lib/components/FormComponents/Item.styles.d.ts +2 -2
  63. package/lib/components/FormComponents/Item.styles.js +2 -2
  64. package/lib/components/FormComponents/Item.styles.js.map +1 -1
  65. package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.d.ts +8 -0
  66. package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.js +37 -0
  67. package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.js.map +1 -0
  68. package/lib/components/FormComponents/ItemParts/RadioButtons.d.ts +8 -0
  69. package/lib/components/FormComponents/ItemParts/RadioButtons.js +37 -0
  70. package/lib/components/FormComponents/ItemParts/RadioButtons.js.map +1 -0
  71. package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.d.ts +8 -0
  72. package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.js +37 -0
  73. package/lib/components/FormComponents/ItemParts/RadioButtonsAnswerOption.js.map +1 -0
  74. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.d.ts +20 -0
  75. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js +49 -0
  76. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js.map +1 -0
  77. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.d.ts +0 -0
  78. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.js +2 -0
  79. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteFieldEndAdornment.js.map +1 -0
  80. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js +11 -35
  81. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js.map +1 -1
  82. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.d.ts +17 -0
  83. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.js +42 -0
  84. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.js.map +1 -0
  85. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.d.ts +3 -3
  86. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js +23 -36
  87. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js.map +1 -1
  88. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.d.ts +2 -2
  89. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js +3 -3
  90. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js.map +1 -1
  91. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.d.ts +15 -0
  92. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.js +29 -0
  93. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.js.map +1 -0
  94. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.d.ts +1 -1
  95. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js +3 -23
  96. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js.map +1 -1
  97. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.d.ts +11 -0
  98. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js +14 -0
  99. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js.map +1 -0
  100. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.d.ts +0 -0
  101. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.js +2 -0
  102. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionFields.js.map +1 -0
  103. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js +18 -23
  104. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js.map +1 -1
  105. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.d.ts +12 -0
  106. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js +16 -0
  107. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js.map +1 -0
  108. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js +8 -14
  109. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js.map +1 -1
  110. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js +4 -3
  111. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js.map +1 -1
  112. package/lib/components/FormComponents/RepeatGroup/index.d.ts +1 -0
  113. package/lib/components/FormComponents/RepeatGroup/index.js +18 -0
  114. package/lib/components/FormComponents/RepeatGroup/index.js.map +1 -0
  115. package/lib/components/FormComponents/RepeatItem/RepeatItem.js +1 -1
  116. package/lib/components/FormComponents/RepeatItem/RepeatItem.js.map +1 -1
  117. package/lib/components/FormComponents/SingleItem/SingleItem.d.ts +2 -2
  118. package/lib/components/FormComponents/SingleItem/SingleItem.js +2 -2
  119. package/lib/components/FormComponents/SingleItem/SingleItem.js.map +1 -1
  120. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.d.ts +2 -2
  121. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js +3 -3
  122. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -1
  123. package/lib/components/FormComponents/SingleItem/index.d.ts +1 -0
  124. package/lib/components/FormComponents/SingleItem/index.js +18 -0
  125. package/lib/components/FormComponents/SingleItem/index.js.map +1 -0
  126. package/lib/components/FormComponents/StringItem/StringItem.js +3 -2
  127. package/lib/components/FormComponents/StringItem/StringItem.js.map +1 -1
  128. package/lib/components/FormComponents/Tables/AddItemButton.d.ts +8 -0
  129. package/lib/components/FormComponents/Tables/AddItemButton.js +28 -0
  130. package/lib/components/FormComponents/Tables/AddItemButton.js.map +1 -0
  131. package/lib/components/FormComponents/Tables/AddRowButton.d.ts +8 -0
  132. package/lib/components/FormComponents/Tables/AddRowButton.js +28 -0
  133. package/lib/components/FormComponents/Tables/AddRowButton.js.map +1 -0
  134. package/lib/components/FormComponents/Tables/GroupTable.d.ts +10 -0
  135. package/lib/components/FormComponents/Tables/GroupTable.js +108 -0
  136. package/lib/components/FormComponents/Tables/GroupTable.js.map +1 -0
  137. package/lib/components/FormComponents/Tables/GroupTableRow.d.ts +10 -0
  138. package/lib/components/FormComponents/Tables/GroupTableRow.js +46 -0
  139. package/lib/components/FormComponents/Tables/GroupTableRow.js.map +1 -0
  140. package/lib/components/FormComponents/Tables/QItemGroupTable.js +7 -5
  141. package/lib/components/FormComponents/Tables/QItemGroupTable.js.map +1 -1
  142. package/lib/components/FormComponents/Tables/QItemGroupTableRow.js +2 -2
  143. package/lib/components/FormComponents/Tables/QItemGroupTableRow.js.map +1 -1
  144. package/lib/components/FormComponents/Tables/index.d.ts +1 -0
  145. package/lib/components/FormComponents/Tables/index.js +18 -0
  146. package/lib/components/FormComponents/Tables/index.js.map +1 -0
  147. package/lib/components/FormComponents/TextItem/TextItem.js +3 -2
  148. package/lib/components/FormComponents/TextItem/TextItem.js.map +1 -1
  149. package/lib/components/FormComponents/index.d.ts +3 -0
  150. package/lib/components/FormComponents/index.js +20 -0
  151. package/lib/components/FormComponents/index.js.map +1 -0
  152. package/lib/components/Renderer/BaseRenderer.js +26 -14
  153. package/lib/components/Renderer/BaseRenderer.js.map +1 -1
  154. package/lib/components/Renderer/FormBodyCollapsible.js +2 -2
  155. package/lib/components/Renderer/FormBodyCollapsible.js.map +1 -1
  156. package/lib/components/Renderer/FormBodyTabbed.js +3 -3
  157. package/lib/components/Renderer/FormBodyTabbed.js.map +1 -1
  158. package/lib/components/Renderer/FormTopLevelItem.d.ts +4 -4
  159. package/lib/components/Renderer/FormTopLevelItem.js +14 -1
  160. package/lib/components/Renderer/FormTopLevelItem.js.map +1 -1
  161. package/lib/components/Tabs/FormBodySingleTab.js +1 -1
  162. package/lib/components/Tabs/FormBodySingleTab.js.map +1 -1
  163. package/lib/components/Tabs/FormBodyTabList.d.ts +1 -0
  164. package/lib/components/Tabs/FormBodyTabList.js +3 -4
  165. package/lib/components/Tabs/FormBodyTabList.js.map +1 -1
  166. package/lib/components/Tabs/FormBodyTabListWrapper.d.ts +1 -1
  167. package/lib/components/Tabs/FormBodyTabListWrapper.js +6 -13
  168. package/lib/components/Tabs/FormBodyTabListWrapper.js.map +1 -1
  169. package/lib/components/Tabs/ShowCompletedTabsSection.d.ts +7 -0
  170. package/lib/components/Tabs/ShowCompletedTabsSection.js +34 -0
  171. package/lib/components/Tabs/ShowCompletedTabsSection.js.map +1 -0
  172. package/lib/components/index.d.ts +1 -0
  173. package/lib/components/index.js +1 -0
  174. package/lib/components/index.js.map +1 -1
  175. package/lib/hooks/index.d.ts +1 -0
  176. package/lib/hooks/index.js +2 -0
  177. package/lib/hooks/index.js.map +1 -0
  178. package/lib/hooks/useContextDisplayItems.d.ts +6 -0
  179. package/lib/hooks/useContextDisplayItems.js +30 -0
  180. package/lib/hooks/useContextDisplayItems.js.map +1 -0
  181. package/lib/hooks/useDecimalUpdateFromProp.d.ts +2 -0
  182. package/lib/hooks/useDecimalUpdateFromProp.js +29 -0
  183. package/lib/hooks/useDecimalUpdateFromProp.js.map +1 -0
  184. package/lib/hooks/useInitialiseRenderer.js +2 -2
  185. package/lib/hooks/useInitialiseRenderer.js.map +1 -1
  186. package/lib/hooks/useInitialiseRepeatAnswers.d.ts +2 -2
  187. package/lib/hooks/useInitialiseRepeatAnswers.js +21 -15
  188. package/lib/hooks/useInitialiseRepeatAnswers.js.map +1 -1
  189. package/lib/hooks/useInitialiseRepeatGroups.d.ts +2 -1
  190. package/lib/hooks/useInitialiseRepeatGroups.js +21 -15
  191. package/lib/hooks/useInitialiseRepeatGroups.js.map +1 -1
  192. package/lib/hooks/useIntegerUpdateFromProp.d.ts +2 -0
  193. package/lib/hooks/useIntegerUpdateFromProp.js +29 -0
  194. package/lib/hooks/useIntegerUpdateFromProp.js.map +1 -0
  195. package/lib/hooks/useNumberInput.d.ts +3 -0
  196. package/lib/hooks/useNumberInput.js +31 -0
  197. package/lib/hooks/useNumberInput.js.map +1 -0
  198. package/lib/hooks/useNumberUpdateFromProp.d.ts +2 -0
  199. package/lib/hooks/useNumberUpdateFromProp.js +29 -0
  200. package/lib/hooks/useNumberUpdateFromProp.js.map +1 -0
  201. package/lib/hooks/useRepeatItemState.d.ts +5 -0
  202. package/lib/hooks/useRepeatItemState.js +35 -0
  203. package/lib/hooks/useRepeatItemState.js.map +1 -0
  204. package/lib/hooks/useRepeatItemUpdateFromProp.d.ts +2 -0
  205. package/lib/hooks/useRepeatItemUpdateFromProp.js +29 -0
  206. package/lib/hooks/useRepeatItemUpdateFromProp.js.map +1 -0
  207. package/lib/hooks/useStringField.d.ts +2 -0
  208. package/lib/hooks/useStringField.js +29 -0
  209. package/lib/hooks/useStringField.js.map +1 -0
  210. package/lib/hooks/useStringInput.d.ts +3 -0
  211. package/lib/hooks/useStringInput.js +31 -0
  212. package/lib/hooks/useStringInput.js.map +1 -0
  213. package/lib/hooks/useStringUpdateFromProp.d.ts +2 -0
  214. package/lib/hooks/useStringUpdateFromProp.js +29 -0
  215. package/lib/hooks/useStringUpdateFromProp.js.map +1 -0
  216. package/lib/hooks/useTerminologyServerQuery.js +3 -6
  217. package/lib/hooks/useTerminologyServerQuery.js.map +1 -1
  218. package/lib/index.d.ts +16 -0
  219. package/lib/index.js +29 -2
  220. package/lib/index.js.map +1 -1
  221. package/lib/interfaces/questionnaireStore.interface.d.ts +1 -0
  222. package/lib/interfaces/renderProps.interface.d.ts +3 -0
  223. package/lib/stores/useQuestionnaireResponseStore.d.ts +2 -1
  224. package/lib/stores/useQuestionnaireResponseStore.js +17 -10
  225. package/lib/stores/useQuestionnaireResponseStore.js.map +1 -1
  226. package/lib/stores/useQuestionnaireStore.d.ts +2 -1
  227. package/lib/stores/useQuestionnaireStore.js +5 -2
  228. package/lib/stores/useQuestionnaireStore.js.map +1 -1
  229. package/lib/theme/overrides/Overrides.js +1 -2
  230. package/lib/theme/overrides/Overrides.js.map +1 -1
  231. package/lib/utils/calculatedExpression.js +2 -2
  232. package/lib/utils/calculatedExpression.js.map +1 -1
  233. package/lib/utils/formChanges.d.ts +18 -0
  234. package/lib/utils/formChanges.js +91 -0
  235. package/lib/utils/formChanges.js.map +1 -0
  236. package/lib/utils/formChangesOld.d.ts +18 -0
  237. package/lib/utils/formChangesOld.js +91 -0
  238. package/lib/utils/formChangesOld.js.map +1 -0
  239. package/lib/utils/index.d.ts +1 -0
  240. package/lib/utils/index.js +18 -0
  241. package/lib/utils/index.js.map +1 -0
  242. package/lib/utils/mapItem.d.ts +2 -2
  243. package/lib/utils/mapItem.js +3 -3
  244. package/lib/utils/mapItem.js.map +1 -1
  245. package/lib/utils/qItem.d.ts +2 -0
  246. package/lib/utils/qItem.js +22 -0
  247. package/lib/utils/qItem.js.map +1 -1
  248. package/lib/utils/qrItem.d.ts +3 -4
  249. package/lib/utils/qrItem.js +94 -96
  250. package/lib/utils/qrItem.js.map +1 -1
  251. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +4 -0
  252. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -1
  253. package/lib/utils/repopulate.d.ts +9 -0
  254. package/lib/utils/repopulate.js +133 -0
  255. package/lib/utils/repopulate.js.map +1 -0
  256. package/lib/utils/repopulateGenerateItems.d.ts +9 -0
  257. package/lib/utils/repopulateGenerateItems.js +133 -0
  258. package/lib/utils/repopulateGenerateItems.js.map +1 -0
  259. package/lib/utils/repopulateIntoResponse.d.ts +3 -0
  260. package/lib/utils/repopulateIntoResponse.js +92 -0
  261. package/lib/utils/repopulateIntoResponse.js.map +1 -0
  262. package/lib/utils/repopulateItems.d.ts +9 -0
  263. package/lib/utils/repopulateItems.js +130 -0
  264. package/lib/utils/repopulateItems.js.map +1 -0
  265. package/lib/utils/repopulateRepeatGroup.d.ts +4 -0
  266. package/lib/utils/repopulateRepeatGroup.js +54 -0
  267. package/lib/utils/repopulateRepeatGroup.js.map +1 -0
  268. package/package.json +7 -5
  269. package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +1 -2
  270. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.tsx +85 -0
  271. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +35 -58
  272. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.tsx +79 -0
  273. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +37 -50
  274. package/src/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.tsx +10 -5
  275. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.tsx +48 -0
  276. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +25 -53
  277. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.tsx +83 -0
  278. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +27 -49
  279. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +81 -0
  280. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +19 -54
  281. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.tsx +97 -0
  282. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +22 -60
  283. package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +3 -2
  284. package/src/components/FormComponents/GridGroup/GridGroup.tsx +2 -2
  285. package/src/components/FormComponents/GridGroup/GridRow.tsx +2 -2
  286. package/src/components/FormComponents/GroupItem/GroupItem.tsx +3 -3
  287. package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +4 -4
  288. package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +3 -2
  289. package/src/components/FormComponents/Item.styles.ts +2 -2
  290. package/src/components/FormComponents/ItemParts/RadioAnswerOptionButtons.tsx +72 -0
  291. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.tsx +131 -0
  292. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +38 -93
  293. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.tsx +112 -0
  294. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +57 -76
  295. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.tsx +8 -5
  296. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.tsx +72 -0
  297. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +12 -59
  298. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx +54 -0
  299. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +40 -64
  300. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.tsx +63 -0
  301. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +22 -50
  302. package/src/components/FormComponents/RepeatGroup/RepeatGroup.tsx +4 -3
  303. package/src/{theme/overrides/Backdrop.ts → components/FormComponents/RepeatGroup/index.ts} +1 -17
  304. package/src/components/FormComponents/RepeatItem/RepeatItem.tsx +1 -1
  305. package/src/components/FormComponents/SingleItem/SingleItem.tsx +6 -3
  306. package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +7 -3
  307. package/src/components/FormComponents/SingleItem/index.ts +18 -0
  308. package/src/components/FormComponents/StringItem/StringItem.tsx +3 -2
  309. package/src/components/FormComponents/Tables/AddRowButton.tsx +49 -0
  310. package/src/components/FormComponents/Tables/{QItemGroupTable.tsx → GroupTable.tsx} +21 -23
  311. package/src/components/FormComponents/Tables/{QItemGroupTableRow.tsx → GroupTableRow.tsx} +4 -4
  312. package/src/components/FormComponents/Tables/index.ts +18 -0
  313. package/src/components/FormComponents/TextItem/TextItem.tsx +3 -2
  314. package/src/components/FormComponents/index.ts +20 -0
  315. package/src/components/Renderer/BaseRenderer.tsx +39 -18
  316. package/src/components/Renderer/FormBodyCollapsible.tsx +2 -2
  317. package/src/components/Renderer/FormBodyTabbed.tsx +3 -3
  318. package/src/components/Renderer/FormTopLevelItem.tsx +33 -4
  319. package/src/components/Tabs/FormBodySingleTab.tsx +1 -1
  320. package/src/components/Tabs/FormBodyTabList.tsx +5 -8
  321. package/src/components/Tabs/FormBodyTabListWrapper.tsx +15 -26
  322. package/src/components/Tabs/ShowCompletedTabsSection.tsx +52 -0
  323. package/src/components/index.ts +1 -0
  324. package/src/hooks/index.ts +1 -0
  325. package/src/hooks/useContextDisplayItems.ts +40 -0
  326. package/src/hooks/useInitialiseRenderer.ts +2 -2
  327. package/src/hooks/useInitialiseRepeatAnswers.ts +28 -17
  328. package/src/hooks/useInitialiseRepeatGroups.ts +28 -17
  329. package/src/hooks/useNumberInput.ts +38 -0
  330. package/src/hooks/useStringInput.ts +38 -0
  331. package/src/hooks/useTerminologyServerQuery.ts +3 -6
  332. package/src/index.ts +45 -2
  333. package/src/interfaces/questionnaireStore.interface.ts +1 -0
  334. package/src/interfaces/renderProps.interface.ts +4 -0
  335. package/src/stores/useQuestionnaireResponseStore.ts +15 -10
  336. package/src/stores/useQuestionnaireStore.ts +10 -3
  337. package/src/theme/overrides/Overrides.ts +0 -2
  338. package/src/utils/calculatedExpression.ts +2 -2
  339. package/src/utils/formChanges.ts +141 -0
  340. package/src/utils/index.ts +18 -0
  341. package/src/utils/mapItem.ts +6 -4
  342. package/src/utils/qItem.ts +29 -0
  343. package/src/utils/qrItem.ts +108 -97
  344. package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +4 -0
  345. package/src/utils/repopulateIntoResponse.ts +153 -0
  346. package/src/utils/repopulateItems.ts +206 -0
  347. package/src/utils/repopulateRepeatGroup.ts +68 -0
@@ -15,27 +15,22 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import type { SyntheticEvent } from 'react';
19
18
  import React, { useEffect, useMemo } from 'react';
20
- import Autocomplete from '@mui/material/Autocomplete';
21
19
  import Grid from '@mui/material/Grid';
22
- import Typography from '@mui/material/Typography';
23
20
 
24
21
  import type { Coding, QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
25
22
  import { createEmptyQrItem } from '../../../utils/qrItem';
26
- import { StandardTextField } from '../Textfield.styles';
27
23
  import { FullWidthFormComponentBox } from '../../Box.styles';
28
24
  import useValueSetCodings from '../../../hooks/useValueSetCodings';
29
25
  import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
30
- import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';
31
26
  import type {
32
27
  PropsWithIsRepeatedAttribute,
33
28
  PropsWithIsTabledAttribute,
34
29
  PropsWithQrItemChangeHandler
35
30
  } from '../../../interfaces/renderProps.interface';
36
- import { StyledAlert } from '../../Alert.styles';
37
31
  import DisplayInstructions from '../DisplayItem/DisplayInstructions';
38
32
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
33
+ import ChoiceSelectAnswerValueSetFields from './ChoiceSelectAnswerValueSetFields';
39
34
 
40
35
  interface ChoiceSelectAnswerValueSetItemProps
41
36
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
@@ -50,14 +45,13 @@ function ChoiceSelectAnswerValueSetItem(props: ChoiceSelectAnswerValueSetItemPro
50
45
 
51
46
  // Init input value
52
47
  const qrChoiceSelect = qrItem ?? createEmptyQrItem(qItem);
53
- let valueCoding: Coding | undefined;
48
+ let valueCoding: Coding | null = null;
54
49
  if (qrChoiceSelect.answer) {
55
- valueCoding = qrChoiceSelect.answer[0].valueCoding;
50
+ valueCoding = qrChoiceSelect.answer[0].valueCoding ?? null;
56
51
  }
57
52
 
58
53
  // Get additional rendering extensions
59
- const { displayUnit, displayPrompt, displayInstructions, readOnly, entryFormat } =
60
- useRenderingExtensions(qItem);
54
+ const { displayInstructions } = useRenderingExtensions(qItem);
61
55
 
62
56
  // Get codings/options from valueSet
63
57
  const { codings, serverError } = useValueSetCodings(qItem);
@@ -84,7 +78,7 @@ function ChoiceSelectAnswerValueSetItem(props: ChoiceSelectAnswerValueSetItemPro
84
78
  );
85
79
 
86
80
  // Event handlers
87
- function handleChange(_: SyntheticEvent<Element, Event>, newValue: Coding | null) {
81
+ function handleChange(newValue: Coding | null) {
88
82
  if (newValue) {
89
83
  onQrItemChange({
90
84
  ...createEmptyQrItem(qItem),
@@ -95,56 +89,17 @@ function ChoiceSelectAnswerValueSetItem(props: ChoiceSelectAnswerValueSetItemPro
95
89
  onQrItemChange(createEmptyQrItem(qItem));
96
90
  }
97
91
 
98
- const choiceSelectAnswerValueSet =
99
- codings.length > 0 ? (
100
- <Autocomplete
101
- id={qItem.id}
102
- options={codings}
103
- getOptionLabel={(option) => `${option.display}`}
104
- value={valueCoding ?? null}
105
- onChange={handleChange}
106
- openOnFocus
107
- autoHighlight
108
- sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 160, flexGrow: 1 }}
109
- size="small"
110
- disabled={readOnly}
111
- placeholder={entryFormat}
112
- renderInput={(params) => (
113
- <StandardTextField
114
- isTabled={isTabled}
115
- label={displayPrompt}
116
- {...params}
117
- InputProps={{
118
- ...params.InputProps,
119
- endAdornment: (
120
- <>
121
- {params.InputProps.endAdornment}
122
- {displayUnit}
123
- </>
124
- )
125
- }}
126
- data-test="q-item-choice-dropdown-answer-value-set-field"
127
- />
128
- )}
92
+ if (isRepeated) {
93
+ return (
94
+ <ChoiceSelectAnswerValueSetFields
95
+ qItem={qItem}
96
+ codings={codings}
97
+ valueCoding={valueCoding}
98
+ serverError={serverError}
99
+ isTabled={isTabled}
100
+ onSelectChange={handleChange}
129
101
  />
130
- ) : serverError ? (
131
- <StyledAlert color="error">
132
- <ErrorOutlineIcon color="error" sx={{ pr: 0.75 }} />
133
- <Typography variant="subtitle2">
134
- There was an error fetching options from the terminology server
135
- </Typography>
136
- </StyledAlert>
137
- ) : (
138
- <StyledAlert color="error">
139
- <ErrorOutlineIcon color="error" sx={{ pr: 0.75 }} />
140
- <Typography variant="subtitle2">
141
- Unable to fetch options from the questionnaire or launch context
142
- </Typography>
143
- </StyledAlert>
144
102
  );
145
-
146
- if (isRepeated) {
147
- return <>{choiceSelectAnswerValueSet}</>;
148
103
  }
149
104
 
150
105
  return (
@@ -154,7 +109,14 @@ function ChoiceSelectAnswerValueSetItem(props: ChoiceSelectAnswerValueSetItemPro
154
109
  <LabelWrapper qItem={qItem} />
155
110
  </Grid>
156
111
  <Grid item xs={7}>
157
- {choiceSelectAnswerValueSet}
112
+ <ChoiceSelectAnswerValueSetFields
113
+ qItem={qItem}
114
+ codings={codings}
115
+ valueCoding={valueCoding}
116
+ serverError={serverError}
117
+ isTabled={isTabled}
118
+ onSelectChange={handleChange}
119
+ />
158
120
  <DisplayInstructions displayInstructions={displayInstructions} />
159
121
  </Grid>
160
122
  </Grid>
@@ -15,7 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import React, { useCallback, useState } from 'react';
18
+ import React, { useCallback } from 'react';
19
19
  import type {
20
20
  PropsWithIsRepeatedAttribute,
21
21
  PropsWithIsTabledAttribute,
@@ -36,6 +36,7 @@ import {
36
36
  } from '../../../utils/parseInputs';
37
37
  import { getDecimalPrecision } from '../../../utils/itemControl';
38
38
  import useDecimalCalculatedExpression from '../../../hooks/useDecimalCalculatedExpression';
39
+ import useStringInput from '../../../hooks/useStringInput';
39
40
 
40
41
  interface DecimalItemProps
41
42
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
@@ -74,7 +75,7 @@ function DecimalItem(props: DecimalItemProps) {
74
75
 
75
76
  initialInput = precision ? valueDecimal.toFixed(precision) : valueDecimal.toString();
76
77
  }
77
- const [input, setInput] = useState(initialInput);
78
+ const [input, setInput] = useStringInput(initialInput);
78
79
 
79
80
  // Perform validation checks
80
81
  const feedback = useValidationError(input, regexValidation, maxLength);
@@ -18,7 +18,7 @@
18
18
  import React, { useMemo } from 'react';
19
19
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
20
20
  import type { PropsWithQrItemChangeHandler } from '../../../interfaces/renderProps.interface';
21
- import { createQrGroup, updateQrGroup } from '../../../utils/qrItem';
21
+ import { createQrGroup, updateQrItemsInGroup } from '../../../utils/qrItem';
22
22
  import useHidden from '../../../hooks/useHidden';
23
23
  import { QGroupContainerBox } from '../../Box.styles';
24
24
  import Divider from '@mui/material/Divider';
@@ -66,7 +66,7 @@ function GridGroup(props: GridGroupProps) {
66
66
  // Event Handlers
67
67
  function handleRowChange(newQrItem: QuestionnaireResponseItem) {
68
68
  const updatedQrGroup: QuestionnaireResponseItem = { ...qrGroup };
69
- updateQrGroup(newQrItem, null, updatedQrGroup, qItemsIndexMap);
69
+ updateQrItemsInGroup(newQrItem, null, updatedQrGroup, qItemsIndexMap);
70
70
  onQrItemChange(updatedQrGroup);
71
71
  }
72
72
 
@@ -18,7 +18,7 @@
18
18
  import React, { useMemo } from 'react';
19
19
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
20
20
  import type { PropsWithQrItemChangeHandler } from '../../../interfaces/renderProps.interface';
21
- import { createQrGroup, updateQrGroup } from '../../../utils/qrItem';
21
+ import { createQrGroup, updateQrItemsInGroup } from '../../../utils/qrItem';
22
22
  import { GridAnswerTableCell, GridTextTableCell } from '../Tables/Table.styles';
23
23
  import SingleItem from '../SingleItem/SingleItem';
24
24
  import { getQrItemsIndex, mapQItemsIndex } from '../../../utils/mapItem';
@@ -52,7 +52,7 @@ function GridRow(props: GridRowProps) {
52
52
 
53
53
  function handleQrRowItemChange(newQrRowItem: QuestionnaireResponseItem) {
54
54
  const qrRow: QuestionnaireResponseItem = { ...row };
55
- updateQrGroup(newQrRowItem, null, qrRow, qItemsIndexMap);
55
+ updateQrItemsInGroup(newQrRowItem, null, qrRow, qItemsIndexMap);
56
56
  onQrItemChange(qrRow);
57
57
  }
58
58
 
@@ -18,7 +18,7 @@
18
18
  import React, { useMemo } from 'react';
19
19
  import { getQrItemsIndex, mapQItemsIndex } from '../../../utils/mapItem';
20
20
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
21
- import { createQrGroup, updateQrGroup } from '../../../utils/qrItem';
21
+ import { createQrGroup, updateQrItemsInGroup } from '../../../utils/qrItem';
22
22
  import { QGroupContainerBox } from '../../Box.styles';
23
23
  import type {
24
24
  PropsWithIsRepeatedAttribute,
@@ -70,13 +70,13 @@ function GroupItem(props: GroupItemProps) {
70
70
  // Event Handlers
71
71
  function handleQrItemChange(newQrItem: QuestionnaireResponseItem) {
72
72
  const updatedQrGroup: QuestionnaireResponseItem = { ...qrGroup };
73
- updateQrGroup(newQrItem, null, updatedQrGroup, qItemsIndexMap);
73
+ updateQrItemsInGroup(newQrItem, null, updatedQrGroup, qItemsIndexMap);
74
74
  onQrItemChange(updatedQrGroup);
75
75
  }
76
76
 
77
77
  function handleQrRepeatGroupChange(qrRepeatGroup: QrRepeatGroup) {
78
78
  const updatedQrGroup: QuestionnaireResponseItem = { ...qrGroup };
79
- updateQrGroup(null, qrRepeatGroup, updatedQrGroup, qItemsIndexMap);
79
+ updateQrItemsInGroup(null, qrRepeatGroup, updatedQrGroup, qItemsIndexMap);
80
80
  onQrItemChange(updatedQrGroup);
81
81
  }
82
82
 
@@ -21,8 +21,8 @@ import type {
21
21
  PropsWithQrRepeatGroupChangeHandler
22
22
  } from '../../../interfaces/renderProps.interface';
23
23
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
24
- import { isSpecificItemControl } from '../../../utils/itemControl';
25
- import QItemGroupTable from '../Tables/QItemGroupTable';
24
+ import { isSpecificItemControl } from '../../../utils';
25
+ import GroupTable from '../Tables/GroupTable';
26
26
  import RepeatGroup from '../RepeatGroup/RepeatGroup';
27
27
  import { isRepeatItemAndNotCheckbox } from '../../../utils/qItem';
28
28
  import RepeatItem from '../RepeatItem/RepeatItem';
@@ -60,7 +60,7 @@ function GroupItemSwitcher(props: GroupItemSwitcherProps) {
60
60
 
61
61
  if (isSpecificItemControl(qItem, 'gtable')) {
62
62
  return (
63
- <QItemGroupTable
63
+ <GroupTable
64
64
  qItem={qItem}
65
65
  qrItems={qrItems}
66
66
  groupCardElevation={groupCardElevation + 1}
@@ -100,7 +100,7 @@ function GroupItemSwitcher(props: GroupItemSwitcherProps) {
100
100
  // their qrItem array should always be empty
101
101
  if (isSpecificItemControl(qItem, 'gtable')) {
102
102
  return (
103
- <QItemGroupTable
103
+ <GroupTable
104
104
  qItem={qItem}
105
105
  qrItems={[]}
106
106
  groupCardElevation={groupCardElevation + 1}
@@ -15,7 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import React, { useCallback, useState } from 'react';
18
+ import React, { useCallback } from 'react';
19
19
  import type {
20
20
  PropsWithIsRepeatedAttribute,
21
21
  PropsWithIsTabledAttribute,
@@ -32,6 +32,7 @@ import IntegerField from './IntegerField';
32
32
  import useIntegerCalculatedExpression from '../../../hooks/useIntegerCalculatedExpression';
33
33
  import { parseValidInteger } from '../../../utils/parseInputs';
34
34
  import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
35
+ import useNumberInput from '../../../hooks/useNumberInput';
35
36
 
36
37
  interface IntegerItemProps
37
38
  extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
@@ -65,7 +66,7 @@ function IntegerItem(props: IntegerItemProps) {
65
66
  valueInteger = Math.round(qrItem.answer[0].valueDecimal);
66
67
  }
67
68
  }
68
- const [value, setValue] = useState(valueInteger);
69
+ const [value, setValue] = useNumberInput(valueInteger);
69
70
 
70
71
  // Perform validation checks
71
72
  const feedback = useValidationError(value.toString(), regexValidation, maxLength);
@@ -20,11 +20,11 @@ import RadioGroup from '@mui/material/RadioGroup';
20
20
  import Typography from '@mui/material/Typography';
21
21
  import { styled } from '@mui/material/styles';
22
22
 
23
- export const QFormGroup = styled(FormGroup)(() => ({
23
+ export const StyledFormGroup = styled(FormGroup)(() => ({
24
24
  marginBottom: 4
25
25
  }));
26
26
 
27
- export const QRadioGroup = styled(RadioGroup)(() => ({
27
+ export const StyledRadioGroup = styled(RadioGroup)(() => ({
28
28
  marginBottom: 4
29
29
  }));
30
30
 
@@ -0,0 +1,72 @@
1
+ /*
2
+ * Copyright 2023 Commonwealth Scientific and Industrial Research
3
+ * Organisation (CSIRO) ABN 41 687 119 230.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ import React from 'react';
19
+ import ChoiceRadioSingle from '../ChoiceItems/ChoiceRadioSingle';
20
+ import type { QuestionnaireItem } from 'fhir/r4';
21
+
22
+ interface RadioAnswerOptionButtonsProps {
23
+ qItem: QuestionnaireItem;
24
+ readOnly: boolean;
25
+ }
26
+
27
+ function RadioAnswerOptionButtons(props: RadioAnswerOptionButtonsProps) {
28
+ const { qItem, readOnly } = props;
29
+
30
+ return (
31
+ <>
32
+ {qItem.answerOption?.map((option) => {
33
+ if (option['valueCoding']) {
34
+ return (
35
+ <ChoiceRadioSingle
36
+ key={option.valueCoding.code ?? ''}
37
+ value={option.valueCoding.code ?? ''}
38
+ label={option.valueCoding.display ?? `${option.valueCoding.code}`}
39
+ readOnly={readOnly}
40
+ />
41
+ );
42
+ }
43
+
44
+ if (option['valueString']) {
45
+ return (
46
+ <ChoiceRadioSingle
47
+ key={option.valueString}
48
+ value={option.valueString}
49
+ label={option.valueString}
50
+ readOnly={readOnly}
51
+ />
52
+ );
53
+ }
54
+
55
+ if (option['valueInteger']) {
56
+ return (
57
+ <ChoiceRadioSingle
58
+ key={option.valueInteger}
59
+ value={option.valueInteger.toString()}
60
+ label={option.valueInteger.toString()}
61
+ readOnly={readOnly}
62
+ />
63
+ );
64
+ }
65
+
66
+ return null;
67
+ })}
68
+ </>
69
+ );
70
+ }
71
+
72
+ export default RadioAnswerOptionButtons;
@@ -0,0 +1,131 @@
1
+ /*
2
+ * Copyright 2023 Commonwealth Scientific and Industrial Research
3
+ * Organisation (CSIRO) ABN 41 687 119 230.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ import React from 'react';
19
+ import Box from '@mui/material/Box';
20
+ import Autocomplete from '@mui/material/Autocomplete';
21
+ import { StandardTextField } from '../Textfield.styles';
22
+ import SearchIcon from '@mui/icons-material/Search';
23
+ import CircularProgress from '@mui/material/CircularProgress';
24
+ import Fade from '@mui/material/Fade';
25
+ import Tooltip from '@mui/material/Tooltip';
26
+ import InfoIcon from '@mui/icons-material/Info';
27
+ import WarningAmberIcon from '@mui/icons-material/WarningAmber';
28
+ import DoneIcon from '@mui/icons-material/Done';
29
+ import ErrorIcon from '@mui/icons-material/Error';
30
+ import type { Coding, QuestionnaireItem } from 'fhir/r4';
31
+ import type { PropsWithIsTabledAttribute } from '../../../interfaces/renderProps.interface';
32
+ import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
33
+ import type { AlertColor } from '@mui/material/Alert';
34
+
35
+ interface OpenChoiceAutocompleteFieldProps extends PropsWithIsTabledAttribute {
36
+ qItem: QuestionnaireItem;
37
+ options: Coding[];
38
+ valueAutocomplete: string | Coding;
39
+ input: string;
40
+ loading: boolean;
41
+ feedback: { message: string; color: AlertColor } | null;
42
+ onInputChange: (newInput: string) => void;
43
+ onValueChange: (newValue: Coding | string | null) => void;
44
+ onUnfocus: () => void;
45
+ }
46
+
47
+ function OpenChoiceAutocompleteField(props: OpenChoiceAutocompleteFieldProps) {
48
+ const {
49
+ qItem,
50
+ options,
51
+ valueAutocomplete,
52
+ input,
53
+ loading,
54
+ feedback,
55
+ isTabled,
56
+ onInputChange,
57
+ onValueChange,
58
+ onUnfocus
59
+ } = props;
60
+
61
+ // Get additional rendering extensions
62
+ const { displayUnit, displayPrompt, readOnly, entryFormat } = useRenderingExtensions(qItem);
63
+
64
+ return (
65
+ <Box display="flex">
66
+ <Autocomplete
67
+ id={qItem.id}
68
+ value={valueAutocomplete}
69
+ options={options}
70
+ getOptionLabel={(option) => (typeof option === 'string' ? option : `${option.display}`)}
71
+ disabled={readOnly}
72
+ loading={loading}
73
+ loadingText={'Fetching results...'}
74
+ clearOnEscape
75
+ freeSolo
76
+ autoHighlight
77
+ sx={{ maxWidth: !isTabled ? 280 : 3000, minWidth: 220, flexGrow: 1 }}
78
+ placeholder={entryFormat}
79
+ onChange={(_, newValue) => onValueChange(newValue)}
80
+ filterOptions={(x) => x}
81
+ renderInput={(params) => (
82
+ <StandardTextField
83
+ {...params}
84
+ value={input}
85
+ onBlur={onUnfocus}
86
+ onChange={(e) => onInputChange(e.target.value)}
87
+ isTabled={isTabled}
88
+ label={displayPrompt}
89
+ size="small"
90
+ InputProps={{
91
+ ...params.InputProps,
92
+ startAdornment: (
93
+ <>
94
+ {!valueAutocomplete || valueAutocomplete === '' ? (
95
+ <SearchIcon fontSize="small" sx={{ ml: 0.5 }} />
96
+ ) : null}
97
+ {params.InputProps.startAdornment}
98
+ </>
99
+ ),
100
+ endAdornment: (
101
+ <>
102
+ {loading ? (
103
+ <CircularProgress color="inherit" size={16} />
104
+ ) : feedback ? (
105
+ <Fade in={!!feedback} timeout={300}>
106
+ <Tooltip title={feedback.message} arrow sx={{ ml: 1 }}>
107
+ {
108
+ {
109
+ info: <InfoIcon fontSize="small" color="info" />,
110
+ warning: <WarningAmberIcon fontSize="small" color="warning" />,
111
+ success: <DoneIcon fontSize="small" color="success" />,
112
+ error: <ErrorIcon fontSize="small" color="error" />
113
+ }[feedback.color]
114
+ }
115
+ </Tooltip>
116
+ </Fade>
117
+ ) : null}
118
+ {params.InputProps.endAdornment}
119
+ {displayUnit}
120
+ </>
121
+ )
122
+ }}
123
+ data-test="q-item-open-choice-autocomplete-field"
124
+ />
125
+ )}
126
+ />
127
+ </Box>
128
+ );
129
+ }
130
+
131
+ export default OpenChoiceAutocompleteField;