@aehrc/smart-forms-renderer 0.8.1 → 0.9.1

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 (355) hide show
  1. package/README.md +4 -2
  2. package/lib/components/FormComponents/BooleanItem/BooleanItem.d.ts +2 -2
  3. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.d.ts +2 -2
  4. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.d.ts +3 -3
  5. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +12 -12
  6. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
  7. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.d.ts +3 -3
  8. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +12 -12
  9. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
  10. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.d.ts +3 -4
  11. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js +3 -3
  12. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js.map +1 -1
  13. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.d.ts +2 -2
  14. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.d.ts +2 -2
  15. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.d.ts +2 -2
  16. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.d.ts +2 -2
  17. package/lib/components/FormComponents/CustomDateItem/CustomDateField2.d.ts +18 -0
  18. package/lib/components/FormComponents/CustomDateItem/CustomDateField2.js +31 -0
  19. package/lib/components/FormComponents/CustomDateItem/CustomDateField2.js.map +1 -0
  20. package/lib/components/FormComponents/CustomDateItem/CustomDateItem.d.ts +9 -0
  21. package/lib/components/FormComponents/CustomDateItem/CustomDateItem.js +68 -0
  22. package/lib/components/FormComponents/CustomDateItem/CustomDateItem.js.map +1 -0
  23. package/lib/components/FormComponents/CustomDateItem/CustomDateTimeField.d.ts +9 -0
  24. package/lib/components/FormComponents/CustomDateItem/CustomDateTimeField.js +75 -0
  25. package/lib/components/FormComponents/CustomDateItem/CustomDateTimeField.js.map +1 -0
  26. package/lib/components/FormComponents/CustomDateItem/CustomDateTimePickerText2.d.ts +9 -0
  27. package/lib/components/FormComponents/CustomDateItem/CustomDateTimePickerText2.js +75 -0
  28. package/lib/components/FormComponents/CustomDateItem/CustomDateTimePickerText2.js.map +1 -0
  29. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.d.ts +18 -0
  30. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.js +33 -0
  31. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.js.map +1 -0
  32. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.d.ts +11 -0
  33. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.js +55 -0
  34. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.js.map +1 -0
  35. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.d.ts +9 -0
  36. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.js +13 -0
  37. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.js.map +1 -0
  38. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.d.ts +5 -0
  39. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.js +20 -0
  40. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.js.map +1 -0
  41. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/hooks/useParseDates.d.ts +5 -0
  42. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/hooks/useParseDates.js +27 -0
  43. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/hooks/useParseDates.js.map +1 -0
  44. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/index.d.ts +1 -0
  45. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/index.js +18 -0
  46. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/index.js.map +1 -0
  47. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.d.ts +1 -0
  48. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.js +18 -0
  49. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.js.map +1 -0
  50. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.d.ts +9 -0
  51. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.js +121 -0
  52. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.js.map +1 -0
  53. package/lib/components/FormComponents/CustomDateItem/customDateTimePickerText.d.ts +9 -0
  54. package/lib/components/FormComponents/CustomDateItem/customDateTimePickerText.js +71 -0
  55. package/lib/components/FormComponents/CustomDateItem/customDateTimePickerText.js.map +1 -0
  56. package/lib/components/FormComponents/CustomDateItem/index.d.ts +1 -0
  57. package/lib/components/FormComponents/CustomDateItem/index.js +18 -0
  58. package/lib/components/FormComponents/CustomDateItem/index.js.map +1 -0
  59. package/lib/components/FormComponents/DateItem/DateItem.d.ts +3 -4
  60. package/lib/components/FormComponents/DateTimeItem/DateTimeItem.d.ts +2 -2
  61. package/lib/components/FormComponents/DecimalItem/DecimalItem.d.ts +2 -2
  62. package/lib/components/FormComponents/DecimalItem/DecimalItem.js +2 -3
  63. package/lib/components/FormComponents/DecimalItem/DecimalItem.js.map +1 -1
  64. package/lib/components/FormComponents/DisplayItem/DisplayBox.d.ts +0 -0
  65. package/lib/components/FormComponents/DisplayItem/DisplayBox.js +2 -0
  66. package/lib/components/FormComponents/DisplayItem/DisplayBox.js.map +1 -0
  67. package/lib/components/FormComponents/DisplayItem/DisplayBox.styles.d.ts +4 -0
  68. package/lib/components/FormComponents/DisplayItem/DisplayBox.styles.js +35 -0
  69. package/lib/components/FormComponents/DisplayItem/DisplayBox.styles.js.map +1 -0
  70. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.d.ts +2 -1
  71. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js.map +1 -1
  72. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.js +0 -1
  73. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.js.map +1 -1
  74. package/lib/components/FormComponents/GridGroup/GridGroup.d.ts +3 -3
  75. package/lib/components/FormComponents/GridGroup/GridGroup.js +13 -8
  76. package/lib/components/FormComponents/GridGroup/GridGroup.js.map +1 -1
  77. package/lib/components/FormComponents/GridGroup/GridRow.d.ts +3 -4
  78. package/lib/components/FormComponents/GridGroup/GridRow.js +3 -3
  79. package/lib/components/FormComponents/GridGroup/GridRow.js.map +1 -1
  80. package/lib/components/FormComponents/GridGroup/GridTable.d.ts +3 -3
  81. package/lib/components/FormComponents/GridGroup/GridTable.js +9 -4
  82. package/lib/components/FormComponents/GridGroup/GridTable.js.map +1 -1
  83. package/lib/components/FormComponents/GridGroup/index.d.ts +1 -0
  84. package/lib/components/FormComponents/GridGroup/index.js +18 -0
  85. package/lib/components/FormComponents/GridGroup/index.js.map +1 -0
  86. package/lib/components/FormComponents/GroupItem/GroupItem.d.ts +2 -2
  87. package/lib/components/FormComponents/GroupItem/GroupItem.js +2 -2
  88. package/lib/components/FormComponents/GroupItem/GroupItem.js.map +1 -1
  89. package/lib/components/FormComponents/GroupItem/GroupItem.styles.d.ts +1 -1
  90. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.d.ts +2 -2
  91. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +5 -6
  92. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -1
  93. package/lib/components/FormComponents/IntegerItem/IntegerItem.d.ts +2 -2
  94. package/lib/components/FormComponents/IntegerItem/IntegerItem.js +2 -3
  95. package/lib/components/FormComponents/IntegerItem/IntegerItem.js.map +1 -1
  96. package/lib/components/FormComponents/IntegerItem/SliderItem.d.ts +9 -0
  97. package/lib/components/FormComponents/IntegerItem/SliderItem.js +75 -0
  98. package/lib/components/FormComponents/IntegerItem/SliderItem.js.map +1 -0
  99. package/lib/components/FormComponents/ItemParts/FadingCheckIcon.js +2 -2
  100. package/lib/components/FormComponents/ItemParts/FadingCheckIcon.js.map +1 -1
  101. package/lib/components/FormComponents/ItemParts/ItemFieldGrid.d.ts +2 -2
  102. package/lib/components/FormComponents/Lists.styles.d.ts +1 -1
  103. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.d.ts +2 -2
  104. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.d.ts +3 -3
  105. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js +12 -12
  106. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js.map +1 -1
  107. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.d.ts +3 -3
  108. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js +2 -2
  109. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js.map +1 -1
  110. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.d.ts +2 -2
  111. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.d.ts +2 -2
  112. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.d.ts +2 -2
  113. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.d.ts +2 -2
  114. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js +15 -4
  115. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js.map +1 -1
  116. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.d.ts +2 -2
  117. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js +2 -2
  118. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js.map +1 -1
  119. package/lib/components/FormComponents/RepeatItem/RepeatField.d.ts +3 -3
  120. package/lib/components/FormComponents/RepeatItem/RepeatField.js +3 -3
  121. package/lib/components/FormComponents/RepeatItem/RepeatField.js.map +1 -1
  122. package/lib/components/FormComponents/RepeatItem/RepeatItem.d.ts +3 -2
  123. package/lib/components/FormComponents/RepeatItem/RepeatItem.js +11 -2
  124. package/lib/components/FormComponents/RepeatItem/RepeatItem.js.map +1 -1
  125. package/lib/components/FormComponents/RepeatItem/index.d.ts +1 -0
  126. package/lib/components/FormComponents/RepeatItem/index.js +18 -0
  127. package/lib/components/FormComponents/RepeatItem/index.js.map +1 -0
  128. package/lib/components/FormComponents/SingleItem/SingleItem.d.ts +3 -3
  129. package/lib/components/FormComponents/SingleItem/SingleItem.js +2 -2
  130. package/lib/components/FormComponents/SingleItem/SingleItem.js.map +1 -1
  131. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.d.ts +3 -3
  132. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js +12 -7
  133. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -1
  134. package/lib/components/FormComponents/SliderItem/DisplayBox.styles.d.ts +4 -0
  135. package/lib/components/FormComponents/SliderItem/DisplayBox.styles.js +35 -0
  136. package/lib/components/FormComponents/SliderItem/DisplayBox.styles.js.map +1 -0
  137. package/lib/components/FormComponents/SliderItem/Slider.styles.d.ts +6 -0
  138. package/lib/components/FormComponents/SliderItem/Slider.styles.js +33 -0
  139. package/lib/components/FormComponents/SliderItem/Slider.styles.js.map +1 -0
  140. package/lib/components/FormComponents/SliderItem/SliderDisplayValue.d.ts +8 -0
  141. package/lib/components/FormComponents/SliderItem/SliderDisplayValue.js +28 -0
  142. package/lib/components/FormComponents/SliderItem/SliderDisplayValue.js.map +1 -0
  143. package/lib/components/FormComponents/SliderItem/SliderField.d.ts +16 -0
  144. package/lib/components/FormComponents/SliderItem/SliderField.js +41 -0
  145. package/lib/components/FormComponents/SliderItem/SliderField.js.map +1 -0
  146. package/lib/components/FormComponents/SliderItem/SliderItem.d.ts +9 -0
  147. package/lib/components/FormComponents/SliderItem/SliderItem.js +56 -0
  148. package/lib/components/FormComponents/SliderItem/SliderItem.js.map +1 -0
  149. package/lib/components/FormComponents/SliderItem/SliderLabels.d.ts +7 -0
  150. package/lib/components/FormComponents/SliderItem/SliderLabels.js +32 -0
  151. package/lib/components/FormComponents/SliderItem/SliderLabels.js.map +1 -0
  152. package/lib/components/FormComponents/StringItem/StringItem.d.ts +2 -2
  153. package/lib/components/FormComponents/Tables/GroupTable.d.ts +3 -2
  154. package/lib/components/FormComponents/Tables/GroupTable.js +18 -1
  155. package/lib/components/FormComponents/Tables/GroupTable.js.map +1 -1
  156. package/lib/components/FormComponents/Tables/GroupTableRow.d.ts +3 -4
  157. package/lib/components/FormComponents/Tables/GroupTableRow.js +3 -3
  158. package/lib/components/FormComponents/Tables/GroupTableRow.js.map +1 -1
  159. package/lib/components/FormComponents/TextItem/TextItem.d.ts +2 -2
  160. package/lib/components/FormComponents/TimeItem/TimeItem.d.ts +2 -2
  161. package/lib/components/FormComponents/UrlItem/UrlItem.d.ts +2 -2
  162. package/lib/components/FormComponents/index.d.ts +3 -0
  163. package/lib/components/FormComponents/index.js +3 -0
  164. package/lib/components/FormComponents/index.js.map +1 -1
  165. package/lib/components/Lists.styles.d.ts +1 -1
  166. package/lib/components/Renderer/BaseRenderer.js +3 -5
  167. package/lib/components/Renderer/BaseRenderer.js.map +1 -1
  168. package/lib/components/Renderer/FormBodyCollapsible.d.ts +2 -2
  169. package/lib/components/Renderer/FormBodyCollapsible.js +6 -5
  170. package/lib/components/Renderer/FormBodyCollapsible.js.map +1 -1
  171. package/lib/components/Renderer/FormBodySingleCollapsibleWrapper.d.ts +2 -2
  172. package/lib/components/Renderer/FormBodySingleCollapsibleWrapper.js.map +1 -1
  173. package/lib/components/Renderer/FormBodyTabbed.d.ts +2 -2
  174. package/lib/components/Renderer/FormBodyTabbed.js +6 -5
  175. package/lib/components/Renderer/FormBodyTabbed.js.map +1 -1
  176. package/lib/components/Renderer/FormTopLevelItem.d.ts +2 -2
  177. package/lib/components/Renderer/FormTopLevelItem.js +3 -1
  178. package/lib/components/Renderer/FormTopLevelItem.js.map +1 -1
  179. package/lib/components/Renderer/SmartFormsRenderer.js +1 -1
  180. package/lib/components/Renderer/SmartFormsRenderer.js.map +1 -1
  181. package/lib/hooks/useDateSeparatorValidation.d.ts +2 -0
  182. package/lib/hooks/useDateSeparatorValidation.js +25 -0
  183. package/lib/hooks/useDateSeparatorValidation.js.map +1 -0
  184. package/lib/hooks/useDateValidation.d.ts +2 -0
  185. package/lib/hooks/useDateValidation.js +61 -0
  186. package/lib/hooks/useDateValidation.js.map +1 -0
  187. package/lib/hooks/useDecimalCalculatedExpression.d.ts +0 -1
  188. package/lib/hooks/useDecimalCalculatedExpression.js +3 -3
  189. package/lib/hooks/useDecimalCalculatedExpression.js.map +1 -1
  190. package/lib/hooks/useInitialiseRepeatAnswers.d.ts +1 -1
  191. package/lib/hooks/useInitialiseRepeatAnswers.js.map +1 -1
  192. package/lib/hooks/useIntegerCalculatedExpression.d.ts +0 -1
  193. package/lib/hooks/useIntegerCalculatedExpression.js +3 -3
  194. package/lib/hooks/useIntegerCalculatedExpression.js.map +1 -1
  195. package/lib/hooks/useSliderExtensions.d.ts +10 -0
  196. package/lib/hooks/useSliderExtensions.js +37 -0
  197. package/lib/hooks/useSliderExtensions.js.map +1 -0
  198. package/lib/hooks/useTerminologyServerQuery.js +0 -1
  199. package/lib/hooks/useTerminologyServerQuery.js.map +1 -1
  200. package/lib/index.d.ts +3 -3
  201. package/lib/index.js +15 -6
  202. package/lib/index.js.map +1 -1
  203. package/lib/interfaces/index.d.ts +2 -0
  204. package/lib/interfaces/index.js +18 -0
  205. package/lib/interfaces/index.js.map +1 -0
  206. package/lib/interfaces/questionnaireStore.interface.d.ts +1 -0
  207. package/lib/interfaces/renderProps.interface.d.ts +4 -3
  208. package/lib/stores/useQuestionnaireStore.d.ts +1 -0
  209. package/lib/stores/useQuestionnaireStore.js +28 -12
  210. package/lib/stores/useQuestionnaireStore.js.map +1 -1
  211. package/lib/test.d.ts +4 -0
  212. package/lib/test.js +18 -0
  213. package/lib/test.js.map +1 -0
  214. package/lib/theme/customGlobalStyles.js +2 -5
  215. package/lib/theme/customGlobalStyles.js.map +1 -1
  216. package/lib/theme/typography.js +9 -9
  217. package/lib/theme/typography.js.map +1 -1
  218. package/lib/utils/calculatedExpression.d.ts +5 -1
  219. package/lib/utils/calculatedExpression.js +21 -16
  220. package/lib/utils/calculatedExpression.js.map +1 -1
  221. package/lib/utils/dayjsExtend.d.ts +1 -0
  222. package/lib/utils/dayjsExtend.js +22 -0
  223. package/lib/utils/dayjsExtend.js.map +1 -0
  224. package/lib/utils/enableWhenExpression.d.ts +5 -1
  225. package/lib/utils/enableWhenExpression.js +26 -21
  226. package/lib/utils/enableWhenExpression.js.map +1 -1
  227. package/lib/utils/fhirpath.d.ts +3 -1
  228. package/lib/utils/fhirpath.js +25 -15
  229. package/lib/utils/fhirpath.js.map +1 -1
  230. package/lib/utils/index.d.ts +1 -0
  231. package/lib/utils/index.js +1 -0
  232. package/lib/utils/index.js.map +1 -1
  233. package/lib/utils/initialiseForm.d.ts +2 -0
  234. package/lib/utils/initialiseForm.js +13 -5
  235. package/lib/utils/initialiseForm.js.map +1 -1
  236. package/lib/utils/itemControl.d.ts +12 -0
  237. package/lib/utils/itemControl.js +30 -0
  238. package/lib/utils/itemControl.js.map +1 -1
  239. package/lib/utils/launchContext.d.ts +0 -0
  240. package/lib/utils/launchContext.js +2 -0
  241. package/lib/utils/launchContext.js.map +1 -0
  242. package/lib/utils/mapItem.d.ts +1 -1
  243. package/lib/utils/populateContexts.d.ts +2 -12
  244. package/lib/utils/populateContexts.js +0 -36
  245. package/lib/utils/populateContexts.js.map +1 -1
  246. package/lib/utils/qrItem.d.ts +1 -7
  247. package/lib/utils/qrItem.js +1 -12
  248. package/lib/utils/qrItem.js.map +1 -1
  249. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +4 -2
  250. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -1
  251. package/lib/utils/removeHidden.js +2 -1
  252. package/lib/utils/removeHidden.js.map +1 -1
  253. package/lib/utils/repopulateIntoResponse.js +90 -29
  254. package/lib/utils/repopulateIntoResponse.js.map +1 -1
  255. package/lib/utils/repopulateItems.d.ts +14 -1
  256. package/lib/utils/repopulateItems.js +251 -70
  257. package/lib/utils/repopulateItems.js.map +1 -1
  258. package/lib/utils/repopulateRepeatGroup.js +9 -1
  259. package/lib/utils/repopulateRepeatGroup.js.map +1 -1
  260. package/lib/utils/slider.d.ts +28 -0
  261. package/lib/utils/slider.js +89 -0
  262. package/lib/utils/slider.js.map +1 -0
  263. package/package.json +18 -15
  264. package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +2 -2
  265. package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +2 -2
  266. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +33 -33
  267. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +35 -35
  268. package/src/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.tsx +8 -8
  269. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +2 -2
  270. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +2 -2
  271. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +2 -2
  272. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +2 -2
  273. package/src/components/FormComponents/CustomDateItem/CustomDateItem.tsx +140 -0
  274. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.tsx +96 -0
  275. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.tsx +81 -0
  276. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.tsx +33 -0
  277. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.ts +22 -0
  278. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/index.ts +18 -0
  279. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.ts +18 -0
  280. package/src/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.ts +154 -0
  281. package/src/components/FormComponents/CustomDateItem/index.ts +18 -0
  282. package/src/components/FormComponents/DateItem/DateItem.tsx +3 -3
  283. package/src/components/FormComponents/DateTimeItem/DateTimeItem.tsx +2 -2
  284. package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +4 -5
  285. package/src/components/FormComponents/DisplayItem/DisplayInstructions.styles.ts +0 -1
  286. package/src/components/FormComponents/DisplayItem/DisplayInstructions.tsx +2 -1
  287. package/src/components/FormComponents/GridGroup/GridGroup.tsx +41 -15
  288. package/src/components/FormComponents/GridGroup/GridRow.tsx +10 -9
  289. package/src/components/FormComponents/GridGroup/GridTable.tsx +29 -9
  290. package/src/components/FormComponents/GridGroup/index.ts +18 -0
  291. package/src/components/FormComponents/GroupItem/GroupItem.tsx +5 -6
  292. package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +7 -8
  293. package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +4 -5
  294. package/src/components/FormComponents/ItemParts/FadingCheckIcon.tsx +2 -2
  295. package/src/components/FormComponents/ItemParts/ItemFieldGrid.tsx +2 -2
  296. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +2 -2
  297. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +43 -43
  298. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.tsx +6 -6
  299. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +2 -2
  300. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +2 -2
  301. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +2 -2
  302. package/src/components/FormComponents/RepeatGroup/RepeatGroup.tsx +49 -6
  303. package/src/components/FormComponents/RepeatGroup/RepeatGroupItem.tsx +13 -8
  304. package/src/components/FormComponents/RepeatItem/RepeatField.tsx +15 -9
  305. package/src/components/FormComponents/RepeatItem/RepeatItem.tsx +33 -3
  306. package/src/components/FormComponents/RepeatItem/index.ts +18 -0
  307. package/src/components/FormComponents/SingleItem/SingleItem.tsx +6 -6
  308. package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +27 -11
  309. package/src/components/FormComponents/SliderItem/Slider.styles.ts +34 -0
  310. package/src/components/FormComponents/SliderItem/SliderDisplayValue.tsx +43 -0
  311. package/src/components/FormComponents/SliderItem/SliderField.tsx +88 -0
  312. package/src/components/FormComponents/SliderItem/SliderItem.tsx +115 -0
  313. package/src/components/FormComponents/SliderItem/SliderLabels.tsx +53 -0
  314. package/src/components/FormComponents/StringItem/StringItem.tsx +2 -2
  315. package/src/components/FormComponents/Tables/GroupTable.tsx +55 -3
  316. package/src/components/FormComponents/Tables/GroupTableRow.tsx +10 -9
  317. package/src/components/FormComponents/TextItem/TextItem.tsx +2 -2
  318. package/src/components/FormComponents/TimeItem/TimeItem.tsx +2 -2
  319. package/src/components/FormComponents/UrlItem/UrlItem.tsx +2 -2
  320. package/src/components/FormComponents/index.ts +3 -0
  321. package/src/components/Renderer/BaseRenderer.tsx +5 -12
  322. package/src/components/Renderer/FormBodyCollapsible.tsx +9 -7
  323. package/src/components/Renderer/FormBodySingleCollapsibleWrapper.tsx +2 -3
  324. package/src/components/Renderer/FormBodyTabbed.tsx +9 -7
  325. package/src/components/Renderer/FormTopLevelItem.tsx +14 -11
  326. package/src/components/Renderer/SmartFormsRenderer.tsx +2 -1
  327. package/src/hooks/useDateValidation.tsx +79 -0
  328. package/src/hooks/useDecimalCalculatedExpression.ts +3 -4
  329. package/src/hooks/useInitialiseRepeatAnswers.ts +1 -1
  330. package/src/hooks/useIntegerCalculatedExpression.ts +3 -4
  331. package/src/hooks/useSliderExtensions.ts +50 -0
  332. package/src/hooks/useTerminologyServerQuery.ts +0 -2
  333. package/src/index.ts +12 -9
  334. package/src/interfaces/questionnaireStore.interface.ts +1 -0
  335. package/src/interfaces/renderProps.interface.ts +4 -3
  336. package/src/stores/useQuestionnaireStore.ts +39 -16
  337. package/src/theme/customGlobalStyles.tsx +2 -5
  338. package/src/theme/typography.ts +9 -9
  339. package/src/utils/calculatedExpression.ts +41 -28
  340. package/src/utils/dayjsExtend.ts +23 -0
  341. package/src/utils/enableWhenExpression.ts +49 -34
  342. package/src/utils/fhirpath.ts +50 -31
  343. package/src/utils/index.ts +1 -0
  344. package/src/utils/initialiseForm.ts +15 -5
  345. package/src/utils/itemControl.ts +32 -0
  346. package/src/utils/mapItem.ts +1 -1
  347. package/src/utils/populateContexts.ts +2 -61
  348. package/src/utils/qrItem.ts +1 -16
  349. package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +4 -2
  350. package/src/utils/removeHidden.ts +2 -1
  351. package/src/utils/repopulateIntoResponse.ts +134 -43
  352. package/src/utils/repopulateItems.ts +379 -101
  353. package/src/utils/slider.ts +112 -0
  354. package/src/utils/populateInputParams.ts +0 -242
  355. package/src/utils/repopulateRepeatGroup.ts +0 -68
