@aehrc/smart-forms-renderer 0.8.0 → 0.9.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 (477) hide show
  1. package/lib/components/Alert.styles.d.ts +2 -7
  2. package/lib/components/Box.styles.d.ts +6 -21
  3. package/lib/components/FormComponents/BooleanItem/BooleanItem.d.ts +3 -3
  4. package/lib/components/FormComponents/BooleanItem/BooleanItem.js +5 -4
  5. package/lib/components/FormComponents/BooleanItem/BooleanItem.js.map +1 -1
  6. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.d.ts +3 -3
  7. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js +6 -5
  8. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js.map +1 -1
  9. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.d.ts +3 -3
  10. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +15 -14
  11. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
  12. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.d.ts +3 -3
  13. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +15 -14
  14. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
  15. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.d.ts +3 -3
  16. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js +8 -8
  17. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js.map +1 -1
  18. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.d.ts +3 -3
  19. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +6 -6
  20. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js.map +1 -1
  21. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.d.ts +3 -3
  22. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +6 -5
  23. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
  24. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.d.ts +1 -0
  25. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js +2 -2
  26. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js.map +1 -1
  27. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.d.ts +3 -3
  28. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +8 -7
  29. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js.map +1 -1
  30. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.d.ts +1 -0
  31. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js +2 -2
  32. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js.map +1 -1
  33. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.d.ts +3 -3
  34. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js +8 -7
  35. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js.map +1 -1
  36. package/lib/components/FormComponents/CustomDateItem/CustomDateField2.d.ts +18 -0
  37. package/lib/components/FormComponents/CustomDateItem/CustomDateField2.js +31 -0
  38. package/lib/components/FormComponents/CustomDateItem/CustomDateField2.js.map +1 -0
  39. package/lib/components/FormComponents/CustomDateItem/CustomDateItem.d.ts +9 -0
  40. package/lib/components/FormComponents/CustomDateItem/CustomDateItem.js +68 -0
  41. package/lib/components/FormComponents/CustomDateItem/CustomDateItem.js.map +1 -0
  42. package/lib/components/FormComponents/CustomDateItem/CustomDateTimeField.d.ts +9 -0
  43. package/lib/components/FormComponents/CustomDateItem/CustomDateTimeField.js +75 -0
  44. package/lib/components/FormComponents/CustomDateItem/CustomDateTimeField.js.map +1 -0
  45. package/lib/components/FormComponents/CustomDateItem/CustomDateTimePickerText2.d.ts +9 -0
  46. package/lib/components/FormComponents/CustomDateItem/CustomDateTimePickerText2.js +75 -0
  47. package/lib/components/FormComponents/CustomDateItem/CustomDateTimePickerText2.js.map +1 -0
  48. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.d.ts +18 -0
  49. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.js +33 -0
  50. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.js.map +1 -0
  51. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.d.ts +11 -0
  52. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.js +55 -0
  53. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.js.map +1 -0
  54. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.d.ts +9 -0
  55. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.js +13 -0
  56. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.js.map +1 -0
  57. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.d.ts +5 -0
  58. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.js +20 -0
  59. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.js.map +1 -0
  60. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/hooks/useParseDates.d.ts +5 -0
  61. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/hooks/useParseDates.js +27 -0
  62. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/hooks/useParseDates.js.map +1 -0
  63. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/index.d.ts +1 -0
  64. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/index.js +18 -0
  65. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/index.js.map +1 -0
  66. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.d.ts +1 -0
  67. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.js +18 -0
  68. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.js.map +1 -0
  69. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.d.ts +9 -0
  70. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.js +121 -0
  71. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.js.map +1 -0
  72. package/lib/components/FormComponents/CustomDateItem/customDateTimePickerText.d.ts +9 -0
  73. package/lib/components/FormComponents/CustomDateItem/customDateTimePickerText.js +71 -0
  74. package/lib/components/FormComponents/CustomDateItem/customDateTimePickerText.js.map +1 -0
  75. package/lib/components/FormComponents/CustomDateItem/index.d.ts +1 -0
  76. package/lib/components/FormComponents/CustomDateItem/index.js +18 -0
  77. package/lib/components/FormComponents/CustomDateItem/index.js.map +1 -0
  78. package/lib/components/FormComponents/DateItem/DateItem.d.ts +3 -3
  79. package/lib/components/FormComponents/DateItem/DateItem.js +5 -4
  80. package/lib/components/FormComponents/DateItem/DateItem.js.map +1 -1
  81. package/lib/components/FormComponents/DateItem/DatePicker.d.ts +2 -0
  82. package/lib/components/FormComponents/DateItem/DatePicker.js +42 -0
  83. package/lib/components/FormComponents/DateItem/DatePicker.js.map +1 -0
  84. package/lib/components/FormComponents/DateItem/DatePickerField.d.ts +8 -0
  85. package/lib/components/FormComponents/DateItem/DatePickerField.js +24 -0
  86. package/lib/components/FormComponents/DateItem/DatePickerField.js.map +1 -0
  87. package/lib/components/FormComponents/DateTimeItem/DateTimeItem.d.ts +3 -3
  88. package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js +5 -4
  89. package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js.map +1 -1
  90. package/lib/components/FormComponents/DecimalItem/DecimalItem.d.ts +3 -3
  91. package/lib/components/FormComponents/DecimalItem/DecimalItem.js +7 -7
  92. package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
  93. package/lib/components/FormComponents/DisplayItem/DisplayBox.d.ts +0 -0
  94. package/lib/components/FormComponents/DisplayItem/DisplayBox.js +2 -0
  95. package/lib/components/FormComponents/DisplayItem/DisplayBox.js.map +1 -0
  96. package/lib/components/FormComponents/DisplayItem/DisplayBox.styles.d.ts +4 -0
  97. package/lib/components/FormComponents/DisplayItem/DisplayBox.styles.js +35 -0
  98. package/lib/components/FormComponents/DisplayItem/DisplayBox.styles.js.map +1 -0
  99. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.d.ts +3 -1
  100. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js +2 -2
  101. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js.map +1 -1
  102. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.d.ts +2 -7
  103. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.js +0 -1
  104. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.js.map +1 -1
  105. package/lib/components/FormComponents/DisplayItem/DisplayItem.js +2 -2
  106. package/lib/components/FormComponents/DisplayItem/DisplayItem.js.map +1 -1
  107. package/lib/components/FormComponents/GridGroup/GridGroup.d.ts +3 -3
  108. package/lib/components/FormComponents/GridGroup/GridGroup.js +16 -9
  109. package/lib/components/FormComponents/GridGroup/GridGroup.js.map +1 -1
  110. package/lib/components/FormComponents/GridGroup/GridRow.d.ts +3 -3
  111. package/lib/components/FormComponents/GridGroup/GridRow.js +4 -4
  112. package/lib/components/FormComponents/GridGroup/GridRow.js.map +1 -1
  113. package/lib/components/FormComponents/GridGroup/GridTable.d.ts +3 -2
  114. package/lib/components/FormComponents/GridGroup/GridTable.js +9 -4
  115. package/lib/components/FormComponents/GridGroup/GridTable.js.map +1 -1
  116. package/lib/components/FormComponents/GridGroup/index.d.ts +1 -0
  117. package/lib/components/FormComponents/GridGroup/index.js +18 -0
  118. package/lib/components/FormComponents/GridGroup/index.js.map +1 -0
  119. package/lib/components/FormComponents/GroupItem/GroupHeading.d.ts +1 -0
  120. package/lib/components/FormComponents/GroupItem/GroupHeading.js +6 -5
  121. package/lib/components/FormComponents/GroupItem/GroupHeading.js.map +1 -1
  122. package/lib/components/FormComponents/GroupItem/GroupItem.d.ts +3 -4
  123. package/lib/components/FormComponents/GroupItem/GroupItem.js +7 -5
  124. package/lib/components/FormComponents/GroupItem/GroupItem.js.map +1 -1
  125. package/lib/components/FormComponents/GroupItem/GroupItem.styles.d.ts +2 -6
  126. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.d.ts +3 -3
  127. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +11 -12
  128. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -1
  129. package/lib/components/FormComponents/IntegerItem/IntegerItem.d.ts +3 -3
  130. package/lib/components/FormComponents/IntegerItem/IntegerItem.js +7 -7
  131. package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
  132. package/lib/components/FormComponents/IntegerItem/SliderItem.d.ts +9 -0
  133. package/lib/components/FormComponents/IntegerItem/SliderItem.js +75 -0
  134. package/lib/components/FormComponents/IntegerItem/SliderItem.js.map +1 -0
  135. package/lib/components/FormComponents/Item.styles.d.ts +0 -4
  136. package/lib/components/FormComponents/Item.styles.js +0 -4
  137. package/lib/components/FormComponents/Item.styles.js.map +1 -1
  138. package/lib/components/FormComponents/ItemParts/FadingCheckIcon.js +2 -2
  139. package/lib/components/FormComponents/ItemParts/FadingCheckIcon.js.map +1 -1
  140. package/lib/components/FormComponents/ItemParts/ItemFieldGrid.d.ts +3 -2
  141. package/lib/components/FormComponents/ItemParts/ItemFieldGrid.js +3 -3
  142. package/lib/components/FormComponents/ItemParts/ItemFieldGrid.js.map +1 -1
  143. package/lib/components/FormComponents/ItemParts/ItemLabelText.d.ts +1 -0
  144. package/lib/components/FormComponents/ItemParts/ItemLabelText.js +4 -6
  145. package/lib/components/FormComponents/ItemParts/ItemLabelText.js.map +1 -1
  146. package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.d.ts +1 -0
  147. package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.js +2 -2
  148. package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.js.map +1 -1
  149. package/lib/components/FormComponents/Lists.styles.d.ts +2 -9
  150. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.d.ts +3 -2
  151. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js +2 -3
  152. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js.map +1 -1
  153. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.d.ts +3 -3
  154. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js +8 -7
  155. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js.map +1 -1
  156. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.d.ts +3 -3
  157. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js +16 -15
  158. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js.map +1 -1
  159. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.d.ts +3 -3
  160. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js +6 -6
  161. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js.map +1 -1
  162. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.d.ts +3 -3
  163. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js +7 -6
  164. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js.map +1 -1
  165. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.d.ts +3 -2
  166. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js +2 -2
  167. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.js.map +1 -1
  168. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.d.ts +3 -3
  169. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js +7 -6
  170. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js.map +1 -1
  171. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.d.ts +3 -2
  172. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js +2 -2
  173. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.js.map +1 -1
  174. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.d.ts +3 -3
  175. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js +8 -7
  176. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js.map +1 -1
  177. package/lib/components/FormComponents/RepeatGroup/AddItemButton.d.ts +1 -0
  178. package/lib/components/FormComponents/RepeatGroup/AddItemButton.js +2 -2
  179. package/lib/components/FormComponents/RepeatGroup/AddItemButton.js.map +1 -1
  180. package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.d.ts +1 -0
  181. package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.js +2 -2
  182. package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.js.map +1 -1
  183. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.d.ts +2 -2
  184. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js +20 -7
  185. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js.map +1 -1
  186. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.d.ts +2 -2
  187. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js +5 -3
  188. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js.map +1 -1
  189. package/lib/components/FormComponents/RepeatItem/AddItemButton.d.ts +1 -0
  190. package/lib/components/FormComponents/RepeatItem/AddItemButton.js +2 -2
  191. package/lib/components/FormComponents/RepeatItem/AddItemButton.js.map +1 -1
  192. package/lib/components/FormComponents/RepeatItem/DeleteItemButton.d.ts +1 -0
  193. package/lib/components/FormComponents/RepeatItem/DeleteItemButton.js +2 -2
  194. package/lib/components/FormComponents/RepeatItem/DeleteItemButton.js.map +1 -1
  195. package/lib/components/FormComponents/RepeatItem/RepeatField.d.ts +3 -3
  196. package/lib/components/FormComponents/RepeatItem/RepeatField.js +5 -3
  197. package/lib/components/FormComponents/RepeatItem/RepeatField.js.map +1 -1
  198. package/lib/components/FormComponents/RepeatItem/RepeatItem.d.ts +4 -3
  199. package/lib/components/FormComponents/RepeatItem/RepeatItem.js +15 -5
  200. package/lib/components/FormComponents/RepeatItem/RepeatItem.js.map +1 -1
  201. package/lib/components/FormComponents/RepeatItem/RepeatItem.styles.d.ts +4 -18
  202. package/lib/components/FormComponents/RepeatItem/index.d.ts +1 -0
  203. package/lib/components/FormComponents/RepeatItem/index.js +18 -0
  204. package/lib/components/FormComponents/RepeatItem/index.js.map +1 -0
  205. package/lib/components/FormComponents/SingleItem/SingleItem.d.ts +3 -3
  206. package/lib/components/FormComponents/SingleItem/SingleItem.js +4 -2
  207. package/lib/components/FormComponents/SingleItem/SingleItem.js.map +1 -1
  208. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.d.ts +3 -3
  209. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js +20 -15
  210. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -1
  211. package/lib/components/FormComponents/SliderItem/DisplayBox.styles.d.ts +4 -0
  212. package/lib/components/FormComponents/SliderItem/DisplayBox.styles.js +35 -0
  213. package/lib/components/FormComponents/SliderItem/DisplayBox.styles.js.map +1 -0
  214. package/lib/components/FormComponents/SliderItem/Slider.styles.d.ts +6 -0
  215. package/lib/components/FormComponents/SliderItem/Slider.styles.js +33 -0
  216. package/lib/components/FormComponents/SliderItem/Slider.styles.js.map +1 -0
  217. package/lib/components/FormComponents/SliderItem/SliderDisplayValue.d.ts +8 -0
  218. package/lib/components/FormComponents/SliderItem/SliderDisplayValue.js +28 -0
  219. package/lib/components/FormComponents/SliderItem/SliderDisplayValue.js.map +1 -0
  220. package/lib/components/FormComponents/SliderItem/SliderField.d.ts +16 -0
  221. package/lib/components/FormComponents/SliderItem/SliderField.js +41 -0
  222. package/lib/components/FormComponents/SliderItem/SliderField.js.map +1 -0
  223. package/lib/components/FormComponents/SliderItem/SliderItem.d.ts +9 -0
  224. package/lib/components/FormComponents/SliderItem/SliderItem.js +56 -0
  225. package/lib/components/FormComponents/SliderItem/SliderItem.js.map +1 -0
  226. package/lib/components/FormComponents/SliderItem/SliderLabels.d.ts +7 -0
  227. package/lib/components/FormComponents/SliderItem/SliderLabels.js +32 -0
  228. package/lib/components/FormComponents/SliderItem/SliderLabels.js.map +1 -0
  229. package/lib/components/FormComponents/StringItem/StringItem.d.ts +3 -3
  230. package/lib/components/FormComponents/StringItem/StringItem.js +5 -4
  231. package/lib/components/FormComponents/StringItem/StringItem.js.map +1 -1
  232. package/lib/components/FormComponents/Tables/AddRowButton.d.ts +1 -0
  233. package/lib/components/FormComponents/Tables/AddRowButton.js +2 -2
  234. package/lib/components/FormComponents/Tables/AddRowButton.js.map +1 -1
  235. package/lib/components/FormComponents/Tables/DeleteRowButton.d.ts +1 -0
  236. package/lib/components/FormComponents/Tables/DeleteRowButton.js +2 -2
  237. package/lib/components/FormComponents/Tables/DeleteRowButton.js.map +1 -1
  238. package/lib/components/FormComponents/Tables/GroupTable.d.ts +4 -3
  239. package/lib/components/FormComponents/Tables/GroupTable.js +25 -6
  240. package/lib/components/FormComponents/Tables/GroupTable.js.map +1 -1
  241. package/lib/components/FormComponents/Tables/GroupTableRow.d.ts +3 -3
  242. package/lib/components/FormComponents/Tables/GroupTableRow.js +4 -4
  243. package/lib/components/FormComponents/Tables/GroupTableRow.js.map +1 -1
  244. package/lib/components/FormComponents/Tables/QItemGroupTable.js +5 -7
  245. package/lib/components/FormComponents/Tables/QItemGroupTable.js.map +1 -1
  246. package/lib/components/FormComponents/Tables/QItemGroupTableRow.js +2 -2
  247. package/lib/components/FormComponents/Tables/QItemGroupTableRow.js.map +1 -1
  248. package/lib/components/FormComponents/TextItem/TextItem.d.ts +3 -3
  249. package/lib/components/FormComponents/TextItem/TextItem.js +5 -4
  250. package/lib/components/FormComponents/TextItem/TextItem.js.map +1 -1
  251. package/lib/components/FormComponents/TimeItem/TimeItem.d.ts +3 -3
  252. package/lib/components/FormComponents/TimeItem/TimeItem.js +5 -4
  253. package/lib/components/FormComponents/TimeItem/TimeItem.js.map +1 -1
  254. package/lib/components/FormComponents/UrlItem/UrlItem.d.ts +3 -3
  255. package/lib/components/FormComponents/UrlItem/UrlItem.js +5 -4
  256. package/lib/components/FormComponents/UrlItem/UrlItem.js.map +1 -1
  257. package/lib/components/FormComponents/index.d.ts +3 -0
  258. package/lib/components/FormComponents/index.js +3 -0
  259. package/lib/components/FormComponents/index.js.map +1 -1
  260. package/lib/components/Lists.styles.d.ts +2 -9
  261. package/lib/components/Renderer/BaseRenderer.js +3 -5
  262. package/lib/components/Renderer/BaseRenderer.js.map +1 -1
  263. package/lib/components/Renderer/FormBodyCollapsible.d.ts +2 -2
  264. package/lib/components/Renderer/FormBodyCollapsible.js +6 -5
  265. package/lib/components/Renderer/FormBodyCollapsible.js.map +1 -1
  266. package/lib/components/Renderer/FormBodySingleCollapsibleWrapper.d.ts +2 -2
  267. package/lib/components/Renderer/FormBodySingleCollapsibleWrapper.js.map +1 -1
  268. package/lib/components/Renderer/FormBodyTabbed.d.ts +2 -2
  269. package/lib/components/Renderer/FormBodyTabbed.js +6 -5
  270. package/lib/components/Renderer/FormBodyTabbed.js.map +1 -1
  271. package/lib/components/Renderer/FormTopLevelItem.d.ts +2 -2
  272. package/lib/components/Renderer/FormTopLevelItem.js +9 -5
  273. package/lib/components/Renderer/FormTopLevelItem.js.map +1 -1
  274. package/lib/components/Tabs/FormBodySingleTab.js +1 -1
  275. package/lib/components/Tabs/FormBodySingleTab.js.map +1 -1
  276. package/lib/components/Tabs/ShowCompletedTabsSection.js +1 -1
  277. package/lib/components/Tabs/ShowCompletedTabsSection.js.map +1 -1
  278. package/lib/hooks/useDateSeparatorValidation.d.ts +2 -0
  279. package/lib/hooks/useDateSeparatorValidation.js +25 -0
  280. package/lib/hooks/useDateSeparatorValidation.js.map +1 -0
  281. package/lib/hooks/useDateValidation.d.ts +2 -0
  282. package/lib/hooks/useDateValidation.js +61 -0
  283. package/lib/hooks/useDateValidation.js.map +1 -0
  284. package/lib/hooks/useDecimalCalculatedExpression.d.ts +0 -1
  285. package/lib/hooks/useDecimalCalculatedExpression.js +3 -3
  286. package/lib/hooks/useDecimalCalculatedExpression.js.map +1 -1
  287. package/lib/hooks/useInitialiseRepeatAnswers.d.ts +1 -1
  288. package/lib/hooks/useInitialiseRepeatAnswers.js.map +1 -1
  289. package/lib/hooks/useIntegerCalculatedExpression.d.ts +0 -1
  290. package/lib/hooks/useIntegerCalculatedExpression.js +3 -3
  291. package/lib/hooks/useIntegerCalculatedExpression.js.map +1 -1
  292. package/lib/hooks/useMinimalStringCalculatedExpression.d.ts +11 -0
  293. package/lib/hooks/useMinimalStringCalculatedExpression.js +37 -0
  294. package/lib/hooks/useMinimalStringCalculatedExpression.js.map +1 -0
  295. package/lib/hooks/useReadOnly.d.ts +3 -0
  296. package/lib/hooks/useReadOnly.js +26 -0
  297. package/lib/hooks/useReadOnly.js.map +1 -0
  298. package/lib/hooks/useSliderExtensions.d.ts +10 -0
  299. package/lib/hooks/useSliderExtensions.js +37 -0
  300. package/lib/hooks/useSliderExtensions.js.map +1 -0
  301. package/lib/hooks/useTerminologyServerQuery.js +0 -1
  302. package/lib/hooks/useTerminologyServerQuery.js.map +1 -1
  303. package/lib/index.d.ts +3 -3
  304. package/lib/index.js +15 -6
  305. package/lib/index.js.map +1 -1
  306. package/lib/interfaces/calculatedExpression.interface.d.ts +1 -1
  307. package/lib/interfaces/index.d.ts +2 -0
  308. package/lib/interfaces/index.js +18 -0
  309. package/lib/interfaces/index.js.map +1 -0
  310. package/lib/interfaces/questionnaireStore.interface.d.ts +1 -0
  311. package/lib/interfaces/renderProps.interface.d.ts +7 -3
  312. package/lib/stores/useQuestionnaireStore.d.ts +1 -0
  313. package/lib/stores/useQuestionnaireStore.js +28 -12
  314. package/lib/stores/useQuestionnaireStore.js.map +1 -1
  315. package/lib/test.d.ts +4 -0
  316. package/lib/test.js +18 -0
  317. package/lib/test.js.map +1 -0
  318. package/lib/theme/customGlobalStyles.js +0 -4
  319. package/lib/theme/customGlobalStyles.js.map +1 -1
  320. package/lib/theme/overrides/Typography.d.ts +13 -0
  321. package/lib/theme/overrides/Typography.js +31 -0
  322. package/lib/theme/overrides/Typography.js.map +1 -0
  323. package/lib/theme/typography.d.ts +0 -2
  324. package/lib/theme/typography.js +3 -5
  325. package/lib/theme/typography.js.map +1 -1
  326. package/lib/utils/calculatedExpression.d.ts +17 -1
  327. package/lib/utils/calculatedExpression.js +71 -20
  328. package/lib/utils/calculatedExpression.js.map +1 -1
  329. package/lib/utils/dayjsExtend.d.ts +1 -0
  330. package/lib/utils/dayjsExtend.js +22 -0
  331. package/lib/utils/dayjsExtend.js.map +1 -0
  332. package/lib/utils/enableWhenExpression.d.ts +5 -1
  333. package/lib/utils/enableWhenExpression.js +26 -21
  334. package/lib/utils/enableWhenExpression.js.map +1 -1
  335. package/lib/utils/fhirpath.d.ts +3 -1
  336. package/lib/utils/fhirpath.js +25 -15
  337. package/lib/utils/fhirpath.js.map +1 -1
  338. package/lib/utils/index.d.ts +1 -0
  339. package/lib/utils/index.js +1 -0
  340. package/lib/utils/index.js.map +1 -1
  341. package/lib/utils/initialiseForm.d.ts +2 -0
  342. package/lib/utils/initialiseForm.js +13 -5
  343. package/lib/utils/initialiseForm.js.map +1 -1
  344. package/lib/utils/itemControl.d.ts +12 -0
  345. package/lib/utils/itemControl.js +30 -0
  346. package/lib/utils/itemControl.js.map +1 -1
  347. package/lib/utils/launchContext.d.ts +0 -0
  348. package/lib/utils/launchContext.js +2 -0
  349. package/lib/utils/launchContext.js.map +1 -0
  350. package/lib/utils/mapItem.d.ts +1 -1
  351. package/lib/utils/qrItem.d.ts +1 -7
  352. package/lib/utils/qrItem.js +1 -12
  353. package/lib/utils/qrItem.js.map +1 -1
  354. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +4 -2
  355. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -1
  356. package/lib/utils/removeHidden.js +2 -1
  357. package/lib/utils/removeHidden.js.map +1 -1
  358. package/lib/utils/repopulateIntoResponse.js +90 -29
  359. package/lib/utils/repopulateIntoResponse.js.map +1 -1
  360. package/lib/utils/repopulateItems.d.ts +14 -1
  361. package/lib/utils/repopulateItems.js +251 -70
  362. package/lib/utils/repopulateItems.js.map +1 -1
  363. package/lib/utils/repopulateRepeatGroup.js +9 -1
  364. package/lib/utils/repopulateRepeatGroup.js.map +1 -1
  365. package/lib/utils/slider.d.ts +28 -0
  366. package/lib/utils/slider.js +89 -0
  367. package/lib/utils/slider.js.map +1 -0
  368. package/package.json +20 -18
  369. package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +10 -7
  370. package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +11 -8
  371. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +46 -35
  372. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +48 -37
  373. package/src/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.tsx +21 -11
  374. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +11 -10
  375. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +12 -9
  376. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +3 -2
  377. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +16 -11
  378. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.tsx +3 -2
  379. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +14 -9
  380. package/src/components/FormComponents/CustomDateItem/CustomDateItem.tsx +140 -0
  381. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.tsx +96 -0
  382. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.tsx +81 -0
  383. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.tsx +33 -0
  384. package/src/components/FormComponents/{Typography.styles.ts → CustomDateItem/customDateTimePicker/MuiDatePicker.ts} +4 -7
  385. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/index.ts +18 -0
  386. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.ts +18 -0
  387. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.ts +154 -0
  388. package/src/components/FormComponents/CustomDateItem/index.ts +18 -0
  389. package/src/components/FormComponents/DateItem/DateItem.tsx +10 -8
  390. package/src/components/FormComponents/DateTimeItem/DateTimeItem.tsx +10 -8
  391. package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +11 -10
  392. package/src/components/FormComponents/DisplayItem/DisplayInstructions.styles.ts +0 -1
  393. package/src/components/FormComponents/DisplayItem/DisplayInstructions.tsx +8 -3
  394. package/src/components/FormComponents/DisplayItem/DisplayItem.tsx +2 -2
  395. package/src/components/FormComponents/GridGroup/GridGroup.tsx +49 -15
  396. package/src/components/FormComponents/GridGroup/GridRow.tsx +12 -7
  397. package/src/components/FormComponents/GridGroup/GridTable.tsx +32 -8
  398. package/src/components/FormComponents/GridGroup/index.ts +18 -0
  399. package/src/components/FormComponents/GroupItem/GroupHeading.tsx +12 -6
  400. package/src/components/FormComponents/GroupItem/GroupItem.tsx +13 -8
  401. package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +33 -11
  402. package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +11 -10
  403. package/src/components/FormComponents/Item.styles.ts +0 -5
  404. package/src/components/FormComponents/ItemParts/FadingCheckIcon.tsx +2 -2
  405. package/src/components/FormComponents/ItemParts/ItemFieldGrid.tsx +6 -5
  406. package/src/components/FormComponents/ItemParts/ItemLabelText.tsx +10 -5
  407. package/src/components/FormComponents/ItemParts/ItemLabelWrapper.tsx +3 -2
  408. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.tsx +10 -4
  409. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +15 -9
  410. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +58 -47
  411. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.tsx +15 -6
  412. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +13 -10
  413. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionField.tsx +10 -4
  414. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +12 -7
  415. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetField.tsx +10 -4
  416. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +14 -9
  417. package/src/components/FormComponents/RepeatGroup/AddItemButton.tsx +3 -2
  418. package/src/components/FormComponents/RepeatGroup/DeleteItemButton.tsx +3 -2
  419. package/src/components/FormComponents/RepeatGroup/RepeatGroup.tsx +61 -10
  420. package/src/components/FormComponents/RepeatGroup/RepeatGroupItem.tsx +23 -7
  421. package/src/components/FormComponents/RepeatItem/AddItemButton.tsx +3 -2
  422. package/src/components/FormComponents/RepeatItem/DeleteItemButton.tsx +3 -2
  423. package/src/components/FormComponents/RepeatItem/RepeatField.tsx +33 -9
  424. package/src/components/FormComponents/RepeatItem/RepeatItem.tsx +44 -7
  425. package/src/components/FormComponents/RepeatItem/index.ts +18 -0
  426. package/src/components/FormComponents/SingleItem/SingleItem.tsx +12 -6
  427. package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +41 -11
  428. package/src/components/FormComponents/SliderItem/Slider.styles.ts +34 -0
  429. package/src/components/FormComponents/SliderItem/SliderDisplayValue.tsx +43 -0
  430. package/src/components/FormComponents/SliderItem/SliderField.tsx +88 -0
  431. package/src/components/FormComponents/SliderItem/SliderItem.tsx +115 -0
  432. package/src/components/FormComponents/SliderItem/SliderLabels.tsx +53 -0
  433. package/src/components/FormComponents/StringItem/StringItem.tsx +9 -7
  434. package/src/components/FormComponents/Tables/AddRowButton.tsx +3 -2
  435. package/src/components/FormComponents/Tables/DeleteRowButton.tsx +3 -2
  436. package/src/components/FormComponents/Tables/GroupTable.tsx +70 -7
  437. package/src/components/FormComponents/Tables/GroupTableRow.tsx +12 -7
  438. package/src/components/FormComponents/TextItem/TextItem.tsx +9 -7
  439. package/src/components/FormComponents/TimeItem/TimeItem.tsx +10 -8
  440. package/src/components/FormComponents/UrlItem/UrlItem.tsx +9 -7
  441. package/src/components/FormComponents/index.ts +3 -0
  442. package/src/components/Renderer/BaseRenderer.tsx +5 -12
  443. package/src/components/Renderer/FormBodyCollapsible.tsx +9 -7
  444. package/src/components/Renderer/FormBodySingleCollapsibleWrapper.tsx +2 -3
  445. package/src/components/Renderer/FormBodyTabbed.tsx +9 -7
  446. package/src/components/Renderer/FormTopLevelItem.tsx +21 -13
  447. package/src/components/Tabs/FormBodySingleTab.tsx +1 -1
  448. package/src/components/Tabs/ShowCompletedTabsSection.tsx +1 -1
  449. package/src/hooks/useDateValidation.tsx +79 -0
  450. package/src/hooks/useDecimalCalculatedExpression.ts +3 -4
  451. package/src/hooks/useInitialiseRepeatAnswers.ts +1 -1
  452. package/src/hooks/useIntegerCalculatedExpression.ts +3 -4
  453. package/src/hooks/useReadOnly.ts +30 -0
  454. package/src/hooks/useSliderExtensions.ts +50 -0
  455. package/src/hooks/useTerminologyServerQuery.ts +0 -2
  456. package/src/index.ts +12 -9
  457. package/src/interfaces/calculatedExpression.interface.ts +1 -1
  458. package/src/interfaces/questionnaireStore.interface.ts +1 -0
  459. package/src/interfaces/renderProps.interface.ts +8 -3
  460. package/src/stores/useQuestionnaireStore.ts +39 -16
  461. package/src/theme/customGlobalStyles.tsx +0 -4
  462. package/src/theme/typography.ts +3 -5
  463. package/src/utils/calculatedExpression.ts +104 -35
  464. package/src/utils/dayjsExtend.ts +23 -0
  465. package/src/utils/enableWhenExpression.ts +49 -34
  466. package/src/utils/fhirpath.ts +50 -31
  467. package/src/utils/index.ts +1 -0
  468. package/src/utils/initialiseForm.ts +15 -5
  469. package/src/utils/itemControl.ts +32 -0
  470. package/src/utils/mapItem.ts +1 -1
  471. package/src/utils/qrItem.ts +1 -16
  472. package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +4 -2
  473. package/src/utils/removeHidden.ts +2 -1
  474. package/src/utils/repopulateIntoResponse.ts +134 -43
  475. package/src/utils/repopulateItems.ts +379 -101
  476. package/src/utils/slider.ts +112 -0
  477. package/src/utils/repopulateRepeatGroup.ts +0 -68
