@aehrc/smart-forms-renderer 0.8.1 → 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 (340) hide show
  1. package/lib/components/FormComponents/BooleanItem/BooleanItem.d.ts +2 -2
  2. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.d.ts +2 -2
  3. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.d.ts +3 -3
  4. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +12 -12
  5. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
  6. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.d.ts +3 -3
  7. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +12 -12
  8. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
  9. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.d.ts +3 -4
  10. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js +3 -3
  11. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js.map +1 -1
  12. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.d.ts +2 -2
  13. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.d.ts +2 -2
  14. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.d.ts +2 -2
  15. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.d.ts +2 -2
  16. package/lib/components/FormComponents/CustomDateItem/CustomDateField2.d.ts +18 -0
  17. package/lib/components/FormComponents/CustomDateItem/CustomDateField2.js +31 -0
  18. package/lib/components/FormComponents/CustomDateItem/CustomDateField2.js.map +1 -0
  19. package/lib/components/FormComponents/CustomDateItem/CustomDateItem.d.ts +9 -0
  20. package/lib/components/FormComponents/CustomDateItem/CustomDateItem.js +68 -0
  21. package/lib/components/FormComponents/CustomDateItem/CustomDateItem.js.map +1 -0
  22. package/lib/components/FormComponents/CustomDateItem/CustomDateTimeField.d.ts +9 -0
  23. package/lib/components/FormComponents/CustomDateItem/CustomDateTimeField.js +75 -0
  24. package/lib/components/FormComponents/CustomDateItem/CustomDateTimeField.js.map +1 -0
  25. package/lib/components/FormComponents/CustomDateItem/CustomDateTimePickerText2.d.ts +9 -0
  26. package/lib/components/FormComponents/CustomDateItem/CustomDateTimePickerText2.js +75 -0
  27. package/lib/components/FormComponents/CustomDateItem/CustomDateTimePickerText2.js.map +1 -0
  28. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.d.ts +18 -0
  29. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.js +33 -0
  30. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.js.map +1 -0
  31. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.d.ts +11 -0
  32. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.js +55 -0
  33. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.js.map +1 -0
  34. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.d.ts +9 -0
  35. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.js +13 -0
  36. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.js.map +1 -0
  37. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.d.ts +5 -0
  38. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.js +20 -0
  39. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.js.map +1 -0
  40. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/hooks/useParseDates.d.ts +5 -0
  41. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/hooks/useParseDates.js +27 -0
  42. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/hooks/useParseDates.js.map +1 -0
  43. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/index.d.ts +1 -0
  44. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/index.js +18 -0
  45. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/index.js.map +1 -0
  46. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.d.ts +1 -0
  47. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.js +18 -0
  48. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.js.map +1 -0
  49. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.d.ts +9 -0
  50. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.js +121 -0
  51. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.js.map +1 -0
  52. package/lib/components/FormComponents/CustomDateItem/customDateTimePickerText.d.ts +9 -0
  53. package/lib/components/FormComponents/CustomDateItem/customDateTimePickerText.js +71 -0
  54. package/lib/components/FormComponents/CustomDateItem/customDateTimePickerText.js.map +1 -0
  55. package/lib/components/FormComponents/CustomDateItem/index.d.ts +1 -0
  56. package/lib/components/FormComponents/CustomDateItem/index.js +18 -0
  57. package/lib/components/FormComponents/CustomDateItem/index.js.map +1 -0
  58. package/lib/components/FormComponents/DateItem/DateItem.d.ts +3 -4
  59. package/lib/components/FormComponents/DateTimeItem/DateTimeItem.d.ts +2 -2
  60. package/lib/components/FormComponents/DecimalItem/DecimalItem.d.ts +2 -2
  61. package/lib/components/FormComponents/DecimalItem/DecimalItem.js +2 -3
  62. package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
  63. package/lib/components/FormComponents/DisplayItem/DisplayBox.d.ts +0 -0
  64. package/lib/components/FormComponents/DisplayItem/DisplayBox.js +2 -0
  65. package/lib/components/FormComponents/DisplayItem/DisplayBox.js.map +1 -0
  66. package/lib/components/FormComponents/DisplayItem/DisplayBox.styles.d.ts +4 -0
  67. package/lib/components/FormComponents/DisplayItem/DisplayBox.styles.js +35 -0
  68. package/lib/components/FormComponents/DisplayItem/DisplayBox.styles.js.map +1 -0
  69. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.d.ts +2 -1
  70. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js.map +1 -1
  71. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.js +0 -1
  72. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.js.map +1 -1
  73. package/lib/components/FormComponents/GridGroup/GridGroup.d.ts +3 -3
  74. package/lib/components/FormComponents/GridGroup/GridGroup.js +13 -8
  75. package/lib/components/FormComponents/GridGroup/GridGroup.js.map +1 -1
  76. package/lib/components/FormComponents/GridGroup/GridRow.d.ts +3 -4
  77. package/lib/components/FormComponents/GridGroup/GridRow.js +3 -3
  78. package/lib/components/FormComponents/GridGroup/GridRow.js.map +1 -1
  79. package/lib/components/FormComponents/GridGroup/GridTable.d.ts +3 -3
  80. package/lib/components/FormComponents/GridGroup/GridTable.js +9 -4
  81. package/lib/components/FormComponents/GridGroup/GridTable.js.map +1 -1
  82. package/lib/components/FormComponents/GridGroup/index.d.ts +1 -0
  83. package/lib/components/FormComponents/GridGroup/index.js +18 -0
  84. package/lib/components/FormComponents/GridGroup/index.js.map +1 -0
  85. package/lib/components/FormComponents/GroupItem/GroupItem.d.ts +2 -2
  86. package/lib/components/FormComponents/GroupItem/GroupItem.js +2 -2
  87. package/lib/components/FormComponents/GroupItem/GroupItem.js.map +1 -1
  88. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.d.ts +2 -2
  89. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +5 -6
  90. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -1
  91. package/lib/components/FormComponents/IntegerItem/IntegerItem.d.ts +2 -2
  92. package/lib/components/FormComponents/IntegerItem/IntegerItem.js +2 -3
  93. package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
  94. package/lib/components/FormComponents/IntegerItem/SliderItem.d.ts +9 -0
  95. package/lib/components/FormComponents/IntegerItem/SliderItem.js +75 -0
  96. package/lib/components/FormComponents/IntegerItem/SliderItem.js.map +1 -0
  97. package/lib/components/FormComponents/ItemParts/FadingCheckIcon.js +2 -2
  98. package/lib/components/FormComponents/ItemParts/FadingCheckIcon.js.map +1 -1
  99. package/lib/components/FormComponents/ItemParts/ItemFieldGrid.d.ts +2 -2
  100. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.d.ts +2 -2
  101. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.d.ts +3 -3
  102. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js +12 -12
  103. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js.map +1 -1
  104. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.d.ts +3 -3
  105. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js +2 -2
  106. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js.map +1 -1
  107. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.d.ts +2 -2
  108. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.d.ts +2 -2
  109. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.d.ts +2 -2
  110. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.d.ts +2 -2
  111. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js +15 -4
  112. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js.map +1 -1
  113. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.d.ts +2 -2
  114. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js +2 -2
  115. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js.map +1 -1
  116. package/lib/components/FormComponents/RepeatItem/RepeatField.d.ts +3 -3
  117. package/lib/components/FormComponents/RepeatItem/RepeatField.js +3 -3
  118. package/lib/components/FormComponents/RepeatItem/RepeatField.js.map +1 -1
  119. package/lib/components/FormComponents/RepeatItem/RepeatItem.d.ts +3 -2
  120. package/lib/components/FormComponents/RepeatItem/RepeatItem.js +11 -2
  121. package/lib/components/FormComponents/RepeatItem/RepeatItem.js.map +1 -1
  122. package/lib/components/FormComponents/RepeatItem/index.d.ts +1 -0
  123. package/lib/components/FormComponents/RepeatItem/index.js +18 -0
  124. package/lib/components/FormComponents/RepeatItem/index.js.map +1 -0
  125. package/lib/components/FormComponents/SingleItem/SingleItem.d.ts +3 -3
  126. package/lib/components/FormComponents/SingleItem/SingleItem.js +2 -2
  127. package/lib/components/FormComponents/SingleItem/SingleItem.js.map +1 -1
  128. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.d.ts +3 -3
  129. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js +12 -7
  130. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -1
  131. package/lib/components/FormComponents/SliderItem/DisplayBox.styles.d.ts +4 -0
  132. package/lib/components/FormComponents/SliderItem/DisplayBox.styles.js +35 -0
  133. package/lib/components/FormComponents/SliderItem/DisplayBox.styles.js.map +1 -0
  134. package/lib/components/FormComponents/SliderItem/Slider.styles.d.ts +6 -0
  135. package/lib/components/FormComponents/SliderItem/Slider.styles.js +33 -0
  136. package/lib/components/FormComponents/SliderItem/Slider.styles.js.map +1 -0
  137. package/lib/components/FormComponents/SliderItem/SliderDisplayValue.d.ts +8 -0
  138. package/lib/components/FormComponents/SliderItem/SliderDisplayValue.js +28 -0
  139. package/lib/components/FormComponents/SliderItem/SliderDisplayValue.js.map +1 -0
  140. package/lib/components/FormComponents/SliderItem/SliderField.d.ts +16 -0
  141. package/lib/components/FormComponents/SliderItem/SliderField.js +41 -0
  142. package/lib/components/FormComponents/SliderItem/SliderField.js.map +1 -0
  143. package/lib/components/FormComponents/SliderItem/SliderItem.d.ts +9 -0
  144. package/lib/components/FormComponents/SliderItem/SliderItem.js +56 -0
  145. package/lib/components/FormComponents/SliderItem/SliderItem.js.map +1 -0
  146. package/lib/components/FormComponents/SliderItem/SliderLabels.d.ts +7 -0
  147. package/lib/components/FormComponents/SliderItem/SliderLabels.js +32 -0
  148. package/lib/components/FormComponents/SliderItem/SliderLabels.js.map +1 -0
  149. package/lib/components/FormComponents/StringItem/StringItem.d.ts +2 -2
  150. package/lib/components/FormComponents/Tables/GroupTable.d.ts +3 -2
  151. package/lib/components/FormComponents/Tables/GroupTable.js +18 -1
  152. package/lib/components/FormComponents/Tables/GroupTable.js.map +1 -1
  153. package/lib/components/FormComponents/Tables/GroupTableRow.d.ts +3 -4
  154. package/lib/components/FormComponents/Tables/GroupTableRow.js +3 -3
  155. package/lib/components/FormComponents/Tables/GroupTableRow.js.map +1 -1
  156. package/lib/components/FormComponents/TextItem/TextItem.d.ts +2 -2
  157. package/lib/components/FormComponents/TimeItem/TimeItem.d.ts +2 -2
  158. package/lib/components/FormComponents/UrlItem/UrlItem.d.ts +2 -2
  159. package/lib/components/FormComponents/index.d.ts +3 -0
  160. package/lib/components/FormComponents/index.js +3 -0
  161. package/lib/components/FormComponents/index.js.map +1 -1
  162. package/lib/components/Renderer/BaseRenderer.js +3 -5
  163. package/lib/components/Renderer/BaseRenderer.js.map +1 -1
  164. package/lib/components/Renderer/FormBodyCollapsible.d.ts +2 -2
  165. package/lib/components/Renderer/FormBodyCollapsible.js +6 -5
  166. package/lib/components/Renderer/FormBodyCollapsible.js.map +1 -1
  167. package/lib/components/Renderer/FormBodySingleCollapsibleWrapper.d.ts +2 -2
  168. package/lib/components/Renderer/FormBodySingleCollapsibleWrapper.js.map +1 -1
  169. package/lib/components/Renderer/FormBodyTabbed.d.ts +2 -2
  170. package/lib/components/Renderer/FormBodyTabbed.js +6 -5
  171. package/lib/components/Renderer/FormBodyTabbed.js.map +1 -1
  172. package/lib/components/Renderer/FormTopLevelItem.d.ts +2 -2
  173. package/lib/components/Renderer/FormTopLevelItem.js +3 -1
  174. package/lib/components/Renderer/FormTopLevelItem.js.map +1 -1
  175. package/lib/hooks/useDateSeparatorValidation.d.ts +2 -0
  176. package/lib/hooks/useDateSeparatorValidation.js +25 -0
  177. package/lib/hooks/useDateSeparatorValidation.js.map +1 -0
  178. package/lib/hooks/useDateValidation.d.ts +2 -0
  179. package/lib/hooks/useDateValidation.js +61 -0
  180. package/lib/hooks/useDateValidation.js.map +1 -0
  181. package/lib/hooks/useDecimalCalculatedExpression.d.ts +0 -1
  182. package/lib/hooks/useDecimalCalculatedExpression.js +3 -3
  183. package/lib/hooks/useDecimalCalculatedExpression.js.map +1 -1
  184. package/lib/hooks/useInitialiseRepeatAnswers.d.ts +1 -1
  185. package/lib/hooks/useInitialiseRepeatAnswers.js.map +1 -1
  186. package/lib/hooks/useIntegerCalculatedExpression.d.ts +0 -1
  187. package/lib/hooks/useIntegerCalculatedExpression.js +3 -3
  188. package/lib/hooks/useIntegerCalculatedExpression.js.map +1 -1
  189. package/lib/hooks/useSliderExtensions.d.ts +10 -0
  190. package/lib/hooks/useSliderExtensions.js +37 -0
  191. package/lib/hooks/useSliderExtensions.js.map +1 -0
  192. package/lib/hooks/useTerminologyServerQuery.js +0 -1
  193. package/lib/hooks/useTerminologyServerQuery.js.map +1 -1
  194. package/lib/index.d.ts +3 -3
  195. package/lib/index.js +15 -6
  196. package/lib/index.js.map +1 -1
  197. package/lib/interfaces/index.d.ts +2 -0
  198. package/lib/interfaces/index.js +18 -0
  199. package/lib/interfaces/index.js.map +1 -0
  200. package/lib/interfaces/questionnaireStore.interface.d.ts +1 -0
  201. package/lib/interfaces/renderProps.interface.d.ts +4 -3
  202. package/lib/stores/useQuestionnaireStore.d.ts +1 -0
  203. package/lib/stores/useQuestionnaireStore.js +28 -12
  204. package/lib/stores/useQuestionnaireStore.js.map +1 -1
  205. package/lib/test.d.ts +4 -0
  206. package/lib/test.js +18 -0
  207. package/lib/test.js.map +1 -0
  208. package/lib/theme/customGlobalStyles.js +0 -4
  209. package/lib/theme/customGlobalStyles.js.map +1 -1
  210. package/lib/utils/calculatedExpression.d.ts +5 -1
  211. package/lib/utils/calculatedExpression.js +21 -16
  212. package/lib/utils/calculatedExpression.js.map +1 -1
  213. package/lib/utils/dayjsExtend.d.ts +1 -0
  214. package/lib/utils/dayjsExtend.js +22 -0
  215. package/lib/utils/dayjsExtend.js.map +1 -0
  216. package/lib/utils/enableWhenExpression.d.ts +5 -1
  217. package/lib/utils/enableWhenExpression.js +26 -21
  218. package/lib/utils/enableWhenExpression.js.map +1 -1
  219. package/lib/utils/fhirpath.d.ts +3 -1
  220. package/lib/utils/fhirpath.js +25 -15
  221. package/lib/utils/fhirpath.js.map +1 -1
  222. package/lib/utils/index.d.ts +1 -0
  223. package/lib/utils/index.js +1 -0
  224. package/lib/utils/index.js.map +1 -1
  225. package/lib/utils/initialiseForm.d.ts +2 -0
  226. package/lib/utils/initialiseForm.js +13 -5
  227. package/lib/utils/initialiseForm.js.map +1 -1
  228. package/lib/utils/itemControl.d.ts +12 -0
  229. package/lib/utils/itemControl.js +30 -0
  230. package/lib/utils/itemControl.js.map +1 -1
  231. package/lib/utils/launchContext.d.ts +0 -0
  232. package/lib/utils/launchContext.js +2 -0
  233. package/lib/utils/launchContext.js.map +1 -0
  234. package/lib/utils/mapItem.d.ts +1 -1
  235. package/lib/utils/qrItem.d.ts +1 -7
  236. package/lib/utils/qrItem.js +1 -12
  237. package/lib/utils/qrItem.js.map +1 -1
  238. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +4 -2
  239. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -1
  240. package/lib/utils/removeHidden.js +2 -1
  241. package/lib/utils/removeHidden.js.map +1 -1
  242. package/lib/utils/repopulateIntoResponse.js +90 -29
  243. package/lib/utils/repopulateIntoResponse.js.map +1 -1
  244. package/lib/utils/repopulateItems.d.ts +14 -1
  245. package/lib/utils/repopulateItems.js +251 -70
  246. package/lib/utils/repopulateItems.js.map +1 -1
  247. package/lib/utils/repopulateRepeatGroup.js +9 -1
  248. package/lib/utils/repopulateRepeatGroup.js.map +1 -1
  249. package/lib/utils/slider.d.ts +28 -0
  250. package/lib/utils/slider.js +89 -0
  251. package/lib/utils/slider.js.map +1 -0
  252. package/package.json +11 -9
  253. package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +2 -2
  254. package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +2 -2
  255. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +33 -33
  256. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +35 -35
  257. package/src/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.tsx +8 -8
  258. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +2 -2
  259. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +2 -2
  260. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +2 -2
  261. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +2 -2
  262. package/src/components/FormComponents/CustomDateItem/CustomDateItem.tsx +140 -0
  263. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.tsx +96 -0
  264. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.tsx +81 -0
  265. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.tsx +33 -0
  266. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.ts +22 -0
  267. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/index.ts +18 -0
  268. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.ts +18 -0
  269. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.ts +154 -0
  270. package/src/components/FormComponents/CustomDateItem/index.ts +18 -0
  271. package/src/components/FormComponents/DateItem/DateItem.tsx +3 -3
  272. package/src/components/FormComponents/DateTimeItem/DateTimeItem.tsx +2 -2
  273. package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +4 -5
  274. package/src/components/FormComponents/DisplayItem/DisplayInstructions.styles.ts +0 -1
  275. package/src/components/FormComponents/DisplayItem/DisplayInstructions.tsx +2 -1
  276. package/src/components/FormComponents/GridGroup/GridGroup.tsx +41 -15
  277. package/src/components/FormComponents/GridGroup/GridRow.tsx +10 -9
  278. package/src/components/FormComponents/GridGroup/GridTable.tsx +29 -9
  279. package/src/components/FormComponents/GridGroup/index.ts +18 -0
  280. package/src/components/FormComponents/GroupItem/GroupItem.tsx +5 -6
  281. package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +7 -8
  282. package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +4 -5
  283. package/src/components/FormComponents/ItemParts/FadingCheckIcon.tsx +2 -2
  284. package/src/components/FormComponents/ItemParts/ItemFieldGrid.tsx +2 -2
  285. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +2 -2
  286. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +43 -43
  287. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.tsx +6 -6
  288. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +2 -2
  289. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +2 -2
  290. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +2 -2
  291. package/src/components/FormComponents/RepeatGroup/RepeatGroup.tsx +49 -6
  292. package/src/components/FormComponents/RepeatGroup/RepeatGroupItem.tsx +13 -8
  293. package/src/components/FormComponents/RepeatItem/RepeatField.tsx +15 -9
  294. package/src/components/FormComponents/RepeatItem/RepeatItem.tsx +33 -3
  295. package/src/components/FormComponents/RepeatItem/index.ts +18 -0
  296. package/src/components/FormComponents/SingleItem/SingleItem.tsx +6 -6
  297. package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +27 -11
  298. package/src/components/FormComponents/SliderItem/Slider.styles.ts +34 -0
  299. package/src/components/FormComponents/SliderItem/SliderDisplayValue.tsx +43 -0
  300. package/src/components/FormComponents/SliderItem/SliderField.tsx +88 -0
  301. package/src/components/FormComponents/SliderItem/SliderItem.tsx +115 -0
  302. package/src/components/FormComponents/SliderItem/SliderLabels.tsx +53 -0
  303. package/src/components/FormComponents/StringItem/StringItem.tsx +2 -2
  304. package/src/components/FormComponents/Tables/GroupTable.tsx +55 -3
  305. package/src/components/FormComponents/Tables/GroupTableRow.tsx +10 -9
  306. package/src/components/FormComponents/TextItem/TextItem.tsx +2 -2
  307. package/src/components/FormComponents/TimeItem/TimeItem.tsx +2 -2
  308. package/src/components/FormComponents/UrlItem/UrlItem.tsx +2 -2
  309. package/src/components/FormComponents/index.ts +3 -0
  310. package/src/components/Renderer/BaseRenderer.tsx +5 -12
  311. package/src/components/Renderer/FormBodyCollapsible.tsx +9 -7
  312. package/src/components/Renderer/FormBodySingleCollapsibleWrapper.tsx +2 -3
  313. package/src/components/Renderer/FormBodyTabbed.tsx +9 -7
  314. package/src/components/Renderer/FormTopLevelItem.tsx +14 -11
  315. package/src/hooks/useDateValidation.tsx +79 -0
  316. package/src/hooks/useDecimalCalculatedExpression.ts +3 -4
  317. package/src/hooks/useInitialiseRepeatAnswers.ts +1 -1
  318. package/src/hooks/useIntegerCalculatedExpression.ts +3 -4
  319. package/src/hooks/useSliderExtensions.ts +50 -0
  320. package/src/hooks/useTerminologyServerQuery.ts +0 -2
  321. package/src/index.ts +12 -9
  322. package/src/interfaces/questionnaireStore.interface.ts +1 -0
  323. package/src/interfaces/renderProps.interface.ts +4 -3
  324. package/src/stores/useQuestionnaireStore.ts +39 -16
  325. package/src/theme/customGlobalStyles.tsx +0 -4
  326. package/src/utils/calculatedExpression.ts +41 -28
  327. package/src/utils/dayjsExtend.ts +23 -0
  328. package/src/utils/enableWhenExpression.ts +49 -34
  329. package/src/utils/fhirpath.ts +50 -31
  330. package/src/utils/index.ts +1 -0
  331. package/src/utils/initialiseForm.ts +15 -5
  332. package/src/utils/itemControl.ts +32 -0
  333. package/src/utils/mapItem.ts +1 -1
  334. package/src/utils/qrItem.ts +1 -16
  335. package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +4 -2
  336. package/src/utils/removeHidden.ts +2 -1
  337. package/src/utils/repopulateIntoResponse.ts +134 -43
  338. package/src/utils/repopulateItems.ts +379 -101
  339. package/src/utils/slider.ts +112 -0
  340. package/src/utils/repopulateRepeatGroup.ts +0 -68
