@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
@@ -47,12 +47,12 @@ import LabelWrapper from '../ItemParts/ItemLabelWrapper';
47
47
  import useReadOnly from '../../../hooks/useReadOnly';
48
48
 
49
49
  interface ChoiceAutocompleteItemProps
50
- extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
50
+ extends PropsWithQrItemChangeHandler,
51
51
  PropsWithIsRepeatedAttribute,
52
52
  PropsWithIsTabledAttribute,
53
53
  PropsWithParentIsReadOnlyAttribute {
54
54
  qItem: QuestionnaireItem;
55
- qrItem: QuestionnaireResponseItem;
55
+ qrItem: QuestionnaireResponseItem | null;
56
56
  }
57
57
 
58
58
  function ChoiceAutocompleteItem(props: ChoiceAutocompleteItemProps) {
@@ -27,7 +27,7 @@ import type {
27
27
  PropsWithIsRepeatedAttribute,
28
28
  PropsWithParentIsReadOnlyAttribute,
29
29
  PropsWithQrItemChangeHandler,
30
- PropsWithTextShownAttribute
30
+ PropsWithShowMinimalViewAttribute
31
31
  } from '../../../interfaces/renderProps.interface';
32
32
  import DisplayInstructions from '../DisplayItem/DisplayInstructions';
33
33
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
@@ -35,12 +35,12 @@ import ChoiceCheckboxAnswerValueSetFields from './ChoiceCheckboxAnswerOptionFiel
35
35
  import useReadOnly from '../../../hooks/useReadOnly';
36
36
 
37
37
  interface ChoiceCheckboxAnswerOptionItemProps
38
- extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
38
+ extends PropsWithQrItemChangeHandler,
39
39
  PropsWithIsRepeatedAttribute,
40
- PropsWithTextShownAttribute,
40
+ PropsWithShowMinimalViewAttribute,
41
41
  PropsWithParentIsReadOnlyAttribute {
42
42
  qItem: QuestionnaireItem;
43
- qrItem: QuestionnaireResponseItem;
43
+ qrItem: QuestionnaireResponseItem | null;
44
44
  orientation: ChoiceItemOrientation;
45
45
  }
46
46
 
@@ -50,7 +50,7 @@ function ChoiceCheckboxAnswerOptionItem(props: ChoiceCheckboxAnswerOptionItemPro
50
50
  qrItem,
51
51
  orientation,
52
52
  isRepeated,
53
- textShown = true,
53
+ showMinimalView = false,
54
54
  parentIsReadOnly,
55
55
  onQrItemChange
56
56
  } = props;
@@ -80,39 +80,39 @@ function ChoiceCheckboxAnswerOptionItem(props: ChoiceCheckboxAnswerOptionItemPro
80
80
  }
81
81
  }
82
82
 
83
- if (textShown) {
83
+ if (showMinimalView) {
84
84
  return (
85
- <FullWidthFormComponentBox data-test="q-item-choice-checkbox-answer-option-box">
86
- <Grid container columnSpacing={6}>
87
- <Grid item xs={5}>
88
- <LabelWrapper qItem={qItem} readOnly={readOnly} />
89
- </Grid>
90
- <Grid item xs={7}>
91
- <ChoiceCheckboxAnswerValueSetFields
92
- qItem={qItem}
93
- answers={answers}
94
- orientation={orientation}
95
- readOnly={readOnly}
96
- onCheckedChange={handleCheckedChange}
97
- />
98
- <DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
99
- </Grid>
100
- </Grid>
101
- </FullWidthFormComponentBox>
85
+ <>
86
+ <ChoiceCheckboxAnswerValueSetFields
87
+ qItem={qItem}
88
+ answers={answers}
89
+ orientation={orientation}
90
+ readOnly={readOnly}
91
+ onCheckedChange={handleCheckedChange}
92
+ />
93
+ <DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
94
+ </>
102
95
  );
103
96
  }
104
97
 
105
98
  return (
106
- <>
107
- <ChoiceCheckboxAnswerValueSetFields
108
- qItem={qItem}
109
- answers={answers}
110
- orientation={orientation}
111
- readOnly={readOnly}
112
- onCheckedChange={handleCheckedChange}
113
- />
114
- <DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
115
- </>
99
+ <FullWidthFormComponentBox data-test="q-item-choice-checkbox-answer-option-box">
100
+ <Grid container columnSpacing={6}>
101
+ <Grid item xs={5}>
102
+ <LabelWrapper qItem={qItem} readOnly={readOnly} />
103
+ </Grid>
104
+ <Grid item xs={7}>
105
+ <ChoiceCheckboxAnswerValueSetFields
106
+ qItem={qItem}
107
+ answers={answers}
108
+ orientation={orientation}
109
+ readOnly={readOnly}
110
+ onCheckedChange={handleCheckedChange}
111
+ />
112
+ <DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
113
+ </Grid>
114
+ </Grid>
115
+ </FullWidthFormComponentBox>
116
116
  );
117
117
  }
