@oneblink/apps-react 8.14.0 → 9.0.0-beta.10

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 (661) hide show
  1. package/dist/OneBlinkAutoSaveForm.d.ts +1 -1
  2. package/dist/OneBlinkAutoSaveForm.js +6 -8
  3. package/dist/OneBlinkAutoSaveForm.js.map +1 -1
  4. package/dist/OneBlinkForm.d.ts +6 -10
  5. package/dist/OneBlinkForm.js +3 -6
  6. package/dist/OneBlinkForm.js.map +1 -1
  7. package/dist/OneBlinkFormBase.d.ts +2 -2
  8. package/dist/OneBlinkFormBase.js +51 -147
  9. package/dist/OneBlinkFormBase.js.map +1 -1
  10. package/dist/OneBlinkReadOnlyForm.d.ts +2 -2
  11. package/dist/OneBlinkReadOnlyForm.js +3 -2
  12. package/dist/OneBlinkReadOnlyForm.js.map +1 -1
  13. package/dist/PaymentReceipt.d.ts +2 -2
  14. package/dist/PaymentReceipt.js +12 -33
  15. package/dist/PaymentReceipt.js.map +1 -1
  16. package/dist/apps/Sentry.d.ts +7 -0
  17. package/dist/apps/Sentry.js +16 -0
  18. package/dist/apps/Sentry.js.map +1 -0
  19. package/dist/apps/approvals-service.d.ts +390 -0
  20. package/dist/apps/approvals-service.js +987 -0
  21. package/dist/apps/approvals-service.js.map +1 -0
  22. package/dist/apps/attachments-service.d.ts +49 -0
  23. package/dist/apps/attachments-service.js +134 -0
  24. package/dist/apps/attachments-service.js.map +1 -0
  25. package/dist/apps/auth-service.d.ts +114 -0
  26. package/dist/apps/auth-service.js +194 -0
  27. package/dist/apps/auth-service.js.map +1 -0
  28. package/dist/apps/auto-save-service.d.ts +82 -0
  29. package/dist/apps/auto-save-service.js +105 -0
  30. package/dist/apps/auto-save-service.js.map +1 -0
  31. package/dist/apps/draft-service.d.ts +148 -0
  32. package/dist/apps/draft-service.js +583 -0
  33. package/dist/apps/draft-service.js.map +1 -0
  34. package/dist/apps/form-service.d.ts +204 -0
  35. package/dist/apps/form-service.js +718 -0
  36. package/dist/apps/form-service.js.map +1 -0
  37. package/dist/apps/form-store-service.d.ts +141 -0
  38. package/dist/apps/form-store-service.js +114 -0
  39. package/dist/apps/form-store-service.js.map +1 -0
  40. package/dist/apps/forms-app-environment-service.d.ts +19 -0
  41. package/dist/apps/forms-app-environment-service.js +55 -0
  42. package/dist/apps/forms-app-environment-service.js.map +1 -0
  43. package/dist/apps/forms-app-service.d.ts +18 -0
  44. package/dist/apps/forms-app-service.js +53 -0
  45. package/dist/apps/forms-app-service.js.map +1 -0
  46. package/dist/apps/index.d.ts +253 -0
  47. package/dist/apps/index.js +255 -0
  48. package/dist/apps/index.js.map +1 -0
  49. package/dist/apps/job-service.d.ts +20 -0
  50. package/dist/apps/job-service.js +95 -0
  51. package/dist/apps/job-service.js.map +1 -0
  52. package/dist/apps/localisation-service.d.ts +207 -0
  53. package/dist/apps/localisation-service.js +321 -0
  54. package/dist/apps/localisation-service.js.map +1 -0
  55. package/dist/apps/notification-service.d.ts +83 -0
  56. package/dist/apps/notification-service.js +315 -0
  57. package/dist/apps/notification-service.js.map +1 -0
  58. package/dist/apps/offline-service.d.ts +18 -0
  59. package/dist/apps/offline-service.js +25 -0
  60. package/dist/apps/offline-service.js.map +1 -0
  61. package/dist/apps/payment-service.d.ts +110 -0
  62. package/dist/apps/payment-service.js +182 -0
  63. package/dist/apps/payment-service.js.map +1 -0
  64. package/dist/apps/prefill-service.d.ts +14 -0
  65. package/dist/apps/prefill-service.js +19 -0
  66. package/dist/apps/prefill-service.js.map +1 -0
  67. package/dist/apps/scheduled-tasks-service.d.ts +127 -0
  68. package/dist/apps/scheduled-tasks-service.js +240 -0
  69. package/dist/apps/scheduled-tasks-service.js.map +1 -0
  70. package/dist/apps/scheduling-service.d.ts +101 -0
  71. package/dist/apps/scheduling-service.js +171 -0
  72. package/dist/apps/scheduling-service.js.map +1 -0
  73. package/dist/apps/services/AWSCognitoClient.d.ts +55 -0
  74. package/dist/apps/services/AWSCognitoClient.js +436 -0
  75. package/dist/apps/services/AWSCognitoClient.js.map +1 -0
  76. package/dist/apps/services/api/drafts.d.ts +7 -0
  77. package/dist/apps/services/api/drafts.js +236 -0
  78. package/dist/apps/services/api/drafts.js.map +1 -0
  79. package/dist/apps/services/api/notifications.d.ts +3 -0
  80. package/dist/apps/services/api/notifications.js +60 -0
  81. package/dist/apps/services/api/notifications.js.map +1 -0
  82. package/dist/apps/services/api/payment.d.ts +23 -0
  83. package/dist/apps/services/api/payment.js +235 -0
  84. package/dist/apps/services/api/payment.js.map +1 -0
  85. package/dist/apps/services/api/post-submission-attachment-urls.d.ts +7 -0
  86. package/dist/apps/services/api/post-submission-attachment-urls.js +19 -0
  87. package/dist/apps/services/api/post-submission-attachment-urls.js.map +1 -0
  88. package/dist/apps/services/api/prefill.d.ts +1 -0
  89. package/dist/apps/services/api/prefill.js +70 -0
  90. package/dist/apps/services/api/prefill.js.map +1 -0
  91. package/dist/apps/services/api/receipt-id.d.ts +2 -0
  92. package/dist/apps/services/api/receipt-id.js +54 -0
  93. package/dist/apps/services/api/receipt-id.js.map +1 -0
  94. package/dist/apps/services/api/scheduling.d.ts +38 -0
  95. package/dist/apps/services/api/scheduling.js +142 -0
  96. package/dist/apps/services/api/scheduling.js.map +1 -0
  97. package/dist/apps/services/api/submissions.d.ts +18 -0
  98. package/dist/apps/services/api/submissions.js +166 -0
  99. package/dist/apps/services/api/submissions.js.map +1 -0
  100. package/dist/apps/services/cognito.d.ts +302 -0
  101. package/dist/apps/services/cognito.js +441 -0
  102. package/dist/apps/services/cognito.js.map +1 -0
  103. package/dist/apps/services/draft-data-store.d.ts +16 -0
  104. package/dist/apps/services/draft-data-store.js +115 -0
  105. package/dist/apps/services/draft-data-store.js.map +1 -0
  106. package/dist/apps/services/errors/oneBlinkAppsError.d.ts +35 -0
  107. package/dist/apps/services/errors/oneBlinkAppsError.js +32 -0
  108. package/dist/apps/services/errors/oneBlinkAppsError.js.map +1 -0
  109. package/dist/apps/services/external-id-generation.d.ts +4 -0
  110. package/dist/apps/services/external-id-generation.js +59 -0
  111. package/dist/apps/services/external-id-generation.js.map +1 -0
  112. package/dist/apps/services/fetch.d.ts +12 -0
  113. package/dist/apps/services/fetch.js +95 -0
  114. package/dist/apps/services/fetch.js.map +1 -0
  115. package/dist/apps/services/forms-key.d.ts +51 -0
  116. package/dist/apps/services/forms-key.js +83 -0
  117. package/dist/apps/services/forms-key.js.map +1 -0
  118. package/dist/apps/services/generate-generic-error.d.ts +3 -0
  119. package/dist/apps/services/generate-generic-error.js +52 -0
  120. package/dist/apps/services/generate-generic-error.js.map +1 -0
  121. package/dist/apps/services/generateOneBlinkDownloader.d.ts +2 -0
  122. package/dist/apps/services/generateOneBlinkDownloader.js +11 -0
  123. package/dist/apps/services/generateOneBlinkDownloader.js.map +1 -0
  124. package/dist/apps/services/generateOneBlinkUploader.d.ts +2 -0
  125. package/dist/apps/services/generateOneBlinkUploader.js +11 -0
  126. package/dist/apps/services/generateOneBlinkUploader.js.map +1 -0
  127. package/dist/apps/services/getDeviceInformation.d.ts +17 -0
  128. package/dist/apps/services/getDeviceInformation.js +38 -0
  129. package/dist/apps/services/getDeviceInformation.js.map +1 -0
  130. package/dist/apps/services/integration-elements.d.ts +383 -0
  131. package/dist/apps/services/integration-elements.js +761 -0
  132. package/dist/apps/services/integration-elements.js.map +1 -0
  133. package/dist/apps/services/job-prefill.d.ts +40 -0
  134. package/dist/apps/services/job-prefill.js +78 -0
  135. package/dist/apps/services/job-prefill.js.map +1 -0
  136. package/dist/apps/services/payment-providers/BPOINTPaymentProvider.d.ts +29 -0
  137. package/dist/apps/services/payment-providers/BPOINTPaymentProvider.js +59 -0
  138. package/dist/apps/services/payment-providers/BPOINTPaymentProvider.js.map +1 -0
  139. package/dist/apps/services/payment-providers/CPPayPaymentProvider.d.ts +27 -0
  140. package/dist/apps/services/payment-providers/CPPayPaymentProvider.js +63 -0
  141. package/dist/apps/services/payment-providers/CPPayPaymentProvider.js.map +1 -0
  142. package/dist/apps/services/payment-providers/NSWGovPayPaymentProvider.d.ts +30 -0
  143. package/dist/apps/services/payment-providers/NSWGovPayPaymentProvider.js +116 -0
  144. package/dist/apps/services/payment-providers/NSWGovPayPaymentProvider.js.map +1 -0
  145. package/dist/apps/services/payment-providers/WestpacQuickStreamPaymentProvider.d.ts +49 -0
  146. package/dist/apps/services/payment-providers/WestpacQuickStreamPaymentProvider.js +116 -0
  147. package/dist/apps/services/payment-providers/WestpacQuickStreamPaymentProvider.js.map +1 -0
  148. package/dist/apps/services/payment-providers/receipt-items.d.ts +8 -0
  149. package/dist/apps/services/payment-providers/receipt-items.js +58 -0
  150. package/dist/apps/services/payment-providers/receipt-items.js.map +1 -0
  151. package/dist/apps/services/pending-queue.d.ts +150 -0
  152. package/dist/apps/services/pending-queue.js +316 -0
  153. package/dist/apps/services/pending-queue.js.map +1 -0
  154. package/dist/apps/services/prepareSubmissionData.d.ts +2 -0
  155. package/dist/apps/services/prepareSubmissionData.js +113 -0
  156. package/dist/apps/services/prepareSubmissionData.js.map +1 -0
  157. package/dist/apps/services/query-string.d.ts +1 -0
  158. package/dist/apps/services/query-string.js +16 -0
  159. package/dist/apps/services/query-string.js.map +1 -0
  160. package/dist/apps/services/replaceInjectablesWithSubmissionValues.d.ts +3 -0
  161. package/dist/apps/services/replaceInjectablesWithSubmissionValues.js +18 -0
  162. package/dist/apps/services/replaceInjectablesWithSubmissionValues.js.map +1 -0
  163. package/dist/apps/services/schedulingHandlers.d.ts +36 -0
  164. package/dist/apps/services/schedulingHandlers.js +76 -0
  165. package/dist/apps/services/schedulingHandlers.js.map +1 -0
  166. package/dist/apps/services/server-validation.d.ts +2 -0
  167. package/dist/apps/services/server-validation.js +36 -0
  168. package/dist/apps/services/server-validation.js.map +1 -0
  169. package/dist/apps/services/serverRequest.d.ts +5 -0
  170. package/dist/apps/services/serverRequest.js +24 -0
  171. package/dist/apps/services/serverRequest.js.map +1 -0
  172. package/dist/apps/services/submit.d.ts +19 -0
  173. package/dist/apps/services/submit.js +219 -0
  174. package/dist/apps/services/submit.js.map +1 -0
  175. package/dist/apps/services/uploadAttachment.d.ts +52 -0
  176. package/dist/apps/services/uploadAttachment.js +73 -0
  177. package/dist/apps/services/uploadAttachment.js.map +1 -0
  178. package/dist/apps/services/user-token.d.ts +27 -0
  179. package/dist/apps/services/user-token.js +33 -0
  180. package/dist/apps/services/user-token.js.map +1 -0
  181. package/dist/apps/services/utils.d.ts +12 -0
  182. package/dist/apps/services/utils.js +100 -0
  183. package/dist/apps/services/utils.js.map +1 -0
  184. package/dist/apps/submission-service.d.ts +226 -0
  185. package/dist/apps/submission-service.js +425 -0
  186. package/dist/apps/submission-service.js.map +1 -0
  187. package/dist/apps/tenants.d.ts +30 -0
  188. package/dist/apps/tenants.js +155 -0
  189. package/dist/apps/tenants.js.map +1 -0
  190. package/dist/apps/types/form.d.ts +4 -0
  191. package/dist/apps/types/form.js +2 -0
  192. package/dist/apps/types/form.js.map +1 -0
  193. package/dist/apps/types/payments.d.ts +45 -0
  194. package/dist/apps/types/payments.js +2 -0
  195. package/dist/apps/types/payments.js.map +1 -0
  196. package/dist/apps/types/scheduling.d.ts +5 -0
  197. package/dist/apps/types/scheduling.js +2 -0
  198. package/dist/apps/types/scheduling.js.map +1 -0
  199. package/dist/apps/types/submissions.d.ts +175 -0
  200. package/dist/apps/types/submissions.js +2 -0
  201. package/dist/apps/types/submissions.js.map +1 -0
  202. package/dist/components/ArcGISWebMap.d.ts +3 -3
  203. package/dist/components/ArcGISWebMap.js +29 -39
  204. package/dist/components/ArcGISWebMap.js.map +1 -1
  205. package/dist/components/Clickable.d.ts +1 -1
  206. package/dist/components/Clickable.js +2 -1
  207. package/dist/components/Clickable.js.map +1 -1
  208. package/dist/components/ConfirmDialog.d.ts +2 -2
  209. package/dist/components/ConfirmDialog.js +8 -14
  210. package/dist/components/ConfirmDialog.js.map +1 -1
  211. package/dist/components/CopyToClipboardIconButton.d.ts +1 -1
  212. package/dist/components/CopyToClipboardIconButton.js +10 -14
  213. package/dist/components/CopyToClipboardIconButton.js.map +1 -1
  214. package/dist/components/CustomAccordion.d.ts +2 -19
  215. package/dist/components/ErrorSnackbar.d.ts +1 -1
  216. package/dist/components/ErrorSnackbar.js +6 -7
  217. package/dist/components/ErrorSnackbar.js.map +1 -1
  218. package/dist/components/ImageCropper/CropModal.d.ts +1 -1
  219. package/dist/components/ImageCropper/CropModal.js +2 -8
  220. package/dist/components/ImageCropper/CropModal.js.map +1 -1
  221. package/dist/components/ImageCropper/index.d.ts +1 -1
  222. package/dist/components/ImageCropper/index.js +3 -5
  223. package/dist/components/ImageCropper/index.js.map +1 -1
  224. package/dist/components/InputClear.js +2 -3
  225. package/dist/components/InputClear.js.map +1 -1
  226. package/dist/components/InputField.d.ts +3 -2
  227. package/dist/components/InputField.js +5 -2
  228. package/dist/components/InputField.js.map +1 -1
  229. package/dist/components/Lists.d.ts +1 -3
  230. package/dist/components/Lists.js +2 -2
  231. package/dist/components/Lists.js.map +1 -1
  232. package/dist/components/LoadingWithMessage.js +2 -6
  233. package/dist/components/LoadingWithMessage.js.map +1 -1
  234. package/dist/components/MaterialIcon.d.ts +2 -4
  235. package/dist/components/MaterialIcon.js +4 -4
  236. package/dist/components/MaterialIcon.js.map +1 -1
  237. package/dist/components/NotificationGrid.d.ts +2 -2
  238. package/dist/components/NotificationGrid.js +4 -7
  239. package/dist/components/NotificationGrid.js.map +1 -1
  240. package/dist/components/QuillHTML.d.ts +1 -1
  241. package/dist/components/QuillHTML.js +2 -1
  242. package/dist/components/QuillHTML.js.map +1 -1
  243. package/dist/components/SuccessSnackbar.d.ts +1 -1
  244. package/dist/components/SuccessSnackbar.js +3 -6
  245. package/dist/components/SuccessSnackbar.js.map +1 -1
  246. package/dist/components/ValidationErrorsCard.d.ts +2 -2
  247. package/dist/components/ValidationErrorsCard.js +32 -49
  248. package/dist/components/ValidationErrorsCard.js.map +1 -1
  249. package/dist/components/calendar-bookings/CalendarBookingsCancelForm.d.ts +1 -1
  250. package/dist/components/calendar-bookings/CalendarBookingsCancelForm.js +6 -7
  251. package/dist/components/calendar-bookings/CalendarBookingsCancelForm.js.map +1 -1
  252. package/dist/components/calendar-bookings/CalendarBookingsContainer.d.ts +1 -1
  253. package/dist/components/calendar-bookings/CalendarBookingsContainer.js +9 -11
  254. package/dist/components/calendar-bookings/CalendarBookingsContainer.js.map +1 -1
  255. package/dist/components/calendar-bookings/CalendarBookingsForm.d.ts +2 -2
  256. package/dist/components/calendar-bookings/CalendarBookingsForm.js +34 -46
  257. package/dist/components/calendar-bookings/CalendarBookingsForm.js.map +1 -1
  258. package/dist/components/calendar-bookings/CalendarBookingsProvider.d.ts +1 -1
  259. package/dist/components/calendar-bookings/CalendarBookingsProvider.js +2 -6
  260. package/dist/components/calendar-bookings/CalendarBookingsProvider.js.map +1 -1
  261. package/dist/components/calendar-bookings/CalendarBookingsReschedulingForm.d.ts +1 -1
  262. package/dist/components/calendar-bookings/CalendarBookingsReschedulingForm.js +6 -7
  263. package/dist/components/calendar-bookings/CalendarBookingsReschedulingForm.js.map +1 -1
  264. package/dist/components/calendar-bookings/ErrorModal.d.ts +1 -1
  265. package/dist/components/calendar-bookings/ErrorModal.js +8 -12
  266. package/dist/components/calendar-bookings/ErrorModal.js.map +1 -1
  267. package/dist/components/downloadable-files/LayoutProvider.d.ts +1 -1
  268. package/dist/components/downloadable-files/LayoutProvider.js +2 -1
  269. package/dist/components/downloadable-files/LayoutProvider.js.map +1 -1
  270. package/dist/components/downloadable-files/index.d.ts +2 -2
  271. package/dist/components/downloadable-files/index.js +4 -6
  272. package/dist/components/downloadable-files/index.js.map +1 -1
  273. package/dist/components/downloadable-files/resource-components.d.ts +4 -4
  274. package/dist/components/downloadable-files/resource-components.js +10 -33
  275. package/dist/components/downloadable-files/resource-components.js.map +1 -1
  276. package/dist/components/formStore/FormStoreTableProvider.d.ts +1 -1
  277. package/dist/components/formStore/FormStoreTableProvider.js +6 -16
  278. package/dist/components/formStore/FormStoreTableProvider.js.map +1 -1
  279. package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.d.ts +1 -1
  280. package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.js +3 -4
  281. package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.js.map +1 -1
  282. package/dist/components/formStore/OneBlinkFormStoreColumnsButton.d.ts +1 -1
  283. package/dist/components/formStore/OneBlinkFormStoreColumnsButton.js +21 -54
  284. package/dist/components/formStore/OneBlinkFormStoreColumnsButton.js.map +1 -1
  285. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.d.ts +2 -2
  286. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js +8 -27
  287. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js.map +1 -1
  288. package/dist/components/formStore/OneBlinkFormStoreProvider.d.ts +1 -1
  289. package/dist/components/formStore/OneBlinkFormStoreProvider.js +5 -6
  290. package/dist/components/formStore/OneBlinkFormStoreProvider.js.map +1 -1
  291. package/dist/components/formStore/OneBlinkFormStoreRefreshButton.d.ts +1 -1
  292. package/dist/components/formStore/OneBlinkFormStoreRefreshButton.js +2 -3
  293. package/dist/components/formStore/OneBlinkFormStoreRefreshButton.js.map +1 -1
  294. package/dist/components/formStore/OneBlinkFormStoreTable.d.ts +1 -1
  295. package/dist/components/formStore/OneBlinkFormStoreTable.js +129 -95
  296. package/dist/components/formStore/OneBlinkFormStoreTable.js.map +1 -1
  297. package/dist/components/formStore/display/ElementDisplay.d.ts +3 -4
  298. package/dist/components/formStore/display/ElementDisplay.js +11 -14
  299. package/dist/components/formStore/display/ElementDisplay.js.map +1 -1
  300. package/dist/components/formStore/display/FormStoreIcon.d.ts +1 -1
  301. package/dist/components/formStore/display/FormStoreIcon.js +2 -2
  302. package/dist/components/formStore/display/FormStoreIcon.js.map +1 -1
  303. package/dist/components/formStore/table/ActionedByTableCell.d.ts +1 -1
  304. package/dist/components/formStore/table/ActionedByTableCell.js +6 -7
  305. package/dist/components/formStore/table/ActionedByTableCell.js.map +1 -1
  306. package/dist/components/formStore/table/ColumnFilters.d.ts +3 -3
  307. package/dist/components/formStore/table/ColumnFilters.js +85 -101
  308. package/dist/components/formStore/table/ColumnFilters.js.map +1 -1
  309. package/dist/components/formStore/table/FormElementTableCell.d.ts +1 -1
  310. package/dist/components/formStore/table/FormElementTableCell.js +35 -98
  311. package/dist/components/formStore/table/FormElementTableCell.js.map +1 -1
  312. package/dist/components/formStore/table/HeaderCellMoreButton.d.ts +4 -4
  313. package/dist/components/formStore/table/HeaderCellMoreButton.js +26 -32
  314. package/dist/components/formStore/table/HeaderCellMoreButton.js.map +1 -1
  315. package/dist/components/formStore/table/Pickers.d.ts +4 -4
  316. package/dist/components/formStore/table/Pickers.js +15 -14
  317. package/dist/components/formStore/table/Pickers.js.map +1 -1
  318. package/dist/components/formStore/table/RepeatableSetCell.js +17 -21
  319. package/dist/components/formStore/table/RepeatableSetCell.js.map +1 -1
  320. package/dist/components/formStore/table/RepeatableSetCellAccordion.js +2 -4
  321. package/dist/components/formStore/table/RepeatableSetCellAccordion.js.map +1 -1
  322. package/dist/components/formStore/table/TableCellCopyButton.d.ts +1 -1
  323. package/dist/components/formStore/table/TableCellCopyButton.js +2 -3
  324. package/dist/components/formStore/table/TableCellCopyButton.js.map +1 -1
  325. package/dist/components/formStore/table/generateColumns.d.ts +6 -7
  326. package/dist/components/formStore/table/generateColumns.js +23 -18
  327. package/dist/components/formStore/table/generateColumns.js.map +1 -1
  328. package/dist/components/formStore/table/getVersionedState.d.ts +4 -3
  329. package/dist/components/formStore/table/getVersionedState.js +23 -6
  330. package/dist/components/formStore/table/getVersionedState.js.map +1 -1
  331. package/dist/components/formStore/table/useFormStoreTable.d.ts +146 -37
  332. package/dist/components/formStore/table/useFormStoreTable.js +268 -199
  333. package/dist/components/formStore/table/useFormStoreTable.js.map +1 -1
  334. package/dist/components/formStore/useFormStoreTableContext.d.ts +144 -35
  335. package/dist/components/messages/ErrorMessage.js +3 -3
  336. package/dist/components/messages/ErrorMessage.js.map +1 -1
  337. package/dist/components/messages/LargeIconMessage.js +2 -6
  338. package/dist/components/messages/LargeIconMessage.js.map +1 -1
  339. package/dist/components/messages/NoResourcesYet.d.ts +1 -1
  340. package/dist/components/messages/NoResourcesYet.js +2 -1
  341. package/dist/components/messages/NoResourcesYet.js.map +1 -1
  342. package/dist/components/mfa/MfaDialog.d.ts +2 -2
  343. package/dist/components/mfa/MfaDialog.js +10 -49
  344. package/dist/components/mfa/MfaDialog.js.map +1 -1
  345. package/dist/components/mfa/MultiFactorAuthentication.d.ts +2 -5
  346. package/dist/components/mfa/MultiFactorAuthentication.js +14 -45
  347. package/dist/components/mfa/MultiFactorAuthentication.js.map +1 -1
  348. package/dist/components/payments/PaymentForm.d.ts +1 -1
  349. package/dist/components/payments/PaymentForm.js +5 -10
  350. package/dist/components/payments/PaymentForm.js.map +1 -1
  351. package/dist/components/payments/WestpacQuickStreamPaymentForm.d.ts +2 -2
  352. package/dist/components/payments/WestpacQuickStreamPaymentForm.js +12 -46
  353. package/dist/components/payments/WestpacQuickStreamPaymentForm.js.map +1 -1
  354. package/dist/components/receipts/Receipt.d.ts +1 -1
  355. package/dist/components/receipts/Receipt.js +2 -2
  356. package/dist/components/receipts/Receipt.js.map +1 -1
  357. package/dist/components/receipts/ReceiptButton.d.ts +1 -1
  358. package/dist/components/receipts/ReceiptButton.js +3 -2
  359. package/dist/components/receipts/ReceiptButton.js.map +1 -1
  360. package/dist/components/receipts/ReceiptList.d.ts +1 -1
  361. package/dist/components/receipts/ReceiptList.js +2 -9
  362. package/dist/components/receipts/ReceiptList.js.map +1 -1
  363. package/dist/components/receipts/ReceiptListItem.d.ts +1 -1
  364. package/dist/components/receipts/ReceiptListItem.js +2 -11
  365. package/dist/components/receipts/ReceiptListItem.js.map +1 -1
  366. package/dist/components/renderer/AnnotationModal.d.ts +1 -1
  367. package/dist/components/renderer/AnnotationModal.js +6 -14
  368. package/dist/components/renderer/AnnotationModal.js.map +1 -1
  369. package/dist/components/renderer/AutocompleteDropdown.d.ts +1 -1
  370. package/dist/components/renderer/AutocompleteDropdown.js +16 -35
  371. package/dist/components/renderer/AutocompleteDropdown.js.map +1 -1
  372. package/dist/components/renderer/CopyToClipboardButton.d.ts +1 -1
  373. package/dist/components/renderer/CopyToClipboardButton.js +2 -4
  374. package/dist/components/renderer/CopyToClipboardButton.js.map +1 -1
  375. package/dist/components/renderer/CustomisableButtonInner.js +2 -4
  376. package/dist/components/renderer/CustomisableButtonInner.js.map +1 -1
  377. package/dist/components/renderer/FormElementLabelContainer.d.ts +3 -3
  378. package/dist/components/renderer/FormElementLabelContainer.js +7 -14
  379. package/dist/components/renderer/FormElementLabelContainer.js.map +1 -1
  380. package/dist/components/renderer/FormElementOptions.d.ts +1 -1
  381. package/dist/components/renderer/FormElementOptions.js +4 -5
  382. package/dist/components/renderer/FormElementOptions.js.map +1 -1
  383. package/dist/components/renderer/FormElementValidationMessage.js +3 -5
  384. package/dist/components/renderer/FormElementValidationMessage.js.map +1 -1
  385. package/dist/components/renderer/LookupButton.d.ts +1 -1
  386. package/dist/components/renderer/LookupButton.js +4 -8
  387. package/dist/components/renderer/LookupButton.js.map +1 -1
  388. package/dist/components/renderer/LookupNotification.d.ts +1 -1
  389. package/dist/components/renderer/LookupNotification.js +16 -38
  390. package/dist/components/renderer/LookupNotification.js.map +1 -1
  391. package/dist/components/renderer/Modal.d.ts +3 -3
  392. package/dist/components/renderer/Modal.js +7 -10
  393. package/dist/components/renderer/Modal.js.map +1 -1
  394. package/dist/components/renderer/OnLoading.d.ts +1 -1
  395. package/dist/components/renderer/OnLoading.js +3 -3
  396. package/dist/components/renderer/OnLoading.js.map +1 -1
  397. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.d.ts +1 -1
  398. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js +3 -5
  399. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js.map +1 -1
  400. package/dist/components/renderer/OneBlinkFormElements.d.ts +1 -1
  401. package/dist/components/renderer/OneBlinkFormElements.js +61 -90
  402. package/dist/components/renderer/OneBlinkFormElements.js.map +1 -1
  403. package/dist/components/renderer/PageFormElements.d.ts +1 -1
  404. package/dist/components/renderer/PageFormElements.js +3 -5
  405. package/dist/components/renderer/PageFormElements.js.map +1 -1
  406. package/dist/components/renderer/ProgressBar.d.ts +1 -1
  407. package/dist/components/renderer/ProgressBar.js +2 -1
  408. package/dist/components/renderer/ProgressBar.js.map +1 -1
  409. package/dist/components/renderer/ReverseGeocode.d.ts +1 -1
  410. package/dist/components/renderer/ReverseGeocode.js +3 -2
  411. package/dist/components/renderer/ReverseGeocode.js.map +1 -1
  412. package/dist/components/renderer/ToggleAllCheckbox.js +4 -5
  413. package/dist/components/renderer/ToggleAllCheckbox.js.map +1 -1
  414. package/dist/components/renderer/Tooltip.d.ts +1 -1
  415. package/dist/components/renderer/Tooltip.js +5 -1
  416. package/dist/components/renderer/Tooltip.js.map +1 -1
  417. package/dist/components/renderer/attachments/AttachmentStatus.d.ts +1 -1
  418. package/dist/components/renderer/attachments/AttachmentStatus.js +6 -15
  419. package/dist/components/renderer/attachments/AttachmentStatus.js.map +1 -1
  420. package/dist/components/renderer/attachments/DropdownMenu.js +30 -42
  421. package/dist/components/renderer/attachments/DropdownMenu.js.map +1 -1
  422. package/dist/components/renderer/attachments/FileCard.d.ts +1 -1
  423. package/dist/components/renderer/attachments/FileCard.js +2 -10
  424. package/dist/components/renderer/attachments/FileCard.js.map +1 -1
  425. package/dist/components/renderer/attachments/FileCardContent.d.ts +1 -1
  426. package/dist/components/renderer/attachments/FileCardContent.js +3 -4
  427. package/dist/components/renderer/attachments/FileCardContent.js.map +1 -1
  428. package/dist/components/renderer/attachments/ImagePreviewUnavailable.d.ts +1 -1
  429. package/dist/components/renderer/attachments/ImagePreviewUnavailable.js +2 -5
  430. package/dist/components/renderer/attachments/ImagePreviewUnavailable.js.map +1 -1
  431. package/dist/components/renderer/attachments/ProgressBar.js +2 -4
  432. package/dist/components/renderer/attachments/ProgressBar.js.map +1 -1
  433. package/dist/form-elements/ComplianceButton.js +3 -4
  434. package/dist/form-elements/ComplianceButton.js.map +1 -1
  435. package/dist/form-elements/FormElementABN.d.ts +1 -1
  436. package/dist/form-elements/FormElementABN.js +18 -28
  437. package/dist/form-elements/FormElementABN.js.map +1 -1
  438. package/dist/form-elements/FormElementAPINSWLiquorLicence.d.ts +2 -2
  439. package/dist/form-elements/FormElementAPINSWLiquorLicence.js +4 -22
  440. package/dist/form-elements/FormElementAPINSWLiquorLicence.js.map +1 -1
  441. package/dist/form-elements/FormElementArcGISWebMap.d.ts +1 -1
  442. package/dist/form-elements/FormElementArcGISWebMap.js +21 -36
  443. package/dist/form-elements/FormElementArcGISWebMap.js.map +1 -1
  444. package/dist/form-elements/FormElementAutocomplete.d.ts +1 -1
  445. package/dist/form-elements/FormElementAutocomplete.js +6 -10
  446. package/dist/form-elements/FormElementAutocomplete.js.map +1 -1
  447. package/dist/form-elements/FormElementBSB.d.ts +1 -1
  448. package/dist/form-elements/FormElementBSB.js +22 -31
  449. package/dist/form-elements/FormElementBSB.js.map +1 -1
  450. package/dist/form-elements/FormElementBarcodeScanner.d.ts +1 -1
  451. package/dist/form-elements/FormElementBarcodeScanner.js +16 -50
  452. package/dist/form-elements/FormElementBarcodeScanner.js.map +1 -1
  453. package/dist/form-elements/FormElementBoolean.d.ts +1 -1
  454. package/dist/form-elements/FormElementBoolean.js +4 -4
  455. package/dist/form-elements/FormElementBoolean.js.map +1 -1
  456. package/dist/form-elements/FormElementCalculation.d.ts +1 -1
  457. package/dist/form-elements/FormElementCalculation.js +4 -11
  458. package/dist/form-elements/FormElementCalculation.js.map +1 -1
  459. package/dist/form-elements/FormElementCamera.d.ts +1 -1
  460. package/dist/form-elements/FormElementCamera.js +7 -53
  461. package/dist/form-elements/FormElementCamera.js.map +1 -1
  462. package/dist/form-elements/FormElementCaptcha.d.ts +1 -1
  463. package/dist/form-elements/FormElementCaptcha.js +2 -4
  464. package/dist/form-elements/FormElementCaptcha.js.map +1 -1
  465. package/dist/form-elements/FormElementCheckBoxes.d.ts +1 -1
  466. package/dist/form-elements/FormElementCheckBoxes.js +23 -33
  467. package/dist/form-elements/FormElementCheckBoxes.js.map +1 -1
  468. package/dist/form-elements/FormElementCivicaNameRecord.d.ts +1 -1
  469. package/dist/form-elements/FormElementCivicaNameRecord.js +3 -2
  470. package/dist/form-elements/FormElementCivicaNameRecord.js.map +1 -1
  471. package/dist/form-elements/FormElementCivicaStreetName.d.ts +1 -1
  472. package/dist/form-elements/FormElementCivicaStreetName.js +3 -5
  473. package/dist/form-elements/FormElementCivicaStreetName.js.map +1 -1
  474. package/dist/form-elements/FormElementCompliance.d.ts +2 -2
  475. package/dist/form-elements/FormElementCompliance.js +13 -25
  476. package/dist/form-elements/FormElementCompliance.js.map +1 -1
  477. package/dist/form-elements/FormElementDate.d.ts +1 -1
  478. package/dist/form-elements/FormElementDate.js +3 -10
  479. package/dist/form-elements/FormElementDate.js.map +1 -1
  480. package/dist/form-elements/FormElementDateTime.d.ts +1 -1
  481. package/dist/form-elements/FormElementDateTime.js +3 -10
  482. package/dist/form-elements/FormElementDateTime.js.map +1 -1
  483. package/dist/form-elements/FormElementEmail.d.ts +1 -1
  484. package/dist/form-elements/FormElementEmail.js +4 -13
  485. package/dist/form-elements/FormElementEmail.js.map +1 -1
  486. package/dist/form-elements/FormElementFile.d.ts +1 -1
  487. package/dist/form-elements/FormElementFile.js +2 -12
  488. package/dist/form-elements/FormElementFile.js.map +1 -1
  489. package/dist/form-elements/FormElementFiles.d.ts +2 -2
  490. package/dist/form-elements/FormElementFiles.js +9 -17
  491. package/dist/form-elements/FormElementFiles.js.map +1 -1
  492. package/dist/form-elements/FormElementForm.d.ts +1 -1
  493. package/dist/form-elements/FormElementForm.js +2 -1
  494. package/dist/form-elements/FormElementForm.js.map +1 -1
  495. package/dist/form-elements/FormElementFreshdeskDependentField.d.ts +1 -1
  496. package/dist/form-elements/FormElementFreshdeskDependentField.js +5 -11
  497. package/dist/form-elements/FormElementFreshdeskDependentField.js.map +1 -1
  498. package/dist/form-elements/FormElementGeoscapeAddress.d.ts +1 -1
  499. package/dist/form-elements/FormElementGeoscapeAddress.js +3 -5
  500. package/dist/form-elements/FormElementGeoscapeAddress.js.map +1 -1
  501. package/dist/form-elements/FormElementGoogleAddress.d.ts +1 -1
  502. package/dist/form-elements/FormElementGoogleAddress.js +3 -8
  503. package/dist/form-elements/FormElementGoogleAddress.js.map +1 -1
  504. package/dist/form-elements/FormElementHTML.d.ts +1 -1
  505. package/dist/form-elements/FormElementHTML.js +2 -3
  506. package/dist/form-elements/FormElementHTML.js.map +1 -1
  507. package/dist/form-elements/FormElementHeading.d.ts +1 -1
  508. package/dist/form-elements/FormElementHeading.js +7 -8
  509. package/dist/form-elements/FormElementHeading.js.map +1 -1
  510. package/dist/form-elements/FormElementImage.d.ts +1 -1
  511. package/dist/form-elements/FormElementImage.js +3 -3
  512. package/dist/form-elements/FormElementImage.js.map +1 -1
  513. package/dist/form-elements/FormElementLocation.d.ts +1 -1
  514. package/dist/form-elements/FormElementLocation.js +21 -48
  515. package/dist/form-elements/FormElementLocation.js.map +1 -1
  516. package/dist/form-elements/FormElementLookupButton.d.ts +2 -3
  517. package/dist/form-elements/FormElementLookupButton.js +5 -8
  518. package/dist/form-elements/FormElementLookupButton.js.map +1 -1
  519. package/dist/form-elements/FormElementNumber.d.ts +1 -1
  520. package/dist/form-elements/FormElementNumber.js +4 -15
  521. package/dist/form-elements/FormElementNumber.js.map +1 -1
  522. package/dist/form-elements/FormElementPointAddress.d.ts +2 -2
  523. package/dist/form-elements/FormElementPointAddress.js +7 -14
  524. package/dist/form-elements/FormElementPointAddress.js.map +1 -1
  525. package/dist/form-elements/FormElementPointAddressV3.d.ts +1 -1
  526. package/dist/form-elements/FormElementPointAddressV3.js +3 -10
  527. package/dist/form-elements/FormElementPointAddressV3.js.map +1 -1
  528. package/dist/form-elements/FormElementPointCadastralParcel.d.ts +1 -1
  529. package/dist/form-elements/FormElementPointCadastralParcel.js +15 -27
  530. package/dist/form-elements/FormElementPointCadastralParcel.js.map +1 -1
  531. package/dist/form-elements/FormElementRadio.d.ts +1 -1
  532. package/dist/form-elements/FormElementRadio.js +24 -30
  533. package/dist/form-elements/FormElementRadio.js.map +1 -1
  534. package/dist/form-elements/FormElementRepeatableSet.d.ts +1 -1
  535. package/dist/form-elements/FormElementRepeatableSet.js +21 -39
  536. package/dist/form-elements/FormElementRepeatableSet.js.map +1 -1
  537. package/dist/form-elements/FormElementSection.d.ts +1 -1
  538. package/dist/form-elements/FormElementSection.js +16 -34
  539. package/dist/form-elements/FormElementSection.js.map +1 -1
  540. package/dist/form-elements/FormElementSelect.d.ts +1 -1
  541. package/dist/form-elements/FormElementSelect.js +12 -23
  542. package/dist/form-elements/FormElementSelect.js.map +1 -1
  543. package/dist/form-elements/FormElementSignature.d.ts +1 -1
  544. package/dist/form-elements/FormElementSignature.js +21 -46
  545. package/dist/form-elements/FormElementSignature.js.map +1 -1
  546. package/dist/form-elements/FormElementSummary.d.ts +1 -1
  547. package/dist/form-elements/FormElementSummary.js +9 -6
  548. package/dist/form-elements/FormElementSummary.js.map +1 -1
  549. package/dist/form-elements/FormElementTelephone.d.ts +1 -1
  550. package/dist/form-elements/FormElementTelephone.js +4 -13
  551. package/dist/form-elements/FormElementTelephone.js.map +1 -1
  552. package/dist/form-elements/FormElementText.d.ts +1 -1
  553. package/dist/form-elements/FormElementText.js +6 -21
  554. package/dist/form-elements/FormElementText.js.map +1 -1
  555. package/dist/form-elements/FormElementTextarea.d.ts +1 -1
  556. package/dist/form-elements/FormElementTextarea.js +6 -20
  557. package/dist/form-elements/FormElementTextarea.js.map +1 -1
  558. package/dist/form-elements/FormElementTime.d.ts +1 -1
  559. package/dist/form-elements/FormElementTime.js +3 -10
  560. package/dist/form-elements/FormElementTime.js.map +1 -1
  561. package/dist/form-elements/OptionButton.js +3 -5
  562. package/dist/form-elements/OptionButton.js.map +1 -1
  563. package/dist/hooks/attachments/useAttachment.d.ts +1 -1
  564. package/dist/hooks/attachments/useAttachment.js +1 -1
  565. package/dist/hooks/attachments/useAttachment.js.map +1 -1
  566. package/dist/hooks/attachments/useAttachmentBlobs.d.ts +1 -1
  567. package/dist/hooks/attachments/useAttachmentBlobs.js +2 -1
  568. package/dist/hooks/attachments/useAttachmentBlobs.js.map +1 -1
  569. package/dist/hooks/attachments/useAttachments.d.ts +1 -1
  570. package/dist/hooks/attachments/useAttachments.js.map +1 -1
  571. package/dist/hooks/form-date-picker/useFormDatePickerProps.d.ts +7 -8
  572. package/dist/hooks/form-date-picker/useFormDatePickerProps.js +10 -10
  573. package/dist/hooks/form-date-picker/useFormDatePickerProps.js.map +1 -1
  574. package/dist/hooks/useAuth.d.ts +1 -1
  575. package/dist/hooks/useAuth.js +3 -2
  576. package/dist/hooks/useAuth.js.map +1 -1
  577. package/dist/hooks/useConditionalLogic.js +1 -1
  578. package/dist/hooks/useConditionalLogic.js.map +1 -1
  579. package/dist/hooks/useDrafts.d.ts +2 -2
  580. package/dist/hooks/useDrafts.js +3 -2
  581. package/dist/hooks/useDrafts.js.map +1 -1
  582. package/dist/hooks/useDynamicOptionsLoaderState.d.ts +2 -2
  583. package/dist/hooks/useDynamicOptionsLoaderState.js +5 -14
  584. package/dist/hooks/useDynamicOptionsLoaderState.js.map +1 -1
  585. package/dist/hooks/useFormElementLookups.d.ts +2 -2
  586. package/dist/hooks/useFormElementLookups.js +3 -2
  587. package/dist/hooks/useFormElementLookups.js.map +1 -1
  588. package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +1 -1
  589. package/dist/hooks/useFormSubmissionAutoSaveState.js +1 -1
  590. package/dist/hooks/useFormSubmissionAutoSaveState.js.map +1 -1
  591. package/dist/hooks/useFormSubmissionDuration.js +2 -0
  592. package/dist/hooks/useFormSubmissionDuration.js.map +1 -1
  593. package/dist/hooks/useFormSubmissionModelContext.d.ts +1 -1
  594. package/dist/hooks/useFormSubmissionModelContext.js +2 -1
  595. package/dist/hooks/useFormSubmissionModelContext.js.map +1 -1
  596. package/dist/hooks/useFormSubmissionState.d.ts +1 -1
  597. package/dist/hooks/useFormSubmissionState.js +1 -1
  598. package/dist/hooks/useFormSubmissionState.js.map +1 -1
  599. package/dist/hooks/useIsHovering.d.ts +1 -1
  600. package/dist/hooks/useIsHovering.js +4 -4
  601. package/dist/hooks/useIsHovering.js.map +1 -1
  602. package/dist/hooks/useIsOffline.d.ts +1 -1
  603. package/dist/hooks/useIsOffline.js +3 -2
  604. package/dist/hooks/useIsOffline.js.map +1 -1
  605. package/dist/hooks/useIsPageVisible.d.ts +1 -1
  606. package/dist/hooks/useIsPageVisible.js +2 -1
  607. package/dist/hooks/useIsPageVisible.js.map +1 -1
  608. package/dist/hooks/useLoadDataState.js +3 -1
  609. package/dist/hooks/useLoadDataState.js.map +1 -1
  610. package/dist/hooks/useLogin.js +1 -1
  611. package/dist/hooks/useLogin.js.map +1 -1
  612. package/dist/hooks/useMfa.d.ts +2 -2
  613. package/dist/hooks/useMfa.js +3 -2
  614. package/dist/hooks/useMfa.js.map +1 -1
  615. package/dist/hooks/useOnUploadAttachment.d.ts +1 -1
  616. package/dist/hooks/useOnUploadAttachment.js +1 -1
  617. package/dist/hooks/useOnUploadAttachment.js.map +1 -1
  618. package/dist/hooks/useOneBlinkFormContainer.d.ts +2 -1
  619. package/dist/hooks/useOneBlinkFormContainer.js +2 -2
  620. package/dist/hooks/useOneBlinkFormContainer.js.map +1 -1
  621. package/dist/hooks/usePages.d.ts +1 -1
  622. package/dist/hooks/usePendingSubmissions.d.ts +2 -2
  623. package/dist/hooks/usePendingSubmissions.js +3 -2
  624. package/dist/hooks/usePendingSubmissions.js.map +1 -1
  625. package/dist/hooks/useReCAPTCHAProps.d.ts +1 -1
  626. package/dist/hooks/useReCAPTCHAProps.js.map +1 -1
  627. package/dist/hooks/useReplaceableText.js +1 -1
  628. package/dist/hooks/useReplaceableText.js.map +1 -1
  629. package/dist/hooks/useSignUp.js +1 -1
  630. package/dist/hooks/useSignUp.js.map +1 -1
  631. package/dist/index.d.ts +1 -0
  632. package/dist/index.js +2 -0
  633. package/dist/index.js.map +1 -1
  634. package/dist/services/attachments.d.ts +1 -1
  635. package/dist/services/attachments.js +1 -1
  636. package/dist/services/attachments.js.map +1 -1
  637. package/dist/services/blob-utils.js +1 -1
  638. package/dist/services/blob-utils.js.map +1 -1
  639. package/dist/services/checkIfAttachmentsExist.d.ts +1 -1
  640. package/dist/services/checkIfAttachmentsExist.js.map +1 -1
  641. package/dist/services/defaultCoordinates.js +1 -1
  642. package/dist/services/defaultCoordinates.js.map +1 -1
  643. package/dist/services/download-file.d.ts +1 -1
  644. package/dist/services/download-file.js +2 -2
  645. package/dist/services/download-file.js.map +1 -1
  646. package/dist/services/drawTimestampOnCanvas.js +1 -1
  647. package/dist/services/drawTimestampOnCanvas.js.map +1 -1
  648. package/dist/services/form-validation/validateSubmission.js +1 -1
  649. package/dist/services/form-validation/validateSubmission.js.map +1 -1
  650. package/dist/services/form-validation/validators.d.ts +1 -1
  651. package/dist/services/form-validation/validators.js.map +1 -1
  652. package/dist/services/generate-default-data.js +1 -1
  653. package/dist/services/generate-default-data.js.map +1 -1
  654. package/dist/services/injectableOptions.js +1 -1
  655. package/dist/services/injectableOptions.js.map +1 -1
  656. package/dist/styles.css +208 -204
  657. package/dist/types/attachments.d.ts +1 -1
  658. package/dist/types/attachments.js.map +1 -1
  659. package/dist/utils/sendGoogleAnalyticsEvent.js +1 -1
  660. package/dist/utils/sendGoogleAnalyticsEvent.js.map +1 -1
  661. package/package.json +58 -51
