@oneblink/apps-react 2.3.0-beta.2 → 2.3.0-beta.4

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 (455) hide show
  1. package/dist/OneBlinkAutoSaveForm.d.ts +10 -10
  2. package/dist/OneBlinkAutoSaveForm.js +28 -28
  3. package/dist/OneBlinkForm.d.ts +11 -11
  4. package/dist/OneBlinkForm.js +11 -11
  5. package/dist/OneBlinkFormBase.d.ts +29 -28
  6. package/dist/OneBlinkFormBase.js +479 -472
  7. package/dist/OneBlinkFormBase.js.map +1 -1
  8. package/dist/OneBlinkReadOnlyForm.d.ts +11 -11
  9. package/dist/OneBlinkReadOnlyForm.js +48 -48
  10. package/dist/components/CopyToClipboardIconButton.d.ts +10 -10
  11. package/dist/components/CopyToClipboardIconButton.js +32 -32
  12. package/dist/components/CustomAccordion.d.ts +27 -27
  13. package/dist/components/CustomAccordion.js +37 -37
  14. package/dist/components/ErrorSnackbar.d.ts +8 -8
  15. package/dist/components/ErrorSnackbar.js +25 -25
  16. package/dist/components/Lists.d.ts +25 -25
  17. package/dist/components/Lists.js +44 -44
  18. package/dist/components/LoadingWithMessage.d.ts +6 -6
  19. package/dist/components/LoadingWithMessage.js +11 -11
  20. package/dist/components/formStore/FormStoreTableProvider.d.ts +6 -6
  21. package/dist/components/formStore/FormStoreTableProvider.js +90 -90
  22. package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.d.ts +5 -5
  23. package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.js +19 -19
  24. package/dist/components/formStore/OneBlinkFormStoreColumnsButton.d.ts +5 -5
  25. package/dist/components/formStore/OneBlinkFormStoreColumnsButton.js +66 -66
  26. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.d.ts +5 -5
  27. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js +86 -86
  28. package/dist/components/formStore/OneBlinkFormStoreProvider.d.ts +8 -8
  29. package/dist/components/formStore/OneBlinkFormStoreProvider.js +24 -24
  30. package/dist/components/formStore/OneBlinkFormStoreRefreshButton.d.ts +5 -5
  31. package/dist/components/formStore/OneBlinkFormStoreRefreshButton.js +11 -11
  32. package/dist/components/formStore/OneBlinkFormStoreTable.d.ts +4 -4
  33. package/dist/components/formStore/OneBlinkFormStoreTable.js +194 -194
  34. package/dist/components/formStore/display/ElementDisplay.d.ts +23 -23
  35. package/dist/components/formStore/display/ElementDisplay.js +77 -77
  36. package/dist/components/formStore/display/FormStoreIcon.d.ts +2 -2
  37. package/dist/components/formStore/display/FormStoreIcon.js +2 -2
  38. package/dist/components/formStore/table/ActionedByTableCell.d.ts +11 -11
  39. package/dist/components/formStore/table/ActionedByTableCell.js +43 -43
  40. package/dist/components/formStore/table/ColumnFilters.d.ts +9 -9
  41. package/dist/components/formStore/table/ColumnFilters.js +179 -179
  42. package/dist/components/formStore/table/FormElementTableCell.d.ts +10 -10
  43. package/dist/components/formStore/table/FormElementTableCell.js +228 -228
  44. package/dist/components/formStore/table/HeaderCellMoreButton.d.ts +9 -9
  45. package/dist/components/formStore/table/HeaderCellMoreButton.js +48 -48
  46. package/dist/components/formStore/table/RepeatableSetCell.d.ts +8 -8
  47. package/dist/components/formStore/table/RepeatableSetCell.js +62 -62
  48. package/dist/components/formStore/table/RepeatableSetCellAccordion.d.ts +9 -9
  49. package/dist/components/formStore/table/RepeatableSetCellAccordion.js +11 -11
  50. package/dist/components/formStore/table/TableCellCopyButton.d.ts +7 -7
  51. package/dist/components/formStore/table/TableCellCopyButton.js +27 -27
  52. package/dist/components/formStore/table/generateColumns.d.ts +24 -24
  53. package/dist/components/formStore/table/generateColumns.js +290 -290
  54. package/dist/components/formStore/table/useFormStoreTable.d.ts +52 -52
  55. package/dist/components/formStore/table/useFormStoreTable.js +157 -157
  56. package/dist/components/formStore/useFormStoreTableContext.d.ts +44 -44
  57. package/dist/components/formStore/useFormStoreTableContext.js +9 -9
  58. package/dist/components/messages/ErrorMessage.d.ts +12 -12
  59. package/dist/components/messages/ErrorMessage.js +12 -12
  60. package/dist/components/messages/LargeIconMessage.d.ts +18 -18
  61. package/dist/components/messages/LargeIconMessage.js +33 -33
  62. package/dist/components/messages/NoResourcesYet.d.ts +11 -11
  63. package/dist/components/messages/NoResourcesYet.js +6 -6
  64. package/dist/components/pickers/V4CompatibleDatePicker.d.ts +32 -32
  65. package/dist/components/pickers/V4CompatibleDatePicker.js +70 -70
  66. package/dist/components/pickers/V4CompatibleDateTimePicker.d.ts +32 -32
  67. package/dist/components/pickers/V4CompatibleDateTimePicker.js +70 -70
  68. package/dist/components/pickers/V4CompatibleTimePicker.d.ts +28 -28
  69. package/dist/components/pickers/V4CompatibleTimePicker.js +53 -53
  70. package/dist/components/renderer/AnnotationModal.d.ts +8 -8
  71. package/dist/components/renderer/AnnotationModal.js +101 -101
  72. package/dist/components/renderer/AutocompleteDropdown.d.ts +26 -26
  73. package/dist/components/renderer/AutocompleteDropdown.js +175 -175
  74. package/dist/components/renderer/CopyToClipboardButton.d.ts +8 -8
  75. package/dist/components/renderer/CopyToClipboardButton.js +13 -13
  76. package/dist/components/renderer/CustomisableButtonInner.d.ts +7 -7
  77. package/dist/components/renderer/CustomisableButtonInner.js +8 -8
  78. package/dist/components/renderer/FormElementLabelContainer.d.ts +12 -12
  79. package/dist/components/renderer/FormElementLabelContainer.js +15 -15
  80. package/dist/components/renderer/FormElementOptions.d.ts +9 -9
  81. package/dist/components/renderer/FormElementOptions.js +14 -14
  82. package/dist/components/renderer/LookupButton.d.ts +10 -10
  83. package/dist/components/renderer/LookupButton.js +29 -29
  84. package/dist/components/renderer/LookupNotification.d.ts +12 -12
  85. package/dist/components/renderer/LookupNotification.js +230 -230
  86. package/dist/components/renderer/Modal.d.ts +14 -14
  87. package/dist/components/renderer/Modal.js +14 -14
  88. package/dist/components/renderer/OnLoading.d.ts +10 -10
  89. package/dist/components/renderer/OnLoading.js +11 -11
  90. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.d.ts +7 -7
  91. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js +12 -12
  92. package/dist/components/renderer/OneBlinkFormElements.d.ts +19 -19
  93. package/dist/components/renderer/OneBlinkFormElements.js +202 -202
  94. package/dist/components/renderer/PageFormElements.d.ts +17 -17
  95. package/dist/components/renderer/PageFormElements.js +48 -48
  96. package/dist/components/renderer/ProgressBar.d.ts +7 -7
  97. package/dist/components/renderer/ProgressBar.js +6 -6
  98. package/dist/components/renderer/ProgressBar.js.map +1 -1
  99. package/dist/components/renderer/ToggleAllCheckbox.d.ts +13 -13
  100. package/dist/components/renderer/ToggleAllCheckbox.js +26 -26
  101. package/dist/components/renderer/attachments/AttachmentStatus.d.ts +10 -10
  102. package/dist/components/renderer/attachments/AttachmentStatus.js +36 -36
  103. package/dist/components/renderer/attachments/FileCard.d.ts +19 -19
  104. package/dist/components/renderer/attachments/FileCard.js +60 -60
  105. package/dist/components/renderer/attachments/FileCardContent.d.ts +5 -5
  106. package/dist/components/renderer/attachments/FileCardContent.js +10 -10
  107. package/dist/components/renderer/attachments/ImagePreviewUnavailable.d.ts +4 -4
  108. package/dist/components/renderer/attachments/ImagePreviewUnavailable.js +11 -11
  109. package/dist/components/renderer/attachments/ProgressBar.d.ts +8 -8
  110. package/dist/components/renderer/attachments/ProgressBar.js +33 -33
  111. package/dist/form-elements/ComplianceButton.d.ts +10 -10
  112. package/dist/form-elements/ComplianceButton.js +11 -11
  113. package/dist/form-elements/FormElementABN.d.ts +14 -14
  114. package/dist/form-elements/FormElementABN.js +155 -155
  115. package/dist/form-elements/FormElementAutocomplete.d.ts +19 -19
  116. package/dist/form-elements/FormElementAutocomplete.js +81 -81
  117. package/dist/form-elements/FormElementBSB.d.ts +18 -18
  118. package/dist/form-elements/FormElementBSB.js +100 -100
  119. package/dist/form-elements/FormElementBarcodeScanner.d.ts +14 -14
  120. package/dist/form-elements/FormElementBarcodeScanner.js +306 -306
  121. package/dist/form-elements/FormElementBoolean.d.ts +14 -14
  122. package/dist/form-elements/FormElementBoolean.js +16 -16
  123. package/dist/form-elements/FormElementCalculation.d.ts +11 -11
  124. package/dist/form-elements/FormElementCalculation.js +179 -179
  125. package/dist/form-elements/FormElementCamera.d.ts +15 -15
  126. package/dist/form-elements/FormElementCamera.js +227 -227
  127. package/dist/form-elements/FormElementCaptcha.d.ts +12 -12
  128. package/dist/form-elements/FormElementCaptcha.js +14 -14
  129. package/dist/form-elements/FormElementCheckBoxes.d.ts +15 -15
  130. package/dist/form-elements/FormElementCheckBoxes.js +64 -64
  131. package/dist/form-elements/FormElementCivicaNameRecord.d.ts +8 -8
  132. package/dist/form-elements/FormElementCivicaNameRecord.js +51 -51
  133. package/dist/form-elements/FormElementCivicaStreetName.d.ts +15 -15
  134. package/dist/form-elements/FormElementCivicaStreetName.js +38 -38
  135. package/dist/form-elements/FormElementCompliance.d.ts +22 -22
  136. package/dist/form-elements/FormElementCompliance.js +129 -129
  137. package/dist/form-elements/FormElementDate.d.ts +14 -14
  138. package/dist/form-elements/FormElementDate.js +74 -74
  139. package/dist/form-elements/FormElementDateTime.d.ts +14 -14
  140. package/dist/form-elements/FormElementDateTime.js +67 -67
  141. package/dist/form-elements/FormElementEmail.d.ts +14 -14
  142. package/dist/form-elements/FormElementEmail.js +22 -22
  143. package/dist/form-elements/FormElementFile.d.ts +13 -13
  144. package/dist/form-elements/FormElementFile.js +31 -31
  145. package/dist/form-elements/FormElementFiles.d.ts +15 -15
  146. package/dist/form-elements/FormElementFiles.js +42 -42
  147. package/dist/form-elements/FormElementForm.d.ts +17 -17
  148. package/dist/form-elements/FormElementForm.js +63 -63
  149. package/dist/form-elements/FormElementFreshdeskDependentField.d.ts +8 -8
  150. package/dist/form-elements/FormElementFreshdeskDependentField.js +15 -15
  151. package/dist/form-elements/FormElementGeoscapeAddress.d.ts +15 -15
  152. package/dist/form-elements/FormElementGeoscapeAddress.js +62 -62
  153. package/dist/form-elements/FormElementHTML.d.ts +8 -8
  154. package/dist/form-elements/FormElementHTML.js +15 -15
  155. package/dist/form-elements/FormElementHeading.d.ts +8 -8
  156. package/dist/form-elements/FormElementHeading.js +23 -23
  157. package/dist/form-elements/FormElementImage.d.ts +8 -8
  158. package/dist/form-elements/FormElementImage.js +6 -6
  159. package/dist/form-elements/FormElementLocation.d.ts +20 -20
  160. package/dist/form-elements/FormElementLocation.js +204 -204
  161. package/dist/form-elements/FormElementNumber.d.ts +14 -14
  162. package/dist/form-elements/FormElementNumber.js +72 -72
  163. package/dist/form-elements/FormElementPointAddress.d.ts +15 -15
  164. package/dist/form-elements/FormElementPointAddress.js +69 -69
  165. package/dist/form-elements/FormElementRadio.d.ts +15 -15
  166. package/dist/form-elements/FormElementRadio.js +41 -41
  167. package/dist/form-elements/FormElementRepeatableSet.d.ts +19 -19
  168. package/dist/form-elements/FormElementRepeatableSet.js +126 -126
  169. package/dist/form-elements/FormElementSection.d.ts +8 -8
  170. package/dist/form-elements/FormElementSection.js +69 -69
  171. package/dist/form-elements/FormElementSelect.d.ts +15 -15
  172. package/dist/form-elements/FormElementSelect.js +44 -44
  173. package/dist/form-elements/FormElementSignature.d.ts +15 -15
  174. package/dist/form-elements/FormElementSignature.js +138 -138
  175. package/dist/form-elements/FormElementSummary.d.ts +11 -11
  176. package/dist/form-elements/FormElementSummary.js +159 -159
  177. package/dist/form-elements/FormElementTelephone.d.ts +14 -14
  178. package/dist/form-elements/FormElementTelephone.js +22 -22
  179. package/dist/form-elements/FormElementText.d.ts +14 -14
  180. package/dist/form-elements/FormElementText.js +29 -29
  181. package/dist/form-elements/FormElementTextarea.d.ts +14 -14
  182. package/dist/form-elements/FormElementTextarea.js +30 -30
  183. package/dist/form-elements/FormElementTime.d.ts +14 -14
  184. package/dist/form-elements/FormElementTime.js +53 -53
  185. package/dist/form-elements/OptionButton.d.ts +11 -11
  186. package/dist/form-elements/OptionButton.js +9 -9
  187. package/dist/hooks/attachments/useAttachment.d.ts +12 -12
  188. package/dist/hooks/attachments/useAttachment.js +242 -242
  189. package/dist/hooks/attachments/useAttachmentBlobs.d.ts +19 -19
  190. package/dist/hooks/attachments/useAttachmentBlobs.js +23 -23
  191. package/dist/hooks/attachments/useAttachments.d.ts +10 -10
  192. package/dist/hooks/attachments/useAttachments.js +69 -69
  193. package/dist/hooks/useAbnLookupAuthenticationGuid.d.ts +3 -3
  194. package/dist/hooks/useAbnLookupAuthenticationGuid.js +5 -5
  195. package/dist/hooks/useAuth.d.ts +15 -15
  196. package/dist/hooks/useAuth.js +42 -42
  197. package/dist/hooks/useBooleanState.d.ts +5 -5
  198. package/dist/hooks/useBooleanState.js +8 -8
  199. package/dist/hooks/useCaptchaSiteKey.d.ts +3 -3
  200. package/dist/hooks/useCaptchaSiteKey.js +5 -5
  201. package/dist/hooks/useClickOutsideElement.d.ts +3 -3
  202. package/dist/hooks/useClickOutsideElement.js +14 -14
  203. package/dist/hooks/useConditionalLogic.d.ts +6 -6
  204. package/dist/hooks/useConditionalLogic.js +22 -22
  205. package/dist/hooks/useContrastColor.d.ts +2 -2
  206. package/dist/hooks/useContrastColor.js +12 -12
  207. package/dist/hooks/useDynamicOptionsLoaderState.d.ts +7 -7
  208. package/dist/hooks/useDynamicOptionsLoaderState.js +44 -44
  209. package/dist/hooks/useExecutedLookupCallback.d.ts +12 -12
  210. package/dist/hooks/useExecutedLookupCallback.js +15 -15
  211. package/dist/hooks/useFlatpickr.d.ts +10 -10
  212. package/dist/hooks/useFlatpickr.js +73 -73
  213. package/dist/hooks/useFlatpickrGuid.d.ts +7 -7
  214. package/dist/hooks/useFlatpickrGuid.js +11 -11
  215. package/dist/hooks/useFlattenElementsContext.d.ts +2 -2
  216. package/dist/hooks/useFlattenElementsContext.js +7 -7
  217. package/dist/hooks/useFormDefinition.d.ts +4 -4
  218. package/dist/hooks/useFormDefinition.js +9 -9
  219. package/dist/hooks/useFormElementOptions.d.ts +9 -9
  220. package/dist/hooks/useFormElementOptions.js +35 -35
  221. package/dist/hooks/useFormIsReadOnly.d.ts +3 -3
  222. package/dist/hooks/useFormIsReadOnly.js +5 -5
  223. package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +24 -24
  224. package/dist/hooks/useFormSubmissionAutoSaveState.js +145 -145
  225. package/dist/hooks/useFormSubmissionModelContext.d.ts +15 -15
  226. package/dist/hooks/useFormSubmissionModelContext.js +32 -32
  227. package/dist/hooks/useFormSubmissionState.d.ts +10 -10
  228. package/dist/hooks/useFormSubmissionState.js +13 -13
  229. package/dist/hooks/useFormValidation.d.ts +7 -7
  230. package/dist/hooks/useFormValidation.js +29 -29
  231. package/dist/hooks/useGoogleMapsApiKey.d.ts +3 -3
  232. package/dist/hooks/useGoogleMapsApiKey.js +5 -5
  233. package/dist/hooks/useInfiniteScrollDataLoad.d.ts +30 -30
  234. package/dist/hooks/useInfiniteScrollDataLoad.js +124 -124
  235. package/dist/hooks/useInjectPages.d.ts +7 -7
  236. package/dist/hooks/useInjectPages.js +5 -5
  237. package/dist/hooks/useIsHovering.d.ts +5 -5
  238. package/dist/hooks/useIsHovering.js +12 -12
  239. package/dist/hooks/useIsMounted.d.ts +3 -3
  240. package/dist/hooks/useIsMounted.js +11 -11
  241. package/dist/hooks/useIsOffline.d.ts +6 -6
  242. package/dist/hooks/useIsOffline.js +26 -26
  243. package/dist/hooks/useIsPageVisible.d.ts +9 -9
  244. package/dist/hooks/useIsPageVisible.js +8 -8
  245. package/dist/hooks/useLoadDataState.d.ts +15 -15
  246. package/dist/hooks/useLoadDataState.js +54 -54
  247. package/dist/hooks/useLogin.d.ts +46 -46
  248. package/dist/hooks/useLogin.js +295 -295
  249. package/dist/hooks/useLookupNotification.d.ts +9 -9
  250. package/dist/hooks/useLookupNotification.js +10 -10
  251. package/dist/hooks/useLookups.d.ts +5 -5
  252. package/dist/hooks/useLookups.js +62 -62
  253. package/dist/hooks/useNullableState.d.ts +2 -2
  254. package/dist/hooks/useNullableState.js +6 -6
  255. package/dist/hooks/usePages.d.ts +24 -24
  256. package/dist/hooks/usePages.js +141 -141
  257. package/dist/hooks/useQuery.d.ts +2 -2
  258. package/dist/hooks/useQuery.js +7 -7
  259. package/dist/hooks/useSubmissionIdIsValid.d.ts +3 -3
  260. package/dist/hooks/useSubmissionIdIsValid.js +19 -19
  261. package/dist/hooks/useToggleComplianceChildren.d.ts +3 -3
  262. package/dist/hooks/useToggleComplianceChildren.js +13 -13
  263. package/dist/index.d.ts +23 -23
  264. package/dist/index.js +23 -23
  265. package/dist/services/attachments.d.ts +10 -10
  266. package/dist/services/attachments.js +72 -72
  267. package/dist/services/barcode-readers/quagger.d.ts +1 -1
  268. package/dist/services/barcode-readers/quagger.js +34 -34
  269. package/dist/services/blob-utils.d.ts +5 -5
  270. package/dist/services/blob-utils.js +73 -73
  271. package/dist/services/checkBsbsAreInvalid.d.ts +3 -3
  272. package/dist/services/checkBsbsAreInvalid.js +40 -40
  273. package/dist/services/checkIfAttachmentsExist.d.ts +5 -5
  274. package/dist/services/checkIfAttachmentsExist.js +144 -144
  275. package/dist/services/checkIfBsbsAreValidating.d.ts +3 -3
  276. package/dist/services/checkIfBsbsAreValidating.js +40 -40
  277. package/dist/services/cleanFormSubmissionModel.d.ts +6 -6
  278. package/dist/services/cleanFormSubmissionModel.js +203 -203
  279. package/dist/services/defaultCoordinates.d.ts +5 -5
  280. package/dist/services/defaultCoordinates.js +8 -8
  281. package/dist/services/download-file.d.ts +3 -3
  282. package/dist/services/download-file.js +90 -90
  283. package/dist/services/drawTimestampOnCanvas.d.ts +1 -1
  284. package/dist/services/drawTimestampOnCanvas.js +22 -22
  285. package/dist/services/form-validation.d.ts +10 -10
  286. package/dist/services/form-validation.js +561 -561
  287. package/dist/services/generate-default-data.d.ts +13 -13
  288. package/dist/services/generate-default-data.js +494 -494
  289. package/dist/services/generateCivicaNameRecordElements.d.ts +2 -2
  290. package/dist/services/generateCivicaNameRecordElements.js +140 -140
  291. package/dist/services/generateFreshdeskDependentFieldElements.d.ts +2 -2
  292. package/dist/services/generateFreshdeskDependentFieldElements.js +69 -69
  293. package/dist/services/sanitize-html.d.ts +2 -2
  294. package/dist/services/sanitize-html.js +20 -20
  295. package/dist/services/scrolling-service.d.ts +7 -7
  296. package/dist/services/scrolling-service.js +38 -38
  297. package/dist/services/utils-service.d.ts +5 -5
  298. package/dist/services/utils-service.js +16 -16
  299. package/dist/types/attachments.d.ts +19 -19
  300. package/dist/types/attachments.js +1 -1
  301. package/dist/types/form.d.ts +40 -40
  302. package/dist/types/form.js +2 -2
  303. package/package.json +2 -2
  304. package/dist/OneBlinkFormStoreView.d.ts +0 -8
  305. package/dist/OneBlinkFormStoreView.js +0 -55
  306. package/dist/OneBlinkFormStoreView.js.map +0 -1
  307. package/dist/components/AnnotationModal.d.ts +0 -8
  308. package/dist/components/AnnotationModal.js +0 -104
  309. package/dist/components/AnnotationModal.js.map +0 -1
  310. package/dist/components/AutocompleteDropdown.d.ts +0 -26
  311. package/dist/components/AutocompleteDropdown.js +0 -174
  312. package/dist/components/AutocompleteDropdown.js.map +0 -1
  313. package/dist/components/CopyToClipboardButton.d.ts +0 -9
  314. package/dist/components/CopyToClipboardButton.js +0 -14
  315. package/dist/components/CopyToClipboardButton.js.map +0 -1
  316. package/dist/components/CustomisableButtonInner.d.ts +0 -7
  317. package/dist/components/CustomisableButtonInner.js +0 -9
  318. package/dist/components/CustomisableButtonInner.js.map +0 -1
  319. package/dist/components/ErrorMessage.d.ts +0 -13
  320. package/dist/components/ErrorMessage.js +0 -13
  321. package/dist/components/ErrorMessage.js.map +0 -1
  322. package/dist/components/FormElementLabelContainer.d.ts +0 -12
  323. package/dist/components/FormElementLabelContainer.js +0 -16
  324. package/dist/components/FormElementLabelContainer.js.map +0 -1
  325. package/dist/components/FormElementOptions.d.ts +0 -9
  326. package/dist/components/FormElementOptions.js +0 -15
  327. package/dist/components/FormElementOptions.js.map +0 -1
  328. package/dist/components/LookupButton.d.ts +0 -10
  329. package/dist/components/LookupButton.js +0 -30
  330. package/dist/components/LookupButton.js.map +0 -1
  331. package/dist/components/LookupNotification.d.ts +0 -12
  332. package/dist/components/LookupNotification.js +0 -231
  333. package/dist/components/LookupNotification.js.map +0 -1
  334. package/dist/components/Modal.d.ts +0 -14
  335. package/dist/components/Modal.js +0 -15
  336. package/dist/components/Modal.js.map +0 -1
  337. package/dist/components/NoResourcesYet.d.ts +0 -12
  338. package/dist/components/NoResourcesYet.js +0 -7
  339. package/dist/components/NoResourcesYet.js.map +0 -1
  340. package/dist/components/OnLoading.d.ts +0 -10
  341. package/dist/components/OnLoading.js +0 -12
  342. package/dist/components/OnLoading.js.map +0 -1
  343. package/dist/components/OneBlinkAppsErrorOriginalMessage.d.ts +0 -7
  344. package/dist/components/OneBlinkAppsErrorOriginalMessage.js +0 -13
  345. package/dist/components/OneBlinkAppsErrorOriginalMessage.js.map +0 -1
  346. package/dist/components/OneBlinkFormElements.d.ts +0 -19
  347. package/dist/components/OneBlinkFormElements.js +0 -196
  348. package/dist/components/OneBlinkFormElements.js.map +0 -1
  349. package/dist/components/PageFormElements.d.ts +0 -17
  350. package/dist/components/PageFormElements.js +0 -49
  351. package/dist/components/PageFormElements.js.map +0 -1
  352. package/dist/components/ToggleAllCheckbox.d.ts +0 -13
  353. package/dist/components/ToggleAllCheckbox.js +0 -27
  354. package/dist/components/ToggleAllCheckbox.js.map +0 -1
  355. package/dist/components/attachments/AttachmentStatus.d.ts +0 -12
  356. package/dist/components/attachments/AttachmentStatus.js +0 -35
  357. package/dist/components/attachments/AttachmentStatus.js.map +0 -1
  358. package/dist/components/attachments/FileCard.d.ts +0 -18
  359. package/dist/components/attachments/FileCard.js +0 -58
  360. package/dist/components/attachments/FileCard.js.map +0 -1
  361. package/dist/components/attachments/FileCardContent.d.ts +0 -5
  362. package/dist/components/attachments/FileCardContent.js +0 -11
  363. package/dist/components/attachments/FileCardContent.js.map +0 -1
  364. package/dist/components/attachments/Files.d.ts +0 -14
  365. package/dist/components/attachments/Files.js +0 -27
  366. package/dist/components/attachments/Files.js.map +0 -1
  367. package/dist/components/attachments/ImagePreviewUnavailable.d.ts +0 -4
  368. package/dist/components/attachments/ImagePreviewUnavailable.js +0 -12
  369. package/dist/components/attachments/ImagePreviewUnavailable.js.map +0 -1
  370. package/dist/components/attachments/UploadingAttachment.d.ts +0 -4
  371. package/dist/components/attachments/UploadingAttachment.js +0 -13
  372. package/dist/components/attachments/UploadingAttachment.js.map +0 -1
  373. package/dist/components/formStore/ColumnsConfigurationButton.d.ts +0 -10
  374. package/dist/components/formStore/ColumnsConfigurationButton.js +0 -29
  375. package/dist/components/formStore/ColumnsConfigurationButton.js.map +0 -1
  376. package/dist/components/formStore/DownloadSubmissionDataButton.d.ts +0 -13
  377. package/dist/components/formStore/DownloadSubmissionDataButton.js +0 -45
  378. package/dist/components/formStore/DownloadSubmissionDataButton.js.map +0 -1
  379. package/dist/components/formStore/FormStore.d.ts +0 -9
  380. package/dist/components/formStore/FormStore.js +0 -103
  381. package/dist/components/formStore/FormStore.js.map +0 -1
  382. package/dist/components/formStore/table/index.d.ts +0 -17
  383. package/dist/components/formStore/table/index.js +0 -194
  384. package/dist/components/formStore/table/index.js.map +0 -1
  385. package/dist/components/renderer/attachments/Files.d.ts +0 -14
  386. package/dist/components/renderer/attachments/Files.js +0 -27
  387. package/dist/components/renderer/attachments/Files.js.map +0 -1
  388. package/dist/components/renderer/attachments/UploadingAttachment.d.ts +0 -4
  389. package/dist/components/renderer/attachments/UploadingAttachment.js +0 -13
  390. package/dist/components/renderer/attachments/UploadingAttachment.js.map +0 -1
  391. package/dist/form-elements/FormElementFiles/FormElementFile.d.ts +0 -13
  392. package/dist/form-elements/FormElementFiles/FormElementFile.js +0 -32
  393. package/dist/form-elements/FormElementFiles/FormElementFile.js.map +0 -1
  394. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.d.ts +0 -10
  395. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.js +0 -11
  396. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.js.map +0 -1
  397. package/dist/form-elements/FormElementFiles/FormElementFiles.d.ts +0 -15
  398. package/dist/form-elements/FormElementFiles/FormElementFiles.js +0 -17
  399. package/dist/form-elements/FormElementFiles/FormElementFiles.js.map +0 -1
  400. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.d.ts +0 -7
  401. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.js +0 -11
  402. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.js.map +0 -1
  403. package/dist/form-elements/FormElementFiles/index.d.ts +0 -17
  404. package/dist/form-elements/FormElementFiles/index.js +0 -18
  405. package/dist/form-elements/FormElementFiles/index.js.map +0 -1
  406. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.d.ts +0 -18
  407. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js +0 -61
  408. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js.map +0 -1
  409. package/dist/hooks/attachments/useAttachmentObjectURLs.d.ts +0 -24
  410. package/dist/hooks/attachments/useAttachmentObjectURLs.js +0 -37
  411. package/dist/hooks/attachments/useAttachmentObjectURLs.js.map +0 -1
  412. package/dist/hooks/attachments/useLocalAttachmentBlobs.d.ts +0 -24
  413. package/dist/hooks/attachments/useLocalAttachmentBlobs.js +0 -40
  414. package/dist/hooks/attachments/useLocalAttachmentBlobs.js.map +0 -1
  415. package/dist/hooks/useButtonsConfiguration.d.ts +0 -45
  416. package/dist/hooks/useButtonsConfiguration.js +0 -6
  417. package/dist/hooks/useButtonsConfiguration.js.map +0 -1
  418. package/dist/hooks/useChangeEffect.d.ts +0 -1
  419. package/dist/hooks/useChangeEffect.js +0 -14
  420. package/dist/hooks/useChangeEffect.js.map +0 -1
  421. package/dist/hooks/useConditionallyShowOptionCallback.d.ts +0 -5
  422. package/dist/hooks/useConditionallyShowOptionCallback.js +0 -20
  423. package/dist/hooks/useConditionallyShowOptionCallback.js.map +0 -1
  424. package/dist/hooks/useCustomValidation.d.ts +0 -1
  425. package/dist/hooks/useCustomValidation.js +0 -9
  426. package/dist/hooks/useCustomValidation.js.map +0 -1
  427. package/dist/hooks/useDynamicOptionsLoaderEffect.d.ts +0 -7
  428. package/dist/hooks/useDynamicOptionsLoaderEffect.js +0 -45
  429. package/dist/hooks/useDynamicOptionsLoaderEffect.js.map +0 -1
  430. package/dist/hooks/useLegacyElements.d.ts +0 -16
  431. package/dist/hooks/useLegacyElements.js +0 -55
  432. package/dist/hooks/useLegacyElements.js.map +0 -1
  433. package/dist/hooks/useToggleAll.d.ts +0 -6
  434. package/dist/hooks/useToggleAll.js +0 -24
  435. package/dist/hooks/useToggleAll.js.map +0 -1
  436. package/dist/services/checkIfAttachmentsAreUploading.d.ts +0 -3
  437. package/dist/services/checkIfAttachmentsAreUploading.js +0 -58
  438. package/dist/services/checkIfAttachmentsAreUploading.js.map +0 -1
  439. package/dist/services/clean-form-elements-ctrl-model.d.ts +0 -4
  440. package/dist/services/clean-form-elements-ctrl-model.js +0 -166
  441. package/dist/services/clean-form-elements-ctrl-model.js.map +0 -1
  442. package/dist/services/conditionally-show-element.d.ts +0 -11
  443. package/dist/services/conditionally-show-element.js +0 -92
  444. package/dist/services/conditionally-show-element.js.map +0 -1
  445. package/dist/services/conditionally-show-option.d.ts +0 -3
  446. package/dist/services/conditionally-show-option.js +0 -135
  447. package/dist/services/conditionally-show-option.js.map +0 -1
  448. package/dist/services/flattenFormElements.d.ts +0 -2
  449. package/dist/services/flattenFormElements.js +0 -13
  450. package/dist/services/flattenFormElements.js.map +0 -1
  451. package/dist/services/getCorrectDateFromDateOnlyString.d.ts +0 -2
  452. package/dist/services/getCorrectDateFromDateOnlyString.js +0 -4
  453. package/dist/services/getCorrectDateFromDateOnlyString.js.map +0 -1
  454. package/dist/styles/boolean.scss +0 -12
  455. package/dist/styles/ob-file.scss +0 -63