118
118
 
@@ -28,7 +28,7 @@ import type {
28
28
  PropsWithIsRepeatedAttribute,
29
29
  PropsWithParentIsReadOnlyAttribute,
30
30
  PropsWithQrItemChangeHandler,
31
- PropsWithTextShownAttribute
31
+ PropsWithShowMinimalViewAttribute
32
32
  } from '../../../interfaces/renderProps.interface';
33
33
  import DisplayInstructions from '../DisplayItem/DisplayInstructions';
34
34
  import LabelWrapper from '../ItemParts/ItemLabelWrapper';
@@ -36,12 +36,12 @@ import ChoiceCheckboxAnswerValueSetFields from './ChoiceCheckboxAnswerValueSetFi
36
36
  import useReadOnly from '../../../hooks/useReadOnly';
37
37
 
38
38
  interface ChoiceCheckboxAnswerValueSetItemProps
39
- extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
39
+ extends PropsWithQrItemChangeHandler,
40
40
  PropsWithIsRepeatedAttribute,
41
- PropsWithTextShownAttribute,
41
+ PropsWithShowMinimalViewAttribute,
42
42
  PropsWithParentIsReadOnlyAttribute {
43
43
  qItem: QuestionnaireItem;
44
- qrItem: QuestionnaireResponseItem;
44
+ qrItem: QuestionnaireResponseItem | null;
45
45
  orientation: ChoiceItemOrientation;
46
46
  showText?: boolean;
47
47
  }
@@ -52,7 +52,7 @@ function ChoiceCheckboxAnswerValueSetItem(props: ChoiceCheckboxAnswerValueSetIte
52
52
  qrItem,
53
53
  orientation,
54
54
  isRepeated,
55
- textShown = true,
55
+ showMinimalView = false,
56
56
  parentIsReadOnly,
57
57
  onQrItemChange
58
58
  } = props;
@@ -84,41 +84,41 @@ function ChoiceCheckboxAnswerValueSetItem(props: ChoiceCheckboxAnswerValueSetIte
84
84
  }
85
85
  }
86
86
 
87
- if (textShown) {
87
+ if (showMinimalView) {
88
88
  return (
89
- <FullWidthFormComponentBox data-test="q-item-choice-checkbox-answer-value-set-box">
90
- <Grid container columnSpacing={6}>
91
- <Grid item xs={5}>
92
- <LabelWrapper qItem={qItem} readOnly={readOnly} />
93
- </Grid>
94
- <Grid item xs={7}>
95
- <ChoiceCheckboxAnswerValueSetFields
96
- codings={codings}
97
- answers={answers}
98
- orientation={orientation}
99
- readOnly={readOnly}
100
- serverError={serverError}
101
- onCheckedChange={handleCheckedChange}
102
- />
103
- <DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
104
- </Grid>
105
- </Grid>
106
- </FullWidthFormComponentBox>
89
+ <>
90
+ <ChoiceCheckboxAnswerValueSetFields
91
+ codings={codings}
92
+ answers={answers}
93
+ orientation={orientation}
94
+ readOnly={readOnly}
95
+ serverError={serverError}
96
+ onCheckedChange={handleCheckedChange}
97
+ />
98
+ <DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
99
+ </>
107
100
  );
108
101
  }
109
102
 
110
103
  return (
111
- <>
112
- <ChoiceCheckboxAnswerValueSetFields
113
- codings={codings}
114
- answers={answers}
115
- orientation={orientation}
116
- readOnly={readOnly}
117
- serverError={serverError}
118
- onCheckedChange={handleCheckedChange}
119
- />
120
- <DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
121
- </>
104
+ <FullWidthFormComponentBox data-test="q-item-choice-checkbox-answer-value-set-box">
105
+ <Grid container columnSpacing={6}>
106
+ <Grid item xs={5}>
107
+ <LabelWrapper qItem={qItem} readOnly={readOnly} />
108
+ </Grid>
109
+ <Grid item xs={7}>
110
+ <ChoiceCheckboxAnswerValueSetFields
111
+ codings={codings}
112
+ answers={answers}
113
+ orientation={orientation}
114
+ readOnly={readOnly}
115
+ serverError={serverError}
116
+ onCheckedChange={handleCheckedChange}
117
+ />
118
+ <DisplayInstructions displayInstructions={displayInstructions} readOnly={readOnly} />
119
+ </Grid>
120
+ </Grid>
121
+ </FullWidthFormComponentBox>
122
122
  );
123
123
  }