@@ -24,26 +24,47 @@ import type {
24
24
  import type { Tabs } from '../interfaces/tab.interface';
25
25
  import _isEqual from 'lodash/isEqual';
26
26
  import { containsTabs, isTabContainer } from './tabs';
27
- import { getShortText } from './itemControl';
28
- import {
29
- checkIsRepeatGroupToRepopulate,
30
- getRepeatGroupToRepopulate
31
- } from './repopulateRepeatGroup';
27
+ import { getShortText, isSpecificItemControl } from './itemControl';
28
+ import { getQrItemsIndex, mapQItemsIndex } from './mapItem';
29
+ import type { EnableWhenExpression, EnableWhenItems } from '../interfaces/enableWhen.interface';
30
+ import { isHidden } from './qItem';
32
31
 
33
32
  export interface ItemToRepopulate {
34
33
  qItem: QuestionnaireItem | null;
35
34
  heading: string | null;
35
+
36
+ // for non-repeat groups
36
37
  newQRItem: QuestionnaireResponseItem;
37
38
  oldQRItem?: QuestionnaireResponseItem;
39
+
40
+ // for repeat groups
41
+ newQRItems: QuestionnaireResponseItem[];
42
+ oldQRItems?: QuestionnaireResponseItem[];
43
+ }
44
+
45
+ interface getItemsToRepopulateParams {
46
+ sourceQuestionnaire: Questionnaire;
47
+ tabs: Tabs;
48
+ populatedResponse: QuestionnaireResponse;
49
+ updatableResponse: QuestionnaireResponse;
50
+ enableWhenIsActivated: boolean;
51
+ enableWhenItems: EnableWhenItems;
52
+ enableWhenExpressions: Record<string, EnableWhenExpression>;
38
53
  }
39
54
 
40
55
  export function getItemsToRepopulate(
41
- sourceQuestionnaire: Questionnaire,
42
- itemTypes: Record<string, string>,
43
- tabs: Tabs,
44
- populatedResponse: QuestionnaireResponse,
45
- updatableResponse: QuestionnaireResponse
56
+ params: getItemsToRepopulateParams
46
57
  ): Record<string, ItemToRepopulate> {
58
+ const {
59
+ sourceQuestionnaire,
60
+ tabs,
61
+ populatedResponse,
62
+ updatableResponse,
63
+ enableWhenIsActivated,
64
+ enableWhenItems,
65
+ enableWhenExpressions
66
+ } = params;
67
+
47
68
  if (
48
69
  !sourceQuestionnaire.item ||
49
70
  sourceQuestionnaire.item.length === 0 ||
@@ -55,152 +76,409 @@ export function getItemsToRepopulate(
55
76
  return {};
56
77
  }
57
78
 
58
- const populatedItems: QuestionnaireResponseItem[] = [];
59
- for (const topLevelItem of populatedResponse.item) {
60
- populatedItems.push(...getPopulatedItemsRecursive(topLevelItem, itemTypes));
61
- }
62
-
63
- const itemsToRepopulate = populatedItems.reduce(
64
- (mapping: Record<string, ItemToRepopulate>, item) => {
65
- mapping[item.linkId] = {
66
- qItem: null,
67
- heading: null,
68
- newQRItem: item
69
- };
79
+ const topLevelQItems = sourceQuestionnaire.item;
80
+ const populatedTopLevelQRItems = populatedResponse.item;
70
81
 
71
- return mapping;
72
- },
73
- {}
82
+ const qItemsIndexMap = mapQItemsIndex(sourceQuestionnaire);
83
+ const populatedTopLevelQRItemsByIndex = getQrItemsIndex(
84
+ topLevelQItems,
85
+ populatedTopLevelQRItems,
86
+ qItemsIndexMap
74
87
  );
75
88
 
76
- // Get corresponding old items from updatableResponse if they are different
77
- for (const topLevelItem of updatableResponse.item) {
78
- checkCorrespondingOldItemsRecursive(topLevelItem, itemTypes, itemsToRepopulate);
79
- }
89
+ const itemsToRepopulate: Record<string, ItemToRepopulate> = {};
90
+ for (const [index, topLevelQItem] of topLevelQItems.entries()) {
91
+ const populatedQrItemOrItems = populatedTopLevelQRItemsByIndex[index];
92
+ if (!populatedQrItemOrItems) {
93
+ continue;
94
+ }
80
95
 
81
- // Get corresponding old items from updatableResponse if they are different
82
- for (const topLevelItem of sourceQuestionnaire.item) {
83
- const heading = topLevelItem.text ?? null;
84
- const hasTabs = isTabContainer(topLevelItem) || containsTabs(topLevelItem);
85
- getCorrespondingQuestionnaireItemsRecursive(
86
- topLevelItem,
96
+ const heading = topLevelQItem.text ?? null;
97
+ const hasTabs = isTabContainer(topLevelQItem) || containsTabs(topLevelQItem);
98
+
99
+ getItemsToRepopulateRecursive({
100
+ qItem: topLevelQItem,
101
+ qrItemOrItems: populatedQrItemOrItems,
87
102
  heading,
88
103
  tabs,
89
104
  hasTabs,
90
- itemsToRepopulate
91
- );
105
+ itemsToRepopulate,
106
+ enableWhenIsActivated,
107
+ enableWhenItems,
108
+ enableWhenExpressions
109
+ });
110
+ }
111
+
112
+ const oldTopLevelQRItemsByIndex = getQrItemsIndex(
113
+ topLevelQItems,
114
+ updatableResponse.item,
115
+ qItemsIndexMap
116
+ );
117
+ for (const [index, topLevelQItem] of topLevelQItems.entries()) {
118
+ const oldQrItemOrItems = oldTopLevelQRItemsByIndex[index];
119
+ if (!oldQrItemOrItems) {
120
+ continue;
121
+ }
122
+
123
+ checkCorrespondingOldItemsRecursive(topLevelQItem, oldQrItemOrItems, itemsToRepopulate);
92
124
  }
93
125
 
94
126
  return itemsToRepopulate;
95
127
  }
96
128
 
129
+ interface getItemsToRepopulateRecursiveParams {
130
+ qItem: QuestionnaireItem;
131
+ qrItemOrItems: QuestionnaireResponseItem | QuestionnaireResponseItem[];
132
+ heading: string | null;
133
+ tabs: Tabs;
134
+ hasTabs: boolean;
135
+ itemsToRepopulate: Record<string, ItemToRepopulate>;
136
+ enableWhenIsActivated: boolean;
137
+ enableWhenItems: EnableWhenItems;
138
+ enableWhenExpressions: Record<string, EnableWhenExpression>;
139
+ }
140
+
97
141
  // 1. Get items to repopulate (only new items)
98
142
  // 2. Get corresponding old items from updatableResponse (if they are different)
99
143
  // 3. Compare old and new items in dialog - if there are none, show a dialog saying there is no new data
100
144
  // 4. Have checkboxes in dialog to update response
101
145
  // 5. Replace old answers with new answers
146
+ function getItemsToRepopulateRecursive(params: getItemsToRepopulateRecursiveParams) {
147
+ const {
148
+ qItem,
149
+ qrItemOrItems,
150
+ tabs,
151
+ hasTabs,
152
+ itemsToRepopulate,
153
+ enableWhenIsActivated,
154
+ enableWhenItems,
155
+ enableWhenExpressions
156
+ } = params;
157
+ let { heading } = params;
102
158
 
103
- function getCorrespondingQuestionnaireItemsRecursive(
104
- qItem: QuestionnaireItem,
105
- heading: string | null,
106
- tabs: Tabs,
107
- hasTabs: boolean,
108
- itemsToRepopulate: Record<string, ItemToRepopulate>
109
- ): void {
110
- if (qItem.type === 'group' && qItem.item && qItem.item.length > 0) {
159
+ if (!qrItemOrItems) {
160
+ return;
161
+ }
162
+
163
+ // Return nothing if corresponding qItem is hidden
164
+ if (
165
+ isHidden({
166
+ questionnaireItem: qItem,
167
+ enableWhenIsActivated,
168
+ enableWhenItems,
169
+ enableWhenExpressions
170
+ })
171
+ ) {
172
+ return null;
173
+ }
174
+
175
+ // For repeat groups
176
+ const hasMultipleAnswers = Array.isArray(qrItemOrItems);
177
+ if (hasMultipleAnswers) {
178
+ if (qrItemOrItems.length > 0) {
179
+ getRepeatGroupToRepopulate(qItem, qrItemOrItems, heading, itemsToRepopulate);
180
+ }
181
+ return;
182
+ }
183
+
184
+ const childQItems = qItem.item;
185
+ const childQRItems = qrItemOrItems.item;
186
+
187
+ if (childQItems && childQItems.length > 0 && childQRItems) {
111
188
  const isTab = !!tabs[qItem.linkId];
112
189
  if (isTab) {
113
190
  heading = getShortText(qItem) ?? qItem.text ?? null;
114
191
  }
115
192
 
116
- // TODO it seems like there can only be one answer per linkId, we might need to do repeat groups differently
117
-
118
- /* Repeat group implementation */
119
- if (qItem.type === 'group' && qItem.repeats) {
120
- const isRepeatGroupToRepopulate = checkIsRepeatGroupToRepopulate(qItem, itemsToRepopulate);
121
- if (isRepeatGroupToRepopulate) {
122
- const repeatGroupToRepopulate = getRepeatGroupToRepopulate(qItem, itemsToRepopulate);
123
- if (repeatGroupToRepopulate) {
124
- itemsToRepopulate[qItem.linkId] = repeatGroupToRepopulate;
125
- return;
126
- }
127
- }
193
+ const qItemsIndexMap = mapQItemsIndex(qItem);
194
+ const populatedQRItemsByIndex = getQrItemsIndex(childQItems, childQRItems, qItemsIndexMap);
195
+
196
+ // For grid groups
197
+ const itemIsGrid = isSpecificItemControl(qItem, 'grid');
198
+ if (itemIsGrid) {
199
+ getGridTableToRepopulate({
200
+ qItem,
201
+ gridChildQItems: childQItems,
202
+ gridChildQRItemsByIndex: populatedQRItemsByIndex,
203
+ heading,
204
+ itemsToRepopulate,
205
+ enableWhenIsActivated,
206
+ enableWhenItems,
207
+ enableWhenExpressions
208
+ });
209
+ return;
128
210
  }
129
211
 
130
- // /* Grid implementation */
131
- // if (qItem.type === 'group' && isSpecificItemControl(qItem, 'grid')) {
132
- // const isRepeatGroupToRepopulate = checkIsRepeatGroupToRepopulate(qItem, itemsToRepopulate);
133
- // if (isRepeatGroupToRepopulate) {
134
- // getRepeatGroupToRepopulate(qItem, itemsToRepopulate);
135
- // }
136
- // }
137
-
138
- for (const childItem of qItem.item) {
139
- getCorrespondingQuestionnaireItemsRecursive(
140
- childItem,
212
+ // For normal groups with children
213
+ for (const [index, childQItem] of childQItems.entries()) {
214
+ const childQrItemOrItems = populatedQRItemsByIndex[index];
215
+ if (!childQrItemOrItems) {
216
+ continue;
217
+ }
218
+
219
+ getItemsToRepopulateRecursive({
220
+ qItem: childQItem,
221
+ qrItemOrItems: childQrItemOrItems,
141
222
  heading,
142
223
  tabs,
143
224
  hasTabs,
144
- itemsToRepopulate
145
- );
225
+ itemsToRepopulate,
226
+ enableWhenIsActivated,
227
+ enableWhenItems,
228
+ enableWhenExpressions
229
+ });
146
230
  }
147
231
 
232
+ const hasSingleAnswer = !Array.isArray(qrItemOrItems);
233
+ if (hasSingleAnswer && qrItemOrItems.answer) {
234
+ getSingleItemToRepopulate(qItem, qrItemOrItems, heading, itemsToRepopulate);
235
+ }
148
236
  return;
149
237
  }
150
238
 
151
- if (!itemsToRepopulate[qItem.linkId]) {
239
+ // For single items without children
240
+ getSingleItemToRepopulate(qItem, qrItemOrItems, heading, itemsToRepopulate);
241
+ }
242
+
243
+ function getSingleItemToRepopulate(
244
+ qItem: QuestionnaireItem,
245
+ qrItem: QuestionnaireResponseItem,
246
+ heading: string | null,
247
+ itemsToRepopulate: Record<string, ItemToRepopulate>
248
+ ) {
249
+ itemsToRepopulate[qItem.linkId] = {
250
+ qItem: qItem,
251
+ heading: heading,
252
+ newQRItem: qrItem,
253
+ newQRItems: []
254
+ };
255
+ }
256
+
257
+ function getRepeatGroupToRepopulate(
258
+ qItem: QuestionnaireItem,
259
+ qrItems: QuestionnaireResponseItem[],
260
+ heading: string | null,
261
+ itemsToRepopulate: Record<string, ItemToRepopulate>
262
+ ) {
263
+ itemsToRepopulate[qItem.linkId] = {
264
+ qItem: qItem,
265
+ heading: heading,
266
+ newQRItem: {
267
+ linkId: qItem.linkId
268
+ },
269
+ newQRItems: qrItems
270
+ };
271
+ }
272
+
273
+ interface getGridTableToRepopulateParams {
274
+ qItem: QuestionnaireItem;
275
+ gridChildQItems: QuestionnaireItem[];
276
+ gridChildQRItemsByIndex: (QuestionnaireResponseItem | QuestionnaireResponseItem[] | undefined)[];
277
+ heading: string | null;
278
+ itemsToRepopulate: Record<string, ItemToRepopulate>;
279
+ enableWhenIsActivated: boolean;
280
+ enableWhenItems: EnableWhenItems;
281
+ enableWhenExpressions: Record<string, EnableWhenExpression>;
282
+ }
283
+
284
+ function getGridTableToRepopulate(params: getGridTableToRepopulateParams) {
285
+ const {
286
+ qItem,
287
+ gridChildQItems,
288
+ gridChildQRItemsByIndex,
289
+ heading,
290
+ itemsToRepopulate,
291
+ enableWhenIsActivated,
292
+ enableWhenItems,
293
+ enableWhenExpressions
294
+ } = params;
295
+
296
+ if (gridChildQItems.length === 0) {
152
297
  return;
153
298
  }
154
299
 
155
- itemsToRepopulate[qItem.linkId].qItem = qItem;
156
- itemsToRepopulate[qItem.linkId].heading = heading;
300
+ const gridChildQRItemsToRepopulate = gridChildQItems
301
+ .map((qItem, index) => {
302
+ if (
303
+ isHidden({
304
+ questionnaireItem: qItem,
305
+ enableWhenIsActivated,
306
+ enableWhenItems,
307
+ enableWhenExpressions
308
+ })
309
+ ) {
310
+ return null;
311
+ }
312
+
313
+ const gridChildQrItemOrItems = gridChildQRItemsByIndex?.[index];
314
+ if (gridChildQrItemOrItems && !Array.isArray(gridChildQrItemOrItems)) {
315
+ return gridChildQrItemOrItems;
316
+ }
317
+
318
+ return null;
319
+ })
320
+ .filter((item) => item !== null) as QuestionnaireResponseItem[];
321
+
322
+ itemsToRepopulate[qItem.linkId] = {
323
+ qItem: qItem,
324
+ heading: heading,
325
+ newQRItem: {
326
+ linkId: qItem.linkId,
327
+ text: qItem.text,
328
+ item: gridChildQRItemsToRepopulate
329
+ },
330
+ newQRItems: []
331
+ };
157
332
  }
158
333
 
159
- function getPopulatedItemsRecursive(
160
- qrItem: QuestionnaireResponseItem,
161
- itemTypes: Record<string, string>
162
- ): QuestionnaireResponseItem[] {
163
- const itemType = itemTypes[qrItem.linkId];
164
- if (itemType === 'group' && qrItem.item && qrItem.item.length > 0) {
165
- const populatedChildItems: QuestionnaireResponseItem[] = [];
166
- for (const childItem of qrItem.item) {
167
- populatedChildItems.push(...getPopulatedItemsRecursive(childItem, itemTypes));
334
+ function checkCorrespondingOldItemsRecursive(
335
+ qItem: QuestionnaireItem,
336
+ oldQrItemOrItems: QuestionnaireResponseItem | QuestionnaireResponseItem[],
337
+ itemsToRepopulate: Record<string, ItemToRepopulate>
338
+ ) {
339
+ // For repeat groups
340
+ const hasMultipleAnswers = Array.isArray(oldQrItemOrItems);
341
+ if (hasMultipleAnswers) {
342
+ retrieveRepeatGroupOldQRItems(qItem, oldQrItemOrItems, itemsToRepopulate);
343
+ return;
344
+ }
345
+
346
+ const childQItems = qItem.item;
347
+ const oldChildQRItems = oldQrItemOrItems.item;
348
+
349
+ if (childQItems && childQItems.length > 0 && oldChildQRItems) {
350
+ const qItemsIndexMap = mapQItemsIndex(qItem);
351
+ const oldQRItemsByIndex = getQrItemsIndex(childQItems, oldChildQRItems, qItemsIndexMap);
352
+
353
+ // For grid groups
354
+ const itemIsGrid = isSpecificItemControl(qItem, 'grid');
355
+ if (itemIsGrid) {
356
+ retrieveGridGroupOldQRItems(qItem, childQItems, oldQRItemsByIndex, itemsToRepopulate);
357
+ return;
168
358
  }
169
359
 
170
- return populatedChildItems;
360
+ // For normal groups with children
361
+ for (const [index, childQItem] of childQItems.entries()) {
362
+ const oldChildQrItemOrItems = oldQRItemsByIndex[index];
363
+ if (!oldChildQrItemOrItems) {
364
+ continue;
365
+ }
366
+
367
+ checkCorrespondingOldItemsRecursive(childQItem, oldChildQrItemOrItems, itemsToRepopulate);
368
+ }
369
+
370
+ const hasSingleAnswer = !Array.isArray(oldQrItemOrItems);
371
+ if (hasSingleAnswer && oldQrItemOrItems.answer) {
372
+ retrieveSingleOldQRItem(qItem, oldQrItemOrItems, itemsToRepopulate);
373
+ }
374
+ return;
171
375
  }
172
376
 
173
- // record item if it is not a group item
174
- return [qrItem];
377
+ // For single items without children
378
+ retrieveSingleOldQRItem(qItem, oldQrItemOrItems, itemsToRepopulate);
175
379
  }
176
380
 
177
- function checkCorrespondingOldItemsRecursive(
178
- qrItem: QuestionnaireResponseItem,
179
- itemTypes: Record<string, string>,
381
+ function retrieveSingleOldQRItem(
382
+ qItem: QuestionnaireItem,
383
+ oldQRItem: QuestionnaireResponseItem,
180
384
  itemsToRepopulate: Record<string, ItemToRepopulate>
181
- ): void {
182
- const itemType = itemTypes[qrItem.linkId];
183
- if (itemType === 'group' && qrItem.item && qrItem.item.length > 0) {
184
- for (const childItem of qrItem.item) {
185
- checkCorrespondingOldItemsRecursive(childItem, itemTypes, itemsToRepopulate);
186
- }
385
+ ) {
386
+ const newQRItem = itemsToRepopulate[qItem.linkId]?.newQRItem;
187
387
 
388
+ if (!newQRItem) {
188
389
  return;
189
390
  }
190
391
 
191
- const oldItem = qrItem;
192
- const newItem = itemsToRepopulate[qrItem.linkId]?.newQRItem;
392
+ if (_isEqual(oldQRItem, newQRItem)) {
393
+ delete itemsToRepopulate[qItem.linkId];
394
+ return;
395
+ }
396
+
397
+ itemsToRepopulate[qItem.linkId].oldQRItem = oldQRItem;
398
+ }
193
399
 
194
- if (!newItem) {
400
+ function retrieveRepeatGroupOldQRItems(
401
+ qItem: QuestionnaireItem,
402
+ oldQRItems: QuestionnaireResponseItem[],
403
+ itemsToRepopulate: Record<string, ItemToRepopulate>
404
+ ) {
405
+ if (!(qItem && oldQRItems && oldQRItems.length > 0)) {
406
+ return;
407
+ }
408
+
409
+ const newQRItems = itemsToRepopulate[qItem.linkId]?.newQRItems;
410
+ if (!newQRItems) {
411
+ return;
412
+ }
413
+
414
+ if (_isEqual(oldQRItems, newQRItems)) {
415
+ delete itemsToRepopulate[qItem.linkId];
416
+ return;
417
+ }
418
+
419
+ itemsToRepopulate[qItem.linkId].oldQRItems = oldQRItems;
420
+ }
421
+
422
+ function retrieveGridGroupOldQRItems(
423
+ qItem: QuestionnaireItem,
424
+ gridChildQItems: QuestionnaireItem[],
425
+ oldGridQRItemsByIndex: (QuestionnaireResponseItem | QuestionnaireResponseItem[] | undefined)[],
426
+ itemsToRepopulate: Record<string, ItemToRepopulate>
427
+ ) {
428
+ if (gridChildQItems.length === 0) {
195
429
  return;
196
430
  }
197
431
 
198
- if (_isEqual(oldItem, newItem)) {
199
- delete itemsToRepopulate[qrItem.linkId];
432
+ const newGridQRItem = itemsToRepopulate[qItem.linkId]?.newQRItem;
433
+ if (!newGridQRItem || !newGridQRItem.item) {
200
434
  return;
201
435
  }
202
436
 
203
- // const filteredNewItems = newItems.filter((newItem) => !_isEqual(oldItem, newItem));
437
+ const newGridChildQRItemMap = new Map<string, QuestionnaireResponseItem>();
438
+
439
+ for (const newGridChildQRItem of newGridQRItem.item) {
440
+ newGridChildQRItemMap.set(newGridChildQRItem.linkId, newGridChildQRItem);
441
+ }
442
+
443
+ // Get old qr items that are different from the new qr items
444
+ const oldGridChildQRItems: QuestionnaireResponseItem[] = [];
445
+ for (const [index, gridChildQItem] of gridChildQItems.entries()) {
446
+ const oldGridChildQrItemOrItems = oldGridQRItemsByIndex[index];
447
+ if (!oldGridChildQrItemOrItems || Array.isArray(oldGridChildQrItemOrItems)) {
448
+ continue;
449
+ }
450
+
451
+ // At this point we have a single qrItem
452
+ const oldGridChildQrItem = oldGridChildQrItemOrItems;
453
+ const newGridChildQRItem = newGridChildQRItemMap.get(gridChildQItem.linkId);
454
+
455
+ if (!newGridChildQRItem) {
456
+ continue;
457
+ }
458
+
459
+ if (_isEqual(oldGridChildQrItem, newGridChildQRItem)) {
460
+ newGridChildQRItemMap.delete(gridChildQItem.linkId);
461
+ } else {
462
+ oldGridChildQRItems.push(oldGridChildQrItem);
463
+ }
464
+ }
465
+
466
+ const newGridChildQRItemsToRepopulate = [...newGridChildQRItemMap.values()];
467
+ // Nothing to repopulate, delete whole item
468
+ if (newGridChildQRItemsToRepopulate.length === 0) {
469
+ delete itemsToRepopulate[qItem.linkId];
470
+ return;
471
+ }
204
472
 
205
- itemsToRepopulate[qrItem.linkId].oldQRItem = oldItem;
473
+ // Otherwise create both old and new grid qr item
474
+ itemsToRepopulate[qItem.linkId].newQRItem = {
475
+ linkId: qItem.linkId,
476
+ text: qItem.text,
477
+ item: newGridChildQRItemsToRepopulate
478
+ };
479
+ itemsToRepopulate[qItem.linkId].oldQRItem = {
480
+ linkId: qItem.linkId,
481
+ text: qItem.text,
482
+ item: oldGridChildQRItems
483
+ };
206
484
  }
@@ -0,0 +1,112 @@
1
+ /*
2
+ * Copyright 2023 Commonwealth Scientific and Industrial Research
3
+ * Organisation (CSIRO) ABN 41 687 119 230.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ import type { Extension, QuestionnaireItem } from 'fhir/r4';
19
+
20
+ /**
21
+ * Get Questionnaire slider step value if its extension is present (http://hl7.org/fhir/StructureDefinition/questionnaire-sliderStepValue)
22
+ *
23
+ * @author Sean Fong
24
+ */
25
+ export function getSliderStepValue(qItem: QuestionnaireItem): number | null {
26
+ const itemControl = qItem.extension?.find(
27
+ (extension: Extension) =>
28
+ extension.url === 'http://hl7.org/fhir/StructureDefinition/questionnaire-sliderStepValue'
29
+ );
30
+
31
+ if (itemControl) {
32
+ if (itemControl.valueInteger) {
33
+ return itemControl.valueInteger;
34
+ }
35
+ }
36
+ return null;
37
+ }
38
+
39
+ /**
40
+ * Get minimum value if its extension is present (http://hl7.org/fhir/StructureDefinition/minValue)
41
+ * Only supports valueInteger and valueDecimal for now
42
+ *
43
+ * @author Sean Fong
44
+ */
45
+ export function getMinValue(qItem: QuestionnaireItem): number | null {
46
+ const itemControl = qItem.extension?.find(
47
+ (extension: Extension) => extension.url === 'http://hl7.org/fhir/StructureDefinition/minValue'
48
+ );
49
+
50
+ if (itemControl) {
51
+ if (itemControl.valueInteger) {
52
+ return itemControl.valueInteger;
53
+ }
54
+
55
+ if (itemControl.valueDecimal) {
56
+ return itemControl.valueDecimal;
57
+ }
58
+ }
59
+ return null;
60
+ }
61
+
62
+ /**
63
+ * Get maximum value if its extension is present (http://hl7.org/fhir/StructureDefinition/maxValue)
64
+ * Only supports valueInteger and valueDecimal for now
65
+ *
66
+ * @author Sean Fong
67
+ */
68
+ export function getMaxValue(qItem: QuestionnaireItem): number | null {
69
+ const itemControl = qItem.extension?.find(
70
+ (extension: Extension) => extension.url === 'http://hl7.org/fhir/StructureDefinition/maxValue'
71
+ );
72
+
73
+ if (itemControl) {
74
+ if (itemControl.valueInteger) {
75
+ return itemControl.valueInteger;
76
+ }
77
+
78
+ if (itemControl.valueDecimal) {
79
+ return itemControl.valueDecimal;
80
+ }
81
+ }
82
+ return null;
83
+ }
84
+
85
+ export function getSliderMarks(
86
+ minValue: number,
87
+ maxValue: number,
88
+ minLabel: string,
89
+ maxLabel: string,
90
+ stepValue: number
91
+ ) {
92
+ const numOfSteps = Math.ceil((maxValue - minValue) / stepValue);
93
+ if (numOfSteps > 20) {
94
+ return [
95
+ {
96
+ value: minValue,
97
+ label: minLabel !== '' ? minLabel : minValue.toString()
98
+ },
99
+ {
100
+ value: maxValue,
101
+ label: maxLabel !== '' ? maxLabel : maxValue.toString()
102
+ }
103
+ ];
104
+ }
105
+
106
+ return Array.from({ length: numOfSteps + 1 }, (_, i) => minValue + i * stepValue).map(
107
+ (value) => ({
108
+ value: value,
109
+ label: value
110
+ })
111
+ );
112
+ }