@@ -1,473 +1,480 @@
1
- import * as React from 'react';
2
- import { createTheme as createMuiTheme, ThemeProvider, Tooltip, } from '@mui/material';
3
- import { Prompt, useHistory } from 'react-router-dom';
4
- import clsx from 'clsx';
5
- import * as bulmaToast from 'bulma-toast';
6
- import { localisationService } from '@oneblink/apps';
7
- import Modal from './components/renderer/Modal';
8
- import OneBlinkAppsErrorOriginalMessage from './components/renderer/OneBlinkAppsErrorOriginalMessage';
9
- import cleanFormSubmissionModel from './services/cleanFormSubmissionModel';
10
- import PageFormElements from './components/renderer/PageFormElements';
11
- import useFormValidation from './hooks/useFormValidation';
12
- import useConditionalLogic from './hooks/useConditionalLogic';
13
- import usePages from './hooks/usePages';
14
- import useLookups from './hooks/useLookups';
15
- import { FormDefinitionContext } from './hooks/useFormDefinition';
16
- import { InjectPagesContext } from './hooks/useInjectPages';
17
- import { ExecutedLookupProvider } from './hooks/useExecutedLookupCallback';
18
- import useDynamicOptionsLoaderState from './hooks/useDynamicOptionsLoaderState';
19
- import { GoogleMapsApiKeyContext } from './hooks/useGoogleMapsApiKey';
20
- import { AbnLookupAuthenticationGuidContext } from './hooks/useAbnLookupAuthenticationGuid';
21
- import { CaptchaSiteKeyContext } from './hooks/useCaptchaSiteKey';
22
- import { FormIsReadOnlyContext } from './hooks/useFormIsReadOnly';
23
- import { AttachmentBlobsProvider } from './hooks/attachments/useAttachmentBlobs';
24
- import checkIfAttachmentsAreUploading from './services/checkIfAttachmentsAreUploading';
25
- import useIsOffline from './hooks/useIsOffline';
26
- import CustomisableButtonInner from './components/renderer/CustomisableButtonInner';
27
- import checkBsbsAreInvalid from './services/checkBsbsAreInvalid';
28
- import checkIfBsbsAreValidating from './services/checkIfBsbsAreValidating';
29
- import checkIfAttachmentsExist from './services/checkIfAttachmentsExist';
30
- function OneBlinkFormBase({ googleMapsApiKey, abnLookupAuthenticationGuid, captchaSiteKey, definition, disabled, isPreview, submission, isReadOnly, onCancel, onSubmit, onSaveDraft, setFormSubmission, buttons, primaryColour, attachmentRetentionInDays, }) {
31
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
32
- const isOffline = useIsOffline();
33
- const theme = React.useMemo(() => createMuiTheme({
34
- palette: {
35
- primary: {
36
- main: primaryColour || '#4c8da7',
37
- },
38
- },
39
- }), [primaryColour]);
40
- //
41
- //
42
- // #region Form Definition
43
- const pages = React.useMemo(() => {
44
- if (definition.isMultiPage) {
45
- return definition.elements.reduce((pageElements, formElement) => {
46
- if (formElement.type === 'page') {
47
- pageElements.push(formElement);
48
- }
49
- return pageElements;
50
- }, []);
51
- }
52
- else {
53
- return [
54
- {
55
- type: 'page',
56
- id: definition.id.toString(),
57
- label: definition.name,
58
- elements: definition.elements,
59
- conditionallyShow: false,
60
- requiresAllConditionallyShowPredicates: false,
61
- },
62
- ];
63
- }
64
- }, [
65
- definition.elements,
66
- definition.id,
67
- definition.isMultiPage,
68
- definition.name,
69
- ]);
70
- // #endregion
71
- //
72
- //
73
- //
74
- //
75
- // #region Unsaved Changed
76
- const history = useHistory();
77
- const [{ isDirty, isNavigationAllowed, hasConfirmedNavigation, goToLocation }, setUnsavedChangesState,] = React.useState({
78
- isDirty: false,
79
- isNavigationAllowed: false,
80
- hasConfirmedNavigation: null,
81
- goToLocation: null,
82
- });
83
- const handleBlockedNavigation = React.useCallback((location) => {
84
- setUnsavedChangesState((current) => ({
85
- ...current,
86
- goToLocation: location,
87
- hasConfirmedNavigation: false,
88
- }));
89
- return false;
90
- }, []);
91
- const handleKeepGoing = React.useCallback(() => {
92
- setUnsavedChangesState((current) => ({
93
- ...current,
94
- goToLocation: null,
95
- hasConfirmedNavigation: null,
96
- }));
97
- }, []);
98
- const handleDiscardUnsavedChanges = React.useCallback(() => {
99
- setUnsavedChangesState((current) => ({
100
- ...current,
101
- isNavigationAllowed: true,
102
- hasConfirmedNavigation: true,
103
- }));
104
- }, []);
105
- React.useEffect(() => {
106
- if (hasConfirmedNavigation) {
107
- // Navigate to the previous blocked location with your navigate function
108
- if (goToLocation) {
109
- history.push(`${goToLocation.pathname}${goToLocation.search}`);
110
- }
111
- else {
112
- onCancel();
113
- }
114
- }
115
- }, [goToLocation, hasConfirmedNavigation, history, onCancel]);
116
- const handleCancel = React.useCallback(() => {
117
- if (isDirty) {
118
- setUnsavedChangesState((current) => ({
119
- ...current,
120
- hasConfirmedNavigation: false,
121
- }));
122
- }
123
- else {
124
- onCancel();
125
- }
126
- }, [isDirty, onCancel]);
127
- const allowNavigation = React.useCallback(() => {
128
- setUnsavedChangesState((current) => ({
129
- ...current,
130
- isNavigationAllowed: true,
131
- }));
132
- }, []);
133
- // #endregion Unsaved Changed
134
- //
135
- //
136
- //
137
- //
138
- // #region Conditional Logic
139
- const { formElementsConditionallyShown, conditionalLogicError } = useConditionalLogic(definition, submission);
140
- // #endregion
141
- //
142
- //
143
- //
144
- //
145
- // #region Validation
146
- const { validate, executedLookup, executeLookupFailed } = useFormValidation(pages);
147
- const formElementsValidation = React.useMemo(() => validate(submission, formElementsConditionallyShown), [formElementsConditionallyShown, submission, validate]);
148
- // #endregion
149
- //
150
- //
151
- //
152
- //
153
- // #region Pages
154
- const { visiblePages, isFirstVisiblePage, isLastVisiblePage, isDisplayingCurrentPageError, isShowingMultiplePages, isStepsHeaderActive, toggleStepsNavigation, currentPageIndex, currentPage, currentPageNumber, checkDisplayPageError, setPageId, goToPreviousPage, goToNextPage, scrollToTopOfPageHTMLElementRef, } = usePages({
155
- pages,
156
- formElementsValidation,
157
- formElementsConditionallyShown,
158
- });
159
- // #endregion
160
- //
161
- //
162
- //
163
- //
164
- // #region Dynamic Options
165
- const loadDynamicOptionsState = useDynamicOptionsLoaderState(definition, setFormSubmission);
166
- // #endregion
167
- //
168
- //
169
- //
170
- //
171
- // #region Submissions
172
- const [hasAttemptedSubmit, setHasAttemptedSubmit] = React.useState(false);
173
- const getCurrentSubmissionData = React.useCallback((stripBinaryData) => {
174
- const { model, captchaTokens } = cleanFormSubmissionModel(submission, definition.elements, formElementsConditionallyShown, stripBinaryData);
175
- return {
176
- submission: model,
177
- captchaTokens,
178
- };
179
- }, [definition.elements, formElementsConditionallyShown, submission]);
180
- const obFormContainerHTMLElementRef = React.useRef(null);
181
- React.useEffect(() => {
182
- const obFormContainerHTMLElement = obFormContainerHTMLElementRef.current;
183
- if (obFormContainerHTMLElement) {
184
- console.log('Setting toast notifications to be appended to HTML Element', obFormContainerHTMLElement);
185
- bulmaToast.setDefaults({
186
- position: 'bottom-right',
187
- opacity: 0.95,
188
- appendTo: obFormContainerHTMLElement,
189
- });
190
- }
191
- return () => {
192
- bulmaToast.resetDefaults();
193
- };
194
- }, []);
195
- const checkAttachmentsCanBeSubmitted = React.useCallback((submission) => {
196
- // Prevent submission until all attachment uploads are finished
197
- // Unless the user is offline, in which case, the uploads will
198
- // be taken care of by a pending queue...hopefully.
199
- if (isOffline) {
200
- return true;
201
- }
202
- if (checkIfAttachmentsAreUploading(definition, submission)) {
203
- bulmaToast.toast({
204
- message: 'Attachments are still uploading, please wait for them to finish before trying again.',
205
- // @ts-expect-error bulma sets this string as a class, so we are hacking in our own classes
206
- type: 'ob-toast is-primary cypress-still-uploading-toast',
207
- duration: 4000,
208
- pauseOnHover: true,
209
- closeOnClick: true,
210
- });
211
- return false;
212
- }
213
- return true;
214
- }, [definition, isOffline]);
215
- const checkBsbsCanBeSubmitted = React.useCallback((submission) => {
216
- return !checkBsbsAreInvalid(definition, submission);
217
- }, [definition]);
218
- const checkBsbAreValidating = React.useCallback((submission) => {
219
- if (checkIfBsbsAreValidating(definition, submission)) {
220
- bulmaToast.toast({
221
- message: 'Bsb(s) are still being validated, please wait for them to finish before trying again.',
222
- // @ts-expect-error bulma sets this string as a class, so we are hacking in our own classes
223
- type: 'ob-toast is-primary cypress-still-validating-toast',
224
- duration: 4000,
225
- pauseOnHover: true,
226
- closeOnClick: true,
227
- });
228
- return false;
229
- }
230
- return true;
231
- }, [definition]);
232
- const handleSubmit = React.useCallback((event) => {
233
- event.preventDefault();
234
- if (disabled || isReadOnly)
235
- return;
236
- setHasAttemptedSubmit(true);
237
- const submissionData = getCurrentSubmissionData(false);
238
- if (!checkBsbAreValidating(submissionData.submission)) {
239
- return;
240
- }
241
- if (formElementsValidation) {
242
- console.log('Validation errors', formElementsValidation);
243
- bulmaToast.toast({
244
- message: 'Please fix validation errors',
245
- // @ts-expect-error bulma sets this string as a class, so we are hacking in our own classes
246
- type: 'ob-toast is-danger cypress-invalid-submit-attempt',
247
- duration: 4000,
248
- pauseOnHover: true,
249
- closeOnClick: true,
250
- });
251
- return;
252
- }
253
- if (!checkAttachmentsCanBeSubmitted(submissionData.submission)) {
254
- return;
255
- }
256
- if (!checkBsbsCanBeSubmitted(submissionData.submission)) {
257
- return;
258
- }
259
- // check if attachments exist
260
- const newSubmission = checkIfAttachmentsExist(definition, submissionData.submission, attachmentRetentionInDays);
261
- if (newSubmission) {
262
- setFormSubmission((currentFormSubmission) => ({
263
- ...currentFormSubmission,
264
- submission: newSubmission,
265
- }));
266
- bulmaToast.toast({
267
- message: "Some files that were included in your submission have been removed based on your administrator's data retention policy, please remove them and upload them again.",
268
- // @ts-expect-error bulma sets this string as a class, so we are hacking in our own classes
269
- type: 'ob-toast is-danger cypress-invalid-submit-attempt',
270
- duration: 4000,
271
- pauseOnHover: true,
272
- closeOnClick: true,
273
- });
274
- return;
275
- }
276
- allowNavigation();
277
- onSubmit({
278
- definition,
279
- submission: submissionData.submission,
280
- captchaTokens: submissionData.captchaTokens,
281
- });
282
- }, [
283
- disabled,
284
- isReadOnly,
285
- getCurrentSubmissionData,
286
- checkBsbAreValidating,
287
- formElementsValidation,
288
- checkAttachmentsCanBeSubmitted,
289
- checkBsbsCanBeSubmitted,
290
- definition,
291
- attachmentRetentionInDays,
292
- allowNavigation,
293
- onSubmit,
294
- setFormSubmission,
295
- ]);
296
- const handleSaveDraft = React.useCallback(() => {
297
- if (disabled)
298
- return;
299
- if (onSaveDraft) {
300
- allowNavigation();
301
- // For drafts we don't need to save the captcha tokens,
302
- // they will need to prove they are not robot again
303
- const { submission } = getCurrentSubmissionData(false);
304
- if (!checkBsbAreValidating(submission)) {
305
- return;
306
- }
307
- if (!checkAttachmentsCanBeSubmitted(submission)) {
308
- return;
309
- }
310
- onSaveDraft({
311
- definition,
312
- submission,
313
- });
314
- }
315
- }, [
316
- allowNavigation,
317
- checkAttachmentsCanBeSubmitted,
318
- definition,
319
- disabled,
320
- getCurrentSubmissionData,
321
- onSaveDraft,
322
- checkBsbAreValidating,
323
- ]);
324
- // #endregion
325
- //
326
- //
327
- //
328
- //
329
- // #region Lookups
330
- const { handlePagesLookupResult } = useLookups(definition.id, setFormSubmission);
331
- // #endregion
332
- //
333
- //
334
- //
335
- //
336
- // #region Submission/Definition Changes
337
- const handleChange = React.useCallback((element, value) => {
338
- if (disabled || element.type === 'page' || element.type === 'section') {
339
- return;
340
- }
341
- setUnsavedChangesState((current) => ({
342
- ...current,
343
- isDirty: true,
344
- }));
345
- setFormSubmission((currentFormSubmission) => ({
346
- ...currentFormSubmission,
347
- submission: {
348
- ...currentFormSubmission.submission,
349
- [element.name]: typeof value === 'function'
350
- ? value(currentFormSubmission.submission[element.name])
351
- : value,
352
- },
353
- }));
354
- }, [disabled, setFormSubmission]);
355
- // #endregion
356
- //
357
- //
358
- if (conditionalLogicError) {
359
- return (React.createElement(React.Fragment, null,
360
- React.createElement("div", { className: "has-text-centered" },
361
- React.createElement("i", { className: "material-icons has-text-warning icon-x-large" }, "error"),
362
- React.createElement("h3", { className: "title is-3" }, "Bad Form Configuration"),
363
- React.createElement("p", { className: "cypress-conditional-logic-error-message" }, conditionalLogicError.message),
364
- React.createElement("p", { className: "has-text-grey" }, localisationService.formatDatetimeLong(new Date())))));
365
- }
366
- if (loadDynamicOptionsState) {
367
- return (React.createElement(React.Fragment, null,
368
- React.createElement("div", { className: "has-text-centered" },
369
- React.createElement("i", { className: "material-icons has-text-warning icon-x-large" }, "error"),
370
- React.createElement("h3", { className: "title is-3" }, loadDynamicOptionsState.error.title),
371
- React.createElement("p", null, loadDynamicOptionsState.error.message),
372
- React.createElement("p", { className: "has-text-grey" }, localisationService.formatDatetimeLong(new Date()))),
373
- React.createElement(OneBlinkAppsErrorOriginalMessage, { error: loadDynamicOptionsState.error.originalError })));
374
- }
375
- return (React.createElement(ThemeProvider, { theme: theme },
376
- React.createElement("div", { className: "ob-form-container", ref: obFormContainerHTMLElementRef },
377
- React.createElement("form", { name: "obForm", className: `ob-form cypress-ob-form ob-form__page-${currentPageIndex + 1}`, noValidate: true, onSubmit: handleSubmit },
378
- React.createElement("div", null,
379
- React.createElement("div", { ref: scrollToTopOfPageHTMLElementRef }),
380
- isShowingMultiplePages && (React.createElement("div", { className: clsx('ob-steps-navigation', {
381
- 'is-active': isStepsHeaderActive,
382
- }) },
383
- React.createElement("div", { className: clsx('ob-steps-navigation__header', {
384
- 'is-active': isStepsHeaderActive,
385
- }), onClick: toggleStepsNavigation },
386
- React.createElement("span", { className: "icon is-invisible" },
387
- React.createElement("i", { className: "material-icons" }, "keyboard_arrow_down")),
388
- React.createElement("div", { className: "steps-header-active-page" },
389
- isDisplayingCurrentPageError ? (React.createElement("span", { className: "icon" },
390
- React.createElement("i", { className: "material-icons has-text-danger is-size-4" }, "warning"))) : (React.createElement("span", { className: "steps-header-active-page-icon" }, currentPageNumber)),
391
- React.createElement("span", { className: "steps-header-active-page-label cypress-tablet-step-title" }, currentPage ? currentPage.label : '')),
392
- React.createElement("span", { className: "dropdown icon" },
393
- React.createElement("i", { className: "material-icons" }, "keyboard_arrow_down"))),
394
- React.createElement("div", { className: clsx('ob-steps-navigation__steps', {
395
- 'is-active': isStepsHeaderActive,
396
- }) },
397
- React.createElement("div", { className: "steps is-small is-horizontal-tablet cypress-steps" }, visiblePages.map((page, index) => {
398
- const hasErrors = checkDisplayPageError(page);
399
- return (React.createElement("div", { key: page.id, id: `steps-navigation-step-${page.id}`, className: clsx('step-item cypress-step-item', {
400
- 'is-active': currentPage.id === page.id,
401
- 'is-completed': currentPageIndex > index,
402
- 'is-error': hasErrors,
403
- }), onClick: (e) => {
404
- e.stopPropagation();
405
- if (page.id !== currentPage.id) {
406
- setPageId(page.id);
407
- }
408
- } },
409
- React.createElement("div", { className: "step-marker step-marker-error ob-step-marker cypress-step-marker",
410
- // @ts-expect-error ???
411
- name: `cypress-page-stepper-${index + 1}`, value: index + 1 }, hasErrors ? (React.createElement(Tooltip, { title: "Page has errors" },
412
- React.createElement("span", { className: "icon tooltip has-tooltip-top cypress-page-error" },
413
- React.createElement("i", { className: "material-icons has-text-danger is-size-3" }, "warning")))) : (React.createElement("span", null, index + 1))),
414
- React.createElement("div", { className: "step-details ob-step-details" },
415
- React.createElement("p", { className: "step-title ob-step-title cypress-desktop-step-title" }, page.label))));
416
- }))))),
417
- React.createElement("div", { className: clsx('ob-steps-navigation__background', {
418
- 'is-active': isStepsHeaderActive,
419
- }), onClick: toggleStepsNavigation }),
420
- React.createElement("div", { className: "steps" },
421
- React.createElement("div", { className: clsx('steps-content', {
422
- 'is-single-step': !isShowingMultiplePages,
423
- }) },
424
- React.createElement(FormDefinitionContext.Provider, { value: definition },
425
- React.createElement(InjectPagesContext.Provider, { value: handlePagesLookupResult },
426
- React.createElement(ExecutedLookupProvider, { executedLookup: executedLookup, executeLookupFailed: executeLookupFailed },
427
- React.createElement(GoogleMapsApiKeyContext.Provider, { value: googleMapsApiKey },
428
- React.createElement(AbnLookupAuthenticationGuidContext.Provider, { value: abnLookupAuthenticationGuid },
429
- React.createElement(CaptchaSiteKeyContext.Provider, { value: captchaSiteKey },
430
- React.createElement(AttachmentBlobsProvider, null,
431
- React.createElement(FormIsReadOnlyContext.Provider, { value: isReadOnly }, visiblePages.map((pageElement) => (React.createElement(PageFormElements, { key: pageElement.id, isActive: pageElement.id === currentPage.id, formId: definition.id, formElementsConditionallyShown: formElementsConditionallyShown, formElementsValidation: formElementsValidation, displayValidationMessages: hasAttemptedSubmit ||
432
- isDisplayingCurrentPageError, pageElement: pageElement, onChange: handleChange, model: submission, setFormSubmission: setFormSubmission })))))))))))),
433
- isShowingMultiplePages && (React.createElement("div", { className: "steps-actions" },
434
- React.createElement("div", { className: "steps-action" },
435
- React.createElement("button", { type: "button", onClick: goToPreviousPage, disabled: isFirstVisiblePage, className: "button is-light cypress-pages-previous" },
436
- React.createElement("span", { className: "icon" },
437
- React.createElement("i", { className: "material-icons" }, "keyboard_arrow_left")),
438
- React.createElement("span", null, "Back"))),
439
- React.createElement("div", { className: "step-progress-mobile cypress-steps-mobile" }, visiblePages.map((page, index) => (React.createElement("div", { key: page.id, className: clsx('step-progress-mobile-dot', {
440
- 'is-active': currentPage.id === page.id,
441
- 'is-completed': currentPageIndex > index,
442
- 'has-background-danger': currentPage.id !== page.id &&
443
- checkDisplayPageError(page),
444
- }) })))),
445
- React.createElement("div", { className: "steps-action" },
446
- React.createElement("button", { type: "button", onClick: goToNextPage, disabled: isLastVisiblePage, className: "button is-light cypress-pages-next" },
447
- React.createElement("span", null, "Next"),
448
- React.createElement("span", { className: "icon" },
449
- React.createElement("i", { className: "material-icons" }, "keyboard_arrow_right"))))))),
450
- !isReadOnly && (React.createElement("div", { className: "buttons ob-buttons ob-buttons-submit" },
451
- onSaveDraft && !definition.isInfoPage && (React.createElement("button", { type: "button", className: "button ob-button is-primary ob-button-save-draft cypress-save-draft-form", onClick: handleSaveDraft, disabled: isPreview || disabled },
452
- React.createElement(CustomisableButtonInner, { label: ((_a = buttons === null || buttons === void 0 ? void 0 : buttons.saveDraft) === null || _a === void 0 ? void 0 : _a.label) || 'Save Draft', icon: (_b = buttons === null || buttons === void 0 ? void 0 : buttons.saveDraft) === null || _b === void 0 ? void 0 : _b.icon }))),
453
- React.createElement("span", { className: "ob-buttons-submit__spacer" }),
454
- !definition.isInfoPage && (React.createElement("button", { type: "button", className: "button ob-button is-light ob-button-submit-cancel cypress-cancel-form", onClick: handleCancel, disabled: isPreview || disabled },
455
- React.createElement(CustomisableButtonInner, { label: ((_c = buttons === null || buttons === void 0 ? void 0 : buttons.cancel) === null || _c === void 0 ? void 0 : _c.label) || 'Cancel', icon: (_d = buttons === null || buttons === void 0 ? void 0 : buttons.cancel) === null || _d === void 0 ? void 0 : _d.icon }))),
456
- isLastVisiblePage && (React.createElement("button", { type: "submit", className: "button ob-button is-success ob-button-submit cypress-submit-form-button cypress-submit-form", disabled: isPreview || disabled },
457
- React.createElement(CustomisableButtonInner, { label: definition.isInfoPage
458
- ? 'Done'
459
- : ((_e = buttons === null || buttons === void 0 ? void 0 : buttons.submit) === null || _e === void 0 ? void 0 : _e.label) || 'Submit', icon: (_f = buttons === null || buttons === void 0 ? void 0 : buttons.submit) === null || _f === void 0 ? void 0 : _f.icon }))))))),
460
- !isReadOnly && (React.createElement(React.Fragment, null,
461
- React.createElement(Prompt, { when: isDirty && !isNavigationAllowed, message: handleBlockedNavigation }),
462
- React.createElement(Modal, { isOpen: hasConfirmedNavigation === false, title: "Unsaved Changes", cardClassName: "cypress-cancel-confirm", titleClassName: "cypress-cancel-confirm-title", bodyClassName: "cypress-cancel-confirm-body", actions: React.createElement(React.Fragment, null,
463
- onSaveDraft && (React.createElement("button", { type: "button", className: "button ob-button is-success cypress-cancel-confirm-save-draft", onClick: handleSaveDraft },
464
- React.createElement(CustomisableButtonInner, { label: ((_g = buttons === null || buttons === void 0 ? void 0 : buttons.saveDraft) === null || _g === void 0 ? void 0 : _g.label) || 'Save Draft', icon: (_h = buttons === null || buttons === void 0 ? void 0 : buttons.saveDraft) === null || _h === void 0 ? void 0 : _h.icon }))),
465
- React.createElement("span", { style: { flex: 1 } }),
466
- React.createElement("button", { type: "button", className: "button ob-button is-light cypress-cancel-confirm-back", onClick: handleKeepGoing },
467
- React.createElement(CustomisableButtonInner, { label: ((_j = buttons === null || buttons === void 0 ? void 0 : buttons.cancelPromptNo) === null || _j === void 0 ? void 0 : _j.label) || 'Back', icon: (_k = buttons === null || buttons === void 0 ? void 0 : buttons.cancelPromptNo) === null || _k === void 0 ? void 0 : _k.icon })),
468
- React.createElement("button", { type: "button", className: "button ob-button is-primary cypress-cancel-confirm-discard", onClick: handleDiscardUnsavedChanges },
469
- React.createElement(CustomisableButtonInner, { label: ((_l = buttons === null || buttons === void 0 ? void 0 : buttons.cancelPromptYes) === null || _l === void 0 ? void 0 : _l.label) || 'Discard', icon: (_m = buttons === null || buttons === void 0 ? void 0 : buttons.cancelPromptYes) === null || _m === void 0 ? void 0 : _m.icon }))) },
470
- React.createElement("p", null, "You have unsaved changes, are you sure you want discard them?")))))));
471
- }
472
- export default React.memo(OneBlinkFormBase);
1
+ import * as React from 'react';
2
+ import { createTheme as createMuiTheme, ThemeProvider, Tooltip, } from '@mui/material';
3
+ import { Prompt, useHistory } from 'react-router-dom';
4
+ import clsx from 'clsx';
5
+ import * as bulmaToast from 'bulma-toast';
6
+ import { localisationService } from '@oneblink/apps';
7
+ import { attachmentsService } from '@oneblink/apps';
8
+ import Modal from './components/renderer/Modal';
9
+ import OneBlinkAppsErrorOriginalMessage from './components/renderer/OneBlinkAppsErrorOriginalMessage';
10
+ import cleanFormSubmissionModel from './services/cleanFormSubmissionModel';
11
+ import PageFormElements from './components/renderer/PageFormElements';
12
+ import useFormValidation from './hooks/useFormValidation';
13
+ import useConditionalLogic from './hooks/useConditionalLogic';
14
+ import usePages from './hooks/usePages';
15
+ import useLookups from './hooks/useLookups';
16
+ import { FormDefinitionContext } from './hooks/useFormDefinition';
17
+ import { InjectPagesContext } from './hooks/useInjectPages';
18
+ import { ExecutedLookupProvider } from './hooks/useExecutedLookupCallback';
19
+ import useDynamicOptionsLoaderState from './hooks/useDynamicOptionsLoaderState';
20
+ import { GoogleMapsApiKeyContext } from './hooks/useGoogleMapsApiKey';
21
+ import { AbnLookupAuthenticationGuidContext } from './hooks/useAbnLookupAuthenticationGuid';
22
+ import { CaptchaSiteKeyContext } from './hooks/useCaptchaSiteKey';
23
+ import { FormIsReadOnlyContext } from './hooks/useFormIsReadOnly';
24
+ import { AttachmentBlobsProvider } from './hooks/attachments/useAttachmentBlobs';
25
+ import useIsOffline from './hooks/useIsOffline';
26
+ import CustomisableButtonInner from './components/renderer/CustomisableButtonInner';
27
+ import checkBsbsAreInvalid from './services/checkBsbsAreInvalid';
28
+ import checkIfBsbsAreValidating from './services/checkIfBsbsAreValidating';
29
+ import checkIfAttachmentsExist from './services/checkIfAttachmentsExist';
30
+ function OneBlinkFormBase({ googleMapsApiKey, abnLookupAuthenticationGuid, captchaSiteKey, definition, disabled, isPreview, submission, isReadOnly, onCancel, onSubmit, onSaveDraft, setFormSubmission, buttons, primaryColour, attachmentRetentionInDays, continueWithUploadingAttachments, }) {
31
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
32
+ const isOffline = useIsOffline();
33
+ const theme = React.useMemo(() => createMuiTheme({
34
+ palette: {
35
+ primary: {
36
+ main: primaryColour || '#4c8da7',
37
+ },
38
+ success: {
39
+ main: '#4caf50',
40
+ },
41
+ },
42
+ }), [primaryColour]);
43
+ //
44
+ //
45
+ // #region Form Definition
46
+ const pages = React.useMemo(() => {
47
+ if (definition.isMultiPage) {
48
+ return definition.elements.reduce((pageElements, formElement) => {
49
+ if (formElement.type === 'page') {
50
+ pageElements.push(formElement);
51
+ }
52
+ return pageElements;
53
+ }, []);
54
+ }
55
+ else {
56
+ return [
57
+ {
58
+ type: 'page',
59
+ id: definition.id.toString(),
60
+ label: definition.name,
61
+ elements: definition.elements,
62
+ conditionallyShow: false,
63
+ requiresAllConditionallyShowPredicates: false,
64
+ },
65
+ ];
66
+ }
67
+ }, [
68
+ definition.elements,
69
+ definition.id,
70
+ definition.isMultiPage,
71
+ definition.name,
72
+ ]);
73
+ // #endregion
74
+ //
75
+ //
76
+ //
77
+ //
78
+ // #region Unsaved Changed
79
+ const history = useHistory();
80
+ const [{ isDirty, isNavigationAllowed, hasConfirmedNavigation, goToLocation }, setUnsavedChangesState,] = React.useState({
81
+ isDirty: false,
82
+ isNavigationAllowed: false,
83
+ hasConfirmedNavigation: null,
84
+ goToLocation: null,
85
+ });
86
+ const handleBlockedNavigation = React.useCallback((location) => {
87
+ setUnsavedChangesState((current) => ({
88
+ ...current,
89
+ goToLocation: location,
90
+ hasConfirmedNavigation: false,
91
+ }));
92
+ return false;
93
+ }, []);
94
+ const handleKeepGoing = React.useCallback(() => {
95
+ setUnsavedChangesState((current) => ({
96
+ ...current,
97
+ goToLocation: null,
98
+ hasConfirmedNavigation: null,
99
+ }));
100
+ }, []);
101
+ const handleDiscardUnsavedChanges = React.useCallback(() => {
102
+ setUnsavedChangesState((current) => ({
103
+ ...current,
104
+ isNavigationAllowed: true,
105
+ hasConfirmedNavigation: true,
106
+ }));
107
+ }, []);
108
+ React.useEffect(() => {
109
+ if (hasConfirmedNavigation) {
110
+ // Navigate to the previous blocked location with your navigate function
111
+ if (goToLocation) {
112
+ history.push(`${goToLocation.pathname}${goToLocation.search}`);
113
+ }
114
+ else {
115
+ onCancel();
116
+ }
117
+ }
118
+ }, [goToLocation, hasConfirmedNavigation, history, onCancel]);
119
+ const handleCancel = React.useCallback(() => {
120
+ if (isDirty) {
121
+ setUnsavedChangesState((current) => ({
122
+ ...current,
123
+ hasConfirmedNavigation: false,
124
+ }));
125
+ }
126
+ else {
127
+ onCancel();
128
+ }
129
+ }, [isDirty, onCancel]);
130
+ const allowNavigation = React.useCallback(() => {
131
+ setUnsavedChangesState((current) => ({
132
+ ...current,
133
+ isNavigationAllowed: true,
134
+ }));
135
+ }, []);
136
+ // #endregion Unsaved Changed
137
+ //
138
+ //
139
+ //
140
+ //
141
+ // #region Conditional Logic
142
+ const { formElementsConditionallyShown, conditionalLogicError } = useConditionalLogic(definition, submission);
143
+ // #endregion
144
+ //
145
+ //
146
+ //
147
+ //
148
+ // #region Validation
149
+ const { validate, executedLookup, executeLookupFailed } = useFormValidation(pages);
150
+ const formElementsValidation = React.useMemo(() => validate(submission, formElementsConditionallyShown), [formElementsConditionallyShown, submission, validate]);
151
+ // #endregion
152
+ //
153
+ //
154
+ //
155
+ //
156
+ // #region Pages
157
+ const { visiblePages, isFirstVisiblePage, isLastVisiblePage, isDisplayingCurrentPageError, isShowingMultiplePages, isStepsHeaderActive, toggleStepsNavigation, currentPageIndex, currentPage, currentPageNumber, checkDisplayPageError, setPageId, goToPreviousPage, goToNextPage, scrollToTopOfPageHTMLElementRef, } = usePages({
158
+ pages,
159
+ formElementsValidation,
160
+ formElementsConditionallyShown,
161
+ });
162
+ // #endregion
163
+ //
164
+ //
165
+ //
166
+ //
167
+ // #region Dynamic Options
168
+ const loadDynamicOptionsState = useDynamicOptionsLoaderState(definition, setFormSubmission);
169
+ // #endregion
170
+ //
171
+ //
172
+ //
173
+ //
174
+ // #region Submissions
175
+ const [hasAttemptedSubmit, setHasAttemptedSubmit] = React.useState(false);
176
+ const getCurrentSubmissionData = React.useCallback((stripBinaryData) => {
177
+ const { model, captchaTokens } = cleanFormSubmissionModel(submission, definition.elements, formElementsConditionallyShown, stripBinaryData);
178
+ return {
179
+ submission: model,
180
+ captchaTokens,
181
+ };
182
+ }, [definition.elements, formElementsConditionallyShown, submission]);
183
+ const obFormContainerHTMLElementRef = React.useRef(null);
184
+ React.useEffect(() => {
185
+ const obFormContainerHTMLElement = obFormContainerHTMLElementRef.current;
186
+ if (obFormContainerHTMLElement) {
187
+ console.log('Setting toast notifications to be appended to HTML Element', obFormContainerHTMLElement);
188
+ bulmaToast.setDefaults({
189
+ position: 'bottom-right',
190
+ opacity: 0.95,
191
+ appendTo: obFormContainerHTMLElement,
192
+ });
193
+ }
194
+ return () => {
195
+ bulmaToast.resetDefaults();
196
+ };
197
+ }, []);
198
+ const checkAttachmentsCanBeSubmitted = React.useCallback((submission) => {
199
+ // Prevent submission until all attachment uploads are finished
200
+ // Unless the user is offline, in which case, the uploads will
201
+ // be taken care of by a pending queue...hopefully.
202
+ if (isOffline) {
203
+ return true;
204
+ }
205
+ // consumer has signaled to continue with submission whilst attachments still uploading
206
+ if (continueWithUploadingAttachments) {
207
+ return true;
208
+ }
209
+ if (attachmentsService.checkIfAttachmentsAreUploading(definition, submission)) {
210
+ bulmaToast.toast({
211
+ message: 'Attachments are still uploading, please wait for them to finish before trying again.',
212
+ // @ts-expect-error bulma sets this string as a class, so we are hacking in our own classes
213
+ type: 'ob-toast is-primary cypress-still-uploading-toast',
214
+ duration: 4000,
215
+ pauseOnHover: true,
216
+ closeOnClick: true,
217
+ });
218
+ return false;
219
+ }
220
+ return true;
221
+ }, [definition, isOffline, continueWithUploadingAttachments]);
222
+ const checkBsbsCanBeSubmitted = React.useCallback((submission) => {
223
+ return !checkBsbsAreInvalid(definition, submission);
224
+ }, [definition]);
225
+ const checkBsbAreValidating = React.useCallback((submission) => {
226
+ if (checkIfBsbsAreValidating(definition, submission)) {
227
+ bulmaToast.toast({
228
+ message: 'Bsb(s) are still being validated, please wait for them to finish before trying again.',
229
+ // @ts-expect-error bulma sets this string as a class, so we are hacking in our own classes
230
+ type: 'ob-toast is-primary cypress-still-validating-toast',
231
+ duration: 4000,
232
+ pauseOnHover: true,
233
+ closeOnClick: true,
234
+ });
235
+ return false;
236
+ }
237
+ return true;
238
+ }, [definition]);
239
+ const handleSubmit = React.useCallback((event) => {
240
+ event.preventDefault();
241
+ if (disabled || isReadOnly)
242
+ return;
243
+ setHasAttemptedSubmit(true);
244
+ const submissionData = getCurrentSubmissionData(false);
245
+ if (!checkBsbAreValidating(submissionData.submission)) {
246
+ return;
247
+ }
248
+ if (formElementsValidation) {
249
+ console.log('Validation errors', formElementsValidation);
250
+ bulmaToast.toast({
251
+ message: 'Please fix validation errors',
252
+ // @ts-expect-error bulma sets this string as a class, so we are hacking in our own classes
253
+ type: 'ob-toast is-danger cypress-invalid-submit-attempt',
254
+ duration: 4000,
255
+ pauseOnHover: true,
256
+ closeOnClick: true,
257
+ });
258
+ return;
259
+ }
260
+ if (!checkAttachmentsCanBeSubmitted(submissionData.submission)) {
261
+ return;
262
+ }
263
+ if (!checkBsbsCanBeSubmitted(submissionData.submission)) {
264
+ return;
265
+ }
266
+ // check if attachments exist
267
+ const newSubmission = checkIfAttachmentsExist(definition, submissionData.submission, attachmentRetentionInDays);
268
+ if (newSubmission) {
269
+ setFormSubmission((currentFormSubmission) => ({
270
+ ...currentFormSubmission,
271
+ submission: newSubmission,
272
+ }));
273
+ bulmaToast.toast({
274
+ message: "Some files that were included in your submission have been removed based on your administrator's data retention policy, please remove them and upload them again.",
275
+ // @ts-expect-error bulma sets this string as a class, so we are hacking in our own classes
276
+ type: 'ob-toast is-danger cypress-invalid-submit-attempt',
277
+ duration: 4000,
278
+ pauseOnHover: true,
279
+ closeOnClick: true,
280
+ });
281
+ return;
282
+ }
283
+ allowNavigation();
284
+ onSubmit({
285
+ definition,
286
+ submission: submissionData.submission,
287
+ captchaTokens: submissionData.captchaTokens,
288
+ });
289
+ }, [
290
+ disabled,
291
+ isReadOnly,
292
+ getCurrentSubmissionData,
293
+ checkBsbAreValidating,
294
+ formElementsValidation,
295
+ checkAttachmentsCanBeSubmitted,
296
+ checkBsbsCanBeSubmitted,
297
+ definition,
298
+ attachmentRetentionInDays,
299
+ allowNavigation,
300
+ onSubmit,
301
+ setFormSubmission,
302
+ ]);
303
+ const handleSaveDraft = React.useCallback(() => {
304
+ if (disabled)
305
+ return;
306
+ if (onSaveDraft) {
307
+ allowNavigation();
308
+ // For drafts we don't need to save the captcha tokens,
309
+ // they will need to prove they are not robot again
310
+ const { submission } = getCurrentSubmissionData(false);
311
+ if (!checkBsbAreValidating(submission)) {
312
+ return;
313
+ }
314
+ if (!checkAttachmentsCanBeSubmitted(submission)) {
315
+ return;
316
+ }
317
+ onSaveDraft({
318
+ definition,
319
+ submission,
320
+ });
321
+ }
322
+ }, [
323
+ allowNavigation,
324
+ checkAttachmentsCanBeSubmitted,
325
+ definition,
326
+ disabled,
327
+ getCurrentSubmissionData,
328
+ onSaveDraft,
329
+ checkBsbAreValidating,
330
+ ]);
331
+ // #endregion
332
+ //
333
+ //
334
+ //
335
+ //
336
+ // #region Lookups
337
+ const { handlePagesLookupResult } = useLookups(definition.id, setFormSubmission);
338
+ // #endregion
339
+ //
340
+ //
341
+ //
342
+ //
343
+ // #region Submission/Definition Changes
344
+ const handleChange = React.useCallback((element, value) => {
345
+ if (disabled || element.type === 'page' || element.type === 'section') {
346
+ return;
347
+ }
348
+ setUnsavedChangesState((current) => ({
349
+ ...current,
350
+ isDirty: true,
351
+ }));
352
+ setFormSubmission((currentFormSubmission) => ({
353
+ ...currentFormSubmission,
354
+ submission: {
355
+ ...currentFormSubmission.submission,
356
+ [element.name]: typeof value === 'function'
357
+ ? value(currentFormSubmission.submission[element.name])
358
+ : value,
359
+ },
360
+ }));
361
+ }, [disabled, setFormSubmission]);
362
+ // #endregion
363
+ //
364
+ //
365
+ if (conditionalLogicError) {
366
+ return (React.createElement(React.Fragment, null,
367
+ React.createElement("div", { className: "has-text-centered" },
368
+ React.createElement("i", { className: "material-icons has-text-warning icon-x-large" }, "error"),
369
+ React.createElement("h3", { className: "title is-3" }, "Bad Form Configuration"),
370
+ React.createElement("p", { className: "cypress-conditional-logic-error-message" }, conditionalLogicError.message),
371
+ React.createElement("p", { className: "has-text-grey" }, localisationService.formatDatetimeLong(new Date())))));
372
+ }
373
+ if (loadDynamicOptionsState) {
374
+ return (React.createElement(React.Fragment, null,
375
+ React.createElement("div", { className: "has-text-centered" },
376
+ React.createElement("i", { className: "material-icons has-text-warning icon-x-large" }, "error"),
377
+ React.createElement("h3", { className: "title is-3" }, loadDynamicOptionsState.error.title),
378
+ React.createElement("p", null, loadDynamicOptionsState.error.message),
379
+ React.createElement("p", { className: "has-text-grey" }, localisationService.formatDatetimeLong(new Date()))),
380
+ React.createElement(OneBlinkAppsErrorOriginalMessage, { error: loadDynamicOptionsState.error.originalError })));
381
+ }
382
+ return (React.createElement(ThemeProvider, { theme: theme },
383
+ React.createElement("div", { className: "ob-form-container", ref: obFormContainerHTMLElementRef },
384
+ React.createElement("form", { name: "obForm", className: `ob-form cypress-ob-form ob-form__page-${currentPageIndex + 1}`, noValidate: true, onSubmit: handleSubmit },
385
+ React.createElement("div", null,
386
+ React.createElement("div", { ref: scrollToTopOfPageHTMLElementRef }),
387
+ isShowingMultiplePages && (React.createElement("div", { className: clsx('ob-steps-navigation', {
388
+ 'is-active': isStepsHeaderActive,
389
+ }) },
390
+ React.createElement("div", { className: clsx('ob-steps-navigation__header', {
391
+ 'is-active': isStepsHeaderActive,
392
+ }), onClick: toggleStepsNavigation },
393
+ React.createElement("span", { className: "icon is-invisible" },
394
+ React.createElement("i", { className: "material-icons" }, "keyboard_arrow_down")),
395
+ React.createElement("div", { className: "steps-header-active-page" },
396
+ isDisplayingCurrentPageError ? (React.createElement("span", { className: "icon" },
397
+ React.createElement("i", { className: "material-icons has-text-danger is-size-4" }, "warning"))) : (React.createElement("span", { className: "steps-header-active-page-icon" }, currentPageNumber)),
398
+ React.createElement("span", { className: "steps-header-active-page-label cypress-tablet-step-title" }, currentPage ? currentPage.label : '')),
399
+ React.createElement("span", { className: "dropdown icon" },
400
+ React.createElement("i", { className: "material-icons" }, "keyboard_arrow_down"))),
401
+ React.createElement("div", { className: clsx('ob-steps-navigation__steps', {
402
+ 'is-active': isStepsHeaderActive,
403
+ }) },
404
+ React.createElement("div", { className: "steps is-small is-horizontal-tablet cypress-steps" }, visiblePages.map((page, index) => {
405
+ const hasErrors = checkDisplayPageError(page);
406
+ return (React.createElement("div", { key: page.id, id: `steps-navigation-step-${page.id}`, className: clsx('step-item cypress-step-item', {
407
+ 'is-active': currentPage.id === page.id,
408
+ 'is-completed': currentPageIndex > index,
409
+ 'is-error': hasErrors,
410
+ }), onClick: (e) => {
411
+ e.stopPropagation();
412
+ if (page.id !== currentPage.id) {
413
+ setPageId(page.id);
414
+ }
415
+ } },
416
+ React.createElement("div", { className: "step-marker step-marker-error ob-step-marker cypress-step-marker",
417
+ // @ts-expect-error ???
418
+ name: `cypress-page-stepper-${index + 1}`, value: index + 1 }, hasErrors ? (React.createElement(Tooltip, { title: "Page has errors" },
419
+ React.createElement("span", { className: "icon tooltip has-tooltip-top cypress-page-error" },
420
+ React.createElement("i", { className: "material-icons has-text-danger is-size-3" }, "warning")))) : (React.createElement("span", null, index + 1))),
421
+ React.createElement("div", { className: "step-details ob-step-details" },
422
+ React.createElement("p", { className: "step-title ob-step-title cypress-desktop-step-title" }, page.label))));
423
+ }))))),
424
+ React.createElement("div", { className: clsx('ob-steps-navigation__background', {
425
+ 'is-active': isStepsHeaderActive,
426
+ }), onClick: toggleStepsNavigation }),
427
+ React.createElement("div", { className: "steps" },
428
+ React.createElement("div", { className: clsx('steps-content', {
429
+ 'is-single-step': !isShowingMultiplePages,
430
+ }) },
431
+ React.createElement(FormDefinitionContext.Provider, { value: definition },
432
+ React.createElement(InjectPagesContext.Provider, { value: handlePagesLookupResult },
433
+ React.createElement(ExecutedLookupProvider, { executedLookup: executedLookup, executeLookupFailed: executeLookupFailed },
434
+ React.createElement(GoogleMapsApiKeyContext.Provider, { value: googleMapsApiKey },
435
+ React.createElement(AbnLookupAuthenticationGuidContext.Provider, { value: abnLookupAuthenticationGuid },
436
+ React.createElement(CaptchaSiteKeyContext.Provider, { value: captchaSiteKey },
437
+ React.createElement(AttachmentBlobsProvider, null,
438
+ React.createElement(FormIsReadOnlyContext.Provider, { value: isReadOnly }, visiblePages.map((pageElement) => (React.createElement(PageFormElements, { key: pageElement.id, isActive: pageElement.id === currentPage.id, formId: definition.id, formElementsConditionallyShown: formElementsConditionallyShown, formElementsValidation: formElementsValidation, displayValidationMessages: hasAttemptedSubmit ||
439
+ isDisplayingCurrentPageError, pageElement: pageElement, onChange: handleChange, model: submission, setFormSubmission: setFormSubmission })))))))))))),
440
+ isShowingMultiplePages && (React.createElement("div", { className: "steps-actions" },
441
+ React.createElement("div", { className: "steps-action" },
442
+ React.createElement("button", { type: "button", onClick: goToPreviousPage, disabled: isFirstVisiblePage, className: "button is-light cypress-pages-previous" },
443
+ React.createElement("span", { className: "icon" },
444
+ React.createElement("i", { className: "material-icons" }, "keyboard_arrow_left")),
445
+ React.createElement("span", null, "Back"))),
446
+ React.createElement("div", { className: "step-progress-mobile cypress-steps-mobile" }, visiblePages.map((page, index) => (React.createElement("div", { key: page.id, className: clsx('step-progress-mobile-dot', {
447
+ 'is-active': currentPage.id === page.id,
448
+ 'is-completed': currentPageIndex > index,
449
+ 'has-background-danger': currentPage.id !== page.id &&
450
+ checkDisplayPageError(page),
451
+ }) })))),
452
+ React.createElement("div", { className: "steps-action" },
453
+ React.createElement("button", { type: "button", onClick: goToNextPage, disabled: isLastVisiblePage, className: "button is-light cypress-pages-next" },
454
+ React.createElement("span", null, "Next"),
455
+ React.createElement("span", { className: "icon" },
456
+ React.createElement("i", { className: "material-icons" }, "keyboard_arrow_right"))))))),
457
+ !isReadOnly && (React.createElement("div", { className: "buttons ob-buttons ob-buttons-submit" },
458
+ onSaveDraft && !definition.isInfoPage && (React.createElement("button", { type: "button", className: "button ob-button is-primary ob-button-save-draft cypress-save-draft-form", onClick: handleSaveDraft, disabled: isPreview || disabled },
459
+ React.createElement(CustomisableButtonInner, { label: ((_a = buttons === null || buttons === void 0 ? void 0 : buttons.saveDraft) === null || _a === void 0 ? void 0 : _a.label) || 'Save Draft', icon: (_b = buttons === null || buttons === void 0 ? void 0 : buttons.saveDraft) === null || _b === void 0 ? void 0 : _b.icon }))),
460
+ React.createElement("span", { className: "ob-buttons-submit__spacer" }),
461
+ !definition.isInfoPage && (React.createElement("button", { type: "button", className: "button ob-button is-light ob-button-submit-cancel cypress-cancel-form", onClick: handleCancel, disabled: isPreview || disabled },
462
+ React.createElement(CustomisableButtonInner, { label: ((_c = buttons === null || buttons === void 0 ? void 0 : buttons.cancel) === null || _c === void 0 ? void 0 : _c.label) || 'Cancel', icon: (_d = buttons === null || buttons === void 0 ? void 0 : buttons.cancel) === null || _d === void 0 ? void 0 : _d.icon }))),
463
+ isLastVisiblePage && (React.createElement("button", { type: "submit", className: "button ob-button is-success ob-button-submit cypress-submit-form-button cypress-submit-form", disabled: isPreview || disabled },
464
+ React.createElement(CustomisableButtonInner, { label: definition.isInfoPage
465
+ ? 'Done'
466
+ : ((_e = buttons === null || buttons === void 0 ? void 0 : buttons.submit) === null || _e === void 0 ? void 0 : _e.label) || 'Submit', icon: (_f = buttons === null || buttons === void 0 ? void 0 : buttons.submit) === null || _f === void 0 ? void 0 : _f.icon }))))))),
467
+ !isReadOnly && (React.createElement(React.Fragment, null,
468
+ React.createElement(Prompt, { when: isDirty && !isNavigationAllowed, message: handleBlockedNavigation }),
469
+ React.createElement(Modal, { isOpen: hasConfirmedNavigation === false, title: "Unsaved Changes", cardClassName: "cypress-cancel-confirm", titleClassName: "cypress-cancel-confirm-title", bodyClassName: "cypress-cancel-confirm-body", actions: React.createElement(React.Fragment, null,
470
+ onSaveDraft && (React.createElement("button", { type: "button", className: "button ob-button is-success cypress-cancel-confirm-save-draft", onClick: handleSaveDraft },
471
+ React.createElement(CustomisableButtonInner, { label: ((_g = buttons === null || buttons === void 0 ? void 0 : buttons.saveDraft) === null || _g === void 0 ? void 0 : _g.label) || 'Save Draft', icon: (_h = buttons === null || buttons === void 0 ? void 0 : buttons.saveDraft) === null || _h === void 0 ? void 0 : _h.icon }))),
472
+ React.createElement("span", { style: { flex: 1 } }),
473
+ React.createElement("button", { type: "button", className: "button ob-button is-light cypress-cancel-confirm-back", onClick: handleKeepGoing },
474
+ React.createElement(CustomisableButtonInner, { label: ((_j = buttons === null || buttons === void 0 ? void 0 : buttons.cancelPromptNo) === null || _j === void 0 ? void 0 : _j.label) || 'Back', icon: (_k = buttons === null || buttons === void 0 ? void 0 : buttons.cancelPromptNo) === null || _k === void 0 ? void 0 : _k.icon })),
475
+ React.createElement("button", { type: "button", className: "button ob-button is-primary cypress-cancel-confirm-discard", onClick: handleDiscardUnsavedChanges },
476
+ React.createElement(CustomisableButtonInner, { label: ((_l = buttons === null || buttons === void 0 ? void 0 : buttons.cancelPromptYes) === null || _l === void 0 ? void 0 : _l.label) || 'Discard', icon: (_m = buttons === null || buttons === void 0 ? void 0 : buttons.cancelPromptYes) === null || _m === void 0 ? void 0 : _m.icon }))) },
477
+ React.createElement("p", null, "You have unsaved changes, are you sure you want discard them?")))))));
478
+ }
479
+ export default React.memo(OneBlinkFormBase);
473
480
  //# sourceMappingURL=OneBlinkFormBase.js.map