@@ -22,7 +22,7 @@ import type {
22
22
  PropsWithIsTabledAttribute,
23
23
  PropsWithParentIsReadOnlyAttribute,
24
24
  PropsWithQrItemChangeHandler,
25
- PropsWithTextShownAttribute
25
+ PropsWithShowMinimalViewAttribute
26
26
  } from '../../../interfaces/renderProps.interface';
27
27
  import useQuestionnaireStore from '../../../stores/useQuestionnaireStore';
28
28
  import SingleItemSwitcher from './SingleItemSwitcher';
@@ -30,17 +30,17 @@ import useHidden from '../../../hooks/useHidden';
30
30
  import useReadOnly from '../../../hooks/useReadOnly';
31
31
 
32
32
  interface SingleItemProps
33
- extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
33
+ extends PropsWithQrItemChangeHandler,
34
34
  PropsWithIsRepeatedAttribute,
35
35
  PropsWithIsTabledAttribute,
36
- PropsWithTextShownAttribute,
36
+ PropsWithShowMinimalViewAttribute,
37
37
  PropsWithParentIsReadOnlyAttribute {
38
38
  qItem: QuestionnaireItem;
39
- qrItem: QuestionnaireResponseItem;
39
+ qrItem: QuestionnaireResponseItem | null;
40
40
  }