124
124
 
@@ -29,23 +29,23 @@ import ChoiceCheckboxAnswerValueSetItem from './ChoiceCheckboxAnswerValueSetItem
29
29
  import type {
30
30
  PropsWithIsRepeatedAttribute,
31
31
  PropsWithIsTabledAttribute,
32
+ PropsWithParentIsReadOnlyAttribute,
32
33
  PropsWithQrItemChangeHandler,
33
- PropsWithTextShownAttribute
34
+ PropsWithShowMinimalViewAttribute
34
35
  } from '../../../interfaces/renderProps.interface';
35
- import type { PropsWithParentIsReadOnlyAttribute } from '../../../interfaces/renderProps.interface';
36
36
 
37
37
  interface ChoiceItemSwitcherProps
38
- extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
38
+ extends PropsWithQrItemChangeHandler,
39
39
  PropsWithIsRepeatedAttribute,
40
40
  PropsWithIsTabledAttribute,
41
- PropsWithTextShownAttribute,
41
+ PropsWithShowMinimalViewAttribute,
42
42
  PropsWithParentIsReadOnlyAttribute {
43
43
  qItem: QuestionnaireItem;
44
- qrItem: QuestionnaireResponseItem;
44
+ qrItem: QuestionnaireResponseItem | null;
45
45
  }
46
46
 
