@oneblink/apps-react 2.3.0-beta.1 → 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 (459) 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 -7
  177. package/dist/components/renderer/ProgressBar.js +6 -6
  178. package/dist/components/renderer/ToggleAllCheckbox.d.ts +13 -13
  179. package/dist/components/renderer/ToggleAllCheckbox.js +26 -26
  180. package/dist/components/renderer/attachments/AttachmentStatus.d.ts +10 -10
  181. package/dist/components/renderer/attachments/AttachmentStatus.js +36 -36
  182. package/dist/components/renderer/attachments/FileCard.d.ts +19 -19
  183. package/dist/components/renderer/attachments/FileCard.js +60 -59
  184. package/dist/components/renderer/attachments/FileCard.js.map +1 -1
  185. package/dist/components/renderer/attachments/FileCardContent.d.ts +5 -5
  186. package/dist/components/renderer/attachments/FileCardContent.js +10 -10
  187. package/dist/components/renderer/attachments/Files.d.ts +14 -0
  188. package/dist/components/renderer/attachments/Files.js +27 -0
  189. package/dist/components/renderer/attachments/Files.js.map +1 -0
  190. package/dist/components/renderer/attachments/ImagePreviewUnavailable.d.ts +4 -4
  191. package/dist/components/renderer/attachments/ImagePreviewUnavailable.js +11 -11
  192. package/dist/components/renderer/attachments/ProgressBar.d.ts +8 -6
  193. package/dist/components/renderer/attachments/ProgressBar.js +33 -12
  194. package/dist/components/renderer/attachments/ProgressBar.js.map +1 -1
  195. package/dist/components/renderer/attachments/UploadingAttachment.d.ts +4 -0
  196. package/dist/components/renderer/attachments/UploadingAttachment.js +13 -0
  197. package/dist/components/renderer/attachments/UploadingAttachment.js.map +1 -0
  198. package/dist/form-elements/ComplianceButton.d.ts +10 -10
  199. package/dist/form-elements/ComplianceButton.js +11 -11
  200. package/dist/form-elements/FormElementABN.d.ts +14 -14
  201. package/dist/form-elements/FormElementABN.js +155 -155
  202. package/dist/form-elements/FormElementAutocomplete.d.ts +19 -19
  203. package/dist/form-elements/FormElementAutocomplete.js +81 -81
  204. package/dist/form-elements/FormElementBSB.d.ts +18 -18
  205. package/dist/form-elements/FormElementBSB.js +100 -100
  206. package/dist/form-elements/FormElementBarcodeScanner.d.ts +14 -14
  207. package/dist/form-elements/FormElementBarcodeScanner.js +306 -306
  208. package/dist/form-elements/FormElementBoolean.d.ts +14 -14
  209. package/dist/form-elements/FormElementBoolean.js +16 -16
  210. package/dist/form-elements/FormElementCalculation.d.ts +11 -11
  211. package/dist/form-elements/FormElementCalculation.js +179 -179
  212. package/dist/form-elements/FormElementCamera.d.ts +15 -15
  213. package/dist/form-elements/FormElementCamera.js +227 -226
  214. package/dist/form-elements/FormElementCamera.js.map +1 -1
  215. package/dist/form-elements/FormElementCaptcha.d.ts +12 -12
  216. package/dist/form-elements/FormElementCaptcha.js +14 -14
  217. package/dist/form-elements/FormElementCheckBoxes.d.ts +15 -15
  218. package/dist/form-elements/FormElementCheckBoxes.js +64 -64
  219. package/dist/form-elements/FormElementCivicaNameRecord.d.ts +8 -8
  220. package/dist/form-elements/FormElementCivicaNameRecord.js +51 -51
  221. package/dist/form-elements/FormElementCivicaStreetName.d.ts +15 -15
  222. package/dist/form-elements/FormElementCivicaStreetName.js +38 -38
  223. package/dist/form-elements/FormElementCompliance.d.ts +22 -22
  224. package/dist/form-elements/FormElementCompliance.js +129 -129
  225. package/dist/form-elements/FormElementDate.d.ts +14 -14
  226. package/dist/form-elements/FormElementDate.js +74 -74
  227. package/dist/form-elements/FormElementDateTime.d.ts +14 -14
  228. package/dist/form-elements/FormElementDateTime.js +67 -67
  229. package/dist/form-elements/FormElementEmail.d.ts +14 -14
  230. package/dist/form-elements/FormElementEmail.js +22 -22
  231. package/dist/form-elements/FormElementFile.d.ts +13 -13
  232. package/dist/form-elements/FormElementFile.js +31 -31
  233. package/dist/form-elements/FormElementFiles/FormElementFile.d.ts +13 -0
  234. package/dist/form-elements/FormElementFiles/FormElementFile.js +32 -0
  235. package/dist/form-elements/FormElementFiles/FormElementFile.js.map +1 -0
  236. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.d.ts +10 -0
  237. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.js +11 -0
  238. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.js.map +1 -0
  239. package/dist/form-elements/FormElementFiles/FormElementFiles.d.ts +15 -0
  240. package/dist/form-elements/FormElementFiles/FormElementFiles.js +17 -0
  241. package/dist/form-elements/FormElementFiles/FormElementFiles.js.map +1 -0
  242. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.d.ts +7 -0
  243. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.js +11 -0
  244. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.js.map +1 -0
  245. package/dist/form-elements/FormElementFiles/index.d.ts +17 -0
  246. package/dist/form-elements/FormElementFiles/index.js +18 -0
  247. package/dist/form-elements/FormElementFiles/index.js.map +1 -0
  248. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.d.ts +18 -0
  249. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js +61 -0
  250. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js.map +1 -0
  251. package/dist/form-elements/FormElementFiles.d.ts +15 -15
  252. package/dist/form-elements/FormElementFiles.js +42 -42
  253. package/dist/form-elements/FormElementForm.d.ts +17 -17
  254. package/dist/form-elements/FormElementForm.js +63 -63
  255. package/dist/form-elements/FormElementFreshdeskDependentField.d.ts +8 -8
  256. package/dist/form-elements/FormElementFreshdeskDependentField.js +15 -15
  257. package/dist/form-elements/FormElementGeoscapeAddress.d.ts +15 -15
  258. package/dist/form-elements/FormElementGeoscapeAddress.js +62 -62
  259. package/dist/form-elements/FormElementHTML.d.ts +8 -8
  260. package/dist/form-elements/FormElementHTML.js +15 -15
  261. package/dist/form-elements/FormElementHeading.d.ts +8 -8
  262. package/dist/form-elements/FormElementHeading.js +23 -23
  263. package/dist/form-elements/FormElementImage.d.ts +8 -8
  264. package/dist/form-elements/FormElementImage.js +6 -6
  265. package/dist/form-elements/FormElementLocation.d.ts +20 -20
  266. package/dist/form-elements/FormElementLocation.js +204 -204
  267. package/dist/form-elements/FormElementNumber.d.ts +14 -14
  268. package/dist/form-elements/FormElementNumber.js +72 -72
  269. package/dist/form-elements/FormElementPointAddress.d.ts +15 -15
  270. package/dist/form-elements/FormElementPointAddress.js +69 -69
  271. package/dist/form-elements/FormElementRadio.d.ts +15 -15
  272. package/dist/form-elements/FormElementRadio.js +41 -41
  273. package/dist/form-elements/FormElementRepeatableSet.d.ts +19 -19
  274. package/dist/form-elements/FormElementRepeatableSet.js +126 -126
  275. package/dist/form-elements/FormElementSection.d.ts +8 -8
  276. package/dist/form-elements/FormElementSection.js +69 -69
  277. package/dist/form-elements/FormElementSelect.d.ts +15 -15
  278. package/dist/form-elements/FormElementSelect.js +44 -44
  279. package/dist/form-elements/FormElementSignature.d.ts +15 -15
  280. package/dist/form-elements/FormElementSignature.js +138 -140
  281. package/dist/form-elements/FormElementSignature.js.map +1 -1
  282. package/dist/form-elements/FormElementSummary.d.ts +11 -11
  283. package/dist/form-elements/FormElementSummary.js +159 -159
  284. package/dist/form-elements/FormElementTelephone.d.ts +14 -14
  285. package/dist/form-elements/FormElementTelephone.js +22 -22
  286. package/dist/form-elements/FormElementText.d.ts +14 -14
  287. package/dist/form-elements/FormElementText.js +29 -29
  288. package/dist/form-elements/FormElementTextarea.d.ts +14 -14
  289. package/dist/form-elements/FormElementTextarea.js +30 -30
  290. package/dist/form-elements/FormElementTime.d.ts +14 -14
  291. package/dist/form-elements/FormElementTime.js +53 -53
  292. package/dist/form-elements/OptionButton.d.ts +11 -11
  293. package/dist/form-elements/OptionButton.js +9 -9
  294. package/dist/hooks/attachments/useAttachment.d.ts +12 -12
  295. package/dist/hooks/attachments/useAttachment.js +242 -242
  296. package/dist/hooks/attachments/useAttachmentBlobs.d.ts +19 -19
  297. package/dist/hooks/attachments/useAttachmentBlobs.js +23 -23
  298. package/dist/hooks/attachments/useAttachmentObjectURLs.d.ts +24 -0
  299. package/dist/hooks/attachments/useAttachmentObjectURLs.js +37 -0
  300. package/dist/hooks/attachments/useAttachmentObjectURLs.js.map +1 -0
  301. package/dist/hooks/attachments/useAttachments.d.ts +10 -10
  302. package/dist/hooks/attachments/useAttachments.js +69 -69
  303. package/dist/hooks/attachments/useLocalAttachmentBlobs.d.ts +24 -0
  304. package/dist/hooks/attachments/useLocalAttachmentBlobs.js +40 -0
  305. package/dist/hooks/attachments/useLocalAttachmentBlobs.js.map +1 -0
  306. package/dist/hooks/useAbnLookupAuthenticationGuid.d.ts +3 -3
  307. package/dist/hooks/useAbnLookupAuthenticationGuid.js +5 -5
  308. package/dist/hooks/useAuth.d.ts +15 -15
  309. package/dist/hooks/useAuth.js +42 -42
  310. package/dist/hooks/useBooleanState.d.ts +5 -5
  311. package/dist/hooks/useBooleanState.js +8 -8
  312. package/dist/hooks/useButtonsConfiguration.d.ts +45 -0
  313. package/dist/hooks/useButtonsConfiguration.js +6 -0
  314. package/dist/hooks/useButtonsConfiguration.js.map +1 -0
  315. package/dist/hooks/useCaptchaSiteKey.d.ts +3 -3
  316. package/dist/hooks/useCaptchaSiteKey.js +5 -5
  317. package/dist/hooks/useChangeEffect.d.ts +1 -0
  318. package/dist/hooks/useChangeEffect.js +14 -0
  319. package/dist/hooks/useChangeEffect.js.map +1 -0
  320. package/dist/hooks/useClickOutsideElement.d.ts +3 -3
  321. package/dist/hooks/useClickOutsideElement.js +14 -14
  322. package/dist/hooks/useConditionalLogic.d.ts +6 -6
  323. package/dist/hooks/useConditionalLogic.js +22 -22
  324. package/dist/hooks/useConditionallyShowOptionCallback.d.ts +5 -0
  325. package/dist/hooks/useConditionallyShowOptionCallback.js +20 -0
  326. package/dist/hooks/useConditionallyShowOptionCallback.js.map +1 -0
  327. package/dist/hooks/useContrastColor.d.ts +2 -2
  328. package/dist/hooks/useContrastColor.js +12 -12
  329. package/dist/hooks/useCustomValidation.d.ts +1 -0
  330. package/dist/hooks/useCustomValidation.js +9 -0
  331. package/dist/hooks/useCustomValidation.js.map +1 -0
  332. package/dist/hooks/useDynamicOptionsLoaderEffect.d.ts +7 -0
  333. package/dist/hooks/useDynamicOptionsLoaderEffect.js +45 -0
  334. package/dist/hooks/useDynamicOptionsLoaderEffect.js.map +1 -0
  335. package/dist/hooks/useDynamicOptionsLoaderState.d.ts +7 -7
  336. package/dist/hooks/useDynamicOptionsLoaderState.js +44 -44
  337. package/dist/hooks/useExecutedLookupCallback.d.ts +12 -12
  338. package/dist/hooks/useExecutedLookupCallback.js +15 -15
  339. package/dist/hooks/useFlatpickr.d.ts +10 -10
  340. package/dist/hooks/useFlatpickr.js +73 -73
  341. package/dist/hooks/useFlatpickrGuid.d.ts +7 -7
  342. package/dist/hooks/useFlatpickrGuid.js +11 -11
  343. package/dist/hooks/useFlattenElementsContext.d.ts +2 -2
  344. package/dist/hooks/useFlattenElementsContext.js +7 -7
  345. package/dist/hooks/useFormDefinition.d.ts +4 -4
  346. package/dist/hooks/useFormDefinition.js +9 -9
  347. package/dist/hooks/useFormElementOptions.d.ts +9 -9
  348. package/dist/hooks/useFormElementOptions.js +35 -35
  349. package/dist/hooks/useFormIsReadOnly.d.ts +3 -3
  350. package/dist/hooks/useFormIsReadOnly.js +5 -5
  351. package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +24 -24
  352. package/dist/hooks/useFormSubmissionAutoSaveState.js +145 -145
  353. package/dist/hooks/useFormSubmissionModelContext.d.ts +15 -15
  354. package/dist/hooks/useFormSubmissionModelContext.js +32 -32
  355. package/dist/hooks/useFormSubmissionState.d.ts +10 -10
  356. package/dist/hooks/useFormSubmissionState.js +13 -13
  357. package/dist/hooks/useFormValidation.d.ts +7 -7
  358. package/dist/hooks/useFormValidation.js +29 -29
  359. package/dist/hooks/useGoogleMapsApiKey.d.ts +3 -3
  360. package/dist/hooks/useGoogleMapsApiKey.js +5 -5
  361. package/dist/hooks/useInfiniteScrollDataLoad.d.ts +30 -30
  362. package/dist/hooks/useInfiniteScrollDataLoad.js +124 -124
  363. package/dist/hooks/useInjectPages.d.ts +7 -7
  364. package/dist/hooks/useInjectPages.js +5 -5
  365. package/dist/hooks/useIsHovering.d.ts +5 -5
  366. package/dist/hooks/useIsHovering.js +12 -12
  367. package/dist/hooks/useIsMounted.d.ts +3 -3
  368. package/dist/hooks/useIsMounted.js +11 -11
  369. package/dist/hooks/useIsOffline.d.ts +6 -6
  370. package/dist/hooks/useIsOffline.js +26 -26
  371. package/dist/hooks/useIsPageVisible.d.ts +9 -9
  372. package/dist/hooks/useIsPageVisible.js +8 -8
  373. package/dist/hooks/useLegacyElements.d.ts +16 -0
  374. package/dist/hooks/useLegacyElements.js +55 -0
  375. package/dist/hooks/useLegacyElements.js.map +1 -0
  376. package/dist/hooks/useLoadDataState.d.ts +15 -15
  377. package/dist/hooks/useLoadDataState.js +54 -54
  378. package/dist/hooks/useLogin.d.ts +46 -46
  379. package/dist/hooks/useLogin.js +295 -295
  380. package/dist/hooks/useLookupNotification.d.ts +9 -9
  381. package/dist/hooks/useLookupNotification.js +10 -10
  382. package/dist/hooks/useLookups.d.ts +5 -5
  383. package/dist/hooks/useLookups.js +62 -62
  384. package/dist/hooks/useNullableState.d.ts +2 -2
  385. package/dist/hooks/useNullableState.js +6 -6
  386. package/dist/hooks/usePages.d.ts +24 -24
  387. package/dist/hooks/usePages.js +141 -141
  388. package/dist/hooks/useQuery.d.ts +2 -2
  389. package/dist/hooks/useQuery.js +7 -7
  390. package/dist/hooks/useSubmissionIdIsValid.d.ts +3 -3
  391. package/dist/hooks/useSubmissionIdIsValid.js +19 -19
  392. package/dist/hooks/useToggleAll.d.ts +6 -0
  393. package/dist/hooks/useToggleAll.js +24 -0
  394. package/dist/hooks/useToggleAll.js.map +1 -0
  395. package/dist/hooks/useToggleComplianceChildren.d.ts +3 -3
  396. package/dist/hooks/useToggleComplianceChildren.js +13 -13
  397. package/dist/index.d.ts +23 -23
  398. package/dist/index.js +23 -23
  399. package/dist/services/attachments.d.ts +10 -10
  400. package/dist/services/attachments.js +72 -72
  401. package/dist/services/barcode-readers/quagger.d.ts +1 -1
  402. package/dist/services/barcode-readers/quagger.js +34 -34
  403. package/dist/services/blob-utils.d.ts +5 -5
  404. package/dist/services/blob-utils.js +73 -73
  405. package/dist/services/checkBsbsAreInvalid.d.ts +3 -3
  406. package/dist/services/checkBsbsAreInvalid.js +40 -40
  407. package/dist/services/checkIfAttachmentsAreUploading.d.ts +3 -3
  408. package/dist/services/checkIfAttachmentsAreUploading.js +57 -57
  409. package/dist/services/checkIfAttachmentsExist.d.ts +5 -5
  410. package/dist/services/checkIfAttachmentsExist.js +144 -144
  411. package/dist/services/checkIfBsbsAreValidating.d.ts +3 -3
  412. package/dist/services/checkIfBsbsAreValidating.js +40 -40
  413. package/dist/services/clean-form-elements-ctrl-model.d.ts +4 -0
  414. package/dist/services/clean-form-elements-ctrl-model.js +166 -0
  415. package/dist/services/clean-form-elements-ctrl-model.js.map +1 -0
  416. package/dist/services/cleanFormSubmissionModel.d.ts +6 -6
  417. package/dist/services/cleanFormSubmissionModel.js +203 -203
  418. package/dist/services/conditionally-show-element.d.ts +11 -0
  419. package/dist/services/conditionally-show-element.js +92 -0
  420. package/dist/services/conditionally-show-element.js.map +1 -0
  421. package/dist/services/conditionally-show-option.d.ts +3 -0
  422. package/dist/services/conditionally-show-option.js +135 -0
  423. package/dist/services/conditionally-show-option.js.map +1 -0
  424. package/dist/services/defaultCoordinates.d.ts +5 -5
  425. package/dist/services/defaultCoordinates.js +8 -8
  426. package/dist/services/download-file.d.ts +3 -3
  427. package/dist/services/download-file.js +90 -90
  428. package/dist/services/drawTimestampOnCanvas.d.ts +1 -1
  429. package/dist/services/drawTimestampOnCanvas.js +22 -22
  430. package/dist/services/flattenFormElements.d.ts +2 -0
  431. package/dist/services/flattenFormElements.js +13 -0
  432. package/dist/services/flattenFormElements.js.map +1 -0
  433. package/dist/services/form-validation.d.ts +10 -10
  434. package/dist/services/form-validation.js +561 -561
  435. package/dist/services/generate-default-data.d.ts +13 -13
  436. package/dist/services/generate-default-data.js +494 -494
  437. package/dist/services/generateCivicaNameRecordElements.d.ts +2 -2
  438. package/dist/services/generateCivicaNameRecordElements.js +140 -140
  439. package/dist/services/generateFreshdeskDependentFieldElements.d.ts +2 -2
  440. package/dist/services/generateFreshdeskDependentFieldElements.js +69 -69
  441. package/dist/services/getCorrectDateFromDateOnlyString.d.ts +2 -0
  442. package/dist/services/getCorrectDateFromDateOnlyString.js +4 -0
  443. package/dist/services/getCorrectDateFromDateOnlyString.js.map +1 -0
  444. package/dist/services/sanitize-html.d.ts +2 -2
  445. package/dist/services/sanitize-html.js +20 -20
  446. package/dist/services/scrolling-service.d.ts +7 -7
  447. package/dist/services/scrolling-service.js +38 -38
  448. package/dist/services/utils-service.d.ts +5 -5
  449. package/dist/services/utils-service.js +16 -16
  450. package/dist/styles/boolean.scss +12 -0
  451. package/dist/styles/ob-file.scss +63 -0
  452. package/dist/styles/progress.scss +0 -7
  453. package/dist/styles.css +0 -7
  454. package/dist/styles.css.map +1 -1
  455. package/dist/types/attachments.d.ts +19 -19
  456. package/dist/types/attachments.js +1 -1
  457. package/dist/types/form.d.ts +40 -40
  458. package/dist/types/form.js +2 -2
  459. package/package.json +1 -1
@@ -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