@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
@@ -16,3 +16,4 @@
16
16
  */
17
17
 
18
18
  export * from './Renderer';
19
+ export * from './FormComponents';
@@ -0,0 +1 @@
1
+ export { default as useHidden } from './useHidden';
@@ -0,0 +1,40 @@
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 { useMemo } from 'react';
19
+ import { getContextDisplays } from '../utils/tabs';
20
+ import type { QuestionnaireItem } from 'fhir/r4';
21
+
22
+ function useContextDisplayItems(topLevelItems: QuestionnaireItem[]) {
23
+ return useMemo(() => {
24
+ let completedDisplayItemExists = false;
25
+
26
+ const allContextDisplayItems = topLevelItems.map((topLevelItem) =>
27
+ getContextDisplays(topLevelItem)
28
+ );
29
+
30
+ completedDisplayItemExists = allContextDisplayItems.some((contextDisplayItems) => {
31
+ return contextDisplayItems.some(
32
+ (contextDisplayItem) => contextDisplayItem.text === 'Complete'
33
+ );
34
+ });
35
+
36
+ return { allContextDisplayItems, completedDisplayItemExists };
37
+ }, [topLevelItems]);
38
+ }
39
+
40
+ export default useContextDisplayItems;
@@ -17,7 +17,7 @@
17
17
 
18
18
  import type { Questionnaire, QuestionnaireResponse } from 'fhir/r4';
19
19
  import { useLayoutEffect, useState } from 'react';
20
- import { createQuestionnaireResponse } from '../utils/qrItem';
20
+ import { createEmptyQuestionnaireResponse } from '../utils/qrItem';
21
21
  import useQuestionnaireStore from '../stores/useQuestionnaireStore';
22
22
  import useQuestionnaireResponseStore from '../stores/useQuestionnaireResponseStore';
23
23
  import type Client from 'fhirclient/lib/Client';