@@ -0,0 +1,583 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ import _orderBy from 'lodash.orderby';
3
+ import utilsService from './services/utils';
4
+ import OneBlinkAppsError from './services/errors/oneBlinkAppsError';
5
+ import { isOffline } from './offline-service';
6
+ import { getUsername } from './services/cognito';
7
+ import { getFormsKeyId, getCurrentFormsAppUser } from './auth-service';
8
+ import { getFormSubmissionDrafts, uploadDraftData } from './services/api/drafts';
9
+ import { getPendingQueueSubmissions, deletePendingQueueSubmission, } from './services/pending-queue';
10
+ import { deleteDraftData, getDraftSubmission, getLatestFormSubmissionDraftVersion, getLocalDraftSubmission, removeLocalDraftSubmission, saveDraftSubmission, } from './services/draft-data-store';
11
+ import Sentry from './Sentry';
12
+ function generateDraftsKey(username) {
13
+ return `V2_DRAFTS_${username}`;
14
+ }
15
+ function generatePublicDraftsKey() {
16
+ return `V2_DRAFTS_PUBLIC`;
17
+ }
18
+ async function checkIfUsingPrivateDrafts(formsAppId, abortSignal) {
19
+ return getCurrentFormsAppUser(formsAppId, abortSignal)
20
+ .then((user) => !!user)
21
+ .catch((error) => {
22
+ if (error.status >= 400 && error.status < 500) {
23
+ return false;
24
+ }
25
+ else {
26
+ Sentry.captureException(error);
27
+ console.log('Could not determine if the current user has access to this forms app', error);
28
+ return false;
29
+ }
30
+ });
31
+ }
32
+ function generateLocalFormSubmissionDraftsFromDraftSubmissions(draftSubmissions, pendingSubmissionsDraftIds, deletedDraftIds) {
33
+ var _a, _b, _c, _d;
34
+ const localFormSubmissionDraftsMap = new Map();
35
+ for (const draftSubmission of draftSubmissions) {
36
+ if (
37
+ // Remove drafts that are in the pending queue
38
+ !pendingSubmissionsDraftIds.has(draftSubmission.formSubmissionDraftId) &&
39
+ // Remove any drafts deleted while offline
40
+ !deletedDraftIds.has(draftSubmission.formSubmissionDraftId)) {
41
+ localFormSubmissionDraftsMap.set(draftSubmission.formSubmissionDraftId, {
42
+ formsAppId: draftSubmission.formsAppId,
43
+ formId: draftSubmission.definition.id,
44
+ externalId: draftSubmission.externalId,
45
+ jobId: draftSubmission.jobId,
46
+ previousFormSubmissionApprovalId: draftSubmission.previousFormSubmissionApprovalId,
47
+ taskId: (_a = draftSubmission.taskCompletion) === null || _a === void 0 ? void 0 : _a.task.taskId,
48
+ taskGroupInstanceId: (_c = (_b = draftSubmission.taskCompletion) === null || _b === void 0 ? void 0 : _b.taskGroupInstance) === null || _c === void 0 ? void 0 : _c.taskGroupInstanceId,
49
+ taskActionId: (_d = draftSubmission.taskCompletion) === null || _d === void 0 ? void 0 : _d.taskAction.taskActionId,
50
+ draftSubmission,
51
+ versions: undefined,
52
+ });
53
+ }
54
+ }
55
+ return localFormSubmissionDraftsMap;
56
+ }
57
+ async function getPendingSubmissionsDraftIds() {
58
+ const pendingSubmissions = await getPendingQueueSubmissions();
59
+ return pendingSubmissions.reduce((memo, pendingSubmission) => {
60
+ if (pendingSubmission.formSubmissionDraftId) {
61
+ memo.add(pendingSubmission.formSubmissionDraftId);
62
+ }
63
+ return memo;
64
+ }, new Set());
65
+ }
66
+ async function generatePublicLocalFormSubmissionDraftsFromStorage(publicDraftsStorage) {
67
+ const pendingSubmissionsDraftIds = await getPendingSubmissionsDraftIds();
68
+ const localFormSubmissionDraftsMap = generateLocalFormSubmissionDraftsFromDraftSubmissions(publicDraftsStorage, pendingSubmissionsDraftIds, new Set());
69
+ const localFormSubmissionDrafts = Array.from(localFormSubmissionDraftsMap.values());
70
+ return _orderBy(localFormSubmissionDrafts, (localFormSubmissionDraft) => {
71
+ var _a;
72
+ return (_a = localFormSubmissionDraft.draftSubmission) === null || _a === void 0 ? void 0 : _a.createdAt;
73
+ });
74
+ }
75
+ async function generateLocalFormSubmissionDraftsFromStorage(localDraftsStorage) {
76
+ const pendingSubmissionsDraftIds = await getPendingSubmissionsDraftIds();
77
+ const deletedDraftIds = new Set(localDraftsStorage.deletedFormSubmissionDrafts.map(({ id }) => id));
78
+ const localFormSubmissionDraftsMap = generateLocalFormSubmissionDraftsFromDraftSubmissions(localDraftsStorage.unsyncedDraftSubmissions, pendingSubmissionsDraftIds, deletedDraftIds);
79
+ for (const formSubmissionDraft of localDraftsStorage.syncedFormSubmissionDrafts) {
80
+ if (
81
+ // Unsycned version of draft takes priority over the synced version
82
+ !localFormSubmissionDraftsMap.has(formSubmissionDraft.id) &&
83
+ // Remove drafts that are in the pending queue
84
+ !pendingSubmissionsDraftIds.has(formSubmissionDraft.id) &&
85
+ // Remove any drafts deleted while offline
86
+ !deletedDraftIds.has(formSubmissionDraft.id)) {
87
+ const draftSubmission = await getDraftSubmission(formSubmissionDraft).catch((err) => {
88
+ console.warn(`Could not fetch draft submission for draft: ${formSubmissionDraft.id}`, err);
89
+ return undefined;
90
+ });
91
+ localFormSubmissionDraftsMap.set(formSubmissionDraft.id, {
92
+ ...formSubmissionDraft,
93
+ draftSubmission,
94
+ });
95
+ }
96
+ }
97
+ const localFormSubmissionDrafts = Array.from(localFormSubmissionDraftsMap.values());
98
+ return _orderBy(localFormSubmissionDrafts, (localFormSubmissionDraft) => {
99
+ var _a, _b;
100
+ return (((_a = localFormSubmissionDraft.draftSubmission) === null || _a === void 0 ? void 0 : _a.createdAt) ||
101
+ ((_b = getLatestFormSubmissionDraftVersion(localFormSubmissionDraft.versions)) === null || _b === void 0 ? void 0 : _b.createdAt));
102
+ });
103
+ }
104
+ function errorHandler(error) {
105
+ console.error('Local Forage Error', error);
106
+ if (/The serialized value is too large/.test(error.message)) {
107
+ return new OneBlinkAppsError('It seems you have run out of space. Please delete some of your drafts to allow new drafts to be created or existing drafts to be updated.', {
108
+ originalError: error,
109
+ });
110
+ }
111
+ return error;
112
+ }
113
+ const draftsListeners = [];
114
+ /**
115
+ * Register a listener function that will be passed an array of Drafts when a
116
+ * draft is added, updated or deleted.
117
+ *
118
+ * #### Example
119
+ *
120
+ * ```js
121
+ * const listener = async (drafts) => {
122
+ * // use drafts here...
123
+ * }
124
+ * const deregister = await draftService.registerDraftsListener(listener)
125
+ *
126
+ * // When no longer needed, remember to deregister the listener
127
+ * deregister()
128
+ * ```
129
+ *
130
+ * @param listener
131
+ * @returns
132
+ */
133
+ function registerDraftsListener(listener) {
134
+ draftsListeners.push(listener);
135
+ return () => {
136
+ const index = draftsListeners.indexOf(listener);
137
+ if (index !== -1) {
138
+ draftsListeners.splice(index, 1);
139
+ }
140
+ };
141
+ }
142
+ async function executeDraftsListeners(localFormSubmissionDrafts) {
143
+ for (const draftsListener of draftsListeners) {
144
+ draftsListener(localFormSubmissionDrafts);
145
+ }
146
+ }
147
+ /**
148
+ * Create or update a Draft in the local store and sync it with remote drafts.
149
+ * Will also handle cleaning up auto save data (if the `autoSaveKey` property is
150
+ * passed).
151
+ *
152
+ * #### Example
153
+ *
154
+ * ```js
155
+ * const abortController = new AbortController()
156
+ * const formSubmissionDraftId = 'd3aeb944-d0b3-11ea-87d0-0242ac130003' // pass `undefined` to create a new draft
157
+ * const autoSaveKey = 'SET ME TO DELETE AUTOSAVE DATA AFTER SAVING DRAFT'
158
+ * const draftSubmissionInput = {
159
+ * title: 1,
160
+ * formsAppId: 1,
161
+ * submission: {
162
+ * form: 'data',
163
+ * goes: 'here',
164
+ * },
165
+ * definition: {
166
+ * form: 'definition',
167
+ * goes: 'here',
168
+ * },
169
+ * }
170
+ * await draftService.upsertDraft({
171
+ * formSubmissionDraftId,
172
+ * autoSaveKey,
173
+ * draftSubmissionInput,
174
+ * abortSignal: abortController.signal,
175
+ * onProgress: (progress) => {
176
+ * // ...
177
+ * },
178
+ * })
179
+ * ```
180
+ *
181
+ * @param options
182
+ * @returns
183
+ */
184
+ async function upsertDraft({ formSubmissionDraftId, draftSubmissionInput, autoSaveKey, onProgress, abortSignal, pendingTimestamp, }) {
185
+ const draftSubmission = {
186
+ ...draftSubmissionInput,
187
+ createdAt: new Date().toISOString(),
188
+ formSubmissionDraftId: formSubmissionDraftId || uuidv4(),
189
+ };
190
+ const keyId = getFormsKeyId();
191
+ if (keyId) {
192
+ if (isOffline()) {
193
+ throw new OneBlinkAppsError('Drafts cannot be saved while offline.', {
194
+ isOffline: true,
195
+ });
196
+ }
197
+ await uploadDraftData(draftSubmission, onProgress, abortSignal);
198
+ return;
199
+ }
200
+ try {
201
+ const isUsingPrivateDrafts = await checkIfUsingPrivateDrafts(draftSubmission.formsAppId);
202
+ const formSubmissionDraftVersion = await saveDraftSubmission({
203
+ draftSubmission,
204
+ autoSaveKey,
205
+ onProgress,
206
+ skipUpload: !isUsingPrivateDrafts,
207
+ });
208
+ if (isUsingPrivateDrafts) {
209
+ const localDraftsStorage = await getLocalDraftsFromStorage();
210
+ if (formSubmissionDraftVersion) {
211
+ console.log('Draft was saved on server', formSubmissionDraftVersion);
212
+ localDraftsStorage.syncedFormSubmissionDrafts =
213
+ await getFormSubmissionDrafts(draftSubmission.formsAppId, abortSignal);
214
+ // Remove draft from unsynced incase it was created offline
215
+ if (formSubmissionDraftId) {
216
+ localDraftsStorage.unsyncedDraftSubmissions =
217
+ localDraftsStorage.unsyncedDraftSubmissions.filter((unsyncedDraftSubmission) => unsyncedDraftSubmission.formSubmissionDraftId !==
218
+ formSubmissionDraftId);
219
+ }
220
+ }
221
+ else {
222
+ console.log('Draft could not be saved on server, saving locally to sync later', draftSubmission);
223
+ let updated = false;
224
+ if (formSubmissionDraftId) {
225
+ localDraftsStorage.unsyncedDraftSubmissions =
226
+ localDraftsStorage.unsyncedDraftSubmissions.map((unsyncedDraftSubmission) => {
227
+ if (unsyncedDraftSubmission.formSubmissionDraftId ===
228
+ formSubmissionDraftId) {
229
+ updated = true;
230
+ return draftSubmission;
231
+ }
232
+ return unsyncedDraftSubmission;
233
+ });
234
+ // Remove draft from synced drafts incase it was retrieved while online
235
+ localDraftsStorage.syncedFormSubmissionDrafts =
236
+ localDraftsStorage.syncedFormSubmissionDrafts.filter(({ id }) => id !== formSubmissionDraftId);
237
+ }
238
+ if (!updated) {
239
+ localDraftsStorage.unsyncedDraftSubmissions.push(draftSubmission);
240
+ }
241
+ }
242
+ await setAndBroadcastDrafts(localDraftsStorage);
243
+ }
244
+ else {
245
+ let updated = false;
246
+ const publicDraftsStorage = (await getPublicDraftsFromStorage()).map((publicDraftSubmission) => {
247
+ if (publicDraftSubmission.formSubmissionDraftId ===
248
+ formSubmissionDraftId) {
249
+ updated = true;
250
+ return draftSubmission;
251
+ }
252
+ return publicDraftSubmission;
253
+ });
254
+ if (!updated) {
255
+ publicDraftsStorage.push(draftSubmission);
256
+ }
257
+ await setAndBroadcastPublicDrafts(publicDraftsStorage);
258
+ }
259
+ if (pendingTimestamp) {
260
+ await deletePendingQueueSubmission(pendingTimestamp);
261
+ }
262
+ syncDrafts({
263
+ throwError: false,
264
+ formsAppId: draftSubmission.formsAppId,
265
+ });
266
+ }
267
+ catch (err) {
268
+ Sentry.captureException(err);
269
+ throw errorHandler(err);
270
+ }
271
+ }
272
+ async function getLocalDraftsFromStorage() {
273
+ const username = getUsername();
274
+ if (username) {
275
+ try {
276
+ const localDraftsStorage = await utilsService.localForage.getItem(generateDraftsKey(username));
277
+ if (localDraftsStorage) {
278
+ return localDraftsStorage;
279
+ }
280
+ }
281
+ catch (err) {
282
+ Sentry.captureException(err);
283
+ throw errorHandler(err);
284
+ }
285
+ }
286
+ return {
287
+ unsyncedDraftSubmissions: [],
288
+ syncedFormSubmissionDrafts: [],
289
+ deletedFormSubmissionDrafts: [],
290
+ };
291
+ }
292
+ async function getPublicDraftsFromStorage() {
293
+ try {
294
+ const publicDrafts = await utilsService.localForage.getItem(generatePublicDraftsKey());
295
+ if (publicDrafts) {
296
+ return publicDrafts;
297
+ }
298
+ }
299
+ catch (err) {
300
+ Sentry.captureException(err);
301
+ throw errorHandler(err);
302
+ }
303
+ return [];
304
+ }
305
+ /**
306
+ * Get an array of Drafts for the currently logged in user.
307
+ *
308
+ * #### Example
309
+ *
310
+ * ```js
311
+ * const drafts = await draftService.getDrafts()
312
+ * ```
313
+ *
314
+ * @returns
315
+ */
316
+ async function getDrafts() {
317
+ const localDraftsStorage = await getLocalDraftsFromStorage();
318
+ return await generateLocalFormSubmissionDraftsFromStorage(localDraftsStorage);
319
+ }
320
+ /**
321
+ * Get an array of Drafts that have been submitted publicly on this device.
322
+ *
323
+ * #### Example
324
+ *
325
+ * ```js
326
+ * const drafts = await draftService.getPublicDrafts()
327
+ * ```
328
+ *
329
+ * @returns
330
+ */
331
+ async function getPublicDrafts() {
332
+ const publicDraftsStorage = await getPublicDraftsFromStorage();
333
+ return await generatePublicLocalFormSubmissionDraftsFromStorage(publicDraftsStorage);
334
+ }
335
+ async function tryGetFormSubmissionDrafts(formsAppId, abortSignal) {
336
+ try {
337
+ return await getFormSubmissionDrafts(formsAppId, abortSignal);
338
+ }
339
+ catch (error) {
340
+ if (!(error instanceof OneBlinkAppsError) || !error.isOffline) {
341
+ throw error;
342
+ }
343
+ }
344
+ }
345
+ /**
346
+ * Get a single Draft and the associated submission data.
347
+ *
348
+ * #### Example
349
+ *
350
+ * ```js
351
+ * const draftId = 'd3aeb944-d0b3-11ea-87d0-0242ac130003'
352
+ * const { draft, draftData, lastElementUpdated } =
353
+ * await draftService.getDraftAndData(draftId)
354
+ * // use "draftData" to prefill a from
355
+ * ```
356
+ *
357
+ * @param draftId
358
+ * @returns
359
+ */
360
+ async function getDraftAndData(formsAppId, formSubmissionDraftId, abortSignal) {
361
+ if (!formSubmissionDraftId) {
362
+ return;
363
+ }
364
+ let formSubmissionDrafts = await tryGetFormSubmissionDrafts(formsAppId, abortSignal);
365
+ const isUsingPrivateDrafts = await checkIfUsingPrivateDrafts(formsAppId);
366
+ if (isUsingPrivateDrafts) {
367
+ const localDraftsStorage = await getLocalDraftsFromStorage();
368
+ if (formSubmissionDrafts) {
369
+ localDraftsStorage.syncedFormSubmissionDrafts = formSubmissionDrafts;
370
+ await setAndBroadcastDrafts(localDraftsStorage);
371
+ }
372
+ else {
373
+ formSubmissionDrafts = localDraftsStorage.syncedFormSubmissionDrafts;
374
+ }
375
+ const formSubmissionDraft = formSubmissionDrafts.find(({ id }) => id === formSubmissionDraftId);
376
+ if (!formSubmissionDraft) {
377
+ return (await getLocalDraftSubmission(formSubmissionDraftId)) || undefined;
378
+ }
379
+ return await getDraftSubmission(formSubmissionDraft);
380
+ }
381
+ else {
382
+ if (formSubmissionDrafts) {
383
+ return (await getLocalDraftSubmission(formSubmissionDraftId)) || undefined;
384
+ }
385
+ }
386
+ }
387
+ /**
388
+ * Remove a draft from the local store and sync with remote drafts.
389
+ *
390
+ * #### Example
391
+ *
392
+ * ```js
393
+ * const draftId = 'd3aeb944-d0b3-11ea-87d0-0242ac130003'
394
+ * await draftService.deleteDraft(draftId)
395
+ * ```
396
+ *
397
+ * @param draftId
398
+ * @param formsAppId
399
+ * @returns
400
+ */
401
+ async function deleteDraft(formSubmissionDraftId, formsAppId, abortSignal) {
402
+ try {
403
+ await removeLocalDraftSubmission(formSubmissionDraftId);
404
+ const isUsingPrivateDrafts = await checkIfUsingPrivateDrafts(formsAppId);
405
+ if (isUsingPrivateDrafts) {
406
+ const localDraftsStorage = await getLocalDraftsFromStorage();
407
+ const formSubmissionDraft = localDraftsStorage.syncedFormSubmissionDrafts.find(({ id }) => id === formSubmissionDraftId);
408
+ if (formSubmissionDraft) {
409
+ const { hasDeletedRemoteDraft } = await deleteDraftData(formSubmissionDraftId, abortSignal);
410
+ localDraftsStorage.syncedFormSubmissionDrafts =
411
+ localDraftsStorage.syncedFormSubmissionDrafts.filter(({ id }) => id !== formSubmissionDraft.id);
412
+ if (!hasDeletedRemoteDraft) {
413
+ localDraftsStorage.deletedFormSubmissionDrafts.push(formSubmissionDraft);
414
+ }
415
+ }
416
+ else {
417
+ console.log('Could not find existing draft in synced drafts to delete', {
418
+ formSubmissionDraftId,
419
+ localDraftsStorage,
420
+ });
421
+ const draftSubmission = localDraftsStorage.unsyncedDraftSubmissions.find((draftSubmission) => draftSubmission.formSubmissionDraftId === formSubmissionDraftId);
422
+ if (!draftSubmission) {
423
+ return;
424
+ }
425
+ localDraftsStorage.unsyncedDraftSubmissions =
426
+ localDraftsStorage.unsyncedDraftSubmissions.filter((draftSubmission) => draftSubmission.formSubmissionDraftId !== formSubmissionDraftId);
427
+ }
428
+ await setAndBroadcastDrafts(localDraftsStorage);
429
+ }
430
+ else {
431
+ let publicDraftsStorage = await getPublicDraftsFromStorage();
432
+ const draftSubmission = publicDraftsStorage.find((draftSubmission) => draftSubmission.formSubmissionDraftId === formSubmissionDraftId);
433
+ if (!draftSubmission) {
434
+ return;
435
+ }
436
+ publicDraftsStorage = publicDraftsStorage.filter((draftSubmission) => draftSubmission.formSubmissionDraftId !== formSubmissionDraftId);
437
+ await setAndBroadcastPublicDrafts(publicDraftsStorage);
438
+ }
439
+ syncDrafts({
440
+ throwError: false,
441
+ formsAppId,
442
+ });
443
+ }
444
+ catch (err) {
445
+ Sentry.captureException(err);
446
+ throw errorHandler(err);
447
+ }
448
+ }
449
+ async function setAndBroadcastPublicDrafts(publicDrafts) {
450
+ await utilsService.localForage.setItem(generatePublicDraftsKey(), publicDrafts);
451
+ console.log('Public drafts have been updated', publicDrafts);
452
+ const localFormSubmissionDrafts = await generatePublicLocalFormSubmissionDraftsFromStorage(publicDrafts);
453
+ await executeDraftsListeners(localFormSubmissionDrafts.map((draft) => ({ ...draft, isPublic: true })));
454
+ }
455
+ async function setAndBroadcastDrafts(localDraftsStorage) {
456
+ const username = getUsername();
457
+ if (!username) {
458
+ throw new OneBlinkAppsError('You cannot set your drafts until you have logged in. Please login and try again.', {
459
+ requiresLogin: true,
460
+ });
461
+ }
462
+ await utilsService.localForage.setItem(generateDraftsKey(username), localDraftsStorage);
463
+ console.log('Drafts have been updated', localDraftsStorage);
464
+ const localFormSubmissionDrafts = await generateLocalFormSubmissionDraftsFromStorage(localDraftsStorage);
465
+ await executeDraftsListeners(localFormSubmissionDrafts);
466
+ }
467
+ let _isSyncingDrafts = false;
468
+ /**
469
+ * Force a sync of remote drafts with locally stored drafts. This function will
470
+ * swallow all errors thrown unless `true` is passed for the `throwError`
471
+ * property.
472
+ *
473
+ * #### Example
474
+ *
475
+ * ```js
476
+ * await draftService.syncDrafts({
477
+ * throwError: true,
478
+ * formsAppId: 1,
479
+ * })
480
+ * ```
481
+ *
482
+ * @param param0
483
+ * @returns
484
+ */
485
+ async function syncDrafts({ formsAppId, throwError, abortSignal, }) {
486
+ if (_isSyncingDrafts) {
487
+ console.log('Application is currently syncing drafts.');
488
+ return;
489
+ }
490
+ _isSyncingDrafts = true;
491
+ const isUsingPrivateDrafts = await checkIfUsingPrivateDrafts(formsAppId);
492
+ if (!isUsingPrivateDrafts) {
493
+ const publicDrafts = await getPublicDraftsFromStorage();
494
+ const filteredPublicDrafts = [];
495
+ // iterate through public draft records, and check if a draft submission exists for each record.
496
+ // If no draft submission exists for a record, the draft was likely submitted, so we must remove it
497
+ // from the list of public drafts so it no longer appears in the user's draft list.
498
+ for (const publicDraft of publicDrafts) {
499
+ const localDraftSubmission = await getLocalDraftSubmission(publicDraft.formSubmissionDraftId);
500
+ if (localDraftSubmission) {
501
+ filteredPublicDrafts.push(publicDraft);
502
+ }
503
+ }
504
+ await setAndBroadcastPublicDrafts(filteredPublicDrafts);
505
+ _isSyncingDrafts = false;
506
+ return;
507
+ }
508
+ try {
509
+ let localDraftsStorage = await getLocalDraftsFromStorage();
510
+ if (localDraftsStorage.deletedFormSubmissionDrafts.length) {
511
+ console.log('Removing local draft data for deleted drafts', localDraftsStorage.deletedFormSubmissionDrafts);
512
+ const newDeletedFormSubmissionDrafts = [];
513
+ for (const formSubmissionDraft of localDraftsStorage.deletedFormSubmissionDrafts) {
514
+ const { hasDeletedRemoteDraft } = await deleteDraftData(formSubmissionDraft.id, abortSignal);
515
+ if (!hasDeletedRemoteDraft) {
516
+ newDeletedFormSubmissionDrafts.push(formSubmissionDraft);
517
+ }
518
+ }
519
+ // Get local drafts again to ensure nothing has happened while processing
520
+ localDraftsStorage = await getLocalDraftsFromStorage();
521
+ localDraftsStorage.deletedFormSubmissionDrafts =
522
+ newDeletedFormSubmissionDrafts;
523
+ }
524
+ const publicDraftsStorage = await getPublicDraftsFromStorage();
525
+ // if public drafts exist, add them to the current logged in users' unsynced drafts
526
+ // and remove them from local storage
527
+ if (publicDraftsStorage.length) {
528
+ localDraftsStorage.unsyncedDraftSubmissions.push(...publicDraftsStorage);
529
+ await utilsService.localForage.setItem(generatePublicDraftsKey(), []);
530
+ }
531
+ if (localDraftsStorage.unsyncedDraftSubmissions.length) {
532
+ console.log(`Attempting to upload ${localDraftsStorage.unsyncedDraftSubmissions.length} local unsynced drafts(s).`);
533
+ const newUnsyncedDraftSubmissions = [];
534
+ for (const draftSubmission of localDraftsStorage.unsyncedDraftSubmissions) {
535
+ console.log('Uploading draft data that was saved while offline', draftSubmission.title);
536
+ draftSubmission.backgroundUpload = false;
537
+ const formSubmissionDraftVersion = await saveDraftSubmission({
538
+ draftSubmission,
539
+ autoSaveKey: undefined,
540
+ abortSignal,
541
+ skipUpload: !isUsingPrivateDrafts,
542
+ });
543
+ if (!formSubmissionDraftVersion) {
544
+ newUnsyncedDraftSubmissions.push(draftSubmission);
545
+ }
546
+ }
547
+ // Get local drafts again to ensure nothing has happened while processing
548
+ localDraftsStorage = await getLocalDraftsFromStorage();
549
+ localDraftsStorage.unsyncedDraftSubmissions = newUnsyncedDraftSubmissions;
550
+ }
551
+ const formSubmissionDrafts = await tryGetFormSubmissionDrafts(formsAppId, abortSignal);
552
+ if (formSubmissionDrafts) {
553
+ localDraftsStorage.syncedFormSubmissionDrafts = formSubmissionDrafts;
554
+ }
555
+ await setAndBroadcastDrafts(localDraftsStorage);
556
+ if (localDraftsStorage.syncedFormSubmissionDrafts.length) {
557
+ console.log('Ensuring all draft data is available for offline use for synced drafts', localDraftsStorage.syncedFormSubmissionDrafts);
558
+ for (const formSubmissionDraft of localDraftsStorage.syncedFormSubmissionDrafts) {
559
+ await getDraftSubmission(formSubmissionDraft, abortSignal).catch((error) => {
560
+ console.warn('Could not download Draft Data as JSON', error);
561
+ });
562
+ }
563
+ }
564
+ console.log('Finished syncing drafts.');
565
+ _isSyncingDrafts = false;
566
+ }
567
+ catch (error) {
568
+ _isSyncingDrafts = false;
569
+ if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {
570
+ console.log('Syncing drafts has been aborted');
571
+ return;
572
+ }
573
+ console.warn('Error while attempting to sync and update local drafts', error);
574
+ if (!(error instanceof OneBlinkAppsError)) {
575
+ Sentry.captureException(error);
576
+ }
577
+ if (throwError) {
578
+ throw error;
579
+ }
580
+ }
581
+ }
582
+ export { registerDraftsListener, upsertDraft, getDraftAndData, getDrafts, getPublicDrafts, deleteDraft, syncDrafts, getLatestFormSubmissionDraftVersion, };
583
+ //# sourceMappingURL=draft-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-service.js","sourceRoot":"","sources":["../../src/apps/draft-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as uuidv4 } from 'uuid'\nimport _orderBy from 'lodash.orderby'\nimport utilsService from './services/utils'\nimport OneBlinkAppsError from './services/errors/oneBlinkAppsError'\nimport { isOffline } from './offline-service'\nimport { getUsername } from './services/cognito'\nimport { getFormsKeyId, getCurrentFormsAppUser } from './auth-service'\nimport { getFormSubmissionDrafts, uploadDraftData } from './services/api/drafts'\nimport {\n getPendingQueueSubmissions,\n deletePendingQueueSubmission,\n} from './services/pending-queue'\nimport {\n deleteDraftData,\n getDraftSubmission,\n getLatestFormSubmissionDraftVersion,\n getLocalDraftSubmission,\n removeLocalDraftSubmission,\n saveDraftSubmission,\n} from './services/draft-data-store'\nimport { SubmissionTypes } from '@oneblink/types'\nimport Sentry from './Sentry'\nimport {\n DraftSubmission,\n DraftSubmissionInput,\n LocalFormSubmissionDraft,\n ProgressListener,\n} from './types/submissions'\n\nfunction generateDraftsKey(username: string) {\n return `V2_DRAFTS_${username}`\n}\n\nfunction generatePublicDraftsKey() {\n return `V2_DRAFTS_PUBLIC`\n}\n\ninterface LocalDraftsStorage {\n deletedFormSubmissionDrafts: SubmissionTypes.FormSubmissionDraft[]\n unsyncedDraftSubmissions: DraftSubmission[]\n syncedFormSubmissionDrafts: SubmissionTypes.FormSubmissionDraft[]\n}\n\nasync function checkIfUsingPrivateDrafts(\n formsAppId: number,\n abortSignal?: AbortSignal,\n): Promise<boolean> {\n return getCurrentFormsAppUser(formsAppId, abortSignal)\n .then((user) => !!user)\n .catch((error) => {\n if (error.status >= 400 && error.status < 500) {\n return false\n } else {\n Sentry.captureException(error)\n console.log(\n 'Could not determine if the current user has access to this forms app',\n error,\n )\n return false\n }\n })\n}\n\nfunction generateLocalFormSubmissionDraftsFromDraftSubmissions(\n draftSubmissions: DraftSubmission[],\n pendingSubmissionsDraftIds: Set<string>,\n deletedDraftIds: Set<string>,\n) {\n const localFormSubmissionDraftsMap = new Map<\n string,\n LocalFormSubmissionDraft\n >()\n\n for (const draftSubmission of draftSubmissions) {\n if (\n // Remove drafts that are in the pending queue\n !pendingSubmissionsDraftIds.has(draftSubmission.formSubmissionDraftId) &&\n // Remove any drafts deleted while offline\n !deletedDraftIds.has(draftSubmission.formSubmissionDraftId)\n ) {\n localFormSubmissionDraftsMap.set(draftSubmission.formSubmissionDraftId, {\n formsAppId: draftSubmission.formsAppId,\n formId: draftSubmission.definition.id,\n externalId: draftSubmission.externalId,\n jobId: draftSubmission.jobId,\n previousFormSubmissionApprovalId:\n draftSubmission.previousFormSubmissionApprovalId,\n taskId: draftSubmission.taskCompletion?.task.taskId,\n taskGroupInstanceId:\n draftSubmission.taskCompletion?.taskGroupInstance\n ?.taskGroupInstanceId,\n taskActionId: draftSubmission.taskCompletion?.taskAction.taskActionId,\n draftSubmission,\n versions: undefined,\n })\n }\n }\n\n return localFormSubmissionDraftsMap\n}\n\nasync function getPendingSubmissionsDraftIds() {\n const pendingSubmissions = await getPendingQueueSubmissions()\n return pendingSubmissions.reduce<Set<string>>((memo, pendingSubmission) => {\n if (pendingSubmission.formSubmissionDraftId) {\n memo.add(pendingSubmission.formSubmissionDraftId)\n }\n return memo\n }, new Set<string>())\n}\n\nasync function generatePublicLocalFormSubmissionDraftsFromStorage(\n publicDraftsStorage: DraftSubmission[],\n) {\n const pendingSubmissionsDraftIds = await getPendingSubmissionsDraftIds()\n const localFormSubmissionDraftsMap =\n generateLocalFormSubmissionDraftsFromDraftSubmissions(\n publicDraftsStorage,\n pendingSubmissionsDraftIds,\n new Set(),\n )\n\n const localFormSubmissionDrafts = Array.from(\n localFormSubmissionDraftsMap.values(),\n )\n\n return _orderBy(localFormSubmissionDrafts, (localFormSubmissionDraft) => {\n return localFormSubmissionDraft.draftSubmission?.createdAt\n })\n}\n\nasync function generateLocalFormSubmissionDraftsFromStorage(\n localDraftsStorage: LocalDraftsStorage,\n): Promise<LocalFormSubmissionDraft[]> {\n const pendingSubmissionsDraftIds = await getPendingSubmissionsDraftIds()\n const deletedDraftIds = new Set(\n localDraftsStorage.deletedFormSubmissionDrafts.map(({ id }) => id),\n )\n\n const localFormSubmissionDraftsMap =\n generateLocalFormSubmissionDraftsFromDraftSubmissions(\n localDraftsStorage.unsyncedDraftSubmissions,\n pendingSubmissionsDraftIds,\n deletedDraftIds,\n )\n\n for (const formSubmissionDraft of localDraftsStorage.syncedFormSubmissionDrafts) {\n if (\n // Unsycned version of draft takes priority over the synced version\n !localFormSubmissionDraftsMap.has(formSubmissionDraft.id) &&\n // Remove drafts that are in the pending queue\n !pendingSubmissionsDraftIds.has(formSubmissionDraft.id) &&\n // Remove any drafts deleted while offline\n !deletedDraftIds.has(formSubmissionDraft.id)\n ) {\n const draftSubmission = await getDraftSubmission(\n formSubmissionDraft,\n ).catch((err) => {\n console.warn(\n `Could not fetch draft submission for draft: ${formSubmissionDraft.id}`,\n err,\n )\n return undefined\n })\n localFormSubmissionDraftsMap.set(formSubmissionDraft.id, {\n ...formSubmissionDraft,\n draftSubmission,\n })\n }\n }\n\n const localFormSubmissionDrafts = Array.from(\n localFormSubmissionDraftsMap.values(),\n )\n\n return _orderBy(localFormSubmissionDrafts, (localFormSubmissionDraft) => {\n return (\n localFormSubmissionDraft.draftSubmission?.createdAt ||\n getLatestFormSubmissionDraftVersion(localFormSubmissionDraft.versions)\n ?.createdAt\n )\n })\n}\n\nfunction errorHandler(error: Error): Error {\n console.error('Local Forage Error', error)\n if (/The serialized value is too large/.test(error.message)) {\n return new OneBlinkAppsError(\n 'It seems you have run out of space. Please delete some of your drafts to allow new drafts to be created or existing drafts to be updated.',\n {\n originalError: error,\n },\n )\n }\n\n return error\n}\n\nconst draftsListeners: Array<(drafts: LocalFormSubmissionDraft[]) => unknown> =\n []\n\n/**\n * Register a listener function that will be passed an array of Drafts when a\n * draft is added, updated or deleted.\n *\n * #### Example\n *\n * ```js\n * const listener = async (drafts) => {\n * // use drafts here...\n * }\n * const deregister = await draftService.registerDraftsListener(listener)\n *\n * // When no longer needed, remember to deregister the listener\n * deregister()\n * ```\n *\n * @param listener\n * @returns\n */\nfunction registerDraftsListener(\n listener: (drafts: LocalFormSubmissionDraft[]) => unknown,\n): () => void {\n draftsListeners.push(listener)\n\n return () => {\n const index = draftsListeners.indexOf(listener)\n if (index !== -1) {\n draftsListeners.splice(index, 1)\n }\n }\n}\n\nasync function executeDraftsListeners(\n localFormSubmissionDrafts: LocalFormSubmissionDraft[],\n) {\n for (const draftsListener of draftsListeners) {\n draftsListener(localFormSubmissionDrafts)\n }\n}\n\n/**\n * Create or update a Draft in the local store and sync it with remote drafts.\n * Will also handle cleaning up auto save data (if the `autoSaveKey` property is\n * passed).\n *\n * #### Example\n *\n * ```js\n * const abortController = new AbortController()\n * const formSubmissionDraftId = 'd3aeb944-d0b3-11ea-87d0-0242ac130003' // pass `undefined` to create a new draft\n * const autoSaveKey = 'SET ME TO DELETE AUTOSAVE DATA AFTER SAVING DRAFT'\n * const draftSubmissionInput = {\n * title: 1,\n * formsAppId: 1,\n * submission: {\n * form: 'data',\n * goes: 'here',\n * },\n * definition: {\n * form: 'definition',\n * goes: 'here',\n * },\n * }\n * await draftService.upsertDraft({\n * formSubmissionDraftId,\n * autoSaveKey,\n * draftSubmissionInput,\n * abortSignal: abortController.signal,\n * onProgress: (progress) => {\n * // ...\n * },\n * })\n * ```\n *\n * @param options\n * @returns\n */\nasync function upsertDraft({\n formSubmissionDraftId,\n draftSubmissionInput,\n autoSaveKey,\n onProgress,\n abortSignal,\n pendingTimestamp,\n}: {\n formSubmissionDraftId: string | undefined\n draftSubmissionInput: DraftSubmissionInput\n autoSaveKey?: string\n onProgress?: ProgressListener\n abortSignal?: AbortSignal\n pendingTimestamp?: string\n}): Promise<void> {\n const draftSubmission: DraftSubmission = {\n ...draftSubmissionInput,\n createdAt: new Date().toISOString(),\n formSubmissionDraftId: formSubmissionDraftId || uuidv4(),\n }\n\n const keyId = getFormsKeyId()\n if (keyId) {\n if (isOffline()) {\n throw new OneBlinkAppsError('Drafts cannot be saved while offline.', {\n isOffline: true,\n })\n }\n\n await uploadDraftData(draftSubmission, onProgress, abortSignal)\n return\n }\n\n try {\n const isUsingPrivateDrafts = await checkIfUsingPrivateDrafts(\n draftSubmission.formsAppId,\n )\n const formSubmissionDraftVersion = await saveDraftSubmission({\n draftSubmission,\n autoSaveKey,\n onProgress,\n skipUpload: !isUsingPrivateDrafts,\n })\n\n if (isUsingPrivateDrafts) {\n const localDraftsStorage = await getLocalDraftsFromStorage()\n\n if (formSubmissionDraftVersion) {\n console.log('Draft was saved on server', formSubmissionDraftVersion)\n localDraftsStorage.syncedFormSubmissionDrafts =\n await getFormSubmissionDrafts(draftSubmission.formsAppId, abortSignal)\n // Remove draft from unsynced incase it was created offline\n if (formSubmissionDraftId) {\n localDraftsStorage.unsyncedDraftSubmissions =\n localDraftsStorage.unsyncedDraftSubmissions.filter(\n (unsyncedDraftSubmission) =>\n unsyncedDraftSubmission.formSubmissionDraftId !==\n formSubmissionDraftId,\n )\n }\n } else {\n console.log(\n 'Draft could not be saved on server, saving locally to sync later',\n draftSubmission,\n )\n let updated = false\n\n if (formSubmissionDraftId) {\n localDraftsStorage.unsyncedDraftSubmissions =\n localDraftsStorage.unsyncedDraftSubmissions.map(\n (unsyncedDraftSubmission) => {\n if (\n unsyncedDraftSubmission.formSubmissionDraftId ===\n formSubmissionDraftId\n ) {\n updated = true\n return draftSubmission\n }\n return unsyncedDraftSubmission\n },\n )\n // Remove draft from synced drafts incase it was retrieved while online\n localDraftsStorage.syncedFormSubmissionDrafts =\n localDraftsStorage.syncedFormSubmissionDrafts.filter(\n ({ id }) => id !== formSubmissionDraftId,\n )\n }\n\n if (!updated) {\n localDraftsStorage.unsyncedDraftSubmissions.push(draftSubmission)\n }\n }\n\n await setAndBroadcastDrafts(localDraftsStorage)\n } else {\n let updated = false\n const publicDraftsStorage = (await getPublicDraftsFromStorage()).map(\n (publicDraftSubmission) => {\n if (\n publicDraftSubmission.formSubmissionDraftId ===\n formSubmissionDraftId\n ) {\n updated = true\n return draftSubmission\n }\n return publicDraftSubmission\n },\n )\n if (!updated) {\n publicDraftsStorage.push(draftSubmission)\n }\n await setAndBroadcastPublicDrafts(publicDraftsStorage)\n }\n\n if (pendingTimestamp) {\n await deletePendingQueueSubmission(pendingTimestamp)\n }\n syncDrafts({\n throwError: false,\n formsAppId: draftSubmission.formsAppId,\n })\n } catch (err) {\n Sentry.captureException(err)\n throw errorHandler(err as Error)\n }\n}\n\nasync function getLocalDraftsFromStorage(): Promise<LocalDraftsStorage> {\n const username = getUsername()\n if (username) {\n try {\n const localDraftsStorage =\n await utilsService.localForage.getItem<LocalDraftsStorage>(\n generateDraftsKey(username),\n )\n if (localDraftsStorage) {\n return localDraftsStorage\n }\n } catch (err) {\n Sentry.captureException(err)\n throw errorHandler(err as Error)\n }\n }\n\n return {\n unsyncedDraftSubmissions: [],\n syncedFormSubmissionDrafts: [],\n deletedFormSubmissionDrafts: [],\n }\n}\n\nasync function getPublicDraftsFromStorage(): Promise<DraftSubmission[]> {\n try {\n const publicDrafts = await utilsService.localForage.getItem<\n DraftSubmission[]\n >(generatePublicDraftsKey())\n if (publicDrafts) {\n return publicDrafts\n }\n } catch (err) {\n Sentry.captureException(err)\n throw errorHandler(err as Error)\n }\n\n return []\n}\n\n/**\n * Get an array of Drafts for the currently logged in user.\n *\n * #### Example\n *\n * ```js\n * const drafts = await draftService.getDrafts()\n * ```\n *\n * @returns\n */\nasync function getDrafts(): Promise<LocalFormSubmissionDraft[]> {\n const localDraftsStorage = await getLocalDraftsFromStorage()\n return await generateLocalFormSubmissionDraftsFromStorage(localDraftsStorage)\n}\n\n/**\n * Get an array of Drafts that have been submitted publicly on this device.\n *\n * #### Example\n *\n * ```js\n * const drafts = await draftService.getPublicDrafts()\n * ```\n *\n * @returns\n */\nasync function getPublicDrafts(): Promise<LocalFormSubmissionDraft[]> {\n const publicDraftsStorage = await getPublicDraftsFromStorage()\n return await generatePublicLocalFormSubmissionDraftsFromStorage(\n publicDraftsStorage,\n )\n}\n\nasync function tryGetFormSubmissionDrafts(\n formsAppId: number,\n abortSignal: AbortSignal | undefined,\n) {\n try {\n return await getFormSubmissionDrafts(formsAppId, abortSignal)\n } catch (error) {\n if (!(error instanceof OneBlinkAppsError) || !error.isOffline) {\n throw error\n }\n }\n}\n\n/**\n * Get a single Draft and the associated submission data.\n *\n * #### Example\n *\n * ```js\n * const draftId = 'd3aeb944-d0b3-11ea-87d0-0242ac130003'\n * const { draft, draftData, lastElementUpdated } =\n * await draftService.getDraftAndData(draftId)\n * // use \"draftData\" to prefill a from\n * ```\n *\n * @param draftId\n * @returns\n */\nasync function getDraftAndData(\n formsAppId: number,\n formSubmissionDraftId: string | undefined | null,\n abortSignal: AbortSignal | undefined,\n): Promise<DraftSubmission | undefined> {\n if (!formSubmissionDraftId) {\n return\n }\n\n let formSubmissionDrafts = await tryGetFormSubmissionDrafts(\n formsAppId,\n abortSignal,\n )\n const isUsingPrivateDrafts = await checkIfUsingPrivateDrafts(formsAppId)\n if (isUsingPrivateDrafts) {\n const localDraftsStorage = await getLocalDraftsFromStorage()\n if (formSubmissionDrafts) {\n localDraftsStorage.syncedFormSubmissionDrafts = formSubmissionDrafts\n await setAndBroadcastDrafts(localDraftsStorage)\n } else {\n formSubmissionDrafts = localDraftsStorage.syncedFormSubmissionDrafts\n }\n\n const formSubmissionDraft = formSubmissionDrafts.find(\n ({ id }) => id === formSubmissionDraftId,\n )\n if (!formSubmissionDraft) {\n return (await getLocalDraftSubmission(formSubmissionDraftId)) || undefined\n }\n\n return await getDraftSubmission(formSubmissionDraft)\n } else {\n if (formSubmissionDrafts) {\n return (await getLocalDraftSubmission(formSubmissionDraftId)) || undefined\n }\n }\n}\n\n/**\n * Remove a draft from the local store and sync with remote drafts.\n *\n * #### Example\n *\n * ```js\n * const draftId = 'd3aeb944-d0b3-11ea-87d0-0242ac130003'\n * await draftService.deleteDraft(draftId)\n * ```\n *\n * @param draftId\n * @param formsAppId\n * @returns\n */\nasync function deleteDraft(\n formSubmissionDraftId: string,\n formsAppId: number,\n abortSignal?: AbortSignal,\n): Promise<void> {\n try {\n await removeLocalDraftSubmission(formSubmissionDraftId)\n const isUsingPrivateDrafts = await checkIfUsingPrivateDrafts(formsAppId)\n if (isUsingPrivateDrafts) {\n const localDraftsStorage = await getLocalDraftsFromStorage()\n const formSubmissionDraft =\n localDraftsStorage.syncedFormSubmissionDrafts.find(\n ({ id }) => id === formSubmissionDraftId,\n )\n if (formSubmissionDraft) {\n const { hasDeletedRemoteDraft } = await deleteDraftData(\n formSubmissionDraftId,\n abortSignal,\n )\n localDraftsStorage.syncedFormSubmissionDrafts =\n localDraftsStorage.syncedFormSubmissionDrafts.filter(\n ({ id }) => id !== formSubmissionDraft.id,\n )\n if (!hasDeletedRemoteDraft) {\n localDraftsStorage.deletedFormSubmissionDrafts.push(\n formSubmissionDraft,\n )\n }\n } else {\n console.log(\n 'Could not find existing draft in synced drafts to delete',\n {\n formSubmissionDraftId,\n localDraftsStorage,\n },\n )\n const draftSubmission =\n localDraftsStorage.unsyncedDraftSubmissions.find(\n (draftSubmission) =>\n draftSubmission.formSubmissionDraftId === formSubmissionDraftId,\n )\n if (!draftSubmission) {\n return\n }\n\n localDraftsStorage.unsyncedDraftSubmissions =\n localDraftsStorage.unsyncedDraftSubmissions.filter(\n (draftSubmission) =>\n draftSubmission.formSubmissionDraftId !== formSubmissionDraftId,\n )\n }\n\n await setAndBroadcastDrafts(localDraftsStorage)\n } else {\n let publicDraftsStorage = await getPublicDraftsFromStorage()\n const draftSubmission = publicDraftsStorage.find(\n (draftSubmission) =>\n draftSubmission.formSubmissionDraftId === formSubmissionDraftId,\n )\n if (!draftSubmission) {\n return\n }\n\n publicDraftsStorage = publicDraftsStorage.filter(\n (draftSubmission) =>\n draftSubmission.formSubmissionDraftId !== formSubmissionDraftId,\n )\n\n await setAndBroadcastPublicDrafts(publicDraftsStorage)\n }\n\n syncDrafts({\n throwError: false,\n formsAppId,\n })\n } catch (err) {\n Sentry.captureException(err)\n throw errorHandler(err as Error)\n }\n}\n\nasync function setAndBroadcastPublicDrafts(publicDrafts: DraftSubmission[]) {\n await utilsService.localForage.setItem(\n generatePublicDraftsKey(),\n publicDrafts,\n )\n\n console.log('Public drafts have been updated', publicDrafts)\n const localFormSubmissionDrafts =\n await generatePublicLocalFormSubmissionDraftsFromStorage(publicDrafts)\n await executeDraftsListeners(\n localFormSubmissionDrafts.map((draft) => ({ ...draft, isPublic: true })),\n )\n}\n\nasync function setAndBroadcastDrafts(\n localDraftsStorage: LocalDraftsStorage,\n): Promise<void> {\n const username = getUsername()\n if (!username) {\n throw new OneBlinkAppsError(\n 'You cannot set your drafts until you have logged in. Please login and try again.',\n {\n requiresLogin: true,\n },\n )\n }\n await utilsService.localForage.setItem(\n generateDraftsKey(username),\n localDraftsStorage,\n )\n\n console.log('Drafts have been updated', localDraftsStorage)\n const localFormSubmissionDrafts =\n await generateLocalFormSubmissionDraftsFromStorage(localDraftsStorage)\n await executeDraftsListeners(localFormSubmissionDrafts)\n}\n\nlet _isSyncingDrafts = false\n\n/**\n * Force a sync of remote drafts with locally stored drafts. This function will\n * swallow all errors thrown unless `true` is passed for the `throwError`\n * property.\n *\n * #### Example\n *\n * ```js\n * await draftService.syncDrafts({\n * throwError: true,\n * formsAppId: 1,\n * })\n * ```\n *\n * @param param0\n * @returns\n */\nasync function syncDrafts({\n formsAppId,\n throwError,\n abortSignal,\n}: {\n /** The id of the OneBlink Forms App to sync drafts with */\n formsAppId: number\n /** `true` to throw errors while syncing */\n throwError?: boolean\n /** Signal to abort the requests */\n abortSignal?: AbortSignal\n}): Promise<void> {\n if (_isSyncingDrafts) {\n console.log('Application is currently syncing drafts.')\n return\n }\n _isSyncingDrafts = true\n\n const isUsingPrivateDrafts = await checkIfUsingPrivateDrafts(formsAppId)\n\n if (!isUsingPrivateDrafts) {\n const publicDrafts = await getPublicDraftsFromStorage()\n const filteredPublicDrafts = []\n // iterate through public draft records, and check if a draft submission exists for each record.\n // If no draft submission exists for a record, the draft was likely submitted, so we must remove it\n // from the list of public drafts so it no longer appears in the user's draft list.\n for (const publicDraft of publicDrafts) {\n const localDraftSubmission = await getLocalDraftSubmission(\n publicDraft.formSubmissionDraftId,\n )\n if (localDraftSubmission) {\n filteredPublicDrafts.push(publicDraft)\n }\n }\n await setAndBroadcastPublicDrafts(filteredPublicDrafts)\n _isSyncingDrafts = false\n return\n }\n\n try {\n let localDraftsStorage = await getLocalDraftsFromStorage()\n if (localDraftsStorage.deletedFormSubmissionDrafts.length) {\n console.log(\n 'Removing local draft data for deleted drafts',\n localDraftsStorage.deletedFormSubmissionDrafts,\n )\n const newDeletedFormSubmissionDrafts: SubmissionTypes.FormSubmissionDraft[] =\n []\n for (const formSubmissionDraft of localDraftsStorage.deletedFormSubmissionDrafts) {\n const { hasDeletedRemoteDraft } = await deleteDraftData(\n formSubmissionDraft.id,\n abortSignal,\n )\n if (!hasDeletedRemoteDraft) {\n newDeletedFormSubmissionDrafts.push(formSubmissionDraft)\n }\n }\n\n // Get local drafts again to ensure nothing has happened while processing\n localDraftsStorage = await getLocalDraftsFromStorage()\n localDraftsStorage.deletedFormSubmissionDrafts =\n newDeletedFormSubmissionDrafts\n }\n\n const publicDraftsStorage = await getPublicDraftsFromStorage()\n // if public drafts exist, add them to the current logged in users' unsynced drafts\n // and remove them from local storage\n if (publicDraftsStorage.length) {\n localDraftsStorage.unsyncedDraftSubmissions.push(...publicDraftsStorage)\n await utilsService.localForage.setItem(generatePublicDraftsKey(), [])\n }\n\n if (localDraftsStorage.unsyncedDraftSubmissions.length) {\n console.log(\n `Attempting to upload ${localDraftsStorage.unsyncedDraftSubmissions.length} local unsynced drafts(s).`,\n )\n const newUnsyncedDraftSubmissions: DraftSubmission[] = []\n for (const draftSubmission of localDraftsStorage.unsyncedDraftSubmissions) {\n console.log(\n 'Uploading draft data that was saved while offline',\n draftSubmission.title,\n )\n draftSubmission.backgroundUpload = false\n const formSubmissionDraftVersion = await saveDraftSubmission({\n draftSubmission,\n autoSaveKey: undefined,\n abortSignal,\n skipUpload: !isUsingPrivateDrafts,\n })\n if (!formSubmissionDraftVersion) {\n newUnsyncedDraftSubmissions.push(draftSubmission)\n }\n }\n // Get local drafts again to ensure nothing has happened while processing\n localDraftsStorage = await getLocalDraftsFromStorage()\n localDraftsStorage.unsyncedDraftSubmissions = newUnsyncedDraftSubmissions\n }\n\n const formSubmissionDrafts = await tryGetFormSubmissionDrafts(\n formsAppId,\n abortSignal,\n )\n if (formSubmissionDrafts) {\n localDraftsStorage.syncedFormSubmissionDrafts = formSubmissionDrafts\n }\n\n await setAndBroadcastDrafts(localDraftsStorage)\n\n if (localDraftsStorage.syncedFormSubmissionDrafts.length) {\n console.log(\n 'Ensuring all draft data is available for offline use for synced drafts',\n localDraftsStorage.syncedFormSubmissionDrafts,\n )\n for (const formSubmissionDraft of localDraftsStorage.syncedFormSubmissionDrafts) {\n await getDraftSubmission(formSubmissionDraft, abortSignal).catch(\n (error) => {\n console.warn('Could not download Draft Data as JSON', error)\n },\n )\n }\n }\n\n console.log('Finished syncing drafts.')\n _isSyncingDrafts = false\n } catch (error) {\n _isSyncingDrafts = false\n if (abortSignal?.aborted) {\n console.log('Syncing drafts has been aborted')\n return\n }\n console.warn(\n 'Error while attempting to sync and update local drafts',\n error,\n )\n if (!(error instanceof OneBlinkAppsError)) {\n Sentry.captureException(error)\n }\n if (throwError) {\n throw error\n }\n }\n}\n\nexport {\n registerDraftsListener,\n upsertDraft,\n getDraftAndData,\n getDrafts,\n getPublicDrafts,\n deleteDraft,\n syncDrafts,\n getLatestFormSubmissionDraftVersion,\n LocalFormSubmissionDraft,\n}\n"]}