@aehrc/smart-forms-renderer 0.17.0 → 0.20.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 (567) hide show
  1. package/__mocks__/zustand.ts +1 -1
  2. package/lib/api/smartClient.js +1 -1
  3. package/lib/components/Alert.styles.js +1 -1
  4. package/lib/components/Box.styles.js +1 -1
  5. package/lib/components/FormComponents/AttachmentItem/AttachmentField.js +1 -1
  6. package/lib/components/FormComponents/AttachmentItem/AttachmentFieldWrapper.js +1 -1
  7. package/lib/components/FormComponents/AttachmentItem/AttachmentFileDropBox.js +1 -1
  8. package/lib/components/FormComponents/AttachmentItem/AttachmentItem.js +1 -1
  9. package/lib/components/FormComponents/AttachmentItem/AttachmentUrlField.js +1 -1
  10. package/lib/components/FormComponents/BooleanItem/BooleanField.d.ts +7 -3
  11. package/lib/components/FormComponents/BooleanItem/BooleanField.js +27 -5
  12. package/lib/components/FormComponents/BooleanItem/BooleanField.js.map +1 -1
  13. package/lib/components/FormComponents/BooleanItem/BooleanItem.js +20 -11
  14. package/lib/components/FormComponents/BooleanItem/BooleanItem.js.map +1 -1
  15. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteField.js +1 -1
  16. package/lib/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.js +1 -1
  17. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.d.ts +0 -2
  18. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.js +6 -4
  19. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.js.map +1 -1
  20. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.d.ts +0 -2
  21. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js +4 -4
  22. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.js.map +1 -1
  23. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.d.ts +2 -3
  24. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.js +5 -2
  25. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.js.map +1 -1
  26. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.d.ts +0 -2
  27. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js +4 -4
  28. package/lib/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.js.map +1 -1
  29. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js +6 -7
  30. package/lib/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.js.map +1 -1
  31. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.d.ts +0 -2
  32. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js +5 -2
  33. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.js.map +1 -1
  34. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.d.ts +0 -2
  35. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js +4 -4
  36. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.js.map +1 -1
  37. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.d.ts +0 -2
  38. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js +5 -2
  39. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.js.map +1 -1
  40. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.d.ts +0 -2
  41. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js +4 -4
  42. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.js.map +1 -1
  43. package/lib/components/FormComponents/ChoiceItems/ChoiceRadioSingle.js +1 -1
  44. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.js +1 -1
  45. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.js +1 -1
  46. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.js +1 -1
  47. package/lib/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.js +1 -1
  48. package/lib/components/FormComponents/DateTimeItem/DateTimeField.js +1 -1
  49. package/lib/components/FormComponents/DateTimeItem/DateTimeItem.js +1 -1
  50. package/lib/components/FormComponents/{CustomDateItem/customDateTimePicker → DateTimeItems/CustomDateItem}/CustomDateField.js +1 -1
  51. package/lib/components/FormComponents/DateTimeItems/CustomDateItem/CustomDateField.js.map +1 -0
  52. package/lib/components/FormComponents/{CustomDateItem → DateTimeItems/CustomDateItem}/CustomDateItem.d.ts +1 -1
  53. package/lib/components/FormComponents/{CustomDateItem → DateTimeItems/CustomDateItem}/CustomDateItem.js +13 -13
  54. package/lib/components/FormComponents/DateTimeItems/CustomDateItem/CustomDateItem.js.map +1 -0
  55. package/lib/components/FormComponents/{CustomDateItem/customDateTimePicker → DateTimeItems/CustomDateItem}/DatePicker.js +1 -2
  56. package/lib/components/FormComponents/DateTimeItems/CustomDateItem/DatePicker.js.map +1 -0
  57. package/lib/components/FormComponents/DateTimeItems/CustomDateItem/DatePickerButton.js +29 -0
  58. package/lib/components/FormComponents/DateTimeItems/CustomDateItem/DatePickerButton.js.map +1 -0
  59. package/lib/components/FormComponents/{CustomDateItem/customDateTimePicker → DateTimeItems/CustomDateItem}/MuiDatePicker.js +1 -1
  60. package/lib/components/FormComponents/DateTimeItems/CustomDateItem/MuiDatePicker.js.map +1 -0
  61. package/lib/components/FormComponents/DateTimeItems/CustomDateTimeItem/CustomDateTimeItem.d.ts +9 -0
  62. package/lib/components/FormComponents/DateTimeItems/CustomDateTimeItem/CustomDateTimeItem.js +116 -0
  63. package/lib/components/FormComponents/DateTimeItems/CustomDateTimeItem/CustomDateTimeItem.js.map +1 -0
  64. package/lib/components/FormComponents/DateTimeItems/CustomDateTimeItem/CustomTimeField.d.ts +15 -0
  65. package/lib/components/FormComponents/DateTimeItems/CustomDateTimeItem/CustomTimeField.js +40 -0
  66. package/lib/components/FormComponents/DateTimeItems/CustomDateTimeItem/CustomTimeField.js.map +1 -0
  67. package/lib/components/FormComponents/DateTimeItems/CustomDateTimeItem/DateTimeField.d.ts +22 -0
  68. package/lib/components/FormComponents/DateTimeItems/CustomDateTimeItem/DateTimeField.js +28 -0
  69. package/lib/components/FormComponents/DateTimeItems/CustomDateTimeItem/DateTimeField.js.map +1 -0
  70. package/lib/components/FormComponents/{CustomDateItem/customDateTimePicker → DateTimeItems}/index.js +1 -1
  71. package/lib/components/FormComponents/DateTimeItems/index.js.map +1 -0
  72. package/lib/components/FormComponents/DateTimeItems/utils/index.d.ts +1 -0
  73. package/lib/components/FormComponents/{CustomDateItem → DateTimeItems/utils}/index.js +2 -2
  74. package/lib/components/FormComponents/DateTimeItems/utils/index.js.map +1 -0
  75. package/lib/components/FormComponents/{CustomDateItem/customDateTimePicker/utils/parseDates.d.ts → DateTimeItems/utils/parseDate.d.ts} +2 -2
  76. package/lib/components/FormComponents/{CustomDateItem/customDateTimePicker/utils/parseDates.js → DateTimeItems/utils/parseDate.js} +10 -10
  77. package/lib/components/FormComponents/DateTimeItems/utils/parseDate.js.map +1 -0
  78. package/lib/components/FormComponents/DateTimeItems/utils/parseTime.d.ts +19 -0
  79. package/lib/components/FormComponents/DateTimeItems/utils/parseTime.js +81 -0
  80. package/lib/components/FormComponents/DateTimeItems/utils/parseTime.js.map +1 -0
  81. package/lib/components/FormComponents/DecimalItem/DecimalField.js +1 -1
  82. package/lib/components/FormComponents/DecimalItem/DecimalItem.js +1 -1
  83. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.js +1 -1
  84. package/lib/components/FormComponents/DisplayItem/DisplayInstructions.styles.js +1 -1
  85. package/lib/components/FormComponents/DisplayItem/DisplayItem.js +1 -1
  86. package/lib/components/FormComponents/GridGroup/GridGroup.js +1 -1
  87. package/lib/components/FormComponents/GridGroup/GridRow.js +1 -1
  88. package/lib/components/FormComponents/GridGroup/GridTable.js +1 -1
  89. package/lib/components/FormComponents/GridGroup/index.js +1 -1
  90. package/lib/components/FormComponents/GroupItem/GroupHeading.js +1 -1
  91. package/lib/components/FormComponents/GroupItem/GroupItem.d.ts +2 -1
  92. package/lib/components/FormComponents/GroupItem/GroupItem.js +4 -4
  93. package/lib/components/FormComponents/GroupItem/GroupItem.js.map +1 -1
  94. package/lib/components/FormComponents/GroupItem/GroupItem.styles.js +1 -1
  95. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.d.ts +2 -1
  96. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js +5 -5
  97. package/lib/components/FormComponents/GroupItem/GroupItemSwitcher.js.map +1 -1
  98. package/lib/components/FormComponents/GroupItem/NextTabButton.js +1 -1
  99. package/lib/components/FormComponents/GroupItem/NextTabButtonWrapper.js +1 -1
  100. package/lib/components/FormComponents/IntegerItem/IntegerField.js +1 -1
  101. package/lib/components/FormComponents/IntegerItem/IntegerItem.js +1 -1
  102. package/lib/components/FormComponents/Item.styles.js +1 -1
  103. package/lib/components/FormComponents/ItemParts/CheckboxSingle.js +1 -1
  104. package/lib/components/FormComponents/ItemParts/CheckboxSingleWithOpenLabel.js +1 -1
  105. package/lib/components/FormComponents/ItemParts/ContextDisplayItem.js +1 -1
  106. package/lib/components/FormComponents/ItemParts/FadingCheckIcon.js +1 -1
  107. package/lib/components/FormComponents/ItemParts/ItemFieldGrid.js +1 -1
  108. package/lib/components/FormComponents/ItemParts/ItemLabelText.js +1 -1
  109. package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.js +1 -1
  110. package/lib/components/FormComponents/ItemParts/RadioAnswerOptionButtons.js +1 -1
  111. package/lib/components/FormComponents/ItemParts/RadioButtonWithOpenLabel.js +1 -1
  112. package/lib/components/FormComponents/Lists.styles.js +1 -1
  113. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.js +1 -1
  114. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.js +1 -1
  115. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.d.ts +0 -2
  116. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.js +7 -5
  117. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.js.map +1 -1
  118. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.d.ts +0 -2
  119. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js +4 -4
  120. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.js.map +1 -1
  121. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js +3 -5
  122. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.js.map +1 -1
  123. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.d.ts +0 -2
  124. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.js +5 -2
  125. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.js.map +1 -1
  126. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.d.ts +0 -2
  127. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js +3 -3
  128. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.js.map +1 -1
  129. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.js +1 -1
  130. package/lib/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.js +1 -1
  131. package/lib/components/FormComponents/RepeatGroup/AddItemButton.js +1 -1
  132. package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.js +1 -1
  133. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.d.ts +2 -2
  134. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js +9 -3
  135. package/lib/components/FormComponents/RepeatGroup/RepeatGroup.js.map +1 -1
  136. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.d.ts +1 -0
  137. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js +3 -3
  138. package/lib/components/FormComponents/RepeatGroup/RepeatGroupItem.js.map +1 -1
  139. package/lib/components/FormComponents/RepeatGroup/index.js +1 -1
  140. package/lib/components/FormComponents/RepeatItem/AddItemButton.js +1 -1
  141. package/lib/components/FormComponents/RepeatItem/RemoveItemButton.js +1 -1
  142. package/lib/components/FormComponents/RepeatItem/RepeatField.js +1 -1
  143. package/lib/components/FormComponents/RepeatItem/RepeatItem.js +1 -1
  144. package/lib/components/FormComponents/RepeatItem/RepeatItem.styles.js +1 -1
  145. package/lib/components/FormComponents/RepeatItem/index.js +1 -1
  146. package/lib/components/FormComponents/SingleItem/SingleItem.d.ts +2 -2
  147. package/lib/components/FormComponents/SingleItem/SingleItem.js +12 -7
  148. package/lib/components/FormComponents/SingleItem/SingleItem.js.map +1 -1
  149. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js +4 -4
  150. package/lib/components/FormComponents/SingleItem/SingleItemSwitcher.js.map +1 -1
  151. package/lib/components/FormComponents/SingleItem/index.js +1 -1
  152. package/lib/components/FormComponents/SliderItem/Slider.styles.js +1 -1
  153. package/lib/components/FormComponents/SliderItem/SliderDisplayValue.js +1 -1
  154. package/lib/components/FormComponents/SliderItem/SliderField.js +1 -1
  155. package/lib/components/FormComponents/SliderItem/SliderItem.js +1 -1
  156. package/lib/components/FormComponents/SliderItem/SliderLabels.js +1 -1
  157. package/lib/components/FormComponents/StringItem/StringField.js +1 -1
  158. package/lib/components/FormComponents/StringItem/StringItem.js +1 -1
  159. package/lib/components/FormComponents/Tables/AddRowButton.js +1 -1
  160. package/lib/components/FormComponents/Tables/GroupTable.js +1 -1
  161. package/lib/components/FormComponents/Tables/GroupTableBody.js +1 -1
  162. package/lib/components/FormComponents/Tables/GroupTableRow.js +1 -1
  163. package/lib/components/FormComponents/Tables/GroupTableRowCells.js +1 -1
  164. package/lib/components/FormComponents/Tables/GroupTableView.js +1 -1
  165. package/lib/components/FormComponents/Tables/RemoveRowButton.js +1 -1
  166. package/lib/components/FormComponents/Tables/SelectRowButton.js +1 -1
  167. package/lib/components/FormComponents/Tables/Table.styles.js +1 -1
  168. package/lib/components/FormComponents/Tables/index.js +1 -1
  169. package/lib/components/FormComponents/TextItem/MuiTextField.js +1 -1
  170. package/lib/components/FormComponents/TextItem/TextField.js +1 -1
  171. package/lib/components/FormComponents/TextItem/TextItem.js +1 -1
  172. package/lib/components/FormComponents/Textfield.styles.js +1 -1
  173. package/lib/components/FormComponents/TimeItem/TimeField.js +1 -1
  174. package/lib/components/FormComponents/TimeItem/TimeItem.js +1 -1
  175. package/lib/components/FormComponents/UrlItem/UrlField.js +1 -1
  176. package/lib/components/FormComponents/UrlItem/UrlItem.js +1 -1
  177. package/lib/components/FormComponents/index.d.ts +1 -1
  178. package/lib/components/FormComponents/index.js +2 -2
  179. package/lib/components/FormComponents/index.js.map +1 -1
  180. package/lib/components/Iconify/Iconify.js +1 -1
  181. package/lib/components/Lists.styles.js +1 -1
  182. package/lib/components/Renderer/BaseRenderer.js +1 -1
  183. package/lib/components/Renderer/FormBodyCollapsible.js +1 -1
  184. package/lib/components/Renderer/FormBodySingleCollapsible.js +1 -1
  185. package/lib/components/Renderer/FormBodySingleCollapsibleWrapper.js +1 -1
  186. package/lib/components/Renderer/FormBodyTabbed.js +1 -1
  187. package/lib/components/Renderer/FormTitle.js +1 -1
  188. package/lib/components/Renderer/FormTopLevelItem.js +1 -1
  189. package/lib/components/Renderer/SmartFormsRenderer.js +1 -1
  190. package/lib/components/Renderer/index.js +1 -1
  191. package/lib/components/Tabs/CompleteTabButton.js +1 -1
  192. package/lib/components/Tabs/FormBodySingleTab.js +1 -1
  193. package/lib/components/Tabs/FormBodyTabList.js +1 -1
  194. package/lib/components/Tabs/FormBodyTabListWrapper.js +1 -1
  195. package/lib/components/Tabs/ShowCompletedTabsSection.js +1 -1
  196. package/lib/components/index.js +1 -1
  197. package/lib/hooks/useAttachmentUrlValidation.js +1 -1
  198. package/lib/hooks/useContextDisplayItems.js +1 -1
  199. package/lib/hooks/useDateTimeNonEmpty.d.ts +2 -0
  200. package/lib/{components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.js → hooks/useDateTimeNonEmpty.js} +9 -3
  201. package/lib/hooks/useDateTimeNonEmpty.js.map +1 -0
  202. package/lib/hooks/useDateValidation.js +3 -3
  203. package/lib/hooks/useDateValidation.js.map +1 -1
  204. package/lib/hooks/useDebounce.js +1 -1
  205. package/lib/hooks/useDecimalCalculatedExpression.js +1 -1
  206. package/lib/hooks/useGroupTableRows.js +1 -1
  207. package/lib/hooks/useHidden.d.ts +1 -1
  208. package/lib/hooks/useHidden.js +4 -3
  209. package/lib/hooks/useHidden.js.map +1 -1
  210. package/lib/hooks/useInitialiseGroupTable.js +1 -1
  211. package/lib/hooks/useInitialiseRenderer.js +1 -1
  212. package/lib/hooks/useInitialiseRepeatAnswers.js +1 -1
  213. package/lib/hooks/useInitialiseRepeatGroups.js +1 -1
  214. package/lib/hooks/useIntegerCalculatedExpression.js +1 -1
  215. package/lib/hooks/useNumberInput.js +1 -1
  216. package/lib/hooks/useQueryClient.js +1 -1
  217. package/lib/hooks/useReadOnly.js +1 -1
  218. package/lib/hooks/useRenderingExtensions.js +1 -1
  219. package/lib/hooks/useResponsive.js +1 -1
  220. package/lib/hooks/useSliderExtensions.js +1 -1
  221. package/lib/hooks/useStringCalculatedExpression.js +1 -1
  222. package/lib/hooks/useStringInput.js +1 -1
  223. package/lib/hooks/useTerminologyServerQuery.js +1 -1
  224. package/lib/hooks/useTimeValidation.d.ts +5 -0
  225. package/lib/hooks/useTimeValidation.js +54 -0
  226. package/lib/hooks/useTimeValidation.js.map +1 -0
  227. package/lib/hooks/useValidationFeedback.js +1 -1
  228. package/lib/hooks/useValueSetCodings.js +1 -1
  229. package/lib/index.d.ts +1 -0
  230. package/lib/index.js +1 -0
  231. package/lib/index.js.map +1 -1
  232. package/lib/interfaces/answerExpression.interface.js +1 -1
  233. package/lib/interfaces/choice.enum.js +1 -1
  234. package/lib/interfaces/enableWhen.interface.d.ts +20 -5
  235. package/lib/interfaces/enableWhen.interface.js +1 -1
  236. package/lib/interfaces/groupTable.interface.js +1 -1
  237. package/lib/interfaces/index.d.ts +1 -0
  238. package/lib/interfaces/index.js +2 -0
  239. package/lib/interfaces/index.js.map +1 -0
  240. package/lib/interfaces/populate.interface.js +1 -1
  241. package/lib/interfaces/questionnaireStore.interface.d.ts +2 -2
  242. package/lib/interfaces/questionnaireStore.interface.js +1 -1
  243. package/lib/interfaces/regex.interface.js +1 -1
  244. package/lib/interfaces/renderProps.interface.d.ts +4 -0
  245. package/lib/interfaces/renderProps.interface.js +1 -1
  246. package/lib/interfaces/repeatGroup.interface.js +1 -1
  247. package/lib/interfaces/valueSet.interface.js +1 -1
  248. package/lib/interfaces/variables.interface.js +1 -1
  249. package/lib/stores/questionnaireResponseStore.js +1 -1
  250. package/lib/stores/questionnaireStore.d.ts +5 -3
  251. package/lib/stores/questionnaireStore.js +13 -6
  252. package/lib/stores/questionnaireStore.js.map +1 -1
  253. package/lib/stores/smartConfigStore.js +1 -1
  254. package/lib/stores/terminologyServerStore.js +1 -1
  255. package/lib/theme/customGlobalStyles.js +1 -1
  256. package/lib/theme/overrides/Accordion.js +1 -1
  257. package/lib/theme/overrides/Autocomplete.js +1 -1
  258. package/lib/theme/overrides/Button.js +1 -1
  259. package/lib/theme/overrides/Card.js +1 -1
  260. package/lib/theme/overrides/Input.js +1 -1
  261. package/lib/theme/overrides/Overrides.js +1 -1
  262. package/lib/theme/overrides/Paper.js +1 -1
  263. package/lib/theme/overrides/SpeedDial.js +1 -1
  264. package/lib/theme/overrides/Table.js +1 -1
  265. package/lib/theme/palette.js +1 -1
  266. package/lib/theme/shadows.js +1 -1
  267. package/lib/theme/typography.js +1 -1
  268. package/lib/utils/calculatedExpression.js +1 -1
  269. package/lib/utils/choice.d.ts +1 -1
  270. package/lib/utils/choice.js +1 -1
  271. package/lib/utils/choice.js.map +1 -1
  272. package/lib/utils/dayjsExtend.js +1 -1
  273. package/lib/utils/debounce.js +1 -1
  274. package/lib/utils/emptyResource.js +1 -1
  275. package/lib/utils/enableWhen.d.ts +11 -4
  276. package/lib/utils/enableWhen.js +131 -54
  277. package/lib/utils/enableWhen.js.map +1 -1
  278. package/lib/utils/enableWhenExpression.d.ts +1 -1
  279. package/lib/utils/enableWhenExpression.js +27 -8
  280. package/lib/utils/enableWhenExpression.js.map +1 -1
  281. package/lib/utils/fhirpath.js +1 -1
  282. package/lib/utils/formChanges.js +1 -1
  283. package/lib/utils/groupTable.js +1 -1
  284. package/lib/utils/index.d.ts +1 -0
  285. package/lib/utils/index.js +2 -1
  286. package/lib/utils/index.js.map +1 -1
  287. package/lib/utils/initialise.js +1 -1
  288. package/lib/utils/itemControl.js +1 -1
  289. package/lib/utils/mapItem.js +1 -1
  290. package/lib/utils/misc.d.ts +5 -0
  291. package/lib/utils/misc.js +116 -0
  292. package/lib/utils/misc.js.map +1 -0
  293. package/lib/utils/openChoice.js +1 -1
  294. package/lib/utils/parseInputs.js +1 -1
  295. package/lib/utils/populateContexts.js +1 -1
  296. package/lib/utils/qItem.d.ts +2 -1
  297. package/lib/utils/qItem.js +20 -8
  298. package/lib/utils/qItem.js.map +1 -1
  299. package/lib/utils/qrItem.js +1 -1
  300. package/lib/utils/questionnaireStoreUtils/addAdditionalVariables.js +1 -1
  301. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +2 -2
  302. package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -1
  303. package/lib/utils/questionnaireStoreUtils/extractContainedValueSets.js +1 -1
  304. package/lib/utils/questionnaireStoreUtils/extractOtherExtensions.d.ts +13 -3
  305. package/lib/utils/questionnaireStoreUtils/extractOtherExtensions.js +82 -19
  306. package/lib/utils/questionnaireStoreUtils/extractOtherExtensions.js.map +1 -1
  307. package/lib/utils/questionnaireStoreUtils/extractTabs.js +1 -1
  308. package/lib/utils/questionnaireStoreUtils/extractVariables.js +1 -1
  309. package/lib/utils/questionnaireStoreUtils/resolveValueSets.js +1 -1
  310. package/lib/utils/removeEmptyAnswers.js +1 -1
  311. package/lib/utils/repopulateItems.js +1 -1
  312. package/lib/utils/slider.js +1 -1
  313. package/lib/utils/tabs.d.ts +1 -1
  314. package/lib/utils/tabs.js +7 -5
  315. package/lib/utils/tabs.js.map +1 -1
  316. package/lib/utils/validateQuestionnaire.js +1 -1
  317. package/lib/utils/valueSet.js +1 -1
  318. package/package.json +2 -2
  319. package/src/api/smartClient.ts +1 -1
  320. package/src/components/Alert.styles.ts +1 -1
  321. package/src/components/Box.styles.ts +1 -1
  322. package/src/components/FormComponents/AttachmentItem/AttachmentField.tsx +1 -1
  323. package/src/components/FormComponents/AttachmentItem/AttachmentFieldWrapper.tsx +1 -1
  324. package/src/components/FormComponents/AttachmentItem/AttachmentFileDropBox.tsx +1 -1
  325. package/src/components/FormComponents/AttachmentItem/AttachmentItem.tsx +1 -1
  326. package/src/components/FormComponents/AttachmentItem/AttachmentUrlField.tsx +1 -1
  327. package/src/components/FormComponents/BooleanItem/BooleanField.tsx +54 -18
  328. package/src/components/FormComponents/BooleanItem/BooleanItem.tsx +48 -14
  329. package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteField.tsx +1 -1
  330. package/src/components/FormComponents/ChoiceItems/ChoiceAutocompleteItem.tsx +1 -1
  331. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionFields.tsx +5 -3
  332. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerOptionItem.tsx +1 -6
  333. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetFields.tsx +7 -4
  334. package/src/components/FormComponents/ChoiceItems/ChoiceCheckboxAnswerValueSetItem.tsx +3 -6
  335. package/src/components/FormComponents/ChoiceItems/ChoiceItemSwitcher.tsx +2 -7
  336. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionFields.tsx +5 -3
  337. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerOptionItem.tsx +2 -6
  338. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetFields.tsx +5 -4
  339. package/src/components/FormComponents/ChoiceItems/ChoiceRadioAnswerValueSetItem.tsx +2 -6
  340. package/src/components/FormComponents/ChoiceItems/ChoiceRadioSingle.tsx +1 -1
  341. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionFields.tsx +1 -1
  342. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerOptionItem.tsx +1 -1
  343. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetFields.tsx +1 -1
  344. package/src/components/FormComponents/ChoiceItems/ChoiceSelectAnswerValueSetItem.tsx +1 -1
  345. package/src/components/FormComponents/DateTimeItem/DateTimeField.tsx +1 -1
  346. package/src/components/FormComponents/DateTimeItem/DateTimeItem.tsx +1 -1
  347. package/src/components/FormComponents/{CustomDateItem/customDateTimePicker → DateTimeItems/CustomDateItem}/CustomDateField.tsx +1 -1
  348. package/src/components/FormComponents/{CustomDateItem → DateTimeItems/CustomDateItem}/CustomDateItem.tsx +15 -15
  349. package/src/components/FormComponents/{CustomDateItem/customDateTimePicker → DateTimeItems/CustomDateItem}/DatePicker.tsx +1 -2
  350. package/src/components/FormComponents/{CustomDateItem/customDateTimePicker → DateTimeItems/CustomDateItem}/DatePickerButton.tsx +18 -1
  351. package/src/components/FormComponents/{CustomDateItem/customDateTimePicker → DateTimeItems/CustomDateItem}/MuiDatePicker.ts +1 -1
  352. package/src/components/FormComponents/DateTimeItems/CustomDateTimeItem/CustomDateTimeItem.tsx +222 -0
  353. package/src/components/FormComponents/DateTimeItems/CustomDateTimeItem/CustomTimeField.tsx +117 -0
  354. package/src/components/FormComponents/DateTimeItems/CustomDateTimeItem/DateTimeField.tsx +96 -0
  355. package/src/components/FormComponents/{CustomDateItem/customDateTimePicker → DateTimeItems}/index.ts +1 -1
  356. package/src/components/FormComponents/{CustomDateItem → DateTimeItems/utils}/index.ts +2 -2
  357. package/src/components/FormComponents/{CustomDateItem/customDateTimePicker/utils/parseDates.ts → DateTimeItems/utils/parseDate.ts} +10 -10
  358. package/src/components/FormComponents/DateTimeItems/utils/parseTime.ts +127 -0
  359. package/src/components/FormComponents/DecimalItem/DecimalField.tsx +1 -1
  360. package/src/components/FormComponents/DecimalItem/DecimalItem.tsx +1 -1
  361. package/src/components/FormComponents/DisplayItem/DisplayInstructions.styles.ts +1 -1
  362. package/src/components/FormComponents/DisplayItem/DisplayInstructions.tsx +1 -1
  363. package/src/components/FormComponents/DisplayItem/DisplayItem.tsx +1 -1
  364. package/src/components/FormComponents/GridGroup/GridGroup.tsx +1 -1
  365. package/src/components/FormComponents/GridGroup/GridRow.tsx +1 -1
  366. package/src/components/FormComponents/GridGroup/GridTable.tsx +1 -1
  367. package/src/components/FormComponents/GridGroup/index.ts +1 -1
  368. package/src/components/FormComponents/GroupItem/GroupHeading.tsx +1 -1
  369. package/src/components/FormComponents/GroupItem/GroupItem.styles.ts +1 -1
  370. package/src/components/FormComponents/GroupItem/GroupItem.tsx +9 -3
  371. package/src/components/FormComponents/GroupItem/GroupItemSwitcher.tsx +11 -3
  372. package/src/components/FormComponents/GroupItem/NextTabButton.tsx +1 -1
  373. package/src/components/FormComponents/GroupItem/NextTabButtonWrapper.tsx +1 -1
  374. package/src/components/FormComponents/IntegerItem/IntegerField.tsx +1 -1
  375. package/src/components/FormComponents/IntegerItem/IntegerItem.tsx +1 -1
  376. package/src/components/FormComponents/Item.styles.ts +1 -1
  377. package/src/components/FormComponents/ItemParts/CheckboxSingle.tsx +1 -1
  378. package/src/components/FormComponents/ItemParts/CheckboxSingleWithOpenLabel.tsx +1 -1
  379. package/src/components/FormComponents/ItemParts/ContextDisplayItem.tsx +1 -1
  380. package/src/components/FormComponents/ItemParts/FadingCheckIcon.tsx +1 -1
  381. package/src/components/FormComponents/ItemParts/ItemFieldGrid.tsx +1 -1
  382. package/src/components/FormComponents/ItemParts/ItemLabelText.tsx +1 -1
  383. package/src/components/FormComponents/ItemParts/ItemLabelWrapper.tsx +1 -1
  384. package/src/components/FormComponents/ItemParts/RadioAnswerOptionButtons.tsx +1 -1
  385. package/src/components/FormComponents/ItemParts/RadioButtonWithOpenLabel.tsx +1 -1
  386. package/src/components/FormComponents/Lists.styles.ts +1 -1
  387. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteField.tsx +1 -1
  388. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceAutocompleteItem.tsx +1 -1
  389. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionFields.tsx +4 -3
  390. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceCheckboxAnswerOptionItem.tsx +1 -6
  391. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceItemSwitcher.tsx +1 -6
  392. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionFields.tsx +4 -3
  393. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceRadioAnswerOptionItem.tsx +2 -5
  394. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerOptionItem.tsx +1 -1
  395. package/src/components/FormComponents/OpenChoiceItems/OpenChoiceSelectAnswerValueSetItem.tsx +1 -1
  396. package/src/components/FormComponents/RepeatGroup/AddItemButton.tsx +1 -1
  397. package/src/components/FormComponents/RepeatGroup/DeleteItemButton.tsx +1 -1
  398. package/src/components/FormComponents/RepeatGroup/RepeatGroup.tsx +14 -3
  399. package/src/components/FormComponents/RepeatGroup/RepeatGroupItem.tsx +5 -1
  400. package/src/components/FormComponents/RepeatGroup/index.ts +1 -1
  401. package/src/components/FormComponents/RepeatItem/AddItemButton.tsx +1 -1
  402. package/src/components/FormComponents/RepeatItem/RemoveItemButton.tsx +1 -1
  403. package/src/components/FormComponents/RepeatItem/RepeatField.tsx +1 -1
  404. package/src/components/FormComponents/RepeatItem/RepeatItem.styles.tsx +1 -1
  405. package/src/components/FormComponents/RepeatItem/RepeatItem.tsx +1 -1
  406. package/src/components/FormComponents/RepeatItem/index.ts +1 -1
  407. package/src/components/FormComponents/SingleItem/SingleItem.tsx +20 -7
  408. package/src/components/FormComponents/SingleItem/SingleItemSwitcher.tsx +4 -4
  409. package/src/components/FormComponents/SingleItem/index.ts +1 -1
  410. package/src/components/FormComponents/SliderItem/Slider.styles.ts +1 -1
  411. package/src/components/FormComponents/SliderItem/SliderDisplayValue.tsx +1 -1
  412. package/src/components/FormComponents/SliderItem/SliderField.tsx +1 -1
  413. package/src/components/FormComponents/SliderItem/SliderItem.tsx +1 -1
  414. package/src/components/FormComponents/SliderItem/SliderLabels.tsx +1 -1
  415. package/src/components/FormComponents/StringItem/StringField.tsx +1 -1
  416. package/src/components/FormComponents/StringItem/StringItem.tsx +1 -1
  417. package/src/components/FormComponents/Tables/AddRowButton.tsx +1 -1
  418. package/src/components/FormComponents/Tables/GroupTable.tsx +1 -1
  419. package/src/components/FormComponents/Tables/GroupTableBody.tsx +1 -1
  420. package/src/components/FormComponents/Tables/GroupTableRow.tsx +1 -1
  421. package/src/components/FormComponents/Tables/GroupTableRowCells.tsx +1 -1
  422. package/src/components/FormComponents/Tables/GroupTableView.tsx +1 -1
  423. package/src/components/FormComponents/Tables/RemoveRowButton.tsx +1 -1
  424. package/src/components/FormComponents/Tables/SelectRowButton.tsx +1 -1
  425. package/src/components/FormComponents/Tables/Table.styles.tsx +1 -1
  426. package/src/components/FormComponents/Tables/index.ts +1 -1
  427. package/src/components/FormComponents/TextItem/MuiTextField.ts +1 -1
  428. package/src/components/FormComponents/TextItem/TextField.tsx +1 -1
  429. package/src/components/FormComponents/TextItem/TextItem.tsx +1 -1
  430. package/src/components/FormComponents/Textfield.styles.ts +1 -1
  431. package/src/components/FormComponents/TimeItem/TimeField.tsx +1 -1
  432. package/src/components/FormComponents/TimeItem/TimeItem.tsx +1 -1
  433. package/src/components/FormComponents/UrlItem/UrlField.tsx +1 -1
  434. package/src/components/FormComponents/UrlItem/UrlItem.tsx +1 -1
  435. package/src/components/FormComponents/index.ts +2 -2
  436. package/src/components/Iconify/Iconify.tsx +1 -1
  437. package/src/components/Lists.styles.ts +1 -1
  438. package/src/components/Renderer/BaseRenderer.tsx +1 -1
  439. package/src/components/Renderer/FormBodyCollapsible.tsx +1 -1
  440. package/src/components/Renderer/FormBodySingleCollapsible.tsx +1 -1
  441. package/src/components/Renderer/FormBodySingleCollapsibleWrapper.tsx +1 -1
  442. package/src/components/Renderer/FormBodyTabbed.tsx +1 -1
  443. package/src/components/Renderer/FormTitle.tsx +1 -1
  444. package/src/components/Renderer/FormTopLevelItem.tsx +1 -1
  445. package/src/components/Renderer/SmartFormsRenderer.tsx +1 -1
  446. package/src/components/Renderer/index.ts +1 -1
  447. package/src/components/Tabs/CompleteTabButton.tsx +1 -1
  448. package/src/components/Tabs/FormBodySingleTab.tsx +1 -1
  449. package/src/components/Tabs/FormBodyTabList.tsx +1 -1
  450. package/src/components/Tabs/FormBodyTabListWrapper.tsx +1 -1
  451. package/src/components/Tabs/ShowCompletedTabsSection.tsx +1 -1
  452. package/src/components/index.ts +1 -1
  453. package/src/hooks/useAttachmentUrlValidation.ts +1 -1
  454. package/src/hooks/useContextDisplayItems.ts +1 -1
  455. package/src/{components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.ts → hooks/useDateTimeNonEmpty.ts} +15 -2
  456. package/src/hooks/useDateValidation.tsx +3 -3
  457. package/src/hooks/useDebounce.ts +1 -1
  458. package/src/hooks/useDecimalCalculatedExpression.ts +1 -1
  459. package/src/hooks/useGroupTableRows.ts +1 -1
  460. package/src/hooks/useHidden.ts +4 -3
  461. package/src/hooks/useInitialiseGroupTable.ts +1 -1
  462. package/src/hooks/useInitialiseRenderer.ts +1 -1
  463. package/src/hooks/useInitialiseRepeatAnswers.ts +1 -1
  464. package/src/hooks/useInitialiseRepeatGroups.ts +1 -1
  465. package/src/hooks/useIntegerCalculatedExpression.ts +1 -1
  466. package/src/hooks/useNumberInput.ts +1 -1
  467. package/src/hooks/useQueryClient.ts +1 -1
  468. package/src/hooks/useReadOnly.ts +1 -1
  469. package/src/hooks/useRenderingExtensions.ts +1 -1
  470. package/src/hooks/useResponsive.ts +1 -1
  471. package/src/hooks/useSliderExtensions.ts +1 -1
  472. package/src/hooks/useStringCalculatedExpression.ts +1 -1
  473. package/src/hooks/useStringInput.ts +1 -1
  474. package/src/hooks/useTerminologyServerQuery.ts +1 -1
  475. package/src/hooks/useTimeValidation.tsx +70 -0
  476. package/src/hooks/useValidationFeedback.ts +1 -1
  477. package/src/hooks/useValueSetCodings.ts +1 -1
  478. package/src/index.ts +1 -0
  479. package/src/interfaces/answerExpression.interface.ts +1 -1
  480. package/src/interfaces/choice.enum.ts +1 -1
  481. package/src/interfaces/enableWhen.interface.ts +25 -6
  482. package/src/interfaces/groupTable.interface.ts +1 -1
  483. package/src/interfaces/index.ts +8 -0
  484. package/src/interfaces/populate.interface.ts +1 -1
  485. package/src/interfaces/questionnaireStore.interface.ts +3 -3
  486. package/src/interfaces/regex.interface.ts +1 -1
  487. package/src/interfaces/renderProps.interface.ts +5 -1
  488. package/src/interfaces/repeatGroup.interface.ts +1 -1
  489. package/src/interfaces/tab.interface.ts +1 -1
  490. package/src/interfaces/valueSet.interface.ts +1 -1
  491. package/src/interfaces/variables.interface.ts +1 -1
  492. package/src/stores/questionnaireResponseStore.ts +1 -1
  493. package/src/stores/questionnaireStore.ts +46 -9
  494. package/src/stores/smartConfigStore.ts +1 -1
  495. package/src/stores/terminologyServerStore.ts +1 -1
  496. package/src/stories/MedicalHistoryTable.stories.tsx +1 -1
  497. package/src/stories/SmartFormsRenderer.stories.ts +1 -1
  498. package/src/theme/Theme.tsx +1 -1
  499. package/src/theme/customGlobalStyles.tsx +1 -1
  500. package/src/theme/overrides/Accordion.ts +1 -1
  501. package/src/theme/overrides/Autocomplete.ts +1 -1
  502. package/src/theme/overrides/Button.ts +1 -1
  503. package/src/theme/overrides/Card.ts +1 -1
  504. package/src/theme/overrides/Input.ts +1 -1
  505. package/src/theme/overrides/Overrides.ts +1 -1
  506. package/src/theme/overrides/Paper.ts +1 -1
  507. package/src/theme/overrides/SpeedDial.ts +1 -1
  508. package/src/theme/overrides/Table.ts +1 -1
  509. package/src/theme/palette.ts +1 -1
  510. package/src/theme/shadows.ts +1 -1
  511. package/src/theme/typography.ts +1 -1
  512. package/src/utils/calculatedExpression.ts +1 -1
  513. package/src/utils/choice.ts +5 -3
  514. package/src/utils/dayjsExtend.ts +1 -1
  515. package/src/utils/debounce.ts +1 -1
  516. package/src/utils/emptyResource.ts +1 -1
  517. package/src/utils/enableWhen.ts +195 -56
  518. package/src/utils/enableWhenExpression.ts +36 -9
  519. package/src/utils/fhirpath.ts +1 -1
  520. package/src/utils/formChanges.ts +1 -1
  521. package/src/utils/groupTable.ts +1 -1
  522. package/src/utils/index.ts +6 -1
  523. package/src/utils/initialise.ts +1 -1
  524. package/src/utils/itemControl.ts +1 -1
  525. package/src/utils/mapItem.ts +1 -1
  526. package/src/utils/misc.ts +160 -0
  527. package/src/utils/openChoice.ts +1 -1
  528. package/src/utils/parseInputs.ts +1 -1
  529. package/src/utils/populateContexts.ts +1 -1
  530. package/src/utils/qItem.ts +32 -9
  531. package/src/utils/qrItem.ts +1 -1
  532. package/src/utils/questionnaireStoreUtils/addAdditionalVariables.ts +1 -1
  533. package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +2 -2
  534. package/src/utils/questionnaireStoreUtils/extractContainedValueSets.ts +1 -1
  535. package/src/utils/questionnaireStoreUtils/extractOtherExtensions.ts +123 -26
  536. package/src/utils/questionnaireStoreUtils/extractTabs.ts +1 -1
  537. package/src/utils/questionnaireStoreUtils/extractVariables.ts +1 -1
  538. package/src/utils/questionnaireStoreUtils/resolveValueSets.ts +1 -1
  539. package/src/utils/removeEmptyAnswers.ts +1 -1
  540. package/src/utils/repopulateItems.ts +1 -1
  541. package/src/utils/slider.ts +1 -1
  542. package/src/utils/tabs.ts +9 -6
  543. package/src/utils/validateQuestionnaire.ts +1 -1
  544. package/src/utils/valueSet.ts +1 -1
  545. package/lib/components/FormComponents/CustomDateItem/CustomDateItem.js.map +0 -1
  546. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/CustomDateField.js.map +0 -1
  547. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePicker.js.map +0 -1
  548. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.js +0 -13
  549. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/DatePickerButton.js.map +0 -1
  550. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/MuiDatePicker.js.map +0 -1
  551. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/index.js.map +0 -1
  552. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.d.ts +0 -1
  553. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/index.js.map +0 -1
  554. package/lib/components/FormComponents/CustomDateItem/customDateTimePicker/utils/parseDates.js.map +0 -1
  555. package/lib/components/FormComponents/CustomDateItem/index.d.ts +0 -1
  556. package/lib/components/FormComponents/CustomDateItem/index.js.map +0 -1
  557. package/lib/components/FormComponents/DateItem/DateField.d.ts +0 -12
  558. package/lib/components/FormComponents/DateItem/DateItem.d.ts +0 -9
  559. package/lib/components/FormComponents/ItemParts/ItemExtensionLabels.d.ts +0 -7
  560. package/lib/setup-jest.js +0 -1
  561. package/lib/stories/MedicalHistoryTable.stories.js +0 -45
  562. package/lib/stories/SmartFormsRenderer.stories.js +0 -117
  563. /package/lib/components/FormComponents/{CustomDateItem/customDateTimePicker → DateTimeItems/CustomDateItem}/CustomDateField.d.ts +0 -0
  564. /package/lib/components/FormComponents/{CustomDateItem/customDateTimePicker → DateTimeItems/CustomDateItem}/DatePicker.d.ts +0 -0
  565. /package/lib/components/FormComponents/{CustomDateItem/customDateTimePicker → DateTimeItems/CustomDateItem}/DatePickerButton.d.ts +0 -0
  566. /package/lib/components/FormComponents/{CustomDateItem/customDateTimePicker → DateTimeItems/CustomDateItem}/MuiDatePicker.d.ts +0 -0
  567. /package/lib/components/FormComponents/{CustomDateItem/customDateTimePicker → DateTimeItems}/index.d.ts +0 -0
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -25,10 +25,13 @@ import type {
25
25
  import type { Variables } from '../interfaces/variables.interface';
26
26
  import type { LaunchContext } from '../interfaces/populate.interface';
27
27
  import type { CalculatedExpression } from '../interfaces/calculatedExpression.interface';
28
- import type { EnableWhenExpression, EnableWhenItems } from '../interfaces/enableWhen.interface';
28
+ import type { EnableWhenExpression, EnableWhenItems } from '../interfaces';
29
29
  import type { AnswerExpression } from '../interfaces/answerExpression.interface';
30
30
  import type { Tabs } from '../interfaces/tab.interface';
31
- import { updateItemAnswer } from '../utils/enableWhen';
31
+ import {
32
+ mutateRepeatEnableWhenItemInstances,
33
+ updateEnableWhenItemAnswer
34
+ } from '../utils/enableWhen';
32
35
  import { evaluateUpdatedExpressions } from '../utils/fhirpath';
33
36
  import {
34
37
  evaluateInitialCalculatedExpressions,
@@ -70,7 +73,16 @@ interface QuestionnaireStoreType {
70
73
  destroySourceQuestionnaire: () => void;
71
74
  switchTab: (newTabIndex: number) => void;
72
75
  markTabAsComplete: (tabLinkId: string) => void;
73
- updateEnableWhenItem: (linkId: string, newAnswer: QuestionnaireResponseItemAnswer[]) => void;
76
+ updateEnableWhenItem: (
77
+ linkId: string,
78
+ newAnswer: QuestionnaireResponseItemAnswer[] | undefined,
79
+ parentRepeatGroupIndex: number | null
80
+ ) => void;
81
+ mutateRepeatEnableWhenItems: (
82
+ parentRepeatGroupLinkId: string,
83
+ parentRepeatGroupIndex: number,
84
+ actionType: 'add' | 'remove'
85
+ ) => void;
74
86
  toggleEnableWhenActivation: (isActivated: boolean) => void;
75
87
  updateExpressions: (updatedResponse: QuestionnaireResponse) => void;
76
88
  addCodingToCache: (valueSetUrl: string, codings: Coding[]) => void;
@@ -91,7 +103,7 @@ export const questionnaireStore = createStore<QuestionnaireStoreType>()((set, ge
91
103
  calculatedExpressions: {},
92
104
  enableWhenExpressions: {},
93
105
  answerExpressions: {},
94
- enableWhenItems: {},
106
+ enableWhenItems: { singleItems: {}, repeatItems: {} },
95
107
  enableWhenLinkedQuestions: {},
96
108
  enableWhenIsActivated: true,
97
109
  processedValueSetCodings: {},
@@ -156,7 +168,7 @@ export const questionnaireStore = createStore<QuestionnaireStoreType>()((set, ge
156
168
  currentTabIndex: 0,
157
169
  variables: { fhirPathVariables: {}, xFhirQueryVariables: {} },
158
170
  launchContexts: {},
159
- enableWhenItems: {},
171
+ enableWhenItems: { singleItems: {}, repeatItems: {} },
160
172
  enableWhenLinkedQuestions: {},
161
173
  enableWhenExpressions: {},
162
174
  calculatedExpressions: {},
@@ -175,7 +187,11 @@ export const questionnaireStore = createStore<QuestionnaireStoreType>()((set, ge
175
187
  }
176
188
  }));
177
189
  },
178
- updateEnableWhenItem: (linkId: string, newAnswer: QuestionnaireResponseItemAnswer[]) => {
190
+ updateEnableWhenItem: (
191
+ linkId: string,
192
+ newAnswer: QuestionnaireResponseItemAnswer[] | undefined,
193
+ parentRepeatGroupIndex: number | null
194
+ ) => {
179
195
  const enableWhenLinkedQuestions = get().enableWhenLinkedQuestions;
180
196
  const enableWhenItems = get().enableWhenItems;
181
197
  if (!enableWhenLinkedQuestions[linkId]) {
@@ -183,11 +199,32 @@ export const questionnaireStore = createStore<QuestionnaireStoreType>()((set, ge
183
199
  }
184
200
 
185
201
  const itemLinkedQuestions = enableWhenLinkedQuestions[linkId];
186
- const updatedEnableWhenItems = updateItemAnswer(
202
+ const updatedEnableWhenItems = updateEnableWhenItemAnswer(
187
203
  { ...enableWhenItems },
188
204
  itemLinkedQuestions,
189
205
  linkId,
190
- newAnswer
206
+ newAnswer,
207
+ parentRepeatGroupIndex
208
+ );
209
+
210
+ set(() => ({
211
+ enableWhenItems: updatedEnableWhenItems
212
+ }));
213
+ },
214
+ mutateRepeatEnableWhenItems: (
215
+ parentRepeatGroupLinkId: string,
216
+ parentRepeatGroupIndex: number,
217
+ actionType: 'add' | 'remove'
218
+ ) => {
219
+ const enableWhenItems = get().enableWhenItems;
220
+
221
+ const updatedEnableWhenItems = mutateRepeatEnableWhenItemInstances(
222
+ {
223
+ ...enableWhenItems
224
+ },
225
+ parentRepeatGroupLinkId,
226
+ parentRepeatGroupIndex,
227
+ actionType
191
228
  );
192
229
 
193
230
  set(() => ({
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -174,11 +174,12 @@ export function updateQrCheckboxAnswers(
174
174
  *
175
175
  * @author Sean Fong
176
176
  */
177
- export function getChoiceOrientation(qItem: QuestionnaireItem): ChoiceItemOrientation {
177
+ export function getChoiceOrientation(qItem: QuestionnaireItem): ChoiceItemOrientation | null {
178
178
  const itemControl = qItem.extension?.find(
179
179
  (extension: Extension) =>
180
180
  extension.url === 'http://hl7.org/fhir/StructureDefinition/questionnaire-choiceOrientation'
181
181
  );
182
+
182
183
  if (itemControl) {
183
184
  const code = itemControl.valueCode;
184
185
  if (code) {
@@ -189,7 +190,8 @@ export function getChoiceOrientation(qItem: QuestionnaireItem): ChoiceItemOrient
189
190
  }
190
191
  }
191
192
  }
192
- return ChoiceItemOrientation.Vertical;
193
+
194
+ return null;
193
195
  }
194
196
 
195
197
  /**
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2023 Commonwealth Scientific and Industrial Research
2
+ * Copyright 2024 Commonwealth Scientific and Industrial Research
3
3
  * Organisation (CSIRO) ABN 41 687 119 230.
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -23,7 +23,11 @@ import type {
23
23
  QuestionnaireResponseItemAnswer
24
24
  } from 'fhir/r4';
25
25
  import cloneDeep from 'lodash.clonedeep';
26
- import type { EnableWhenItemProperties, EnableWhenItems } from '../interfaces/enableWhen.interface';
26
+ import type {
27
+ EnableWhenItems,
28
+ EnableWhenRepeatItemProperties,
29
+ EnableWhenSingleItemProperties
30
+ } from '../interfaces';
27
31
 
28
32
  /**
29
33
  * Create a linkedQuestionsMap that contains linked items of enableWhen items
@@ -35,18 +39,23 @@ import type { EnableWhenItemProperties, EnableWhenItems } from '../interfaces/en
35
39
  export function createEnableWhenLinkedQuestions(enableWhenItems: EnableWhenItems) {
36
40
  const linkedQuestionsMap: Record<string, string[]> = {};
37
41
 
38
- for (const linkId in enableWhenItems) {
39
- enableWhenItems[linkId].linked.forEach((linkedItem) => {
40
- const linkQId = linkedItem.enableWhen.question;
41
- if (!linkedQuestionsMap[linkQId]) {
42
- linkedQuestionsMap[linkQId] = [];
43
- }
42
+ const { singleItems, repeatItems } = enableWhenItems;
44
43
 
45
- if (!linkedQuestionsMap[linkQId].includes(linkId)) {
46
- linkedQuestionsMap[linkQId].push(linkId);
47
- }
48
- });
44
+ for (const items of [singleItems, repeatItems]) {
45
+ for (const linkId in items) {
46
+ items[linkId].linked.forEach((linkedItem) => {
47
+ const linkQId = linkedItem.enableWhen.question;
48
+ if (!linkedQuestionsMap[linkQId]) {
49
+ linkedQuestionsMap[linkQId] = [];
50
+ }
51
+
52
+ if (!linkedQuestionsMap[linkQId].includes(linkId)) {
53
+ linkedQuestionsMap[linkQId].push(linkId);
54
+ }
55
+ });
56
+ }
49
57
  }
58
+
50
59
  return linkedQuestionsMap;
51
60
  }
52
61
 
@@ -117,11 +126,11 @@ function answerOperatorSwitcher(
117
126
  value: boolean | string | number | Quantity | QuestionnaireResponseItemAnswer,
118
127
  operator: QuestionnaireItemEnableWhen['operator']
119
128
  ): boolean {
120
- // FIXME runs even when the linked textbox is not changed
121
129
  switch (operator) {
122
- case 'exists':
123
- // check if value is an object and contains any answerValues
124
- return typeof value === 'object' && Object.keys(value).length !== 0;
130
+ case 'exists': {
131
+ const answerExists = typeof value === 'object' && Object.keys(value).length !== 0;
132
+ return answerExists === expected;
133
+ }
125
134
  case '=':
126
135
  return value === expected;
127
136
  case '!=':
@@ -139,6 +148,36 @@ function answerOperatorSwitcher(
139
148
  }
140
149
  }
141
150
 
151
+ export function mutateRepeatEnableWhenItemInstances(
152
+ items: EnableWhenItems,
153
+ parentRepeatGroupLinkId: string,
154
+ parentRepeatGroupIndex: number,
155
+ actionType: 'add' | 'remove'
156
+ ): EnableWhenItems {
157
+ const { repeatItems } = items;
158
+
159
+ for (const linkId in repeatItems) {
160
+ for (const linkedItem of repeatItems[linkId].linked) {
161
+ if (linkedItem.parentLinkId !== parentRepeatGroupLinkId) {
162
+ continue;
163
+ }
164
+
165
+ if (actionType === 'add') {
166
+ linkedItem.answers.splice(parentRepeatGroupIndex, 0);
167
+ repeatItems[linkId].enabledIndexes[parentRepeatGroupIndex] = checkItemIsEnabledRepeat(
168
+ repeatItems[linkId],
169
+ parentRepeatGroupIndex
170
+ );
171
+ } else if (actionType === 'remove') {
172
+ linkedItem.answers.splice(parentRepeatGroupIndex, 1);
173
+ repeatItems[linkId].enabledIndexes.splice(parentRepeatGroupIndex, 1);
174
+ }
175
+ }
176
+ }
177
+
178
+ return items;
179
+ }
180
+
142
181
  /**
143
182
  * Read initial answer values in questionnaireResponse
144
183
  * return a map of initial values with key-value pair <linkedItemId, initial value>
@@ -203,7 +242,13 @@ export function setInitialAnswers(
203
242
  const linkedQuestions = linkedQuestionsMap[linkId];
204
243
  const newAnswer = initialAnswers[linkId];
205
244
 
206
- updatedItems = updateItemAnswer(updatedItems, linkedQuestions, linkId, newAnswer);
245
+ updatedItems = updateEnableWhenItemAnswer(
246
+ updatedItems,
247
+ linkedQuestions,
248
+ linkId,
249
+ newAnswer,
250
+ null
251
+ );
207
252
  }
208
253
  }
209
254
  return updatedItems;
@@ -215,35 +260,65 @@ export function setInitialAnswers(
215
260
  *
216
261
  * @author Sean Fong
217
262
  */
218
- export function updateItemAnswer(
263
+ export function updateEnableWhenItemAnswer(
219
264
  items: EnableWhenItems,
220
265
  linkedQuestions: string[],
221
266
  linkId: string,
222
- newAnswer: QuestionnaireResponseItemAnswer[]
267
+ newAnswer: QuestionnaireResponseItemAnswer[] | undefined,
268
+ parentRepeatGroupIndex: number | null
223
269
  ): EnableWhenItems {
224
- linkedQuestions.forEach((question) => {
225
- // Update modified linked answer
226
- items[question].linked.forEach((linkedItem) => {
227
- if (linkedItem.enableWhen.question === linkId) {
228
- linkedItem.answer = newAnswer ?? undefined;
229
- }
230
- });
270
+ const { singleItems, repeatItems } = items;
271
+
272
+ for (const linkedQuestion of linkedQuestions) {
273
+ // Linked question is in single items
274
+ if (singleItems[linkedQuestion]) {
275
+ // Update modified linked answer
276
+ singleItems[linkedQuestion].linked.forEach((linkedItem) => {
277
+ if (linkedItem.enableWhen.question === linkId) {
278
+ linkedItem.answer = newAnswer ?? undefined;
279
+ }
280
+ });
281
+
282
+ // Update enabled status of modified enableWhenItem
283
+ singleItems[linkedQuestion].isEnabled = checkItemIsEnabledSingle(singleItems[linkedQuestion]);
284
+ continue;
285
+ }
286
+
287
+ // Linked question is in repeat items
288
+ if (repeatItems[linkedQuestion] && parentRepeatGroupIndex !== null) {
289
+ // Update modified linked answer
290
+ repeatItems[linkedQuestion].linked.forEach((linkedItem) => {
291
+ if (linkedItem.enableWhen.question === linkId) {
292
+ if (newAnswer) {
293
+ linkedItem.answers[parentRepeatGroupIndex] = newAnswer[0] ?? undefined;
294
+ } else {
295
+ delete linkedItem.answers[parentRepeatGroupIndex];
296
+ }
297
+ }
298
+ });
299
+
300
+ // Update enabled status of modified enableWhenItem
301
+ repeatItems[linkedQuestion].enabledIndexes[parentRepeatGroupIndex] = checkItemIsEnabledRepeat(
302
+ repeatItems[linkedQuestion],
303
+ parentRepeatGroupIndex
304
+ );
305
+ }
306
+ }
231
307
 
232
- // Update enabled status of modified enableWhenItem
233
- items[question].isEnabled = checkItemIsEnabled(items[question]);
234
- });
235
308
  return items;
236
309
  }
237
310
 
238
311
  /**
239
- * Check if an enableWhenItem is enabled based on the answer of its linked items
312
+ * Check if a single enableWhenItem is enabled based on the answer of its linked items
240
313
  *
241
314
  * @author Sean Fong
242
315
  */
243
- export function checkItemIsEnabled(enableWhenItemProperties: EnableWhenItemProperties): boolean {
316
+ export function checkItemIsEnabledSingle(
317
+ enableWhenItemProperties: EnableWhenSingleItemProperties
318
+ ): boolean {
244
319
  const checkedIsEnabledItems: boolean[] = [];
245
320
 
246
- enableWhenItemProperties.linked.forEach((linkedItem) => {
321
+ for (const linkedItem of enableWhenItemProperties.linked) {
247
322
  if (linkedItem.answer && linkedItem.answer.length > 0) {
248
323
  for (const answer of linkedItem.answer) {
249
324
  const isEnabledForThisLinkedItem = isEnabledAnswerTypeSwitcher(
@@ -257,16 +332,60 @@ export function checkItemIsEnabled(enableWhenItemProperties: EnableWhenItemPrope
257
332
  break;
258
333
  }
259
334
  }
335
+ continue;
260
336
  }
261
- });
337
+
338
+ // Linked item doesn't have any answers, but we still have to check for unanswered booleans
339
+ if (evaluateNonExistentAnswers(linkedItem.enableWhen)) {
340
+ checkedIsEnabledItems.push(true);
341
+ }
342
+ }
343
+
344
+ if (checkedIsEnabledItems.length === 0) {
345
+ return false;
346
+ }
347
+
348
+ return evaluateEnableBehaviour(checkedIsEnabledItems, enableWhenItemProperties.enableBehavior);
349
+ }
350
+
351
+ /**
352
+ * Check if a repeat enableWhenItem is enabled based on the answer of its linked items
353
+ *
354
+ * @author Sean Fong
355
+ */
356
+ export function checkItemIsEnabledRepeat(
357
+ enableWhenItemProperties: EnableWhenRepeatItemProperties,
358
+ parentRepeatGroupIndex: number
359
+ ): boolean {
360
+ const checkedIsEnabledItems: boolean[] = [];
361
+
362
+ for (const linkedItem of enableWhenItemProperties.linked) {
363
+ const linkedAnswer = linkedItem.answers[parentRepeatGroupIndex];
364
+ if (linkedAnswer) {
365
+ const isEnabledForThisLinkedItem = isEnabledAnswerTypeSwitcher(
366
+ linkedItem.enableWhen,
367
+ linkedAnswer
368
+ );
369
+
370
+ if (isEnabledForThisLinkedItem) {
371
+ checkedIsEnabledItems.push(
372
+ isEnabledAnswerTypeSwitcher(linkedItem.enableWhen, linkedAnswer)
373
+ );
374
+ }
375
+ continue;
376
+ }
377
+
378
+ // Linked item doesn't have any answers, but we still have to check for unanswered booleans
379
+ if (evaluateNonExistentAnswers(linkedItem.enableWhen)) {
380
+ checkedIsEnabledItems.push(true);
381
+ }
382
+ }
262
383
 
263
384
  if (checkedIsEnabledItems.length === 0) {
264
385
  return false;
265
386
  }
266
387
 
267
- return enableWhenItemProperties.enableBehavior === 'any'
268
- ? checkedIsEnabledItems.some((isEnabled) => isEnabled)
269
- : checkedIsEnabledItems.every((isEnabled) => isEnabled);
388
+ return evaluateEnableBehaviour(checkedIsEnabledItems, enableWhenItemProperties.enableBehavior);
270
389
  }
271
390
 
272
391
  export function assignPopulatedAnswersToEnableWhen(
@@ -275,7 +394,7 @@ export function assignPopulatedAnswersToEnableWhen(
275
394
  ): { initialisedItems: EnableWhenItems; linkedQuestions: Record<string, string[]> } {
276
395
  const linkedQuestions = createEnableWhenLinkedQuestions(items);
277
396
  const initialAnswers = readInitialAnswers(questionnaireResponse, linkedQuestions);
278
- items = initialiseBooleanFalses(items);
397
+ items = initialiseUnansweredBooleans(items);
279
398
 
280
399
  const initialisedItems =
281
400
  Object.keys(initialAnswers).length > 0
@@ -285,30 +404,50 @@ export function assignPopulatedAnswersToEnableWhen(
285
404
  return { initialisedItems, linkedQuestions };
286
405
  }
287
406
 
288
- function initialiseBooleanFalses(items: EnableWhenItems): EnableWhenItems {
289
- for (const linkId in items) {
290
- const checkedIsEnabledItems: boolean[] = [];
291
- const enableWhenItemProperties = items[linkId];
407
+ function initialiseUnansweredBooleans(items: EnableWhenItems): EnableWhenItems {
408
+ const { singleItems, repeatItems } = items;
292
409
 
293
- for (const linkedItem of enableWhenItemProperties.linked) {
294
- if (linkedItem.enableWhen.answerBoolean === true && linkedItem.enableWhen.operator === '!=') {
295
- checkedIsEnabledItems.push(true);
296
- continue;
297
- }
410
+ // Initialise unanswered booleans for enableWhen single items
411
+ for (const linkId in singleItems) {
412
+ const checkedIsEnabledItems = singleItems[linkId].linked.map((linkedItem) =>
413
+ evaluateNonExistentAnswers(linkedItem.enableWhen)
414
+ );
298
415
 
299
- if (linkedItem.enableWhen.answerBoolean === false && linkedItem.enableWhen.operator === '=') {
300
- checkedIsEnabledItems.push(true);
301
- continue;
302
- }
416
+ singleItems[linkId].isEnabled = evaluateEnableBehaviour(
417
+ checkedIsEnabledItems,
418
+ singleItems[linkId].enableBehavior
419
+ );
420
+ }
303
421
 
304
- checkedIsEnabledItems.push(false);
305
- }
422
+ // Initialise unanswered booleans for enableWhen repeat items
423
+ for (const linkId in repeatItems) {
424
+ const checkedIsEnabledItems = repeatItems[linkId].linked.map((linkedItem) =>
425
+ evaluateNonExistentAnswers(linkedItem.enableWhen)
426
+ );
306
427
 
307
- enableWhenItemProperties.isEnabled =
308
- enableWhenItemProperties.enableBehavior === 'any'
309
- ? checkedIsEnabledItems.some((isEnabled) => isEnabled)
310
- : checkedIsEnabledItems.every((isEnabled) => isEnabled);
428
+ const isEnabled = evaluateEnableBehaviour(
429
+ checkedIsEnabledItems,
430
+ repeatItems[linkId].enableBehavior
431
+ );
432
+ repeatItems[linkId].enabledIndexes = repeatItems[linkId].enabledIndexes.map(() => isEnabled);
311
433
  }
312
434
 
313
435
  return items;
314
436
  }
437
+
438
+ // Internal functions
439
+ function evaluateNonExistentAnswers(enableWhen: QuestionnaireItemEnableWhen) {
440
+ const unansweredBoolean =
441
+ typeof enableWhen.answerBoolean === 'boolean' && enableWhen.operator === '!=';
442
+ const unExistingAnswer = enableWhen.answerBoolean === false && enableWhen.operator === 'exists';
443
+ return unansweredBoolean || unExistingAnswer;
444
+ }
445
+
446
+ function evaluateEnableBehaviour(
447
+ isEnabledArr: boolean[],
448
+ enableBehavior: 'all' | 'any' | undefined
449
+ ) {
450
+ return enableBehavior === 'any'
451
+ ? isEnabledArr.some((isEnabled) => isEnabled)
452
+ : isEnabledArr.every((isEnabled) => isEnabled);
453
+ }