@@ -80,7 +80,7 @@ function useInitialiseRenderer(
80
80
  additionalVariables,
81
81
  terminologyServerUrl
82
82
  ).then(() => {
83
- buildSourceResponse(createQuestionnaireResponse(questionnaire));
83
+ buildSourceResponse(createEmptyQuestionnaireResponse(questionnaire));
84
84
 
85
85
  if (questionnaireResponse) {
86
86
  const updatedResponse = updatePopulatedProperties(questionnaireResponse);
@@ -15,28 +15,39 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import type { QuestionnaireResponseItem } from 'fhir/r4';
18
+ import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
19
19
  import type { RepeatAnswer } from '../interfaces/repeatItem.interface';
20
20
  import { nanoid } from 'nanoid';
21
+ import { useMemo } from 'react';
21
22
 
22
- function useInitialiseRepeatAnswers(qrItem: QuestionnaireResponseItem): RepeatAnswer[] {
23
- let initialRepeatAnswers: RepeatAnswer[] = [
24
- {
25
- nanoId: nanoid(),
26
- answer: null
27
- }
28
- ];
23
+ function useInitialiseRepeatAnswers(
24
+ qItem: QuestionnaireItem,
25
+ qrItem: QuestionnaireResponseItem
26
+ ): RepeatAnswer[] {
27
+ return useMemo(
28
+ () => {
29
+ let initialRepeatAnswers: RepeatAnswer[] = [
30
+ {
31
+ nanoId: nanoid(),
32
+ answer: null
33
+ }
34
+ ];
29
35
 
30
- if (qrItem?.answer) {
31
- initialRepeatAnswers = qrItem.answer.map((answer) => {
32
- return {
33
- nanoId: nanoid(),
34
- answer
35
- };
36
- });
37
- }
36
+ if (qrItem?.answer) {
37
+ initialRepeatAnswers = qrItem.answer.map((answer) => {
38
+ return {
39
+ nanoId: nanoid(),
40
+ answer
41
+ };
42
+ });
43
+ }
38
44
 
39
- return initialRepeatAnswers;
45
+ return initialRepeatAnswers;
46
+ },
47
+ // init initialRepeatAnswers on first render only, leave dependency array empty
48
+ // eslint-disable-next-line react-hooks/exhaustive-deps
49
+ [qItem]
50
+ );
40
51
  }
41
52
 
42
53
  export default useInitialiseRepeatAnswers;
@@ -16,27 +16,38 @@
16
16
  */
17
17
 
18
18
  import type { QuestionnaireResponseItem } from 'fhir/r4';
19
+ import type { QuestionnaireItem } from 'fhir/r4';
19
20
  import { nanoid } from 'nanoid';
20
21
  import type { RepeatGroupSingle } from '../interfaces/repeatGroup.interface';
22
+ import { useMemo } from 'react';
21
23
 
22
- function useInitialiseRepeatGroups(qrItems: QuestionnaireResponseItem[]): RepeatGroupSingle[] {
23
- let initialRepeatGroupAnswers: RepeatGroupSingle[] = [
24
- {
25
- nanoId: nanoid(),
26
- qrItem: null
27
- }
28
- ];
24
+ function useInitialiseRepeatGroups(
25
+ qItem: QuestionnaireItem,
26
+ qrItems: QuestionnaireResponseItem[]
27
+ ): RepeatGroupSingle[] {
28
+ return useMemo(
29
+ () => {
30
+ let initialRepeatGroupAnswers: RepeatGroupSingle[] = [
31
+ {
32
+ nanoId: nanoid(),
33
+ qrItem: null
34
+ }
35
+ ];
29
36
 
30
- if (qrItems.length > 0) {
31
- initialRepeatGroupAnswers = qrItems.map((qrItem) => {
32
- return {
33
- nanoId: nanoid(),
34
- qrItem
35
- };
36
- });
37
- }
38
-
39
- return initialRepeatGroupAnswers;
37
+ if (qrItems.length > 0) {
38
+ initialRepeatGroupAnswers = qrItems.map((qrItem) => {
39
+ return {
40
+ nanoId: nanoid(),
41
+ qrItem
42
+ };
43
+ });
44
+ }
45
+ return initialRepeatGroupAnswers;
46
+ },
47
+ // init initialRepeatAnswers on first render only, leave dependency array empty
48
+ // eslint-disable-next-line react-hooks/exhaustive-deps
49
+ [qItem]
50
+ );
40
51
  }
41
52
 
42
53
  export default useInitialiseRepeatGroups;
@@ -0,0 +1,38 @@
1
+ /*
2
+ * Copyright 2023 Commonwealth Scientific and Industrial Research
3
+ * Organisation (CSIRO) ABN 41 687 119 230.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ import type { Dispatch, SetStateAction } from 'react';
19
+ import { useEffect, useState } from 'react';
20
+
21
+ function useNumberInput(valueFromProps: number): [number, Dispatch<SetStateAction<number>>] {
22
+ const [value, setValue] = useState(valueFromProps);
23
+
24
+ useEffect(
25
+ () => {
26
+ if (value !== valueFromProps) {
27
+ setValue(valueFromProps);
28
+ }
29
+ },
30
+ // Only trigger this effect if prop value changes
31
+ // eslint-disable-next-line react-hooks/exhaustive-deps
32
+ [valueFromProps]
33
+ );
34
+
35
+ return [value, setValue];
36
+ }
37
+
38
+ export default useNumberInput;
@@ -0,0 +1,38 @@
1
+ /*
2
+ * Copyright 2023 Commonwealth Scientific and Industrial Research
3
+ * Organisation (CSIRO) ABN 41 687 119 230.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ import type { Dispatch, SetStateAction } from 'react';
19
+ import { useEffect, useState } from 'react';
20
+
21
+ function useStringInput(valueFromProps: string): [string, Dispatch<SetStateAction<string>>] {
22
+ const [input, setInput] = useState(valueFromProps);
23
+
24
+ useEffect(
25
+ () => {
26
+ if (input !== valueFromProps) {
27
+ setInput(valueFromProps);
28
+ }
29
+ },
30
+ // Only trigger this effect if prop value changes
31
+ // eslint-disable-next-line react-hooks/exhaustive-deps
32
+ [valueFromProps]
33
+ );
34
+
35
+ return [input, setInput];
36
+ }
37
+
38
+ export default useStringInput;
@@ -34,7 +34,6 @@ function useTerminologyServerQuery(
34
34
 
35
35
  let fullUrl = '';
36
36
  let options: Coding[] = [];
37
- let loading = false;
38
37
  let feedback: { message: string; color: AlertColor } | undefined;
39
38
 
40
39
  if (input.length === 0) {
@@ -64,7 +63,7 @@ function useTerminologyServerQuery(
64
63
 
65
64
  // Perform query
66
65
  const terminologyServerUrl = getTerminologyServerUrl(qItem) ?? defaultTerminologyServerUrl;
67
- const { isInitialLoading, error, data } = useQuery<ValueSet>(
66
+ const { isFetching, error, data } = useQuery<ValueSet>(
68
67
  ['expandValueSet', fullUrl],
69
68
  () => getValueSetPromise(fullUrl, terminologyServerUrl),
70
69
  {
@@ -72,9 +71,7 @@ function useTerminologyServerQuery(
72
71
  }
73
72
  );
74
73
 
75
- if (isInitialLoading) {
76
- loading = true;
77
- }
74
+ console.log(isFetching);
78
75
 
79
76
  if (error) {
80
77
  console.warn('Ontoserver query failed. Details below: \n' + error);
@@ -95,6 +92,6 @@ function useTerminologyServerQuery(
95
92
  }
96
93
  }
97
94
 
98
- return { options, loading, feedback };
95
+ return { options, loading: isFetching, feedback };
99
96
  }
100
97
  export default useTerminologyServerQuery;
package/src/index.ts CHANGED
@@ -1,11 +1,17 @@
1
1
  import useQuestionnaireStore from './stores/useQuestionnaireStore';
2
2
  import type { Questionnaire, QuestionnaireResponse } from 'fhir/r4';
3
- import { createQuestionnaireResponse } from './utils/qrItem';
3
+ import { createEmptyQuestionnaireResponse } from './utils/qrItem';
4
4
  import useQuestionnaireResponseStore from './stores/useQuestionnaireResponseStore';
5
5
  import { removeHiddenAnswers } from './utils/removeHidden';
6
+ import type { ItemToRepopulate } from './utils/repopulateItems';
7
+ import { getItemsToRepopulate } from './utils/repopulateItems';
8
+ import { repopulateItemsIntoResponse } from './utils/repopulateIntoResponse';
6
9
 
7
10
  export * from './components';
8
11
  export * from './stores';
12
+ export * from './hooks';
13
+ export * from './utils';
14
+ export type { ItemToRepopulate };
9
15
 
10
16
  /**
11
17
  * Build the form with an initial Questionnaire and an optional filled QuestionnaireResponse.
@@ -22,7 +28,7 @@ export async function buildForm(
22
28
  if (!questionnaireResponse) {
23
29
  useQuestionnaireResponseStore
24
30
  .getState()
25
- .buildSourceResponse(createQuestionnaireResponse(questionnaire));
31
+ .buildSourceResponse(createEmptyQuestionnaireResponse(questionnaire));
26
32
  return;
27
33
  }
28
34
 
@@ -72,3 +78,40 @@ export function removeHiddenAnswersFromResponse(
72
78
  enableWhenExpressions
73
79
  });
74
80
  }
81
+
82
+ /**
83
+ * Re-populate stuff
84
+ *
85
+ * @author Sean Fong
86
+ */
87
+ export function generateItemsToRepopulate(populatedResponse: QuestionnaireResponse) {
88
+ const sourceQuestionnaire = useQuestionnaireStore.getState().sourceQuestionnaire;
89
+ const itemTypes = useQuestionnaireStore.getState().itemTypes;
90
+ const tabs = useQuestionnaireStore.getState().tabs;
91
+ const updatableResponse = useQuestionnaireResponseStore.getState().updatableResponse;
92
+ console.log(updatableResponse);
93
+
94
+ return getItemsToRepopulate(
95
+ sourceQuestionnaire,
96
+ itemTypes,
97
+ tabs,
98
+ populatedResponse,
99
+ updatableResponse
100
+ );
101
+ }
102
+
103
+ /**
104
+ * Re-populate stuff
105
+ *
106
+ * @author Sean Fong
107
+ */
108
+ export function repopulate(checkedItemsToRepopulate: Record<string, ItemToRepopulate>) {
109
+ const sourceQuestionnaire = useQuestionnaireStore.getState().sourceQuestionnaire;
110
+ const updatableResponse = useQuestionnaireResponseStore.getState().updatableResponse;
111
+
112
+ return repopulateItemsIntoResponse(
113
+ sourceQuestionnaire,
114
+ updatableResponse,
115
+ checkedItemsToRepopulate
116
+ );
117
+ }
@@ -24,6 +24,7 @@ import type { AnswerExpression } from './answerExpression.interface';
24
24
  import type { Coding } from 'fhir/r4';
25
25
 
26
26
  export interface QuestionnaireModel {
27
+ itemTypes: Record<string, string>;
27
28
  tabs: Tabs;
28
29
  variables: Variables;
29
30
  launchContexts: Record<string, LaunchContext>;
@@ -32,3 +32,7 @@ export interface PropsWithIsRepeatedAttribute {
32
32
  export interface PropsWithIsTabledAttribute {
33
33
  isTabled: boolean;
34
34
  }
35
+
36
+ export interface PropsWithTextShownAttribute {
37
+ textShown?: boolean;
38
+ }
@@ -2,11 +2,13 @@ import { create } from 'zustand';
2
2
  import type { QuestionnaireResponse } from 'fhir/r4';
3
3
  import { emptyResponse } from '../utils/emptyResource';
4
4
  import cloneDeep from 'lodash.clonedeep';
5
+ import type { Diff } from 'deep-diff';
6
+ import { diff } from 'deep-diff';
5
7
 
6
8
  export interface UseQuestionnaireResponseStoreType {
7
9
  sourceResponse: QuestionnaireResponse;
8
10
  updatableResponse: QuestionnaireResponse;
9
- hasChanges: boolean;
11
+ formChangesHistory: (Diff<QuestionnaireResponse, QuestionnaireResponse>[] | null)[];
10
12
  buildSourceResponse: (response: QuestionnaireResponse) => void;
11
13
  setUpdatableResponseAsPopulated: (populatedResponse: QuestionnaireResponse) => void;
12
14
  updateResponse: (updatedResponse: QuestionnaireResponse) => void;
@@ -15,10 +17,10 @@ export interface UseQuestionnaireResponseStoreType {
15
17
  destroySourceResponse: () => void;
16
18
  }
17
19
 
18
- const useQuestionnaireResponseStore = create<UseQuestionnaireResponseStoreType>()((set) => ({
20
+ const useQuestionnaireResponseStore = create<UseQuestionnaireResponseStoreType>()((set, get) => ({
19
21
  sourceResponse: cloneDeep(emptyResponse),
20
22
  updatableResponse: cloneDeep(emptyResponse),
21
- hasChanges: false,
23
+ formChangesHistory: [],
22
24
  buildSourceResponse: (questionnaireResponse: QuestionnaireResponse) => {
23
25
  set(() => ({
24
26
  sourceResponse: questionnaireResponse,
@@ -26,32 +28,35 @@ const useQuestionnaireResponseStore = create<UseQuestionnaireResponseStoreType>(
26
28
  }));
27
29
  },
28
30
  setUpdatableResponseAsPopulated: (populatedResponse: QuestionnaireResponse) => {
31
+ const formChanges = diff(get().updatableResponse, populatedResponse) ?? null;
29
32
  set(() => ({
30
33
  updatableResponse: populatedResponse,
31
- hasChanges: false
34
+ formChangesHistory: [...get().formChangesHistory, formChanges]
32
35
  }));
33
36
  },
34
- updateResponse: (updatedResponse: QuestionnaireResponse) =>
37
+ updateResponse: (updatedResponse: QuestionnaireResponse) => {
38
+ const formChanges = diff(get().updatableResponse, updatedResponse) ?? null;
35
39
  set(() => ({
36
40
  updatableResponse: updatedResponse,
37
- hasChanges: true
38
- })),
41
+ formChangesHistory: [...get().formChangesHistory, formChanges]
42
+ }));
43
+ },
39
44
  setUpdatableResponseAsSaved: (savedResponse: QuestionnaireResponse) =>
40
45
  set(() => ({
41
46
  sourceResponse: savedResponse,
42
47
  updatableResponse: savedResponse,
43
- hasChanges: false
48
+ formChangesHistory: []
44
49
  })),
45
50
  setUpdatableResponseAsEmpty: (clearedResponse: QuestionnaireResponse) =>
46
51
  set(() => ({
47
52
  updatableResponse: clearedResponse,
48
- hasChanges: false
53
+ formChangesHistory: []
49
54
  })),
50
55
  destroySourceResponse: () =>
51
56
  set(() => ({
52
57
  sourceResponse: cloneDeep(emptyResponse),
53
58
  updatableResponse: cloneDeep(emptyResponse),
54
- hasChanges: false
59
+ formChangesHistory: []
55
60
  }))
56
61
  }));
57
62
 
@@ -42,6 +42,7 @@ import useTerminologyServerStore from './useTerminologyServerStore';
42
42
 
43
43
  export interface UseQuestionnaireStoreType {
44
44
  sourceQuestionnaire: Questionnaire;
45
+ itemTypes: Record<string, string>;
45
46
  tabs: Tabs;
46
47
  currentTabIndex: number;
47
48
  variables: Variables;
@@ -68,11 +69,15 @@ export interface UseQuestionnaireStoreType {
68
69
  toggleEnableWhenActivation: (isActivated: boolean) => void;
69
70
  updateExpressions: (updatedResponse: QuestionnaireResponse) => void;
70
71
  addCodingToCache: (valueSetUrl: string, codings: Coding[]) => void;
71
- updatePopulatedProperties: (populatedResponse: QuestionnaireResponse) => QuestionnaireResponse;
72
+ updatePopulatedProperties: (
73
+ populatedResponse: QuestionnaireResponse,
74
+ persistTabIndex?: boolean
75
+ ) => QuestionnaireResponse;
72
76
  }
73
77
 
74
78
  const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) => ({
75
79
  sourceQuestionnaire: cloneDeep(emptyQuestionnaire),
80
+ itemTypes: {},
76
81
  tabs: {},
77
82
  currentTabIndex: 0,
78
83
  variables: { fhirPathVariables: {}, xFhirQueryVariables: {} },
@@ -115,6 +120,7 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
115
120
 
116
121
  set({
117
122
  sourceQuestionnaire: questionnaire,
123
+ itemTypes: questionnaireModel.itemTypes,
118
124
  tabs: questionnaireModel.tabs,
119
125
  currentTabIndex: firstVisibleTab,
120
126
  variables: questionnaireModel.variables,
@@ -131,6 +137,7 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
131
137
  destroySourceQuestionnaire: () =>
132
138
  set({
133
139
  sourceQuestionnaire: cloneDeep(emptyQuestionnaire),
140
+ itemTypes: {},
134
141
  tabs: {},
135
142
  currentTabIndex: 0,
136
143
  variables: { fhirPathVariables: {}, xFhirQueryVariables: {} },
@@ -197,7 +204,7 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
197
204
  [valueSetUrl]: codings
198
205
  }
199
206
  })),
200
- updatePopulatedProperties: (populatedResponse: QuestionnaireResponse) => {
207
+ updatePopulatedProperties: (populatedResponse: QuestionnaireResponse, persistTabIndex) => {
201
208
  const initialCalculatedExpressions = evaluateInitialCalculatedExpressions({
202
209
  initialResponse: populatedResponse,
203
210
  calculatedExpressions: get().calculatedExpressions,
@@ -229,7 +236,7 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
229
236
  enableWhenLinkedQuestions: initialEnableWhenLinkedQuestions,
230
237
  enableWhenExpressions: initialEnableWhenExpressions,
231
238
  calculatedExpressions: initialCalculatedExpressions,
232
- currentTabIndex: firstVisibleTab
239
+ currentTabIndex: persistTabIndex ? get().currentTabIndex : firstVisibleTab
233
240
  }));
234
241
 
235
242
  return updatedResponse;
@@ -20,7 +20,6 @@ import Paper from './Paper';
20
20
  import Input from './Input';
21
21
  import Table from './Table';
22
22
  import Button from './Button';
23
- import Backdrop from './Backdrop';
24
23
  import Autocomplete from './Autocomplete';
25
24
  import Accordion from './Accordion';
26
25
  import SpeedDial from './SpeedDial';
@@ -34,7 +33,6 @@ function ComponentsOverrides(theme: Theme) {
34
33
  Input(theme),
35
34
  Paper(),
36
35
  Button(theme),
37
- Backdrop(theme),
38
36
  Autocomplete(theme),
39
37
  SpeedDial(theme)
40
38
  );
@@ -30,7 +30,7 @@ import _isEqual from 'lodash/isEqual';
30
30
  import { emptyResponse } from './emptyResource';
31
31
  import { createFhirPathContext } from './fhirpath';
32
32
  import { getQrItemsIndex, mapQItemsIndex } from './mapItem';
33
- import { updateQrGroup } from './qrItem';
33
+ import { updateQrItemsInGroup } from './qrItem';
34
34
  import cloneDeep from 'lodash.clonedeep';
35
35
 
36
36
  interface EvaluateInitialCalculatedExpressionsParams {
@@ -213,7 +213,7 @@ function initialiseItemCalculatedExpressionValueRecursive(
213
213
  }
214
214
 
215
215
  if (newQrItem) {
216
- updateQrGroup(
216
+ updateQrItemsInGroup(
217
217
  newQrItem,
218
218
  null,
219
219
  qrItem ?? { linkId: qItem.linkId, text: qItem.text, item: [] },