47
47
  function ChoiceItemSwitcher(props: ChoiceItemSwitcherProps) {
48
- const { qItem, qrItem, isRepeated, isTabled, textShown, parentIsReadOnly, onQrItemChange } =
48
+ const { qItem, qrItem, isRepeated, isTabled, showMinimalView, parentIsReadOnly, onQrItemChange } =
49
49
  props;
50
50
 
51
51
  const orientation = getChoiceOrientation(qItem);
@@ -84,7 +84,7 @@ function ChoiceItemSwitcher(props: ChoiceItemSwitcherProps) {
84
84
  qrItem={qrItem}
85
85
  orientation={orientation}
86
86
  isRepeated={qItem.repeats ?? false}
87
- textShown={textShown}
87
+ showMinimalView={showMinimalView}
88
88
  parentIsReadOnly={parentIsReadOnly}
89
89
  onQrItemChange={onQrItemChange}
90
90
  />
@@ -96,7 +96,7 @@ function ChoiceItemSwitcher(props: ChoiceItemSwitcherProps) {
96
96
  qrItem={qrItem}
97
97
  isRepeated={qItem.repeats ?? false}
98
98
  orientation={orientation}
99
- textShown={textShown}
99
+ showMinimalView={showMinimalView}
100
100
  parentIsReadOnly={parentIsReadOnly}
101
101
  onQrItemChange={onQrItemChange}
102
102
  />
@@ -34,11 +34,11 @@ import ChoiceRadioAnswerOptionFields from './ChoiceRadioAnswerOptionFields';
34
34
  import useReadOnly from '../../../hooks/useReadOnly';
35
35
 
36
36
  interface ChoiceRadioAnswerOptionItemProps
37
- extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
37
+ extends PropsWithQrItemChangeHandler,
38
38
  PropsWithIsRepeatedAttribute,
39
39
  PropsWithParentIsReadOnlyAttribute {
40
40
  qItem: QuestionnaireItem;
41
- qrItem: QuestionnaireResponseItem;
41
+ qrItem: QuestionnaireResponseItem | null;
42
42
  orientation: ChoiceItemOrientation;
43
43
  }
44
44
 
@@ -35,11 +35,11 @@ import ChoiceRadioAnswerValueSetFields from './ChoiceRadioAnswerValueSetFields';
35
35
  import useReadOnly from '../../../hooks/useReadOnly';
36
36
 
37
37
  interface ChoiceRadioAnswerValueSetItemProps
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
  orientation: ChoiceItemOrientation;
44
44
  }
45
45
 
@@ -35,12 +35,12 @@ import ChoiceSelectAnswerOptionFields from './ChoiceSelectAnswerOptionFields';
35
35
  import useReadOnly from '../../../hooks/useReadOnly';
36
36
 
37
37
  interface ChoiceSelectAnswerOptionItemProps
38
- extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
38
+ extends PropsWithQrItemChangeHandler,
39
39
  PropsWithIsRepeatedAttribute,
40
40
  PropsWithIsTabledAttribute,
41
41
  PropsWithParentIsReadOnlyAttribute {
42
42
  qItem: QuestionnaireItem;
43
- qrItem: QuestionnaireResponseItem;
43
+ qrItem: QuestionnaireResponseItem | null;
44
44
  }
45
45
 
46
46
  function ChoiceSelectAnswerOptionItem(props: ChoiceSelectAnswerOptionItemProps) {
@@ -35,12 +35,12 @@ import ChoiceSelectAnswerValueSetFields from './ChoiceSelectAnswerValueSetFields
35
35
  import useReadOnly from '../../../hooks/useReadOnly';
36
36
 
37
37
  interface ChoiceSelectAnswerValueSetItemProps
38
- extends PropsWithQrItemChangeHandler<QuestionnaireResponseItem>,
38
+ extends PropsWithQrItemChangeHandler,
39
39
  PropsWithIsRepeatedAttribute,
40
40
  PropsWithIsTabledAttribute,
41
41
  PropsWithParentIsReadOnlyAttribute {
42
42
  qItem: QuestionnaireItem;
43
- qrItem: QuestionnaireResponseItem;
43
+ qrItem: QuestionnaireResponseItem | null;
44
44
  }
45
45
 
46
46
  function ChoiceSelectAnswerValueSetItem(props: ChoiceSelectAnswerValueSetItemProps) {
@@ -0,0 +1,140 @@
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, { useState } 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 useReadOnly from '../../../hooks/useReadOnly';
27
+ import useRenderingExtensions from '../../../hooks/useRenderingExtensions';
28
+ import { FullWidthFormComponentBox } from '../../Box.styles';
29
+ import ItemFieldGrid from '../ItemParts/ItemFieldGrid';
30
+ import {
31
+ parseFhirDateToDisplayDate,
32
+ parseInputDateToFhirDate,
33
+ validateInput
34
+ } from './customDateTimePicker/utils/parseDates';
35
+ import { createEmptyQrItem } from '../../../utils/qrItem';
36
+ import useDateValidation from '../../../hooks/useDateValidation';
37
+ import CustomDateField from './customDateTimePicker/CustomDateField';
38
+
39
+ interface CustomDateItemProps
40
+ extends PropsWithQrItemChangeHandler,
41
+ PropsWithIsRepeatedAttribute,
42
+ PropsWithIsTabledAttribute,
43
+ PropsWithParentIsReadOnlyAttribute {
44
+ qItem: QuestionnaireItem;
45
+ qrItem: QuestionnaireResponseItem | null;
46
+ }
47
+
48
+ function CustomDateItem(props: CustomDateItemProps) {
49
+ const { qItem, qrItem, isRepeated, isTabled, parentIsReadOnly, onQrItemChange } = props;
50
+
51
+ const readOnly = useReadOnly(qItem, parentIsReadOnly);
52
+ const { displayPrompt, displayInstructions, entryFormat } = useRenderingExtensions(qItem);
53
+
54
+ const qrDate = qrItem ?? createEmptyQrItem(qItem);
55
+
56
+ // Init input value
57
+ let valueDate: string = '';
58
+ if (qrDate.answer) {
59
+ if (qrDate.answer[0].valueDate) {
60
+ valueDate = qrDate.answer[0].valueDate;
61
+ } else if (qrDate.answer[0].valueDateTime) {
62
+ valueDate = qrDate.answer[0].valueDateTime;
63
+ }
64
+ }
65
+
66
+ const { displayDate, parseFail } = parseFhirDateToDisplayDate(valueDate);
67
+
68
+ const [input, setInput] = useState(displayDate);
69
+ const [focused, setFocused] = useState(false);
70
+
71
+ // Perform validation checks
72
+ const errorFeedback = useDateValidation(input, parseFail);
73
+
74
+ function handleSelectDate(selectedDate: string) {
75
+ setInput(selectedDate);
76
+ onQrItemChange({
77
+ ...createEmptyQrItem(qItem),
78
+ answer: [{ valueDate: parseInputDateToFhirDate(selectedDate) }]
79
+ });
80
+ }
81
+
82
+ function handleInputChange(newInput: string) {
83
+ setInput(newInput);
84
+
85
+ if (newInput === '') {
86
+ onQrItemChange(createEmptyQrItem(qItem));
87
+ }
88
+
89
+ if (!validateInput(newInput)) {
90
+ return;
91
+ }
92
+
93
+ onQrItemChange({
94
+ ...createEmptyQrItem(qItem),
95
+ answer: [{ valueDate: parseInputDateToFhirDate(newInput) }]
96
+ });
97
+ }
98
+
99
+ if (isRepeated) {
100
+ return (
101
+ <CustomDateField
102
+ linkId={qItem.linkId}
103
+ valueDate={displayDate}
104
+ input={input}
105
+ feedback={errorFeedback ?? ''}
106
+ isFocused={focused}
107
+ displayPrompt={displayPrompt}
108
+ entryFormat={entryFormat}
109
+ readOnly={readOnly}
110
+ isTabled={isTabled}
111
+ setFocused={setFocused}
112
+ onInputChange={handleInputChange}
113
+ onSelectDate={handleSelectDate}
114
+ />
115
+ );
116
+ }
117
+
118
+ return (
119
+ <FullWidthFormComponentBox data-test="q-item-date-box">
120
+ <ItemFieldGrid qItem={qItem} displayInstructions={displayInstructions} readOnly={readOnly}>
121
+ <CustomDateField
122
+ linkId={qItem.linkId}
123
+ valueDate={displayDate}
124
+ input={input}
125
+ feedback={errorFeedback ?? ''}
126
+ isFocused={focused}
127
+ displayPrompt={displayPrompt}
128
+ entryFormat={entryFormat}
129
+ readOnly={readOnly}
130
+ isTabled={isTabled}
131
+ setFocused={setFocused}
132
+ onInputChange={handleInputChange}
133
+ onSelectDate={handleSelectDate}
134
+ />
135
+ </ItemFieldGrid>
136
+ </FullWidthFormComponentBox>
137
+ );
138
+ }
139
+
140
+ export default CustomDateItem;
@@ -0,0 +1,96 @@
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 { Dayjs } from 'dayjs';
19
+ import type { ChangeEvent, Dispatch, RefObject, SetStateAction } from 'react';
20
+ import React, { useRef } from 'react';
21
+ import type { PropsWithIsTabledAttribute } from '../../../../interfaces/renderProps.interface';
22
+ import { StandardTextField } from '../../Textfield.styles';
23
+ import DatePicker from './DatePicker';
24
+ import Tooltip from '@mui/material/Tooltip';
25
+
26
+ interface CustomDateFieldProps extends PropsWithIsTabledAttribute {
27
+ linkId: string;
28
+ valueDate: string;
29
+ input: string;
30
+ feedback: string;
31
+ isFocused: boolean;
32
+ displayPrompt: string;
33
+ entryFormat: string;
34
+ readOnly: boolean;
35
+ setFocused: Dispatch<SetStateAction<boolean>>;
36
+ onInputChange: (newInput: string) => void;
37
+ onSelectDate: (newDateValue: string) => void;
38
+ }
39
+
40
+ function CustomDateField(props: CustomDateFieldProps) {
41
+ const {
42
+ linkId,
43
+ valueDate,
44
+ input,
45
+ feedback,
46
+ isFocused,
47
+ displayPrompt,
48
+ entryFormat,
49
+ readOnly,
50
+ isTabled,
51
+ setFocused,
52
+ onInputChange,
53
+ onSelectDate
54
+ } = props;
55
+
56
+ const anchorRef: RefObject<HTMLDivElement> = useRef(null);
57
+
58
+ return (
59
+ <Tooltip title={isTabled ? feedback : ''}>
60
+ <StandardTextField
61
+ id={linkId}
62
+ ref={anchorRef}
63
+ fullWidth
64
+ isTabled={isTabled}
65
+ value={input}
66
+ error={!!feedback}
67
+ onChange={(e: ChangeEvent<HTMLInputElement>) => onInputChange(e.target.value)}
68
+ label={displayPrompt}
69
+ placeholder={entryFormat !== '' ? entryFormat : 'DD/MM/YYYY'}
70
+ disabled={readOnly}
71
+ size="small"
72
+ focused={isFocused}
73
+ onFocus={() => setFocused(true)}
74
+ onBlur={() => setFocused(false)}
75
+ InputProps={{
76
+ endAdornment: (
77
+ <>
78
+ <DatePicker
79
+ valueString={valueDate}
80
+ readOnly={readOnly}
81
+ anchorEl={anchorRef.current}
82
+ onSelectDate={(valueDayjs: Dayjs) => {
83
+ onSelectDate(valueDayjs.format('DD/MM/YYYY'));
84
+ }}
85
+ onFocus={(focus) => setFocused(focus)}
86
+ />
87
+ </>
88
+ )
89
+ }}
90
+ helperText={isTabled ? '' : feedback}
91
+ />
92
+ </Tooltip>
93
+ );
94
+ }
95
+
96
+ export default CustomDateField;
@@ -0,0 +1,81 @@
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, { useState } from 'react';
19
+ import type { Dayjs } from 'dayjs';
20
+ import dayjs from 'dayjs';
21
+ import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
22
+ import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
23
+ import MuiDatePicker from './MuiDatePicker';
24
+ // import { DatePicker as MuiDatePicker, LocalizationProvider } from '@mui/x-date-pickers';
25
+ import DatePickerButton from './DatePickerButton';
26
+
27
+ interface DatePickerProps {
28
+ valueString: string;
29
+ readOnly: boolean;
30
+ anchorEl: HTMLElement | null;
31
+ onSelectDate: (newValueDayjs: Dayjs) => void;
32
+ onFocus: (focus: boolean) => void;
33
+ }
34
+
35
+ function DatePicker(props: DatePickerProps) {
36
+ const { valueString, readOnly, anchorEl, onSelectDate, onFocus } = props;
37
+
38
+ const [open, setOpen] = useState(false);
39
+
40
+ const valueDayJs = valueString ? dayjs(valueString, 'DD/MM/YYYY') : null;
41
+
42
+ return (
43
+ <LocalizationProvider dateAdapter={AdapterDayjs}>
44
+ <MuiDatePicker
45
+ value={valueDayJs ?? null}
46
+ disabled={readOnly}
47
+ slots={{ field: DatePickerButton }}
48
+ slotProps={{
49
+ field: {
50
+ onOpen: () => {
51
+ setOpen(!open);
52
+ onFocus(true);
53
+ },
54
+ readOnly: readOnly
55
+ } as any,
56
+ textField: {
57
+ size: 'small'
58
+ },
59
+ popper: {
60
+ anchorEl: () => anchorEl as HTMLElement
61
+ }
62
+ }}
63
+ open={open}
64
+ onClose={() => {
65
+ setOpen(false);
66
+ onFocus(false);
67
+ }}
68
+ onChange={(newValue) => {
69
+ if (!newValue) {
70
+ return;
71
+ }
72
+
73
+ onSelectDate(newValue);
74
+ onFocus(false);
75
+ }}
76
+ />
77
+ </LocalizationProvider>
78
+ );
79
+ }
80
+
81
+ export default DatePicker;