41
41
 
42
42
  function SingleItem(props: SingleItemProps) {
43
- const { qItem, qrItem, isRepeated, isTabled, textShown, parentIsReadOnly, onQrItemChange } =
43
+ const { qItem, qrItem, isRepeated, isTabled, showMinimalView, parentIsReadOnly, onQrItemChange } =
44
44
  props;
45
45
 
46
46
  const updateEnableWhenItem = useQuestionnaireStore((state) => state.updateEnableWhenItem);
@@ -67,7 +67,7 @@ function SingleItem(props: SingleItemProps) {
67
67
  qrItem={qrItem}
68
68
  isRepeated={isRepeated}
69
69
  isTabled={isTabled}
70
- textShown={textShown}
70
+ showMinimalView={showMinimalView}
71
71
  parentIsReadOnly={readOnly}
72
72
  onQrItemChange={handleQrItemChange}
73
73
  />
@@ -25,31 +25,33 @@ import type {
25
25
  PropsWithIsTabledAttribute,
26
26
  PropsWithParentIsReadOnlyAttribute,
27
27
  PropsWithQrItemChangeHandler,
28
- PropsWithTextShownAttribute
28
+ PropsWithShowMinimalViewAttribute
29
29
  } from '../../../interfaces/renderProps.interface';
30
30
  import StringItem from '../StringItem/StringItem';
31
31
  import BooleanItem from '../BooleanItem/BooleanItem';
32
32
  import TimeItem from '../TimeItem/TimeItem';
33
33
  import DateTimeItem from '../DateTimeItem/DateTimeItem';
34
- import DateItem from '../DateItem/DateItem';
35
34
  import TextItem from '../TextItem/TextItem';
36
35
  import DisplayItem from '../DisplayItem/DisplayItem';
37
- import IntegerItem from '../IntegerItem/IntegerItem';
38
36
  import DecimalItem from '../DecimalItem/DecimalItem';
39
37
  import UrlItem from '../UrlItem/UrlItem';
38
+ import CustomDateItem from '../CustomDateItem/CustomDateItem';
39
+ import { isSpecificItemControl } from '../../../utils';
40
+ import SliderItem from '../SliderItem/SliderItem';
41
+ import IntegerItem from '../IntegerItem/IntegerItem';
40
42
 
41
43
  interface SingleItemSwitcherProps
42
- extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
44
+ extends PropsWithQrItemChangeHandler,
43
45
  PropsWithIsRepeatedAttribute,
44
46
  PropsWithIsTabledAttribute,
45
- PropsWithTextShownAttribute,
47
+ PropsWithShowMinimalViewAttribute,
46
48
  PropsWithParentIsReadOnlyAttribute {
47
49
  qItem: QuestionnaireItem;
48
- qrItem: QuestionnaireResponseItem;
50
+ qrItem: QuestionnaireResponseItem | null;
49
51
  }
50
52
 
51
53
  function SingleItemSwitcher(props: SingleItemSwitcherProps) {
52
- const { qItem, qrItem, isRepeated, isTabled, textShown, parentIsReadOnly, onQrItemChange } =
54
+ const { qItem, qrItem, isRepeated, isTabled, showMinimalView, parentIsReadOnly, onQrItemChange } =
53
55
  props;
54
56
 
55
57
  switch (qItem.type) {
@@ -88,7 +90,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
88
90
  );
89
91
  case 'date':
90
92
  return (
91
- <DateItem
93
+ <CustomDateItem
92
94
  qItem={qItem}
93
95
  qrItem={qrItem}
94
96
  isRepeated={isRepeated}
@@ -121,6 +123,19 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
121
123
  case 'display':
122
124
  return <DisplayItem qItem={qItem} />;
123
125
  case 'integer':
126
+ if (isSpecificItemControl(qItem, 'slider')) {
127
+ return (
128
+ <SliderItem
129
+ qItem={qItem}
130
+ qrItem={qrItem}
131
+ isRepeated={isRepeated}
132
+ isTabled={isTabled}
133
+ parentIsReadOnly={parentIsReadOnly}
134
+ onQrItemChange={onQrItemChange}
135
+ />
136
+ );
137
+ }
138
+
124
139
  return (
125
140
  <IntegerItem
126
141
  qItem={qItem}
@@ -149,7 +164,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
149
164
  qrItem={qrItem}
150
165
  isRepeated={isRepeated}
151
166
  isTabled={isTabled}
152
- textShown={textShown}
167
+ showMinimalView={showMinimalView}
153
168
  parentIsReadOnly={parentIsReadOnly}
154
169
  onQrItemChange={onQrItemChange}
155
170
  />
@@ -161,7 +176,7 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
161
176
  qrItem={qrItem}
162
177
  isRepeated={isRepeated}
163
178
  isTabled={isTabled}
164
- textShown={textShown}
179
+ showMinimalView={showMinimalView}
165
180
  parentIsReadOnly={parentIsReadOnly}
166
181
  onQrItemChange={onQrItemChange}
167
182
  />
@@ -180,7 +195,8 @@ function SingleItemSwitcher(props: SingleItemSwitcherProps) {
180
195
  default:
181
196
  return (
182
197
  <Typography>
183
- Item type not supported yet. Only R4 datatypes are supported at the moment.
198
+ Item type not supported yet, or something has went wrong. If your questionnnaire is not a
199
+ FHIR R4 resource, there might be issues rendering it.
184
200
  </Typography>
185
201
  );
186
202
  }
@@ -0,0 +1,34 @@
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 { alpha, styled } from '@mui/material/styles';
19
+ import { Box } from '@mui/material';
20
+
21
+ export const SliderDisplayBox = styled(Box, {
22
+ shouldForwardProp: (prop) => prop !== 'hasLabels'
23
+ })<{ hasLabels: boolean }>(({ theme, hasLabels }) => ({
24
+ display: 'flex',
25
+ alignItems: 'center',
26
+ justifyContent: 'center',
27
+ margin: '0 auto',
28
+ marginBottom: hasLabels ? -20 : 0,
29
+ padding: theme.spacing(0.5),
30
+ borderRadius: Number(theme.shape.borderRadius) * 0.5,
31
+ border: `1px solid ${alpha(theme.palette.text.disabled, 0.5)}`,
32
+ minWidth: 28,
33
+ height: 18
34
+ }));
@@ -0,0 +1,43 @@
1
+ /*
2
+ * Copyright 2023 Commonwealth Scientific and Industrial Research
3
+ * Organisation (CSIRO) ABN 41 687 119 230.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ import React from 'react';
19
+ import { SliderDisplayBox } from './Slider.styles';
20
+ import Typography from '@mui/material/Typography';
21
+ import { pxToRem } from '../../../theme/typography';
22
+
23
+ interface SliderDisplayValueProps {
24
+ value: number;
25
+ hasLabels: boolean;
26
+ isInteracted: boolean;
27
+ }
28
+
29
+ function SliderDisplayValue(props: SliderDisplayValueProps) {
30
+ const { value, hasLabels, isInteracted } = props;
31
+
32
+ const valueToDisplay = isInteracted ? value : '-';
33
+
34
+ return (
35
+ <SliderDisplayBox hasLabels={hasLabels}>
36
+ <Typography textAlign="center" color="text.disabled" fontSize={pxToRem(9.5)}>
37
+ {valueToDisplay}
38
+ </Typography>
39
+ </SliderDisplayBox>
40
+ );
41
+ }
42
+
43
+ export default SliderDisplayValue;
@@ -0,0 +1,88 @@
1
+ /*
2
+ * Copyright 2023 Commonwealth Scientific and Industrial Research
3
+ * Organisation (CSIRO) ABN 41 687 119 230.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ import React from 'react';
19
+ import type { PropsWithIsTabledAttribute } from '../../../interfaces/renderProps.interface';
20
+ import Slider from '@mui/material/Slider';
21
+ import { getSliderMarks } from '../../../utils/slider';
22
+ import Stack from '@mui/material/Stack';
23
+ import SliderLabels from './SliderLabels';
24
+ import SliderDisplayValue from './SliderDisplayValue';
25
+
26
+ interface SliderFieldProps extends PropsWithIsTabledAttribute {
27
+ linkId: string;
28
+ value: number;
29
+ minValue: number;
30
+ minLabel: string;
31
+ maxValue: number;
32
+ maxLabel: string;
33
+ stepValue: number;
34
+ isInteracted: boolean;
35
+ readOnly: boolean;
36
+ onValueChange: (newValue: number) => void;
37
+ }
38
+
39
+ function SliderField(props: SliderFieldProps) {
40
+ const {
41
+ linkId,
42
+ value,
43
+ minValue,
44
+ maxValue,
45
+ stepValue,
46
+ minLabel,
47
+ maxLabel,
48
+ isInteracted,
49
+ readOnly,
50
+ isTabled,
51
+ onValueChange
52
+ } = props;
53
+
54
+ const sliderMarks = getSliderMarks(minValue, maxValue, minLabel, maxLabel, stepValue);
55
+
56
+ const sliderSx = {
57
+ maxWidth: !isTabled ? 280 : 3000,
58
+ minWidth: 160
59
+ };
60
+
61
+ const hasLabels = !!(minLabel || maxLabel);
62
+
63
+ return (
64
+ <Stack sx={{ ...sliderSx }}>
65
+ <SliderDisplayValue value={value} hasLabels={hasLabels} isInteracted={isInteracted} />
66
+ {hasLabels ? <SliderLabels minLabel={minLabel} maxLabel={maxLabel} /> : null}
67
+ <Slider
68
+ id={linkId}
69
+ value={value}
70
+ min={minValue}
71
+ max={maxValue}
72
+ step={stepValue}
73
+ marks={sliderMarks}
74
+ sx={{ ...sliderSx }}
75
+ onChange={(_, newValue) => {
76
+ if (typeof newValue === 'number') {
77
+ onValueChange(newValue);
78
+ }
79
+ }}
80
+ disabled={readOnly}
81
+ valueLabelDisplay="auto"
82
+ data-test="q-item-slider-field"
83
+ />
84
+ </Stack>
85
+ );
86
+ }
87
+
88
+ export default SliderField;
@@ -0,0 +1,115 @@
1
+ /*
2
+ * Copyright 2023 Commonwealth Scientific and Industrial Research
3
+ * Organisation (CSIRO) ABN 41 687 119 230.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ import React from 'react';
19
+ import type {
20
+ PropsWithIsRepeatedAttribute,
21
+ PropsWithIsTabledAttribute,
22
+ PropsWithParentIsReadOnlyAttribute,
23
+ PropsWithQrItemChangeHandler
24
+ } from '../../../interfaces/renderProps.interface';
25
+ import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
26
+ import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
27
+ import { createEmptyQrItem } from '../../../utils/qrItem';
28
+ import { FullWidthFormComponentBox } from '../../Box.styles';
29
+ import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
30
+ import useReadOnly from '../../../hooks/useReadOnly';
31
+ import SliderField from './SliderField';
32
+ import useSliderExtensions from '../../../hooks/useSliderExtensions';
33
+ import Box from '@mui/material/Box';
34
+
35
+ interface SliderItemProps
36
+ extends PropsWithQrItemChangeHandler,
37
+ PropsWithIsRepeatedAttribute,
38
+ PropsWithIsTabledAttribute,
39
+ PropsWithParentIsReadOnlyAttribute {
40
+ qItem: QuestionnaireItem;
41
+ qrItem: QuestionnaireResponseItem | null;
42
+ }
43
+
44
+ function SliderItem(props: SliderItemProps) {
45
+ const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
46
+
47
+ const readOnly = useReadOnly(qItem, parentIsReadOnly);
48
+ const { displayInstructions } = useRenderingExtensions(qItem);
49
+ const { minValue, maxValue, stepValue, minLabel, maxLabel } = useSliderExtensions(qItem);
50
+
51
+ const isInteracted = !!qrItem?.answer;
52
+
53
+ // Init input value
54
+ let valueInteger = 0;
55
+ if (qrItem?.answer) {
56
+ if (qrItem?.answer[0].valueInteger) {
57
+ valueInteger = qrItem.answer[0].valueInteger;
58
+ }
59
+ if (qrItem?.answer[0].valueDecimal) {
60
+ valueInteger = Math.round(qrItem.answer[0].valueDecimal);
61
+ }
62
+ }
63
+
64
+ // Event handlers
65
+ function handleValueChange(newValue: number) {
66
+ onQrItemChange({
67
+ ...createEmptyQrItem(qItem),
68
+ answer: [{ valueInteger: newValue }]
69
+ });
70
+ }
71
+
72
+ if (isRepeated) {
73
+ return (
74
+ <Box px={4}>
75
+ <SliderField
76
+ linkId={qItem.linkId}
77
+ value={valueInteger}
78
+ minValue={minValue}
79
+ maxValue={maxValue}
80
+ stepValue={stepValue}
81
+ minLabel={minLabel}
82
+ maxLabel={maxLabel}
83
+ isInteracted={isInteracted}
84
+ readOnly={readOnly}
85
+ isTabled={isTabled}
86
+ onValueChange={handleValueChange}
87
+ />
88
+ </Box>
89
+ );
90
+ }
91
+
92
+ return (
93
+ <FullWidthFormComponentBox data-test="q-item-slider-box">
94
+ <ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions} readOnly={readOnly}>
95
+ <Box px={4}>
96
+ <SliderField
97
+ linkId={qItem.linkId}
98
+ value={valueInteger}
99
+ minValue={minValue}
100
+ maxValue={maxValue}
101
+ stepValue={stepValue}
102
+ minLabel={minLabel}
103
+ maxLabel={maxLabel}
104
+ isInteracted={isInteracted}
105
+ readOnly={readOnly}
106
+ isTabled={isTabled}
107
+ onValueChange={handleValueChange}
108
+ />
109
+ </Box>
110
+ </ItemFieldGrid>
111
+ </FullWidthFormComponentBox>
112
+ );
113
+ }
114
+
115
+ export default SliderItem;
@@ -0,0 +1,53 @@
1
+ /*
2
+ * Copyright 2023 Commonwealth Scientific and Industrial Research
3
+ * Organisation (CSIRO) ABN 41 687 119 230.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ import React from 'react';
19
+ import Typography from '@mui/material/Typography';
20
+ import { pxToRem } from '../../../theme/typography';
21
+ import Box from '@mui/material/Box';
22
+
23
+ interface SliderLabelsProps {
24
+ minLabel: string;
25
+ maxLabel: string;
26
+ }
27
+
28
+ function SliderLabels(props: SliderLabelsProps) {
29
+ const { minLabel, maxLabel } = props;
30
+
31
+ if (!minLabel && !maxLabel) {
32
+ return null;
33
+ }
34
+
35
+ return (
36
+ <Box display="flex" justifyContent="space-between" pb={0.5}>
37
+ {[minLabel, maxLabel].map((label, index) => (
38
+ <Typography
39
+ key={index}
40
+ textAlign="center"
41
+ fontSize={pxToRem(10)}
42
+ sx={{
43
+ transform: `translateX(${index === 0 ? '-50%' : '50%'})`,
44
+ wordWrap: 'break-word'
45
+ }}>
46
+ {label}
47
+ </Typography>
48
+ ))}
49
+ </Box>
50
+ );
51
+ }
52
+
53
+ export default SliderLabels;
@@ -36,12 +36,12 @@ import useStringInput from '../../../hooks/useStringInput';
36
36
  import useReadOnly from '../../../hooks/useReadOnly';
37
37
 
38
38
  interface StringItemProps
39
- extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
39
+ extends PropsWithQrItemChangeHandler,
40
40
  PropsWithIsRepeatedAttribute,
41
41
  PropsWithIsTabledAttribute,
42
42
  PropsWithParentIsReadOnlyAttribute {
43
43
  qItem: QuestionnaireItem;
44
- qrItem: QuestionnaireResponseItem;
44
+ qrItem: QuestionnaireResponseItem | null;
45
45
  }
46
46
  function StringItem(props: StringItemProps) {
47
47
  const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
@@ -35,6 +35,7 @@ import type {
35
35
  PropsWithParentIsReadOnlyAttribute,
36
36
  PropsWithQrRepeatGroupChangeHandler
37
37
  } from '../../../interfaces/renderProps.interface';
38
+ import type { PropsWithShowMinimalViewAttribute } from '../../../interfaces/renderProps.interface';
38
39
  import useInitialiseGroupTable from '../../../hooks/useInitialiseGroupTable';
39
40
  import { nanoid } from 'nanoid';
40
41
  import { createEmptyQrItem } from '../../../utils/qrItem';
@@ -44,14 +45,24 @@ import cloneDeep from 'lodash.clonedeep';
44
45
  import AddRowButton from './AddRowButton';
45
46
  import useReadOnly from '../../../hooks/useReadOnly';
46
47
 
47
- interface Props extends PropsWithQrRepeatGroupChangeHandler, PropsWithParentIsReadOnlyAttribute {
48
+ interface GroupTableProps
49
+ extends PropsWithQrRepeatGroupChangeHandler,
50
+ PropsWithShowMinimalViewAttribute,
51
+ PropsWithParentIsReadOnlyAttribute {
48
52
  qItem: QuestionnaireItem;
49
53
  qrItems: QuestionnaireResponseItem[];
50
54
  groupCardElevation: number;
51
55
  }
52
56
 
53
- function GroupTable(props: Props) {
54
- const { qItem, qrItems, groupCardElevation, parentIsReadOnly, onQrRepeatGroupChange } = props;
57
+ function GroupTable(props: GroupTableProps) {
58
+ const {
59
+ qItem,
60
+ qrItems,
61
+ groupCardElevation,
62
+ showMinimalView,
63
+ parentIsReadOnly,
64
+ onQrRepeatGroupChange
65
+ } = props;
55
66
 
56
67
  const readOnly = useReadOnly(qItem, parentIsReadOnly);
57
68
 
@@ -118,6 +129,47 @@ function GroupTable(props: Props) {
118
129
  ]);
119
130
  }
120
131
 
132
+ if (showMinimalView) {
133
+ return (
134
+ <QGroupContainerBox cardElevation={groupCardElevation} isRepeated={false} py={1}>
135
+ <TableContainer component={Paper} elevation={groupCardElevation}>
136
+ <Table size="small">
137
+ <TableHead>
138
+ <TableRow>
139
+ {itemLabels.map((itemLabel) => (
140
+ <HeaderTableCell key={itemLabel} size="medium">
141
+ {itemLabel}
142
+ </HeaderTableCell>
143
+ ))}
144
+ <TableCell />
145
+ </TableRow>
146
+ </TableHead>
147
+ <TableBody>
148
+ {tableRows.map(({ nanoId, qrItem: nullableQrItem }, index) => {
149
+ const answeredQrItem = createEmptyQrItem(qItem);
150
+ if (nullableQrItem) {
151
+ answeredQrItem.item = nullableQrItem.item;
152
+ }
153
+
154
+ return (
155
+ <TableRow key={nanoId}>
156
+ <GroupTableRow
157
+ qItem={qItem}
158
+ qrItem={answeredQrItem}
159
+ qItemsIndexMap={qItemsIndexMap}
160
+ parentIsReadOnly={parentIsReadOnly}
161
+ onQrItemChange={(newQrGroup) => handleRowChange(newQrGroup, index)}
162
+ />
163
+ </TableRow>
164
+ );
165
+ })}
166
+ </TableBody>
167
+ </Table>
168
+ </TableContainer>
169
+ </QGroupContainerBox>
170
+ );
171
+ }
172
+
121
173
  return (
122
174
  <QGroupContainerBox cardElevation={groupCardElevation} isRepeated={false} py={3}>
123
175
  {groupCardElevation !== 1 ? (
@@ -17,18 +17,18 @@
17
17
 
18
18
  import React from 'react';
19
19
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
20
- import { createQrGroup, updateQrItemsInGroup } from '../../../utils/qrItem';
20
+ import { createEmptyQrGroup, updateQrItemsInGroup } from '../../../utils/qrItem';
21
21
  import SingleItem from '../SingleItem/SingleItem';
22
22
  import { getQrItemsIndex } from '../../../utils/mapItem';
23
23
  import { StandardTableCell } from './Table.styles';
24
- import type { PropsWithQrItemChangeHandler } from '../../../interfaces/renderProps.interface';
25
- import type { PropsWithParentIsReadOnlyAttribute } from '../../../interfaces/renderProps.interface';
24
+ import type {
25
+ PropsWithParentIsReadOnlyAttribute,
26
+ PropsWithQrItemChangeHandler
27
+ } from '../../../interfaces/renderProps.interface';
26
28
 
27
- interface Props
28
- extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
29
- PropsWithParentIsReadOnlyAttribute {
29
+ interface Props extends PropsWithQrItemChangeHandler, PropsWithParentIsReadOnlyAttribute {
30
30
  qItem: QuestionnaireItem;
31
- qrItem: QuestionnaireResponseItem;
31
+ qrItem: QuestionnaireResponseItem | null;
32
32
  qItemsIndexMap: Record<string, number>;
33
33
  }
34
34
 
@@ -36,7 +36,7 @@ function GroupTableRow(props: Props) {
36
36
  const { qItem, qrItem, qItemsIndexMap, parentIsReadOnly, onQrItemChange } = props;
37
37
 
38
38
  const rowItems = qItem.item;
39
- const row = qrItem && qrItem.item ? qrItem : createQrGroup(qItem);
39
+ const row = qrItem && qrItem.item ? qrItem : createEmptyQrGroup(qItem);
40
40
  const rowQrItems = row.item;
41
41
 
42
42
  if (!rowItems || !rowQrItems) {
@@ -65,9 +65,10 @@ function GroupTableRow(props: Props) {
65
65
  <SingleItem
66
66
  key={qItem.linkId}
67
67
  qItem={rowItem}
68
- qrItem={qrItem}
68
+ qrItem={qrItem ?? null}
69
69
  isRepeated={true}
70
70
  isTabled={true}
71
+ showMinimalView={true}
71
72
  parentIsReadOnly={parentIsReadOnly}
72
73
  onQrItemChange={handleQrRowItemChange}
73
74
  />
@@ -35,11 +35,11 @@ import useStringInput from '../../../hooks/useStringInput';
35
35
  import useReadOnly from '../../../hooks/useReadOnly';
36
36
 
37
37
  interface TextItemProps
38
- extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
38
+ extends PropsWithQrItemChangeHandler,
39
39
  PropsWithIsRepeatedAttribute,
40
40
  PropsWithParentIsReadOnlyAttribute {
41
41
  qItem: QuestionnaireItem;
42
- qrItem: QuestionnaireResponseItem;
42
+ qrItem: QuestionnaireResponseItem | null;
43
43
  }
44
44
 
45
45
  function TextItem(props: TextItemProps) {
@@ -33,12 +33,12 @@ import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
33
33
  import useReadOnly from '../../../hooks/useReadOnly';
34
34
 
35
35
  interface TimeItemProps
36
- extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
36
+ extends PropsWithQrItemChangeHandler,
37
37
  PropsWithIsRepeatedAttribute,
38
38
  PropsWithIsTabledAttribute,
39
39
  PropsWithParentIsReadOnlyAttribute {
40
40
  qItem: QuestionnaireItem;
41
- qrItem: QuestionnaireResponseItem;
41
+ qrItem: QuestionnaireResponseItem | null;
42
42
  }
43
43
 
44
44
  function TimeItem(props: TimeItemProps) {
@@ -34,12 +34,12 @@ import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
34
34
  import useReadOnly from '../../../hooks/useReadOnly';
35
35
 
36
36
  interface UrlItemProps
37
- extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
37
+ extends PropsWithQrItemChangeHandler,
38
38
  PropsWithIsRepeatedAttribute,
39
39
  PropsWithIsTabledAttribute,
40
40
  PropsWithParentIsReadOnlyAttribute {
41
41
  qItem: QuestionnaireItem;
42
- qrItem: QuestionnaireResponseItem;
42
+ qrItem: QuestionnaireResponseItem | null;
43
43
  }
44
44
  function UrlItem(props: UrlItemProps) {
45
45
  const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
@@ -16,5 +16,8 @@
16
16
  */
17
17
 
18
18
  export * from './SingleItem';
19
+ export * from './RepeatItem';
19
20
  export * from './RepeatGroup';
21
+ export * from './GridGroup';
20
22
  export * from './Tables';
23
+ export * from './CustomDateItem';