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

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 (464) 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 +28 -28
  6. package/dist/OneBlinkFormBase.js +472 -472
  7. package/dist/OneBlinkFormStoreView.d.ts +8 -0
  8. package/dist/OneBlinkFormStoreView.js +55 -0
  9. package/dist/OneBlinkFormStoreView.js.map +1 -0
  10. package/dist/OneBlinkReadOnlyForm.d.ts +11 -11
  11. package/dist/OneBlinkReadOnlyForm.js +48 -48
  12. package/dist/components/AnnotationModal.d.ts +8 -0
  13. package/dist/components/AnnotationModal.js +104 -0
  14. package/dist/components/AnnotationModal.js.map +1 -0
  15. package/dist/components/AutocompleteDropdown.d.ts +26 -0
  16. package/dist/components/AutocompleteDropdown.js +174 -0
  17. package/dist/components/AutocompleteDropdown.js.map +1 -0
  18. package/dist/components/CopyToClipboardButton.d.ts +9 -0
  19. package/dist/components/CopyToClipboardButton.js +14 -0
  20. package/dist/components/CopyToClipboardButton.js.map +1 -0
  21. package/dist/components/CopyToClipboardIconButton.d.ts +10 -10
  22. package/dist/components/CopyToClipboardIconButton.js +32 -32
  23. package/dist/components/CustomAccordion.d.ts +27 -27
  24. package/dist/components/CustomAccordion.js +37 -37
  25. package/dist/components/CustomisableButtonInner.d.ts +7 -0
  26. package/dist/components/CustomisableButtonInner.js +9 -0
  27. package/dist/components/CustomisableButtonInner.js.map +1 -0
  28. package/dist/components/ErrorMessage.d.ts +13 -0
  29. package/dist/components/ErrorMessage.js +13 -0
  30. package/dist/components/ErrorMessage.js.map +1 -0
  31. package/dist/components/ErrorSnackbar.d.ts +8 -8
  32. package/dist/components/ErrorSnackbar.js +25 -25
  33. package/dist/components/FormElementLabelContainer.d.ts +12 -0
  34. package/dist/components/FormElementLabelContainer.js +16 -0
  35. package/dist/components/FormElementLabelContainer.js.map +1 -0
  36. package/dist/components/FormElementOptions.d.ts +9 -0
  37. package/dist/components/FormElementOptions.js +15 -0
  38. package/dist/components/FormElementOptions.js.map +1 -0
  39. package/dist/components/Lists.d.ts +25 -25
  40. package/dist/components/Lists.js +44 -44
  41. package/dist/components/LoadingWithMessage.d.ts +6 -6
  42. package/dist/components/LoadingWithMessage.js +11 -11
  43. package/dist/components/LookupButton.d.ts +10 -0
  44. package/dist/components/LookupButton.js +30 -0
  45. package/dist/components/LookupButton.js.map +1 -0
  46. package/dist/components/LookupNotification.d.ts +12 -0
  47. package/dist/components/LookupNotification.js +231 -0
  48. package/dist/components/LookupNotification.js.map +1 -0
  49. package/dist/components/Modal.d.ts +14 -0
  50. package/dist/components/Modal.js +15 -0
  51. package/dist/components/Modal.js.map +1 -0
  52. package/dist/components/NoResourcesYet.d.ts +12 -0
  53. package/dist/components/NoResourcesYet.js +7 -0
  54. package/dist/components/NoResourcesYet.js.map +1 -0
  55. package/dist/components/OnLoading.d.ts +10 -0
  56. package/dist/components/OnLoading.js +12 -0
  57. package/dist/components/OnLoading.js.map +1 -0
  58. package/dist/components/OneBlinkAppsErrorOriginalMessage.d.ts +7 -0
  59. package/dist/components/OneBlinkAppsErrorOriginalMessage.js +13 -0
  60. package/dist/components/OneBlinkAppsErrorOriginalMessage.js.map +1 -0
  61. package/dist/components/OneBlinkFormElements.d.ts +19 -0
  62. package/dist/components/OneBlinkFormElements.js +196 -0
  63. package/dist/components/OneBlinkFormElements.js.map +1 -0
  64. package/dist/components/PageFormElements.d.ts +17 -0
  65. package/dist/components/PageFormElements.js +49 -0
  66. package/dist/components/PageFormElements.js.map +1 -0
  67. package/dist/components/ToggleAllCheckbox.d.ts +13 -0
  68. package/dist/components/ToggleAllCheckbox.js +27 -0
  69. package/dist/components/ToggleAllCheckbox.js.map +1 -0
  70. package/dist/components/attachments/AttachmentStatus.d.ts +12 -0
  71. package/dist/components/attachments/AttachmentStatus.js +35 -0
  72. package/dist/components/attachments/AttachmentStatus.js.map +1 -0
  73. package/dist/components/attachments/FileCard.d.ts +18 -0
  74. package/dist/components/attachments/FileCard.js +58 -0
  75. package/dist/components/attachments/FileCard.js.map +1 -0
  76. package/dist/components/attachments/FileCardContent.d.ts +5 -0
  77. package/dist/components/attachments/FileCardContent.js +11 -0
  78. package/dist/components/attachments/FileCardContent.js.map +1 -0
  79. package/dist/components/attachments/Files.d.ts +14 -0
  80. package/dist/components/attachments/Files.js +27 -0
  81. package/dist/components/attachments/Files.js.map +1 -0
  82. package/dist/components/attachments/ImagePreviewUnavailable.d.ts +4 -0
  83. package/dist/components/attachments/ImagePreviewUnavailable.js +12 -0
  84. package/dist/components/attachments/ImagePreviewUnavailable.js.map +1 -0
  85. package/dist/components/attachments/UploadingAttachment.d.ts +4 -0
  86. package/dist/components/attachments/UploadingAttachment.js +13 -0
  87. package/dist/components/attachments/UploadingAttachment.js.map +1 -0
  88. package/dist/components/formStore/ColumnsConfigurationButton.d.ts +10 -0
  89. package/dist/components/formStore/ColumnsConfigurationButton.js +29 -0
  90. package/dist/components/formStore/ColumnsConfigurationButton.js.map +1 -0
  91. package/dist/components/formStore/DownloadSubmissionDataButton.d.ts +13 -0
  92. package/dist/components/formStore/DownloadSubmissionDataButton.js +45 -0
  93. package/dist/components/formStore/DownloadSubmissionDataButton.js.map +1 -0
  94. package/dist/components/formStore/FormStore.d.ts +9 -0
  95. package/dist/components/formStore/FormStore.js +103 -0
  96. package/dist/components/formStore/FormStore.js.map +1 -0
  97. package/dist/components/formStore/FormStoreTableProvider.d.ts +6 -6
  98. package/dist/components/formStore/FormStoreTableProvider.js +90 -90
  99. package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.d.ts +5 -5
  100. package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.js +19 -19
  101. package/dist/components/formStore/OneBlinkFormStoreColumnsButton.d.ts +5 -5
  102. package/dist/components/formStore/OneBlinkFormStoreColumnsButton.js +66 -66
  103. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.d.ts +5 -5
  104. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js +86 -86
  105. package/dist/components/formStore/OneBlinkFormStoreProvider.d.ts +8 -8
  106. package/dist/components/formStore/OneBlinkFormStoreProvider.js +24 -24
  107. package/dist/components/formStore/OneBlinkFormStoreRefreshButton.d.ts +5 -5
  108. package/dist/components/formStore/OneBlinkFormStoreRefreshButton.js +11 -11
  109. package/dist/components/formStore/OneBlinkFormStoreTable.d.ts +4 -4
  110. package/dist/components/formStore/OneBlinkFormStoreTable.js +194 -194
  111. package/dist/components/formStore/display/ElementDisplay.d.ts +23 -23
  112. package/dist/components/formStore/display/ElementDisplay.js +77 -77
  113. package/dist/components/formStore/display/FormStoreIcon.d.ts +2 -2
  114. package/dist/components/formStore/display/FormStoreIcon.js +2 -2
  115. package/dist/components/formStore/table/ActionedByTableCell.d.ts +11 -11
  116. package/dist/components/formStore/table/ActionedByTableCell.js +43 -43
  117. package/dist/components/formStore/table/ColumnFilters.d.ts +9 -9
  118. package/dist/components/formStore/table/ColumnFilters.js +179 -179
  119. package/dist/components/formStore/table/FormElementTableCell.d.ts +10 -10
  120. package/dist/components/formStore/table/FormElementTableCell.js +228 -228
  121. package/dist/components/formStore/table/HeaderCellMoreButton.d.ts +9 -9
  122. package/dist/components/formStore/table/HeaderCellMoreButton.js +48 -48
  123. package/dist/components/formStore/table/RepeatableSetCell.d.ts +8 -8
  124. package/dist/components/formStore/table/RepeatableSetCell.js +62 -62
  125. package/dist/components/formStore/table/RepeatableSetCellAccordion.d.ts +9 -9
  126. package/dist/components/formStore/table/RepeatableSetCellAccordion.js +11 -11
  127. package/dist/components/formStore/table/TableCellCopyButton.d.ts +7 -7
  128. package/dist/components/formStore/table/TableCellCopyButton.js +27 -27
  129. package/dist/components/formStore/table/generateColumns.d.ts +24 -24
  130. package/dist/components/formStore/table/generateColumns.js +290 -290
  131. package/dist/components/formStore/table/index.d.ts +17 -0
  132. package/dist/components/formStore/table/index.js +194 -0
  133. package/dist/components/formStore/table/index.js.map +1 -0
  134. package/dist/components/formStore/table/useFormStoreTable.d.ts +52 -52
  135. package/dist/components/formStore/table/useFormStoreTable.js +157 -157
  136. package/dist/components/formStore/useFormStoreTableContext.d.ts +44 -44
  137. package/dist/components/formStore/useFormStoreTableContext.js +9 -9
  138. package/dist/components/messages/ErrorMessage.d.ts +12 -12
  139. package/dist/components/messages/ErrorMessage.js +12 -12
  140. package/dist/components/messages/LargeIconMessage.d.ts +18 -18
  141. package/dist/components/messages/LargeIconMessage.js +33 -33
  142. package/dist/components/messages/NoResourcesYet.d.ts +11 -11
  143. package/dist/components/messages/NoResourcesYet.js +6 -6
  144. package/dist/components/pickers/V4CompatibleDatePicker.d.ts +32 -32
  145. package/dist/components/pickers/V4CompatibleDatePicker.js +70 -70
  146. package/dist/components/pickers/V4CompatibleDateTimePicker.d.ts +32 -32
  147. package/dist/components/pickers/V4CompatibleDateTimePicker.js +70 -70
  148. package/dist/components/pickers/V4CompatibleTimePicker.d.ts +28 -28
  149. package/dist/components/pickers/V4CompatibleTimePicker.js +53 -53
  150. package/dist/components/renderer/AnnotationModal.d.ts +8 -8
  151. package/dist/components/renderer/AnnotationModal.js +101 -101
  152. package/dist/components/renderer/AutocompleteDropdown.d.ts +26 -26
  153. package/dist/components/renderer/AutocompleteDropdown.js +175 -175
  154. package/dist/components/renderer/CopyToClipboardButton.d.ts +8 -8
  155. package/dist/components/renderer/CopyToClipboardButton.js +13 -13
  156. package/dist/components/renderer/CustomisableButtonInner.d.ts +7 -7
  157. package/dist/components/renderer/CustomisableButtonInner.js +8 -8
  158. package/dist/components/renderer/FormElementLabelContainer.d.ts +12 -12
  159. package/dist/components/renderer/FormElementLabelContainer.js +15 -15
  160. package/dist/components/renderer/FormElementOptions.d.ts +9 -9
  161. package/dist/components/renderer/FormElementOptions.js +14 -14
  162. package/dist/components/renderer/LookupButton.d.ts +10 -10
  163. package/dist/components/renderer/LookupButton.js +29 -29
  164. package/dist/components/renderer/LookupNotification.d.ts +12 -12
  165. package/dist/components/renderer/LookupNotification.js +230 -230
  166. package/dist/components/renderer/Modal.d.ts +14 -14
  167. package/dist/components/renderer/Modal.js +14 -14
  168. package/dist/components/renderer/OnLoading.d.ts +10 -10
  169. package/dist/components/renderer/OnLoading.js +11 -11
  170. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.d.ts +7 -7
  171. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js +12 -12
  172. package/dist/components/renderer/OneBlinkFormElements.d.ts +19 -19
  173. package/dist/components/renderer/OneBlinkFormElements.js +202 -202
  174. package/dist/components/renderer/PageFormElements.d.ts +17 -17
  175. package/dist/components/renderer/PageFormElements.js +48 -48
  176. package/dist/components/renderer/ProgressBar.d.ts +7 -0
  177. package/dist/components/renderer/ProgressBar.js +7 -0
  178. package/dist/components/renderer/ProgressBar.js.map +1 -0
  179. package/dist/components/renderer/ToggleAllCheckbox.d.ts +13 -13
  180. package/dist/components/renderer/ToggleAllCheckbox.js +26 -26
  181. package/dist/components/renderer/attachments/AttachmentStatus.d.ts +10 -10
  182. package/dist/components/renderer/attachments/AttachmentStatus.js +36 -30
  183. package/dist/components/renderer/attachments/AttachmentStatus.js.map +1 -1
  184. package/dist/components/renderer/attachments/FileCard.d.ts +19 -18
  185. package/dist/components/renderer/attachments/FileCard.js +60 -57
  186. package/dist/components/renderer/attachments/FileCard.js.map +1 -1
  187. package/dist/components/renderer/attachments/FileCardContent.d.ts +5 -5
  188. package/dist/components/renderer/attachments/FileCardContent.js +10 -10
  189. package/dist/components/renderer/attachments/Files.d.ts +14 -0
  190. package/dist/components/renderer/attachments/Files.js +27 -0
  191. package/dist/components/renderer/attachments/Files.js.map +1 -0
  192. package/dist/components/renderer/attachments/ImagePreviewUnavailable.d.ts +4 -4
  193. package/dist/components/renderer/attachments/ImagePreviewUnavailable.js +11 -11
  194. package/dist/components/renderer/attachments/ProgressBar.d.ts +8 -0
  195. package/dist/components/renderer/attachments/ProgressBar.js +34 -0
  196. package/dist/components/renderer/attachments/ProgressBar.js.map +1 -0
  197. package/dist/components/renderer/attachments/UploadingAttachment.d.ts +4 -4
  198. package/dist/components/renderer/attachments/UploadingAttachment.js +12 -12
  199. package/dist/form-elements/ComplianceButton.d.ts +10 -10
  200. package/dist/form-elements/ComplianceButton.js +11 -11
  201. package/dist/form-elements/FormElementABN.d.ts +14 -14
  202. package/dist/form-elements/FormElementABN.js +155 -155
  203. package/dist/form-elements/FormElementAutocomplete.d.ts +19 -19
  204. package/dist/form-elements/FormElementAutocomplete.js +81 -81
  205. package/dist/form-elements/FormElementBSB.d.ts +18 -18
  206. package/dist/form-elements/FormElementBSB.js +100 -100
  207. package/dist/form-elements/FormElementBarcodeScanner.d.ts +14 -14
  208. package/dist/form-elements/FormElementBarcodeScanner.js +306 -306
  209. package/dist/form-elements/FormElementBoolean.d.ts +14 -14
  210. package/dist/form-elements/FormElementBoolean.js +16 -16
  211. package/dist/form-elements/FormElementCalculation.d.ts +11 -11
  212. package/dist/form-elements/FormElementCalculation.js +179 -179
  213. package/dist/form-elements/FormElementCamera.d.ts +15 -15
  214. package/dist/form-elements/FormElementCamera.js +227 -220
  215. package/dist/form-elements/FormElementCamera.js.map +1 -1
  216. package/dist/form-elements/FormElementCaptcha.d.ts +12 -12
  217. package/dist/form-elements/FormElementCaptcha.js +14 -14
  218. package/dist/form-elements/FormElementCheckBoxes.d.ts +15 -15
  219. package/dist/form-elements/FormElementCheckBoxes.js +64 -64
  220. package/dist/form-elements/FormElementCivicaNameRecord.d.ts +8 -8
  221. package/dist/form-elements/FormElementCivicaNameRecord.js +51 -51
  222. package/dist/form-elements/FormElementCivicaStreetName.d.ts +15 -15
  223. package/dist/form-elements/FormElementCivicaStreetName.js +38 -38
  224. package/dist/form-elements/FormElementCompliance.d.ts +22 -22
  225. package/dist/form-elements/FormElementCompliance.js +129 -129
  226. package/dist/form-elements/FormElementDate.d.ts +14 -14
  227. package/dist/form-elements/FormElementDate.js +74 -74
  228. package/dist/form-elements/FormElementDateTime.d.ts +14 -14
  229. package/dist/form-elements/FormElementDateTime.js +67 -67
  230. package/dist/form-elements/FormElementEmail.d.ts +14 -14
  231. package/dist/form-elements/FormElementEmail.js +22 -22
  232. package/dist/form-elements/FormElementFile.d.ts +13 -13
  233. package/dist/form-elements/FormElementFile.js +31 -31
  234. package/dist/form-elements/FormElementFile.js.map +1 -1
  235. package/dist/form-elements/FormElementFiles/FormElementFile.d.ts +13 -0
  236. package/dist/form-elements/FormElementFiles/FormElementFile.js +32 -0
  237. package/dist/form-elements/FormElementFiles/FormElementFile.js.map +1 -0
  238. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.d.ts +10 -0
  239. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.js +11 -0
  240. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.js.map +1 -0
  241. package/dist/form-elements/FormElementFiles/FormElementFiles.d.ts +15 -0
  242. package/dist/form-elements/FormElementFiles/FormElementFiles.js +17 -0
  243. package/dist/form-elements/FormElementFiles/FormElementFiles.js.map +1 -0
  244. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.d.ts +7 -0
  245. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.js +11 -0
  246. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.js.map +1 -0
  247. package/dist/form-elements/FormElementFiles/index.d.ts +17 -0
  248. package/dist/form-elements/FormElementFiles/index.js +18 -0
  249. package/dist/form-elements/FormElementFiles/index.js.map +1 -0
  250. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.d.ts +18 -0
  251. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js +61 -0
  252. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js.map +1 -0
  253. package/dist/form-elements/FormElementFiles.d.ts +15 -15
  254. package/dist/form-elements/FormElementFiles.js +42 -42
  255. package/dist/form-elements/FormElementForm.d.ts +17 -17
  256. package/dist/form-elements/FormElementForm.js +63 -63
  257. package/dist/form-elements/FormElementFreshdeskDependentField.d.ts +8 -8
  258. package/dist/form-elements/FormElementFreshdeskDependentField.js +15 -15
  259. package/dist/form-elements/FormElementGeoscapeAddress.d.ts +15 -15
  260. package/dist/form-elements/FormElementGeoscapeAddress.js +62 -62
  261. package/dist/form-elements/FormElementHTML.d.ts +8 -8
  262. package/dist/form-elements/FormElementHTML.js +15 -15
  263. package/dist/form-elements/FormElementHeading.d.ts +8 -8
  264. package/dist/form-elements/FormElementHeading.js +23 -23
  265. package/dist/form-elements/FormElementImage.d.ts +8 -8
  266. package/dist/form-elements/FormElementImage.js +6 -6
  267. package/dist/form-elements/FormElementLocation.d.ts +20 -20
  268. package/dist/form-elements/FormElementLocation.js +204 -204
  269. package/dist/form-elements/FormElementNumber.d.ts +14 -14
  270. package/dist/form-elements/FormElementNumber.js +72 -72
  271. package/dist/form-elements/FormElementPointAddress.d.ts +15 -15
  272. package/dist/form-elements/FormElementPointAddress.js +69 -69
  273. package/dist/form-elements/FormElementRadio.d.ts +15 -15
  274. package/dist/form-elements/FormElementRadio.js +41 -41
  275. package/dist/form-elements/FormElementRepeatableSet.d.ts +19 -19
  276. package/dist/form-elements/FormElementRepeatableSet.js +126 -126
  277. package/dist/form-elements/FormElementSection.d.ts +8 -8
  278. package/dist/form-elements/FormElementSection.js +69 -69
  279. package/dist/form-elements/FormElementSelect.d.ts +15 -15
  280. package/dist/form-elements/FormElementSelect.js +44 -44
  281. package/dist/form-elements/FormElementSignature.d.ts +15 -15
  282. package/dist/form-elements/FormElementSignature.js +138 -135
  283. package/dist/form-elements/FormElementSignature.js.map +1 -1
  284. package/dist/form-elements/FormElementSummary.d.ts +11 -11
  285. package/dist/form-elements/FormElementSummary.js +159 -159
  286. package/dist/form-elements/FormElementTelephone.d.ts +14 -14
  287. package/dist/form-elements/FormElementTelephone.js +22 -22
  288. package/dist/form-elements/FormElementText.d.ts +14 -14
  289. package/dist/form-elements/FormElementText.js +29 -29
  290. package/dist/form-elements/FormElementTextarea.d.ts +14 -14
  291. package/dist/form-elements/FormElementTextarea.js +30 -30
  292. package/dist/form-elements/FormElementTime.d.ts +14 -14
  293. package/dist/form-elements/FormElementTime.js +53 -53
  294. package/dist/form-elements/OptionButton.d.ts +11 -11
  295. package/dist/form-elements/OptionButton.js +9 -9
  296. package/dist/hooks/attachments/useAttachment.d.ts +12 -11
  297. package/dist/hooks/attachments/useAttachment.js +242 -235
  298. package/dist/hooks/attachments/useAttachment.js.map +1 -1
  299. package/dist/hooks/attachments/useAttachmentBlobs.d.ts +19 -19
  300. package/dist/hooks/attachments/useAttachmentBlobs.js +23 -23
  301. package/dist/hooks/attachments/useAttachmentObjectURLs.d.ts +24 -0
  302. package/dist/hooks/attachments/useAttachmentObjectURLs.js +37 -0
  303. package/dist/hooks/attachments/useAttachmentObjectURLs.js.map +1 -0
  304. package/dist/hooks/attachments/useAttachments.d.ts +10 -10
  305. package/dist/hooks/attachments/useAttachments.js +69 -69
  306. package/dist/hooks/attachments/useLocalAttachmentBlobs.d.ts +24 -0
  307. package/dist/hooks/attachments/useLocalAttachmentBlobs.js +40 -0
  308. package/dist/hooks/attachments/useLocalAttachmentBlobs.js.map +1 -0
  309. package/dist/hooks/useAbnLookupAuthenticationGuid.d.ts +3 -3
  310. package/dist/hooks/useAbnLookupAuthenticationGuid.js +5 -5
  311. package/dist/hooks/useAuth.d.ts +15 -15
  312. package/dist/hooks/useAuth.js +42 -42
  313. package/dist/hooks/useBooleanState.d.ts +5 -5
  314. package/dist/hooks/useBooleanState.js +8 -8
  315. package/dist/hooks/useButtonsConfiguration.d.ts +45 -0
  316. package/dist/hooks/useButtonsConfiguration.js +6 -0
  317. package/dist/hooks/useButtonsConfiguration.js.map +1 -0
  318. package/dist/hooks/useCaptchaSiteKey.d.ts +3 -3
  319. package/dist/hooks/useCaptchaSiteKey.js +5 -5
  320. package/dist/hooks/useChangeEffect.d.ts +1 -0
  321. package/dist/hooks/useChangeEffect.js +14 -0
  322. package/dist/hooks/useChangeEffect.js.map +1 -0
  323. package/dist/hooks/useClickOutsideElement.d.ts +3 -3
  324. package/dist/hooks/useClickOutsideElement.js +14 -14
  325. package/dist/hooks/useConditionalLogic.d.ts +6 -6
  326. package/dist/hooks/useConditionalLogic.js +22 -22
  327. package/dist/hooks/useConditionallyShowOptionCallback.d.ts +5 -0
  328. package/dist/hooks/useConditionallyShowOptionCallback.js +20 -0
  329. package/dist/hooks/useConditionallyShowOptionCallback.js.map +1 -0
  330. package/dist/hooks/useContrastColor.d.ts +2 -2
  331. package/dist/hooks/useContrastColor.js +12 -12
  332. package/dist/hooks/useCustomValidation.d.ts +1 -0
  333. package/dist/hooks/useCustomValidation.js +9 -0
  334. package/dist/hooks/useCustomValidation.js.map +1 -0
  335. package/dist/hooks/useDynamicOptionsLoaderEffect.d.ts +7 -0
  336. package/dist/hooks/useDynamicOptionsLoaderEffect.js +45 -0
  337. package/dist/hooks/useDynamicOptionsLoaderEffect.js.map +1 -0
  338. package/dist/hooks/useDynamicOptionsLoaderState.d.ts +7 -7
  339. package/dist/hooks/useDynamicOptionsLoaderState.js +44 -44
  340. package/dist/hooks/useExecutedLookupCallback.d.ts +12 -12
  341. package/dist/hooks/useExecutedLookupCallback.js +15 -15
  342. package/dist/hooks/useFlatpickr.d.ts +10 -10
  343. package/dist/hooks/useFlatpickr.js +73 -73
  344. package/dist/hooks/useFlatpickrGuid.d.ts +7 -7
  345. package/dist/hooks/useFlatpickrGuid.js +11 -11
  346. package/dist/hooks/useFlattenElementsContext.d.ts +2 -2
  347. package/dist/hooks/useFlattenElementsContext.js +7 -7
  348. package/dist/hooks/useFormDefinition.d.ts +4 -4
  349. package/dist/hooks/useFormDefinition.js +9 -9
  350. package/dist/hooks/useFormElementOptions.d.ts +9 -9
  351. package/dist/hooks/useFormElementOptions.js +35 -35
  352. package/dist/hooks/useFormIsReadOnly.d.ts +3 -3
  353. package/dist/hooks/useFormIsReadOnly.js +5 -5
  354. package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +24 -24
  355. package/dist/hooks/useFormSubmissionAutoSaveState.js +145 -145
  356. package/dist/hooks/useFormSubmissionModelContext.d.ts +15 -15
  357. package/dist/hooks/useFormSubmissionModelContext.js +32 -32
  358. package/dist/hooks/useFormSubmissionState.d.ts +10 -10
  359. package/dist/hooks/useFormSubmissionState.js +13 -13
  360. package/dist/hooks/useFormValidation.d.ts +7 -7
  361. package/dist/hooks/useFormValidation.js +29 -29
  362. package/dist/hooks/useGoogleMapsApiKey.d.ts +3 -3
  363. package/dist/hooks/useGoogleMapsApiKey.js +5 -5
  364. package/dist/hooks/useInfiniteScrollDataLoad.d.ts +30 -30
  365. package/dist/hooks/useInfiniteScrollDataLoad.js +124 -124
  366. package/dist/hooks/useInjectPages.d.ts +7 -7
  367. package/dist/hooks/useInjectPages.js +5 -5
  368. package/dist/hooks/useIsHovering.d.ts +5 -5
  369. package/dist/hooks/useIsHovering.js +12 -12
  370. package/dist/hooks/useIsMounted.d.ts +3 -3
  371. package/dist/hooks/useIsMounted.js +11 -11
  372. package/dist/hooks/useIsOffline.d.ts +6 -6
  373. package/dist/hooks/useIsOffline.js +26 -26
  374. package/dist/hooks/useIsPageVisible.d.ts +9 -9
  375. package/dist/hooks/useIsPageVisible.js +8 -8
  376. package/dist/hooks/useLegacyElements.d.ts +16 -0
  377. package/dist/hooks/useLegacyElements.js +55 -0
  378. package/dist/hooks/useLegacyElements.js.map +1 -0
  379. package/dist/hooks/useLoadDataState.d.ts +15 -15
  380. package/dist/hooks/useLoadDataState.js +54 -54
  381. package/dist/hooks/useLogin.d.ts +46 -46
  382. package/dist/hooks/useLogin.js +295 -295
  383. package/dist/hooks/useLookupNotification.d.ts +9 -9
  384. package/dist/hooks/useLookupNotification.js +10 -10
  385. package/dist/hooks/useLookups.d.ts +5 -5
  386. package/dist/hooks/useLookups.js +62 -62
  387. package/dist/hooks/useNullableState.d.ts +2 -2
  388. package/dist/hooks/useNullableState.js +6 -6
  389. package/dist/hooks/usePages.d.ts +24 -24
  390. package/dist/hooks/usePages.js +141 -141
  391. package/dist/hooks/useQuery.d.ts +2 -2
  392. package/dist/hooks/useQuery.js +7 -7
  393. package/dist/hooks/useSubmissionIdIsValid.d.ts +3 -3
  394. package/dist/hooks/useSubmissionIdIsValid.js +19 -19
  395. package/dist/hooks/useToggleAll.d.ts +6 -0
  396. package/dist/hooks/useToggleAll.js +24 -0
  397. package/dist/hooks/useToggleAll.js.map +1 -0
  398. package/dist/hooks/useToggleComplianceChildren.d.ts +3 -3
  399. package/dist/hooks/useToggleComplianceChildren.js +13 -13
  400. package/dist/index.d.ts +23 -22
  401. package/dist/index.js +23 -22
  402. package/dist/index.js.map +1 -1
  403. package/dist/services/attachments.d.ts +10 -10
  404. package/dist/services/attachments.js +72 -72
  405. package/dist/services/barcode-readers/quagger.d.ts +1 -1
  406. package/dist/services/barcode-readers/quagger.js +34 -34
  407. package/dist/services/blob-utils.d.ts +5 -5
  408. package/dist/services/blob-utils.js +73 -73
  409. package/dist/services/checkBsbsAreInvalid.d.ts +3 -3
  410. package/dist/services/checkBsbsAreInvalid.js +40 -40
  411. package/dist/services/checkIfAttachmentsAreUploading.d.ts +3 -3
  412. package/dist/services/checkIfAttachmentsAreUploading.js +57 -57
  413. package/dist/services/checkIfAttachmentsExist.d.ts +5 -5
  414. package/dist/services/checkIfAttachmentsExist.js +144 -144
  415. package/dist/services/checkIfBsbsAreValidating.d.ts +3 -3
  416. package/dist/services/checkIfBsbsAreValidating.js +40 -40
  417. package/dist/services/clean-form-elements-ctrl-model.d.ts +4 -0
  418. package/dist/services/clean-form-elements-ctrl-model.js +166 -0
  419. package/dist/services/clean-form-elements-ctrl-model.js.map +1 -0
  420. package/dist/services/cleanFormSubmissionModel.d.ts +6 -6
  421. package/dist/services/cleanFormSubmissionModel.js +203 -203
  422. package/dist/services/conditionally-show-element.d.ts +11 -0
  423. package/dist/services/conditionally-show-element.js +92 -0
  424. package/dist/services/conditionally-show-element.js.map +1 -0
  425. package/dist/services/conditionally-show-option.d.ts +3 -0
  426. package/dist/services/conditionally-show-option.js +135 -0
  427. package/dist/services/conditionally-show-option.js.map +1 -0
  428. package/dist/services/defaultCoordinates.d.ts +5 -5
  429. package/dist/services/defaultCoordinates.js +8 -8
  430. package/dist/services/download-file.d.ts +3 -3
  431. package/dist/services/download-file.js +90 -90
  432. package/dist/services/drawTimestampOnCanvas.d.ts +1 -1
  433. package/dist/services/drawTimestampOnCanvas.js +22 -22
  434. package/dist/services/flattenFormElements.d.ts +2 -0
  435. package/dist/services/flattenFormElements.js +13 -0
  436. package/dist/services/flattenFormElements.js.map +1 -0
  437. package/dist/services/form-validation.d.ts +10 -10
  438. package/dist/services/form-validation.js +561 -561
  439. package/dist/services/generate-default-data.d.ts +13 -13
  440. package/dist/services/generate-default-data.js +494 -494
  441. package/dist/services/generateCivicaNameRecordElements.d.ts +2 -2
  442. package/dist/services/generateCivicaNameRecordElements.js +140 -140
  443. package/dist/services/generateFreshdeskDependentFieldElements.d.ts +2 -2
  444. package/dist/services/generateFreshdeskDependentFieldElements.js +69 -69
  445. package/dist/services/getCorrectDateFromDateOnlyString.d.ts +2 -0
  446. package/dist/services/getCorrectDateFromDateOnlyString.js +4 -0
  447. package/dist/services/getCorrectDateFromDateOnlyString.js.map +1 -0
  448. package/dist/services/sanitize-html.d.ts +2 -2
  449. package/dist/services/sanitize-html.js +20 -20
  450. package/dist/services/scrolling-service.d.ts +7 -7
  451. package/dist/services/scrolling-service.js +38 -38
  452. package/dist/services/utils-service.d.ts +5 -5
  453. package/dist/services/utils-service.js +16 -16
  454. package/dist/styles/boolean.scss +12 -0
  455. package/dist/styles/ob-file.scss +63 -0
  456. package/dist/styles/progress.scss +8 -0
  457. package/dist/styles.css +7 -0
  458. package/dist/styles.css.map +1 -1
  459. package/dist/styles.scss +1 -0
  460. package/dist/types/attachments.d.ts +19 -19
  461. package/dist/types/attachments.js +1 -1
  462. package/dist/types/form.d.ts +40 -40
  463. package/dist/types/form.js +2 -2
  464. package/package.json +2 -2
@@ -1,473 +1,473 @@
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 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);
473
473
  //# sourceMappingURL=OneBlinkFormBase.js.map