@@ -16,7 +16,7 @@
16
16
  */
17
17
 
18
18
  import { useEffect, useState } from 'react';
19
- import { createEmptyQrItemWithUnit } from '../utils/qrItem';
19
+ import { createEmptyQrItem } from '../utils/qrItem';
20
20
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
21
21
  import useQuestionnaireStore from '../stores/useQuestionnaireStore';
22
22
 
@@ -27,7 +27,6 @@ interface UseDecimalCalculatedExpression {
27
27
  interface useDecimalCalculatedExpressionProps {
28
28
  qItem: QuestionnaireItem;
29
29
  inputValue: string;
30
- displayUnit: string;
31
30
  precision: number | null;
32
31
  setInputValue: (value: string) => void;
33
32
  onQrItemChange: (qrItem: QuestionnaireResponseItem) => void;
@@ -36,7 +35,7 @@ interface useDecimalCalculatedExpressionProps {
36
35
  function useDecimalCalculatedExpression(
37
36
  props: useDecimalCalculatedExpressionProps
38
37
  ): UseDecimalCalculatedExpression {
39
- const { qItem, inputValue, displayUnit, precision, setInputValue, onQrItemChange } = props;
38
+ const { qItem, inputValue, precision, setInputValue, onQrItemChange } = props;
40
39
 
41
40
  const calculatedExpressions = useQuestionnaireStore((state) => state.calculatedExpressions);
42
41
 
@@ -63,7 +62,7 @@ function useDecimalCalculatedExpression(
63
62
  // update questionnaireResponse
64
63
  setInputValue(precision ? value.toFixed(precision) : value.toString());
65
64
  onQrItemChange({
66
- ...createEmptyQrItemWithUnit(qItem, displayUnit),
65
+ ...createEmptyQrItem(qItem),
67
66
  answer: [{ valueDecimal: value }]
68
67
  });
69
68
  }
@@ -22,7 +22,7 @@ import { useMemo } from 'react';
22
22
 
23
23
  function useInitialiseRepeatAnswers(
24
24
  qItem: QuestionnaireItem,
25
- qrItem: QuestionnaireResponseItem
25
+ qrItem: QuestionnaireResponseItem | null
26
26
  ): RepeatAnswer[] {
27
27
  return useMemo(
28
28
  () => {
@@ -16,7 +16,7 @@
16
16
  */
17
17
 
18
18
  import { useEffect, useState } from 'react';
19
- import { createEmptyQrItemWithUnit } from '../utils/qrItem';
19
+ import { createEmptyQrItem } from '../utils/qrItem';
20
20
  import type { QuestionnaireItem, QuestionnaireResponseItem } from 'fhir/r4';
21
21
  import useQuestionnaireStore from '../stores/useQuestionnaireStore';
22
22
 
@@ -27,7 +27,6 @@ interface UseIntegerCalculatedExpression {
27
27
  interface useIntegerCalculatedExpressionProps {
28
28
  qItem: QuestionnaireItem;
29
29
  inputValue: number;
30
- displayUnit: string;
31
30
  setInputValue: (value: number) => void;
32
31
  onQrItemChange: (qrItem: QuestionnaireResponseItem) => void;
33
32
  }
@@ -35,7 +34,7 @@ interface useIntegerCalculatedExpressionProps {
35
34
  function useIntegerCalculatedExpression(
36
35
  props: useIntegerCalculatedExpressionProps
37
36
  ): UseIntegerCalculatedExpression {
38
- const { qItem, inputValue, displayUnit, setInputValue, onQrItemChange } = props;
37
+ const { qItem, inputValue, setInputValue, onQrItemChange } = props;
39
38
 
40
39
  const calculatedExpressions = useQuestionnaireStore((state) => state.calculatedExpressions);
41
40
 
@@ -56,7 +55,7 @@ function useIntegerCalculatedExpression(
56
55
  // update questionnaireResponse
57
56
  setInputValue(calcExpression.value);
58
57
  onQrItemChange({
59
- ...createEmptyQrItemWithUnit(qItem, displayUnit),
58
+ ...createEmptyQrItem(qItem),
60
59
  answer: [{ valueInteger: calcExpression.value }]
61
60
  });
62
61
  }
@@ -0,0 +1,50 @@
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 { getTextDisplayLower, getTextDisplayUpper } from '../utils/itemControl';
19
+ import type { QuestionnaireItem } from 'fhir/r4';
20
+ import { getMaxValue, getMinValue, getSliderStepValue } from '../utils/slider';
21
+
22
+ const defaultMinValue = 0;
23
+ const defaultMinLabel = '0';
24
+
25
+ const defaultMaxValue = 100;
26
+ const defaultMaxLabel = '100';
27
+
28
+ const defaultStepValue = 1;
29
+
30
+ interface SliderExtensions {
31
+ minValue: number;
32
+ minLabel: string;
33
+ maxValue: number;
34
+ maxLabel: string;
35
+ stepValue: number;
36
+ }
37
+
38
+ function useSliderExtensions(qItem: QuestionnaireItem): SliderExtensions {
39
+ const minValue = getMinValue(qItem) ?? defaultMinValue;
40
+ const maxValue = getMaxValue(qItem) ?? defaultMaxValue;
41
+ return {
42
+ minValue: minValue,
43
+ minLabel: getTextDisplayLower(qItem) ?? minValue.toString() ?? defaultMinLabel,
44
+ maxValue: maxValue,
45
+ maxLabel: getTextDisplayUpper(qItem) ?? maxValue.toString() ?? defaultMaxLabel,
46
+ stepValue: getSliderStepValue(qItem) ?? defaultStepValue
47
+ };
48
+ }
49
+
50
+ export default useSliderExtensions;
@@ -71,8 +71,6 @@ function useTerminologyServerQuery(
71
71
  }
72
72
  );
73
73
 
74
- console.log(isFetching);
75
-
76
74
  if (error) {
77
75
  console.warn('Ontoserver query failed. Details below: \n' + error);
78
76
  feedback = {
package/src/index.ts CHANGED
@@ -80,32 +80,35 @@ export function removeHiddenAnswersFromResponse(
80
80
  }
81
81
 
82
82
  /**
83
- * Re-populate stuff
83
+ * Compare latest data from the server with the current QuestionnaireResponse and decide items to re-populate.
84
84
  *
85
85
  * @author Sean Fong
86
86
  */
87
87
  export function generateItemsToRepopulate(populatedResponse: QuestionnaireResponse) {
88
88
  const sourceQuestionnaire = useQuestionnaireStore.getState().sourceQuestionnaire;
89
- const itemTypes = useQuestionnaireStore.getState().itemTypes;
90
89
  const tabs = useQuestionnaireStore.getState().tabs;
91
90
  const updatableResponse = useQuestionnaireResponseStore.getState().updatableResponse;
92
- console.log(updatableResponse);
91
+ const enableWhenIsActivated = useQuestionnaireStore.getState().enableWhenIsActivated;
92
+ const enableWhenItems = useQuestionnaireStore.getState().enableWhenItems;
93
+ const enableWhenExpressions = useQuestionnaireStore.getState().enableWhenExpressions;
93
94
 
94
- return getItemsToRepopulate(
95
+ return getItemsToRepopulate({
95
96
  sourceQuestionnaire,
96
- itemTypes,
97
97
  tabs,
98
98
  populatedResponse,
99
- updatableResponse
100
- );
99
+ updatableResponse,
100
+ enableWhenIsActivated,
101
+ enableWhenItems,
102
+ enableWhenExpressions
103
+ });
101
104
  }
102
105
 
103
106
  /**
104
- * Re-populate stuff
107
+ * Re-populate checked items in the re-population dialog into the current QuestionnaireResponse.
105
108
  *
106
109
  * @author Sean Fong
107
110
  */
108
- export function repopulate(checkedItemsToRepopulate: Record<string, ItemToRepopulate>) {
111
+ export function repopulateResponse(checkedItemsToRepopulate: Record<string, ItemToRepopulate>) {
109
112
  const sourceQuestionnaire = useQuestionnaireStore.getState().sourceQuestionnaire;
110
113
  const updatableResponse = useQuestionnaireResponseStore.getState().updatableResponse;
111
114
 
@@ -34,4 +34,5 @@ export interface QuestionnaireModel {
34
34
  answerExpressions: Record<string, AnswerExpression>;
35
35
  processedValueSetCodings: Record<string, Coding[]>;
36
36
  processedValueSetUrls: Record<string, string>;
37
+ fhirPathContext: Record<string, any>;
37
38
  }
@@ -16,8 +16,9 @@
16
16
  */
17
17
 
18
18
  import type { QrRepeatGroup } from './repeatGroup.interface';
19
+ import type { QuestionnaireResponseItem } from 'fhir/r4';
19
20
 
20
- export interface PropsWithQrItemChangeHandler<QuestionnaireResponseItem> {
21
+ export interface PropsWithQrItemChangeHandler {
21
22
  onQrItemChange: (qrItem: QuestionnaireResponseItem) => unknown;
22
23
  }
23
24
 
@@ -33,8 +34,8 @@ export interface PropsWithIsTabledAttribute {
33
34
  isTabled: boolean;
34
35
  }
35
36
 
36
- export interface PropsWithTextShownAttribute {
37
- textShown?: boolean;
37
+ export interface PropsWithShowMinimalViewAttribute {
38
+ showMinimalView?: boolean;
38
39
  }
39
40
 
40
41
  export interface PropsWithParentIsReadOnlyAttribute {
@@ -56,6 +56,7 @@ export interface UseQuestionnaireStoreType {
56
56
  processedValueSetCodings: Record<string, Coding[]>;
57
57
  processedValueSetUrls: Record<string, string>;
58
58
  cachedValueSetCodings: Record<string, Coding[]>;
59
+ fhirPathContext: Record<string, any>;
59
60
  buildSourceQuestionnaire: (
60
61
  questionnaire: Questionnaire,
61
62
  questionnaireResponse?: QuestionnaireResponse,
@@ -91,6 +92,7 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
91
92
  processedValueSetCodings: {},
92
93
  processedValueSetUrls: {},
93
94
  cachedValueSetCodings: {},
95
+ fhirPathContext: {},
94
96
  buildSourceQuestionnaire: async (
95
97
  questionnaire,
96
98
  questionnaireResponse = cloneDeep(emptyResponse),
@@ -108,14 +110,16 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
108
110
  initialEnableWhenLinkedQuestions,
109
111
  initialEnableWhenExpressions,
110
112
  initialCalculatedExpressions,
111
- firstVisibleTab
113
+ firstVisibleTab,
114
+ updatedFhirPathContext
112
115
  } = initialiseFormFromResponse({
113
116
  questionnaireResponse,
114
117
  enableWhenItems: questionnaireModel.enableWhenItems,
115
118
  enableWhenExpressions: questionnaireModel.enableWhenExpressions,
116
119
  calculatedExpressions: questionnaireModel.calculatedExpressions,
117
120
  variablesFhirPath: questionnaireModel.variables.fhirPathVariables,
118
- tabs: questionnaireModel.tabs
121
+ tabs: questionnaireModel.tabs,
122
+ fhirPathContext: questionnaireModel.fhirPathContext
119
123
  });
120
124
 
121
125
  set({
@@ -131,7 +135,8 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
131
135
  calculatedExpressions: initialCalculatedExpressions,
132
136
  answerExpressions: questionnaireModel.answerExpressions,
133
137
  processedValueSetCodings: questionnaireModel.processedValueSetCodings,
134
- processedValueSetUrls: questionnaireModel.processedValueSetUrls
138
+ processedValueSetUrls: questionnaireModel.processedValueSetUrls,
139
+ fhirPathContext: updatedFhirPathContext
135
140
  });
136
141
  },
137
142
  destroySourceQuestionnaire: () =>
@@ -148,7 +153,8 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
148
153
  calculatedExpressions: {},
149
154
  answerExpressions: {},
150
155
  processedValueSetCodings: {},
151
- processedValueSetUrls: {}
156
+ processedValueSetUrls: {},
157
+ fhirPathContext: {}
152
158
  }),
153
159
  switchTab: (newTabIndex: number) => set(() => ({ currentTabIndex: newTabIndex })),
154
160
  markTabAsComplete: (tabLinkId: string) => {
@@ -182,20 +188,31 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
182
188
  toggleEnableWhenActivation: (isActivated: boolean) =>
183
189
  set(() => ({ enableWhenIsActivated: isActivated })),
184
190
  updateExpressions: (updatedResponse: QuestionnaireResponse) => {
185
- const { isUpdated, updatedCalculatedExpressions, updatedEnableWhenExpressions } =
186
- evaluateUpdatedExpressions({
187
- updatedResponse: updatedResponse,
188
- enableWhenExpressions: get().enableWhenExpressions,
189
- calculatedExpressions: get().calculatedExpressions,
190
- variablesFhirPath: get().variables.fhirPathVariables
191
- });
191
+ const {
192
+ isUpdated,
193
+ updatedEnableWhenExpressions,
194
+ updatedCalculatedExpressions,
195
+ updatedFhirPathContext
196
+ } = evaluateUpdatedExpressions({
197
+ updatedResponse,
198
+ enableWhenExpressions: get().enableWhenExpressions,
199
+ calculatedExpressions: get().calculatedExpressions,
200
+ variablesFhirPath: get().variables.fhirPathVariables,
201
+ existingFhirPathContext: get().fhirPathContext
202
+ });
192
203
 
193
204
  if (isUpdated) {
194
205
  set(() => ({
195
206
  enableWhenExpressions: updatedEnableWhenExpressions,
196
- calculatedExpressions: updatedCalculatedExpressions
207
+ calculatedExpressions: updatedCalculatedExpressions,
208
+ fhirPathContext: updatedFhirPathContext
197
209
  }));
210
+ return 0;
198
211
  }
212
+
213
+ set(() => ({
214
+ fhirPathContext: updatedFhirPathContext
215
+ }));
199
216
  },
200
217
  addCodingToCache: (valueSetUrl: string, codings: Coding[]) =>
201
218
  set(() => ({
@@ -205,11 +222,14 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
205
222
  }
206
223
  })),
207
224
  updatePopulatedProperties: (populatedResponse: QuestionnaireResponse, persistTabIndex) => {
208
- const initialCalculatedExpressions = evaluateInitialCalculatedExpressions({
225
+ const evaluateInitialCalculatedExpressionsResult = evaluateInitialCalculatedExpressions({
209
226
  initialResponse: populatedResponse,
210
227
  calculatedExpressions: get().calculatedExpressions,
211
- variablesFhirPath: get().variables.fhirPathVariables
228
+ variablesFhirPath: get().variables.fhirPathVariables,
229
+ existingFhirPathContext: get().fhirPathContext
212
230
  });
231
+ const { initialCalculatedExpressions } = evaluateInitialCalculatedExpressionsResult;
232
+ let updatedFhirPathContext = evaluateInitialCalculatedExpressionsResult.updatedFhirPathContext;
213
233
 
214
234
  const updatedResponse = initialiseCalculatedExpressionValues(
215
235
  get().sourceQuestionnaire,
@@ -228,15 +248,18 @@ const useQuestionnaireStore = create<UseQuestionnaireStoreType>()((set, get) =>
228
248
  enableWhenExpressions: get().enableWhenExpressions,
229
249
  calculatedExpressions: initialCalculatedExpressions,
230
250
  variablesFhirPath: get().variables.fhirPathVariables,
231
- tabs: get().tabs
251
+ tabs: get().tabs,
252
+ fhirPathContext: updatedFhirPathContext
232
253
  });
254
+ updatedFhirPathContext = evaluateInitialCalculatedExpressionsResult.updatedFhirPathContext;
233
255
 
234
256
  set(() => ({
235
257
  enableWhenItems: initialEnableWhenItems,
236
258
  enableWhenLinkedQuestions: initialEnableWhenLinkedQuestions,
237
259
  enableWhenExpressions: initialEnableWhenExpressions,
238
260
  calculatedExpressions: initialCalculatedExpressions,
239
- currentTabIndex: persistTabIndex ? get().currentTabIndex : firstVisibleTab
261
+ currentTabIndex: persistTabIndex ? get().currentTabIndex : firstVisibleTab,
262
+ fhirPathContext: updatedFhirPathContext
240
263
  }));
241
264
 
242
265
  return updatedResponse;
@@ -39,7 +39,8 @@ export default function CustomGlobalStyles() {
39
39
  },
40
40
  '#root': {
41
41
  width: '100%',
42
- height: '100%'
42
+ height: '100%',
43
+ textAlign: 'left'
43
44
  },
44
45
  input: {
45
46
  '&[type=number]': {
@@ -57,10 +58,6 @@ export default function CustomGlobalStyles() {
57
58
  img: {
58
59
  display: 'block',
59
60
  maxWidth: '100%'
60
- },
61
- ul: {
62
- margin: 0,
63
- padding: 0
64
61
  }
65
62
  }}
66
63
  />
@@ -37,7 +37,7 @@ export function responsiveFontSizes(props: { sm: number; md: number; lg: number
37
37
  // ----------------------------------------------------------------------
38
38
 
39
39
  const typography = {
40
- fontFamily: ['Inter', 'sans-serif', 'Roboto', 'Arial', '"Helvetica Neue"', 'Helvetica'].join(','),
40
+ fontFamily: ['Inter', 'sans-serif', 'Helvetica', 'Arial', 'Roboto', '"Helvetica Neue"'].join(','),
41
41
  fontWeightRegular: 500,
42
42
  h1: {
43
43
  fontWeight: 800,
@@ -72,40 +72,40 @@ const typography = {
72
72
  h6: {
73
73
  fontWeight: 700,
74
74
  lineHeight: 28 / 18,
75
- fontSize: pxToRem(13),
75
+ fontSize: pxToRem(13.5),
76
76
  ...responsiveFontSizes({ sm: 14, md: 14, lg: 14 })
77
77
  },
78
78
  subtitle1: {
79
79
  fontWeight: 600,
80
80
  lineHeight: 1.5,
81
- fontSize: pxToRem(13)
81
+ fontSize: pxToRem(13.5)
82
82
  },
83
83
  subtitle2: {
84
84
  fontWeight: 600,
85
85
  lineHeight: 22 / 14,
86
- fontSize: pxToRem(11.5)
86
+ fontSize: pxToRem(12)
87
87
  },
88
88
  body1: {
89
89
  lineHeight: 1.5,
90
- fontSize: pxToRem(12.25)
90
+ fontSize: pxToRem(13)
91
91
  },
92
92
  body2: {
93
93
  lineHeight: 22 / 14,
94
- fontSize: pxToRem(11)
94
+ fontSize: pxToRem(11.5)
95
95
  },
96
96
  caption: {
97
97
  lineHeight: 1.5,
98
- fontSize: pxToRem(10)
98
+ fontSize: pxToRem(10.5)
99
99
  },
100
100
  overline: {
101
101
  fontWeight: 700,
102
102
  lineHeight: 1.5,
103
- fontSize: pxToRem(10)
103
+ fontSize: pxToRem(10.5)
104
104
  },
105
105
  button: {
106
106
  fontWeight: 700,
107
107
  lineHeight: 24 / 14,
108
- fontSize: pxToRem(12)
108
+ fontSize: pxToRem(12.5)
109
109
  }
110
110
  };
111
111
 
@@ -40,49 +40,62 @@ interface EvaluateInitialCalculatedExpressionsParams {
40
40
  initialResponse: QuestionnaireResponse;
41
41
  calculatedExpressions: Record<string, CalculatedExpression>;
42
42
  variablesFhirPath: Record<string, Expression[]>;
43
+ existingFhirPathContext: Record<string, any>;
43
44
  }
44
45
 
45
46
  export function evaluateInitialCalculatedExpressions(
46
47
  params: EvaluateInitialCalculatedExpressionsParams
47
- ): Record<string, CalculatedExpression> {
48
- const { initialResponse, calculatedExpressions, variablesFhirPath } = params;
48
+ ): {
49
+ initialCalculatedExpressions: Record<string, CalculatedExpression>;
50
+ updatedFhirPathContext: Record<string, any>;
51
+ } {
52
+ const { initialResponse, calculatedExpressions, variablesFhirPath, existingFhirPathContext } =
53
+ params;
49
54
 
50
- // Return early if initialResponse is empty
51
- if (_isEqual(initialResponse, cloneDeep(emptyResponse))) {
52
- return calculatedExpressions;
55
+ // Return early if initialResponse is empty or there are no calculated expressions to evaluate
56
+ if (
57
+ _isEqual(initialResponse, cloneDeep(emptyResponse)) ||
58
+ Object.keys(calculatedExpressions).length === 0
59
+ ) {
60
+ return {
61
+ initialCalculatedExpressions: calculatedExpressions,
62
+ updatedFhirPathContext: existingFhirPathContext
63
+ };
53
64
  }
54
65
 
55
66
  const initialCalculatedExpressions: Record<string, CalculatedExpression> = {
56
67
  ...calculatedExpressions
57
68
  };
69
+ const updatedFhirPathContext = createFhirPathContext(
70
+ initialResponse,
71
+ variablesFhirPath,
72
+ existingFhirPathContext
73
+ );
58
74
 
59
- if (Object.keys(initialCalculatedExpressions).length > 0) {
60
- const fhirPathContext: Record<string, any> = createFhirPathContext(
61
- initialResponse,
62
- variablesFhirPath
63
- );
64
-
65
- for (const linkId in initialCalculatedExpressions) {
66
- try {
67
- const result = fhirpath.evaluate(
68
- initialResponse,
69
- calculatedExpressions[linkId].expression,
70
- fhirPathContext,
71
- fhirpath_r4_model
72
- );
75
+ for (const linkId in initialCalculatedExpressions) {
76
+ try {
77
+ const result = fhirpath.evaluate(
78
+ initialResponse,
79
+ calculatedExpressions[linkId].expression,
80
+ updatedFhirPathContext,
81
+ fhirpath_r4_model
82
+ );
73
83
 
74
- if (!_isEqual(calculatedExpressions[linkId].value, result[0])) {
75
- initialCalculatedExpressions[linkId].value = result[0];
76
- }
77
- } catch (e) {
78
- console.warn(
79
- e.message,
80
- `LinkId: ${linkId}\nExpression: ${calculatedExpressions[linkId].expression}`
81
- );
84
+ if (!_isEqual(calculatedExpressions[linkId].value, result[0])) {
85
+ initialCalculatedExpressions[linkId].value = result[0];
82
86
  }
87
+ } catch (e) {
88
+ console.warn(
89
+ e.message,
90
+ `LinkId: ${linkId}\nExpression: ${calculatedExpressions[linkId].expression}`
91
+ );
83
92
  }
84
93
  }
85
- return initialCalculatedExpressions;
94
+
95
+ return {
96
+ initialCalculatedExpressions,
97
+ updatedFhirPathContext
98
+ };
86
99
  }
87
100
 
88
101
  export function evaluateCalculatedExpressions(
@@ -0,0 +1,23 @@
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 dayjs from 'dayjs';
19
+ import localizedFormat from 'dayjs/plugin/localizedFormat';
20
+ import customParseFormat from 'dayjs/plugin/customParseFormat';
21
+
22
+ dayjs.extend(localizedFormat);
23
+ dayjs.extend(customParseFormat);
@@ -28,52 +28,67 @@ interface EvaluateInitialEnableWhenExpressionsParams {
28
28
  initialResponse: QuestionnaireResponse;
29
29
  enableWhenExpressions: Record<string, EnableWhenExpression>;
30
30
  variablesFhirPath: Record<string, Expression[]>;
31
+ existingFhirPathContext: Record<string, any>;
31
32
  }
32
33
 
33
34
  export function evaluateInitialEnableWhenExpressions(
34
35
  params: EvaluateInitialEnableWhenExpressionsParams
35
- ): Record<string, EnableWhenExpression> {
36
- const { initialResponse, enableWhenExpressions, variablesFhirPath } = params;
36
+ ): {
37
+ initialEnableWhenExpressions: Record<string, EnableWhenExpression>;
38
+ updatedFhirPathContext: Record<string, any>;
39
+ } {
40
+ const { initialResponse, enableWhenExpressions, variablesFhirPath, existingFhirPathContext } =
41
+ params;
37
42
 
38
- // Return early if initialResponse is empty
39
- if (_isEqual(initialResponse, cloneDeep(emptyResponse))) {
40
- return enableWhenExpressions;
43
+ // Return early if initialResponse is empty or there are no enableWhen expressions to evaluate
44
+ if (
45
+ _isEqual(initialResponse, cloneDeep(emptyResponse)) ||
46
+ Object.keys(enableWhenExpressions).length === 0
47
+ ) {
48
+ return {
49
+ initialEnableWhenExpressions: enableWhenExpressions,
50
+ updatedFhirPathContext: existingFhirPathContext
51
+ };
41
52
  }
42
53
 
43
- const initialExpressions: Record<string, EnableWhenExpression> = { ...enableWhenExpressions };
44
-
45
- if (Object.keys(initialExpressions).length > 0) {
46
- const fhirPathContext: Record<string, any> = createFhirPathContext(
47
- initialResponse,
48
- variablesFhirPath
49
- );
54
+ const initialEnableWhenExpressions: Record<string, EnableWhenExpression> = {
55
+ ...enableWhenExpressions
56
+ };
57
+ const updatedFhirPathContext = createFhirPathContext(
58
+ initialResponse,
59
+ variablesFhirPath,
60
+ existingFhirPathContext
61
+ );
50
62
 
51
- for (const linkId in initialExpressions) {
52
- try {
53
- const result = fhirpath.evaluate(
54
- initialResponse,
55
- enableWhenExpressions[linkId].expression,
56
- fhirPathContext,
57
- fhirpath_r4_model
58
- );
63
+ for (const linkId in initialEnableWhenExpressions) {
64
+ try {
65
+ const result = fhirpath.evaluate(
66
+ initialResponse,
67
+ enableWhenExpressions[linkId].expression,
68
+ updatedFhirPathContext,
69
+ fhirpath_r4_model
70
+ );
59
71
 
60
- if (result.length > 0) {
61
- initialExpressions[linkId].isEnabled = result[0];
62
- }
72
+ if (result.length > 0) {
73
+ initialEnableWhenExpressions[linkId].isEnabled = result[0];
74
+ }
63
75
 
64
- // handle intersect edge case - evualate() returns empty array if result is false
65
- if (enableWhenExpressions[linkId].expression.includes('intersect') && result.length === 0) {
66
- initialExpressions[linkId].isEnabled = false;
67
- }
68
- } catch (e) {
69
- console.warn(
70
- e.message,
71
- `LinkId: ${linkId}\nExpression: ${enableWhenExpressions[linkId].expression}`
72
- );
76
+ // handle intersect edge case - evaluate() returns empty array if result is false
77
+ if (enableWhenExpressions[linkId].expression.includes('intersect') && result.length === 0) {
78
+ initialEnableWhenExpressions[linkId].isEnabled = false;
73
79
  }
80
+ } catch (e) {
81
+ console.warn(
82
+ e.message,
83
+ `LinkId: ${linkId}\nExpression: ${enableWhenExpressions[linkId].expression}`
84
+ );
74
85
  }
75
86
  }
76
- return initialExpressions;
87
+
88
+ return {
89
+ initialEnableWhenExpressions,
90
+ updatedFhirPathContext
91
+ };
77
92
  }
78
93
 
79
94
  export function evaluateEnableWhenExpressions(
@@ -104,7 +119,7 @@ export function evaluateEnableWhenExpressions(
104
119
  }
105
120
  }
106
121
 
107
- // handle intersect edge case - evualate() returns empty array if result is false
122
+ // handle intersect edge case - evaluate() returns empty array if result is false
108
123
  if (enableWhenExpressions[linkId].expression.includes('intersect') && result.length === 0) {
109
124
  updatedEnableWhenExpressions[linkId].isEnabled = false;
110
125
  }