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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. package/dist/OneBlinkAutoSaveForm.d.ts +10 -10
  2. package/dist/OneBlinkAutoSaveForm.js +28 -28
  3. package/dist/OneBlinkForm.d.ts +11 -11
  4. package/dist/OneBlinkForm.js +11 -11
  5. package/dist/OneBlinkFormBase.d.ts +28 -28
  6. package/dist/OneBlinkFormBase.js +472 -472
  7. package/dist/OneBlinkFormStoreView.d.ts +8 -0
  8. package/dist/OneBlinkFormStoreView.js +55 -0
  9. package/dist/OneBlinkFormStoreView.js.map +1 -0
  10. package/dist/OneBlinkReadOnlyForm.d.ts +11 -11
  11. package/dist/OneBlinkReadOnlyForm.js +48 -48
  12. package/dist/components/AnnotationModal.d.ts +8 -0
  13. package/dist/components/AnnotationModal.js +104 -0
  14. package/dist/components/AnnotationModal.js.map +1 -0
  15. package/dist/components/AutocompleteDropdown.d.ts +26 -0
  16. package/dist/components/AutocompleteDropdown.js +174 -0
  17. package/dist/components/AutocompleteDropdown.js.map +1 -0
  18. package/dist/components/CopyToClipboardButton.d.ts +9 -0
  19. package/dist/components/CopyToClipboardButton.js +14 -0
  20. package/dist/components/CopyToClipboardButton.js.map +1 -0
  21. package/dist/components/CopyToClipboardIconButton.d.ts +10 -10
  22. package/dist/components/CopyToClipboardIconButton.js +32 -32
  23. package/dist/components/CustomAccordion.d.ts +27 -27
  24. package/dist/components/CustomAccordion.js +37 -37
  25. package/dist/components/CustomisableButtonInner.d.ts +7 -0
  26. package/dist/components/CustomisableButtonInner.js +9 -0
  27. package/dist/components/CustomisableButtonInner.js.map +1 -0
  28. package/dist/components/ErrorMessage.d.ts +13 -0
  29. package/dist/components/ErrorMessage.js +13 -0
  30. package/dist/components/ErrorMessage.js.map +1 -0
  31. package/dist/components/ErrorSnackbar.d.ts +8 -8
  32. package/dist/components/ErrorSnackbar.js +25 -25
  33. package/dist/components/FormElementLabelContainer.d.ts +12 -0
  34. package/dist/components/FormElementLabelContainer.js +16 -0
  35. package/dist/components/FormElementLabelContainer.js.map +1 -0
  36. package/dist/components/FormElementOptions.d.ts +9 -0
  37. package/dist/components/FormElementOptions.js +15 -0
  38. package/dist/components/FormElementOptions.js.map +1 -0
  39. package/dist/components/Lists.d.ts +25 -25
  40. package/dist/components/Lists.js +44 -44
  41. package/dist/components/LoadingWithMessage.d.ts +6 -6
  42. package/dist/components/LoadingWithMessage.js +11 -11
  43. package/dist/components/LookupButton.d.ts +10 -0
  44. package/dist/components/LookupButton.js +30 -0
  45. package/dist/components/LookupButton.js.map +1 -0
  46. package/dist/components/LookupNotification.d.ts +12 -0
  47. package/dist/components/LookupNotification.js +231 -0
  48. package/dist/components/LookupNotification.js.map +1 -0
  49. package/dist/components/Modal.d.ts +14 -0
  50. package/dist/components/Modal.js +15 -0
  51. package/dist/components/Modal.js.map +1 -0
  52. package/dist/components/NoResourcesYet.d.ts +12 -0
  53. package/dist/components/NoResourcesYet.js +7 -0
  54. package/dist/components/NoResourcesYet.js.map +1 -0
  55. package/dist/components/OnLoading.d.ts +10 -0
  56. package/dist/components/OnLoading.js +12 -0
  57. package/dist/components/OnLoading.js.map +1 -0
  58. package/dist/components/OneBlinkAppsErrorOriginalMessage.d.ts +7 -0
  59. package/dist/components/OneBlinkAppsErrorOriginalMessage.js +13 -0
  60. package/dist/components/OneBlinkAppsErrorOriginalMessage.js.map +1 -0
  61. package/dist/components/OneBlinkFormElements.d.ts +19 -0
  62. package/dist/components/OneBlinkFormElements.js +196 -0
  63. package/dist/components/OneBlinkFormElements.js.map +1 -0
  64. package/dist/components/PageFormElements.d.ts +17 -0
  65. package/dist/components/PageFormElements.js +49 -0
  66. package/dist/components/PageFormElements.js.map +1 -0
  67. package/dist/components/ToggleAllCheckbox.d.ts +13 -0
  68. package/dist/components/ToggleAllCheckbox.js +27 -0
  69. package/dist/components/ToggleAllCheckbox.js.map +1 -0
  70. package/dist/components/attachments/AttachmentStatus.d.ts +12 -0
  71. package/dist/components/attachments/AttachmentStatus.js +35 -0
  72. package/dist/components/attachments/AttachmentStatus.js.map +1 -0
  73. package/dist/components/attachments/FileCard.d.ts +18 -0
  74. package/dist/components/attachments/FileCard.js +58 -0
  75. package/dist/components/attachments/FileCard.js.map +1 -0
  76. package/dist/components/attachments/FileCardContent.d.ts +5 -0
  77. package/dist/components/attachments/FileCardContent.js +11 -0
  78. package/dist/components/attachments/FileCardContent.js.map +1 -0
  79. package/dist/components/attachments/Files.d.ts +14 -0
  80. package/dist/components/attachments/Files.js +27 -0
  81. package/dist/components/attachments/Files.js.map +1 -0
  82. package/dist/components/attachments/ImagePreviewUnavailable.d.ts +4 -0
  83. package/dist/components/attachments/ImagePreviewUnavailable.js +12 -0
  84. package/dist/components/attachments/ImagePreviewUnavailable.js.map +1 -0
  85. package/dist/components/attachments/UploadingAttachment.d.ts +4 -0
  86. package/dist/components/attachments/UploadingAttachment.js +13 -0
  87. package/dist/components/attachments/UploadingAttachment.js.map +1 -0
  88. package/dist/components/formStore/ColumnsConfigurationButton.d.ts +10 -0
  89. package/dist/components/formStore/ColumnsConfigurationButton.js +29 -0
  90. package/dist/components/formStore/ColumnsConfigurationButton.js.map +1 -0
  91. package/dist/components/formStore/DownloadSubmissionDataButton.d.ts +13 -0
  92. package/dist/components/formStore/DownloadSubmissionDataButton.js +45 -0
  93. package/dist/components/formStore/DownloadSubmissionDataButton.js.map +1 -0
  94. package/dist/components/formStore/FormStore.d.ts +9 -0
  95. package/dist/components/formStore/FormStore.js +103 -0
  96. package/dist/components/formStore/FormStore.js.map +1 -0
  97. package/dist/components/formStore/FormStoreTableProvider.d.ts +6 -6
  98. package/dist/components/formStore/FormStoreTableProvider.js +90 -90
  99. package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.d.ts +5 -5
  100. package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.js +19 -19
  101. package/dist/components/formStore/OneBlinkFormStoreColumnsButton.d.ts +5 -5
  102. package/dist/components/formStore/OneBlinkFormStoreColumnsButton.js +66 -66
  103. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.d.ts +5 -5
  104. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js +86 -86
  105. package/dist/components/formStore/OneBlinkFormStoreProvider.d.ts +8 -8
  106. package/dist/components/formStore/OneBlinkFormStoreProvider.js +24 -24
  107. package/dist/components/formStore/OneBlinkFormStoreRefreshButton.d.ts +5 -5
  108. package/dist/components/formStore/OneBlinkFormStoreRefreshButton.js +11 -11
  109. package/dist/components/formStore/OneBlinkFormStoreTable.d.ts +4 -4
  110. package/dist/components/formStore/OneBlinkFormStoreTable.js +194 -194
  111. package/dist/components/formStore/display/ElementDisplay.d.ts +23 -23
  112. package/dist/components/formStore/display/ElementDisplay.js +77 -77
  113. package/dist/components/formStore/display/FormStoreIcon.d.ts +2 -2
  114. package/dist/components/formStore/display/FormStoreIcon.js +2 -2
  115. package/dist/components/formStore/table/ActionedByTableCell.d.ts +11 -11
  116. package/dist/components/formStore/table/ActionedByTableCell.js +43 -43
  117. package/dist/components/formStore/table/ColumnFilters.d.ts +9 -9
  118. package/dist/components/formStore/table/ColumnFilters.js +179 -179
  119. package/dist/components/formStore/table/FormElementTableCell.d.ts +10 -10
  120. package/dist/components/formStore/table/FormElementTableCell.js +228 -228
  121. package/dist/components/formStore/table/HeaderCellMoreButton.d.ts +9 -9
  122. package/dist/components/formStore/table/HeaderCellMoreButton.js +48 -48
  123. package/dist/components/formStore/table/RepeatableSetCell.d.ts +8 -8
  124. package/dist/components/formStore/table/RepeatableSetCell.js +62 -62
  125. package/dist/components/formStore/table/RepeatableSetCellAccordion.d.ts +9 -9
  126. package/dist/components/formStore/table/RepeatableSetCellAccordion.js +11 -11
  127. package/dist/components/formStore/table/TableCellCopyButton.d.ts +7 -7
  128. package/dist/components/formStore/table/TableCellCopyButton.js +27 -27
  129. package/dist/components/formStore/table/generateColumns.d.ts +24 -24
  130. package/dist/components/formStore/table/generateColumns.js +290 -290
  131. package/dist/components/formStore/table/index.d.ts +17 -0
  132. package/dist/components/formStore/table/index.js +194 -0
  133. package/dist/components/formStore/table/index.js.map +1 -0
  134. package/dist/components/formStore/table/useFormStoreTable.d.ts +52 -52
  135. package/dist/components/formStore/table/useFormStoreTable.js +157 -157
  136. package/dist/components/formStore/useFormStoreTableContext.d.ts +44 -44
  137. package/dist/components/formStore/useFormStoreTableContext.js +9 -9
  138. package/dist/components/messages/ErrorMessage.d.ts +12 -12
  139. package/dist/components/messages/ErrorMessage.js +12 -12
  140. package/dist/components/messages/LargeIconMessage.d.ts +18 -18
  141. package/dist/components/messages/LargeIconMessage.js +33 -33
  142. package/dist/components/messages/NoResourcesYet.d.ts +11 -11
  143. package/dist/components/messages/NoResourcesYet.js +6 -6
  144. package/dist/components/pickers/V4CompatibleDatePicker.d.ts +32 -32
  145. package/dist/components/pickers/V4CompatibleDatePicker.js +70 -70
  146. package/dist/components/pickers/V4CompatibleDateTimePicker.d.ts +32 -32
  147. package/dist/components/pickers/V4CompatibleDateTimePicker.js +70 -70
  148. package/dist/components/pickers/V4CompatibleTimePicker.d.ts +28 -28
  149. package/dist/components/pickers/V4CompatibleTimePicker.js +53 -53
  150. package/dist/components/renderer/AnnotationModal.d.ts +8 -8
  151. package/dist/components/renderer/AnnotationModal.js +101 -101
  152. package/dist/components/renderer/AutocompleteDropdown.d.ts +26 -26
  153. package/dist/components/renderer/AutocompleteDropdown.js +175 -175
  154. package/dist/components/renderer/CopyToClipboardButton.d.ts +8 -8
  155. package/dist/components/renderer/CopyToClipboardButton.js +13 -13
  156. package/dist/components/renderer/CustomisableButtonInner.d.ts +7 -7
  157. package/dist/components/renderer/CustomisableButtonInner.js +8 -8
  158. package/dist/components/renderer/FormElementLabelContainer.d.ts +12 -12
  159. package/dist/components/renderer/FormElementLabelContainer.js +15 -15
  160. package/dist/components/renderer/FormElementOptions.d.ts +9 -9
  161. package/dist/components/renderer/FormElementOptions.js +14 -14
  162. package/dist/components/renderer/LookupButton.d.ts +10 -10
  163. package/dist/components/renderer/LookupButton.js +29 -29
  164. package/dist/components/renderer/LookupNotification.d.ts +12 -12
  165. package/dist/components/renderer/LookupNotification.js +230 -230
  166. package/dist/components/renderer/Modal.d.ts +14 -14
  167. package/dist/components/renderer/Modal.js +14 -14
  168. package/dist/components/renderer/OnLoading.d.ts +10 -10
  169. package/dist/components/renderer/OnLoading.js +11 -11
  170. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.d.ts +7 -7
  171. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js +12 -12
  172. package/dist/components/renderer/OneBlinkFormElements.d.ts +19 -19
  173. package/dist/components/renderer/OneBlinkFormElements.js +202 -202
  174. package/dist/components/renderer/PageFormElements.d.ts +17 -17
  175. package/dist/components/renderer/PageFormElements.js +48 -48
  176. package/dist/components/renderer/ProgressBar.d.ts +7 -0
  177. package/dist/components/renderer/ProgressBar.js +7 -0
  178. package/dist/components/renderer/ProgressBar.js.map +1 -0
  179. package/dist/components/renderer/ToggleAllCheckbox.d.ts +13 -13
  180. package/dist/components/renderer/ToggleAllCheckbox.js +26 -26
  181. package/dist/components/renderer/attachments/AttachmentStatus.d.ts +10 -10
  182. package/dist/components/renderer/attachments/AttachmentStatus.js +36 -30
  183. package/dist/components/renderer/attachments/AttachmentStatus.js.map +1 -1
  184. package/dist/components/renderer/attachments/FileCard.d.ts +19 -18
  185. package/dist/components/renderer/attachments/FileCard.js +60 -57
  186. package/dist/components/renderer/attachments/FileCard.js.map +1 -1
  187. package/dist/components/renderer/attachments/FileCardContent.d.ts +5 -5
  188. package/dist/components/renderer/attachments/FileCardContent.js +10 -10
  189. package/dist/components/renderer/attachments/Files.d.ts +14 -0
  190. package/dist/components/renderer/attachments/Files.js +27 -0
  191. package/dist/components/renderer/attachments/Files.js.map +1 -0
  192. package/dist/components/renderer/attachments/ImagePreviewUnavailable.d.ts +4 -4
  193. package/dist/components/renderer/attachments/ImagePreviewUnavailable.js +11 -11
  194. package/dist/components/renderer/attachments/ProgressBar.d.ts +8 -0
  195. package/dist/components/renderer/attachments/ProgressBar.js +34 -0
  196. package/dist/components/renderer/attachments/ProgressBar.js.map +1 -0
  197. package/dist/components/renderer/attachments/UploadingAttachment.d.ts +4 -4
  198. package/dist/components/renderer/attachments/UploadingAttachment.js +12 -12
  199. package/dist/form-elements/ComplianceButton.d.ts +10 -10
  200. package/dist/form-elements/ComplianceButton.js +11 -11
  201. package/dist/form-elements/FormElementABN.d.ts +14 -14
  202. package/dist/form-elements/FormElementABN.js +155 -155
  203. package/dist/form-elements/FormElementAutocomplete.d.ts +19 -19
  204. package/dist/form-elements/FormElementAutocomplete.js +81 -81
  205. package/dist/form-elements/FormElementBSB.d.ts +18 -18
  206. package/dist/form-elements/FormElementBSB.js +100 -100
  207. package/dist/form-elements/FormElementBarcodeScanner.d.ts +14 -14
  208. package/dist/form-elements/FormElementBarcodeScanner.js +306 -306
  209. package/dist/form-elements/FormElementBoolean.d.ts +14 -14
  210. package/dist/form-elements/FormElementBoolean.js +16 -16
  211. package/dist/form-elements/FormElementCalculation.d.ts +11 -11
  212. package/dist/form-elements/FormElementCalculation.js +179 -179
  213. package/dist/form-elements/FormElementCamera.d.ts +15 -15
  214. package/dist/form-elements/FormElementCamera.js +227 -220
  215. package/dist/form-elements/FormElementCamera.js.map +1 -1
  216. package/dist/form-elements/FormElementCaptcha.d.ts +12 -12
  217. package/dist/form-elements/FormElementCaptcha.js +14 -14
  218. package/dist/form-elements/FormElementCheckBoxes.d.ts +15 -15
  219. package/dist/form-elements/FormElementCheckBoxes.js +64 -64
  220. package/dist/form-elements/FormElementCivicaNameRecord.d.ts +8 -8
  221. package/dist/form-elements/FormElementCivicaNameRecord.js +51 -51
  222. package/dist/form-elements/FormElementCivicaStreetName.d.ts +15 -15
  223. package/dist/form-elements/FormElementCivicaStreetName.js +38 -38
  224. package/dist/form-elements/FormElementCompliance.d.ts +22 -22
  225. package/dist/form-elements/FormElementCompliance.js +129 -129
  226. package/dist/form-elements/FormElementDate.d.ts +14 -14
  227. package/dist/form-elements/FormElementDate.js +74 -74
  228. package/dist/form-elements/FormElementDateTime.d.ts +14 -14
  229. package/dist/form-elements/FormElementDateTime.js +67 -67
  230. package/dist/form-elements/FormElementEmail.d.ts +14 -14
  231. package/dist/form-elements/FormElementEmail.js +22 -22
  232. package/dist/form-elements/FormElementFile.d.ts +13 -13
  233. package/dist/form-elements/FormElementFile.js +31 -31
  234. package/dist/form-elements/FormElementFile.js.map +1 -1
  235. package/dist/form-elements/FormElementFiles/FormElementFile.d.ts +13 -0
  236. package/dist/form-elements/FormElementFiles/FormElementFile.js +32 -0
  237. package/dist/form-elements/FormElementFiles/FormElementFile.js.map +1 -0
  238. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.d.ts +10 -0
  239. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.js +11 -0
  240. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.js.map +1 -0
  241. package/dist/form-elements/FormElementFiles/FormElementFiles.d.ts +15 -0
  242. package/dist/form-elements/FormElementFiles/FormElementFiles.js +17 -0
  243. package/dist/form-elements/FormElementFiles/FormElementFiles.js.map +1 -0
  244. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.d.ts +7 -0
  245. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.js +11 -0
  246. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.js.map +1 -0
  247. package/dist/form-elements/FormElementFiles/index.d.ts +17 -0
  248. package/dist/form-elements/FormElementFiles/index.js +18 -0
  249. package/dist/form-elements/FormElementFiles/index.js.map +1 -0
  250. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.d.ts +18 -0
  251. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js +61 -0
  252. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js.map +1 -0
  253. package/dist/form-elements/FormElementFiles.d.ts +15 -15
  254. package/dist/form-elements/FormElementFiles.js +42 -42
  255. package/dist/form-elements/FormElementForm.d.ts +17 -17
  256. package/dist/form-elements/FormElementForm.js +63 -63
  257. package/dist/form-elements/FormElementFreshdeskDependentField.d.ts +8 -8
  258. package/dist/form-elements/FormElementFreshdeskDependentField.js +15 -15
  259. package/dist/form-elements/FormElementGeoscapeAddress.d.ts +15 -15
  260. package/dist/form-elements/FormElementGeoscapeAddress.js +62 -62
  261. package/dist/form-elements/FormElementHTML.d.ts +8 -8
  262. package/dist/form-elements/FormElementHTML.js +15 -15
  263. package/dist/form-elements/FormElementHeading.d.ts +8 -8
  264. package/dist/form-elements/FormElementHeading.js +23 -23
  265. package/dist/form-elements/FormElementImage.d.ts +8 -8
  266. package/dist/form-elements/FormElementImage.js +6 -6
  267. package/dist/form-elements/FormElementLocation.d.ts +20 -20
  268. package/dist/form-elements/FormElementLocation.js +204 -204
  269. package/dist/form-elements/FormElementNumber.d.ts +14 -14
  270. package/dist/form-elements/FormElementNumber.js +72 -72
  271. package/dist/form-elements/FormElementPointAddress.d.ts +15 -15
  272. package/dist/form-elements/FormElementPointAddress.js +69 -69
  273. package/dist/form-elements/FormElementRadio.d.ts +15 -15
  274. package/dist/form-elements/FormElementRadio.js +41 -41
  275. package/dist/form-elements/FormElementRepeatableSet.d.ts +19 -19
  276. package/dist/form-elements/FormElementRepeatableSet.js +126 -126
  277. package/dist/form-elements/FormElementSection.d.ts +8 -8
  278. package/dist/form-elements/FormElementSection.js +69 -69
  279. package/dist/form-elements/FormElementSelect.d.ts +15 -15
  280. package/dist/form-elements/FormElementSelect.js +44 -44
  281. package/dist/form-elements/FormElementSignature.d.ts +15 -15
  282. package/dist/form-elements/FormElementSignature.js +138 -135
  283. package/dist/form-elements/FormElementSignature.js.map +1 -1
  284. package/dist/form-elements/FormElementSummary.d.ts +11 -11
  285. package/dist/form-elements/FormElementSummary.js +159 -159
  286. package/dist/form-elements/FormElementTelephone.d.ts +14 -14
  287. package/dist/form-elements/FormElementTelephone.js +22 -22
  288. package/dist/form-elements/FormElementText.d.ts +14 -14
  289. package/dist/form-elements/FormElementText.js +29 -29
  290. package/dist/form-elements/FormElementTextarea.d.ts +14 -14
  291. package/dist/form-elements/FormElementTextarea.js +30 -30
  292. package/dist/form-elements/FormElementTime.d.ts +14 -14
  293. package/dist/form-elements/FormElementTime.js +53 -53
  294. package/dist/form-elements/OptionButton.d.ts +11 -11
  295. package/dist/form-elements/OptionButton.js +9 -9
  296. package/dist/hooks/attachments/useAttachment.d.ts +12 -11
  297. package/dist/hooks/attachments/useAttachment.js +242 -235
  298. package/dist/hooks/attachments/useAttachment.js.map +1 -1
  299. package/dist/hooks/attachments/useAttachmentBlobs.d.ts +19 -19
  300. package/dist/hooks/attachments/useAttachmentBlobs.js +23 -23
  301. package/dist/hooks/attachments/useAttachmentObjectURLs.d.ts +24 -0
  302. package/dist/hooks/attachments/useAttachmentObjectURLs.js +37 -0
  303. package/dist/hooks/attachments/useAttachmentObjectURLs.js.map +1 -0
  304. package/dist/hooks/attachments/useAttachments.d.ts +10 -10
  305. package/dist/hooks/attachments/useAttachments.js +69 -69
  306. package/dist/hooks/attachments/useLocalAttachmentBlobs.d.ts +24 -0
  307. package/dist/hooks/attachments/useLocalAttachmentBlobs.js +40 -0
  308. package/dist/hooks/attachments/useLocalAttachmentBlobs.js.map +1 -0
  309. package/dist/hooks/useAbnLookupAuthenticationGuid.d.ts +3 -3
  310. package/dist/hooks/useAbnLookupAuthenticationGuid.js +5 -5
  311. package/dist/hooks/useAuth.d.ts +15 -15
  312. package/dist/hooks/useAuth.js +42 -42
  313. package/dist/hooks/useBooleanState.d.ts +5 -5
  314. package/dist/hooks/useBooleanState.js +8 -8
  315. package/dist/hooks/useButtonsConfiguration.d.ts +45 -0
  316. package/dist/hooks/useButtonsConfiguration.js +6 -0
  317. package/dist/hooks/useButtonsConfiguration.js.map +1 -0
  318. package/dist/hooks/useCaptchaSiteKey.d.ts +3 -3
  319. package/dist/hooks/useCaptchaSiteKey.js +5 -5
  320. package/dist/hooks/useChangeEffect.d.ts +1 -0
  321. package/dist/hooks/useChangeEffect.js +14 -0
  322. package/dist/hooks/useChangeEffect.js.map +1 -0
  323. package/dist/hooks/useClickOutsideElement.d.ts +3 -3
  324. package/dist/hooks/useClickOutsideElement.js +14 -14
  325. package/dist/hooks/useConditionalLogic.d.ts +6 -6
  326. package/dist/hooks/useConditionalLogic.js +22 -22
  327. package/dist/hooks/useConditionallyShowOptionCallback.d.ts +5 -0
  328. package/dist/hooks/useConditionallyShowOptionCallback.js +20 -0
  329. package/dist/hooks/useConditionallyShowOptionCallback.js.map +1 -0
  330. package/dist/hooks/useContrastColor.d.ts +2 -2
  331. package/dist/hooks/useContrastColor.js +12 -12
  332. package/dist/hooks/useCustomValidation.d.ts +1 -0
  333. package/dist/hooks/useCustomValidation.js +9 -0
  334. package/dist/hooks/useCustomValidation.js.map +1 -0
  335. package/dist/hooks/useDynamicOptionsLoaderEffect.d.ts +7 -0
  336. package/dist/hooks/useDynamicOptionsLoaderEffect.js +45 -0
  337. package/dist/hooks/useDynamicOptionsLoaderEffect.js.map +1 -0
  338. package/dist/hooks/useDynamicOptionsLoaderState.d.ts +7 -7
  339. package/dist/hooks/useDynamicOptionsLoaderState.js +44 -44
  340. package/dist/hooks/useExecutedLookupCallback.d.ts +12 -12
  341. package/dist/hooks/useExecutedLookupCallback.js +15 -15
  342. package/dist/hooks/useFlatpickr.d.ts +10 -10
  343. package/dist/hooks/useFlatpickr.js +73 -73
  344. package/dist/hooks/useFlatpickrGuid.d.ts +7 -7
  345. package/dist/hooks/useFlatpickrGuid.js +11 -11
  346. package/dist/hooks/useFlattenElementsContext.d.ts +2 -2
  347. package/dist/hooks/useFlattenElementsContext.js +7 -7
  348. package/dist/hooks/useFormDefinition.d.ts +4 -4
  349. package/dist/hooks/useFormDefinition.js +9 -9
  350. package/dist/hooks/useFormElementOptions.d.ts +9 -9
  351. package/dist/hooks/useFormElementOptions.js +35 -35
  352. package/dist/hooks/useFormIsReadOnly.d.ts +3 -3
  353. package/dist/hooks/useFormIsReadOnly.js +5 -5
  354. package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +24 -24
  355. package/dist/hooks/useFormSubmissionAutoSaveState.js +145 -145
  356. package/dist/hooks/useFormSubmissionModelContext.d.ts +15 -15
  357. package/dist/hooks/useFormSubmissionModelContext.js +32 -32
  358. package/dist/hooks/useFormSubmissionState.d.ts +10 -10
  359. package/dist/hooks/useFormSubmissionState.js +13 -13
  360. package/dist/hooks/useFormValidation.d.ts +7 -7
  361. package/dist/hooks/useFormValidation.js +29 -29
  362. package/dist/hooks/useGoogleMapsApiKey.d.ts +3 -3
  363. package/dist/hooks/useGoogleMapsApiKey.js +5 -5
  364. package/dist/hooks/useInfiniteScrollDataLoad.d.ts +30 -30
  365. package/dist/hooks/useInfiniteScrollDataLoad.js +124 -124
  366. package/dist/hooks/useInjectPages.d.ts +7 -7
  367. package/dist/hooks/useInjectPages.js +5 -5
  368. package/dist/hooks/useIsHovering.d.ts +5 -5
  369. package/dist/hooks/useIsHovering.js +12 -12
  370. package/dist/hooks/useIsMounted.d.ts +3 -3
  371. package/dist/hooks/useIsMounted.js +11 -11
  372. package/dist/hooks/useIsOffline.d.ts +6 -6
  373. package/dist/hooks/useIsOffline.js +26 -26
  374. package/dist/hooks/useIsPageVisible.d.ts +9 -9
  375. package/dist/hooks/useIsPageVisible.js +8 -8
  376. package/dist/hooks/useLegacyElements.d.ts +16 -0
  377. package/dist/hooks/useLegacyElements.js +55 -0
  378. package/dist/hooks/useLegacyElements.js.map +1 -0
  379. package/dist/hooks/useLoadDataState.d.ts +15 -15
  380. package/dist/hooks/useLoadDataState.js +54 -54
  381. package/dist/hooks/useLogin.d.ts +46 -46
  382. package/dist/hooks/useLogin.js +295 -295
  383. package/dist/hooks/useLookupNotification.d.ts +9 -9
  384. package/dist/hooks/useLookupNotification.js +10 -10
  385. package/dist/hooks/useLookups.d.ts +5 -5
  386. package/dist/hooks/useLookups.js +62 -62
  387. package/dist/hooks/useNullableState.d.ts +2 -2
  388. package/dist/hooks/useNullableState.js +6 -6
  389. package/dist/hooks/usePages.d.ts +24 -24
  390. package/dist/hooks/usePages.js +141 -141
  391. package/dist/hooks/useQuery.d.ts +2 -2
  392. package/dist/hooks/useQuery.js +7 -7
  393. package/dist/hooks/useSubmissionIdIsValid.d.ts +3 -3
  394. package/dist/hooks/useSubmissionIdIsValid.js +19 -19
  395. package/dist/hooks/useToggleAll.d.ts +6 -0
  396. package/dist/hooks/useToggleAll.js +24 -0
  397. package/dist/hooks/useToggleAll.js.map +1 -0
  398. package/dist/hooks/useToggleComplianceChildren.d.ts +3 -3
  399. package/dist/hooks/useToggleComplianceChildren.js +13 -13
  400. package/dist/index.d.ts +23 -22
  401. package/dist/index.js +23 -22
  402. package/dist/index.js.map +1 -1
  403. package/dist/services/attachments.d.ts +10 -10
  404. package/dist/services/attachments.js +72 -72
  405. package/dist/services/barcode-readers/quagger.d.ts +1 -1
  406. package/dist/services/barcode-readers/quagger.js +34 -34
  407. package/dist/services/blob-utils.d.ts +5 -5
  408. package/dist/services/blob-utils.js +73 -73
  409. package/dist/services/checkBsbsAreInvalid.d.ts +3 -3
  410. package/dist/services/checkBsbsAreInvalid.js +40 -40
  411. package/dist/services/checkIfAttachmentsAreUploading.d.ts +3 -3
  412. package/dist/services/checkIfAttachmentsAreUploading.js +57 -57
  413. package/dist/services/checkIfAttachmentsExist.d.ts +5 -5
  414. package/dist/services/checkIfAttachmentsExist.js +144 -144
  415. package/dist/services/checkIfBsbsAreValidating.d.ts +3 -3
  416. package/dist/services/checkIfBsbsAreValidating.js +40 -40
  417. package/dist/services/clean-form-elements-ctrl-model.d.ts +4 -0
  418. package/dist/services/clean-form-elements-ctrl-model.js +166 -0
  419. package/dist/services/clean-form-elements-ctrl-model.js.map +1 -0
  420. package/dist/services/cleanFormSubmissionModel.d.ts +6 -6
  421. package/dist/services/cleanFormSubmissionModel.js +203 -203
  422. package/dist/services/conditionally-show-element.d.ts +11 -0
  423. package/dist/services/conditionally-show-element.js +92 -0
  424. package/dist/services/conditionally-show-element.js.map +1 -0
  425. package/dist/services/conditionally-show-option.d.ts +3 -0
  426. package/dist/services/conditionally-show-option.js +135 -0
  427. package/dist/services/conditionally-show-option.js.map +1 -0
  428. package/dist/services/defaultCoordinates.d.ts +5 -5
  429. package/dist/services/defaultCoordinates.js +8 -8
  430. package/dist/services/download-file.d.ts +3 -3
  431. package/dist/services/download-file.js +90 -90
  432. package/dist/services/drawTimestampOnCanvas.d.ts +1 -1
  433. package/dist/services/drawTimestampOnCanvas.js +22 -22
  434. package/dist/services/flattenFormElements.d.ts +2 -0
  435. package/dist/services/flattenFormElements.js +13 -0
  436. package/dist/services/flattenFormElements.js.map +1 -0
  437. package/dist/services/form-validation.d.ts +10 -10
  438. package/dist/services/form-validation.js +561 -561
  439. package/dist/services/generate-default-data.d.ts +13 -13
  440. package/dist/services/generate-default-data.js +494 -494
  441. package/dist/services/generateCivicaNameRecordElements.d.ts +2 -2
  442. package/dist/services/generateCivicaNameRecordElements.js +140 -140
  443. package/dist/services/generateFreshdeskDependentFieldElements.d.ts +2 -2
  444. package/dist/services/generateFreshdeskDependentFieldElements.js +69 -69
  445. package/dist/services/getCorrectDateFromDateOnlyString.d.ts +2 -0
  446. package/dist/services/getCorrectDateFromDateOnlyString.js +4 -0
  447. package/dist/services/getCorrectDateFromDateOnlyString.js.map +1 -0
  448. package/dist/services/sanitize-html.d.ts +2 -2
  449. package/dist/services/sanitize-html.js +20 -20
  450. package/dist/services/scrolling-service.d.ts +7 -7
  451. package/dist/services/scrolling-service.js +38 -38
  452. package/dist/services/utils-service.d.ts +5 -5
  453. package/dist/services/utils-service.js +16 -16
  454. package/dist/styles/boolean.scss +12 -0
  455. package/dist/styles/ob-file.scss +63 -0
  456. package/dist/styles/progress.scss +8 -0
  457. package/dist/styles.css +7 -0
  458. package/dist/styles.css.map +1 -1
  459. package/dist/styles.scss +1 -0
  460. package/dist/types/attachments.d.ts +19 -19
  461. package/dist/types/attachments.js +1 -1
  462. package/dist/types/form.d.ts +40 -40
  463. package/dist/types/form.js +2 -2
  464. package/package.json +2 -2
@@ -1,236 +1,243 @@
1
- import * as React from 'react';
2
- import { submissionService } from '@oneblink/apps';
3
- import useFormDefinition from '../useFormDefinition';
4
- import useIsOffline from '../useIsOffline';
5
- import { checkIfContentTypeIsImage } from '../../services/attachments';
6
- import useAuth from '../../hooks/useAuth';
7
- import { urlToBlobAsync } from '../../services/blob-utils';
8
- import useAttachmentBlobs from '../../hooks/attachments/useAttachmentBlobs';
9
- export default function useAttachment(value, element, onChange, disableUpload) {
10
- const isPrivate = element.storageType !== 'public';
11
- const form = useFormDefinition();
12
- const isOffline = useIsOffline();
13
- const { isLoggedIn, isUsingFormsKey } = useAuth();
14
- const { storeAttachmentBlobLocally, getAttachmentBlobLocally } = useAttachmentBlobs();
15
- const isAuthenticated = isLoggedIn || isUsingFormsKey;
16
- const [imageUrlState, setImageUrlState] = React.useState({});
17
- // TRIGGER UPLOAD
18
- React.useEffect(() => {
19
- const formId = form === null || form === void 0 ? void 0 : form.id;
20
- if (isOffline ||
21
- disableUpload ||
22
- !formId ||
23
- !value ||
24
- typeof value !== 'object' ||
25
- value.type !== 'NEW' ||
26
- !value.data) {
27
- return;
28
- }
29
- const newAttachment = value;
30
- const data = value.data;
31
- let ignore = false;
32
- const abortController = new AbortController();
33
- const effect = async () => {
34
- try {
35
- console.log('Attempting to upload attachment...', newAttachment.fileName);
36
- const upload = await submissionService.uploadAttachment({
37
- formId,
38
- fileName: newAttachment.fileName,
39
- contentType: data.type,
40
- data,
41
- isPrivate,
42
- }, abortController.signal);
43
- if (ignore) {
44
- return;
45
- }
46
- // Store Blob in Context if image is private
47
- if (isPrivate) {
48
- storeAttachmentBlobLocally({ attachmentId: upload.id, blob: data });
49
- }
50
- console.log('Successfully Uploaded attachment!', upload);
51
- // UPDATE ATTACHMENT
52
- onChange(newAttachment._id, upload);
53
- }
54
- catch (error) {
55
- if (ignore) {
56
- return;
57
- }
58
- console.warn('Failed to upload attachment...', newAttachment.fileName, error);
59
- onChange(newAttachment._id, {
60
- ...newAttachment,
61
- type: 'ERROR',
62
- errorMessage: error.message,
63
- });
64
- }
65
- };
66
- effect();
67
- return () => {
68
- ignore = true;
69
- abortController.abort();
70
- };
71
- }, [
72
- disableUpload,
73
- form === null || form === void 0 ? void 0 : form.id,
74
- isOffline,
75
- isPrivate,
76
- onChange,
77
- storeAttachmentBlobLocally,
78
- value,
79
- ]);
80
- // TRIGGER DOWNLOAD
81
- React.useEffect(() => {
82
- if (!value) {
83
- return;
84
- }
85
- // If the value is string we will assume a base64 data uri
86
- if (typeof value === 'string') {
87
- setImageUrlState({
88
- imageUrl: value,
89
- });
90
- return;
91
- }
92
- if (value.type) {
93
- if (!value.data) {
94
- return;
95
- }
96
- if (!checkIfContentTypeIsImage(value.data.type)) {
97
- // Not an image which we will represent as null
98
- setImageUrlState({
99
- imageUrl: null,
100
- });
101
- return;
102
- }
103
- const imageUrl = URL.createObjectURL(value.data);
104
- console.log('Created object url from blob for image', imageUrl);
105
- setImageUrlState({
106
- imageUrl,
107
- });
108
- return;
109
- }
110
- if (!checkIfContentTypeIsImage(value.contentType)) {
111
- // Not an image which we will represent as null
112
- setImageUrlState({
113
- imageUrl: null,
114
- });
115
- return;
116
- }
117
- // If the file is a public url we can finish here and just use that
118
- if (!value.isPrivate) {
119
- setImageUrlState({
120
- imageUrl: value.url,
121
- });
122
- return;
123
- }
124
- // Check for locally stored Blob. Blob should be stored locally for private uploaded images only
125
- const locallyStoredAttachment = getAttachmentBlobLocally(value.id);
126
- if (locallyStoredAttachment) {
127
- const imageUrl = URL.createObjectURL(locallyStoredAttachment.blob);
128
- console.log('Created object url from locally stored Blob for private image attachment', imageUrl);
129
- setImageUrlState({
130
- imageUrl,
131
- });
132
- return;
133
- }
134
- // If user is not logged in or is offline, we can't download private images.
135
- // If the blob was not stored locally (above) for some reason, the user is SOL
136
- if (!isAuthenticated || isOffline) {
137
- setImageUrlState({
138
- imageUrl: null,
139
- });
140
- return;
141
- }
142
- let ignore = false;
143
- const abortController = new AbortController();
144
- const privateImageUrl = value.url;
145
- const effect = async () => {
146
- try {
147
- const blob = await urlToBlobAsync(privateImageUrl, true, abortController.signal);
148
- if (ignore) {
149
- return;
150
- }
151
- // Store private image attachment in Context
152
- storeAttachmentBlobLocally({ attachmentId: value.id, blob });
153
- const imageUrl = URL.createObjectURL(blob);
154
- console.log('Created object url from private attachment for image', imageUrl);
155
- setImageUrlState({
156
- imageUrl,
157
- });
158
- }
159
- catch (error) {
160
- if (ignore) {
161
- return;
162
- }
163
- console.warn('Error loading file:', error);
164
- setImageUrlState({
165
- loadImageUrlError: error,
166
- });
167
- }
168
- };
169
- effect();
170
- return () => {
171
- ignore = true;
172
- abortController.abort();
173
- };
174
- }, [
175
- getAttachmentBlobLocally,
176
- isAuthenticated,
177
- isOffline,
178
- storeAttachmentBlobLocally,
179
- value,
180
- ]);
181
- React.useEffect(() => {
182
- return () => {
183
- const imageUrl = imageUrlState.imageUrl;
184
- if (imageUrl && imageUrl.startsWith('blob:')) {
185
- console.log('revoking image url:', imageUrl);
186
- URL.revokeObjectURL(imageUrl);
187
- }
188
- };
189
- }, [imageUrlState.imageUrl]);
190
- const isUploading = React.useMemo(() => {
191
- return !!(value &&
192
- typeof value !== 'string' &&
193
- value.type &&
194
- value.type === 'NEW');
195
- }, [value]);
196
- const uploadErrorMessage = React.useMemo(() => {
197
- if (value &&
198
- typeof value !== 'string' &&
199
- value.type &&
200
- value.type === 'ERROR') {
201
- return value.errorMessage;
202
- }
203
- }, [value]);
204
- const canDownload = React.useMemo(() => {
205
- if (!value) {
206
- return false;
207
- }
208
- // legacy attachment as base64 data
209
- if (typeof value === 'string') {
210
- return true;
211
- }
212
- // attachments still uploading or failed to upload
213
- if (value.type) {
214
- // can only be downloaded if we still have the data
215
- return !!value.data;
216
- }
217
- // attachments that have been uploaded
218
- // public attachments can always be downloaded
219
- if (!value.isPrivate) {
220
- return true;
221
- }
222
- // private attachments can only be downloaded if user is authenticated
223
- if (isAuthenticated) {
224
- return true;
225
- }
226
- return false;
227
- }, [isAuthenticated, value]);
228
- return {
229
- isUploading,
230
- uploadErrorMessage,
231
- isLoadingImageUrl: imageUrlState.imageUrl === undefined,
232
- ...imageUrlState,
233
- canDownload,
234
- };
235
- }
1
+ import * as React from 'react';
2
+ import { submissionService } from '@oneblink/apps';
3
+ import useFormDefinition from '../useFormDefinition';
4
+ import useIsOffline from '../useIsOffline';
5
+ import { checkIfContentTypeIsImage } from '../../services/attachments';
6
+ import useAuth from '../../hooks/useAuth';
7
+ import { urlToBlobAsync } from '../../services/blob-utils';
8
+ import useAttachmentBlobs from '../../hooks/attachments/useAttachmentBlobs';
9
+ export default function useAttachment(value, element, onChange, disableUpload) {
10
+ const isPrivate = element.storageType !== 'public';
11
+ const form = useFormDefinition();
12
+ const isOffline = useIsOffline();
13
+ const { isLoggedIn, isUsingFormsKey } = useAuth();
14
+ const { storeAttachmentBlobLocally, getAttachmentBlobLocally } = useAttachmentBlobs();
15
+ const isAuthenticated = isLoggedIn || isUsingFormsKey;
16
+ const [imageUrlState, setImageUrlState] = React.useState({});
17
+ const [progressState, setProgressState] = React.useState();
18
+ const onProgress = React.useCallback(({ progress }) => {
19
+ setProgressState(progress);
20
+ }, []);
21
+ // TRIGGER UPLOAD
22
+ React.useEffect(() => {
23
+ const formId = form === null || form === void 0 ? void 0 : form.id;
24
+ if (isOffline ||
25
+ disableUpload ||
26
+ !formId ||
27
+ !value ||
28
+ typeof value !== 'object' ||
29
+ value.type !== 'NEW' ||
30
+ !value.data) {
31
+ return;
32
+ }
33
+ const newAttachment = value;
34
+ const data = value.data;
35
+ let ignore = false;
36
+ const abortController = new AbortController();
37
+ const effect = async () => {
38
+ try {
39
+ console.log('Attempting to upload attachment...', newAttachment.fileName);
40
+ const upload = await submissionService.uploadAttachment({
41
+ formId,
42
+ fileName: newAttachment.fileName,
43
+ contentType: data.type,
44
+ data,
45
+ isPrivate,
46
+ onProgress,
47
+ }, abortController.signal);
48
+ if (ignore) {
49
+ return;
50
+ }
51
+ // Store Blob in Context if image is private
52
+ if (isPrivate) {
53
+ storeAttachmentBlobLocally({ attachmentId: upload.id, blob: data });
54
+ }
55
+ console.log('Successfully Uploaded attachment!', upload);
56
+ // UPDATE ATTACHMENT
57
+ onChange(newAttachment._id, upload);
58
+ }
59
+ catch (error) {
60
+ if (ignore) {
61
+ return;
62
+ }
63
+ console.warn('Failed to upload attachment...', newAttachment.fileName, error);
64
+ onChange(newAttachment._id, {
65
+ ...newAttachment,
66
+ type: 'ERROR',
67
+ errorMessage: error.message,
68
+ });
69
+ }
70
+ };
71
+ effect();
72
+ return () => {
73
+ ignore = true;
74
+ abortController.abort();
75
+ };
76
+ }, [
77
+ disableUpload,
78
+ form === null || form === void 0 ? void 0 : form.id,
79
+ isOffline,
80
+ isPrivate,
81
+ onChange,
82
+ onProgress,
83
+ storeAttachmentBlobLocally,
84
+ value,
85
+ ]);
86
+ // TRIGGER DOWNLOAD
87
+ React.useEffect(() => {
88
+ if (!value) {
89
+ return;
90
+ }
91
+ // If the value is string we will assume a base64 data uri
92
+ if (typeof value === 'string') {
93
+ setImageUrlState({
94
+ imageUrl: value,
95
+ });
96
+ return;
97
+ }
98
+ if (value.type) {
99
+ if (!value.data) {
100
+ return;
101
+ }
102
+ if (!checkIfContentTypeIsImage(value.data.type)) {
103
+ // Not an image which we will represent as null
104
+ setImageUrlState({
105
+ imageUrl: null,
106
+ });
107
+ return;
108
+ }
109
+ const imageUrl = URL.createObjectURL(value.data);
110
+ console.log('Created object url from blob for image', imageUrl);
111
+ setImageUrlState({
112
+ imageUrl,
113
+ });
114
+ return;
115
+ }
116
+ if (!checkIfContentTypeIsImage(value.contentType)) {
117
+ // Not an image which we will represent as null
118
+ setImageUrlState({
119
+ imageUrl: null,
120
+ });
121
+ return;
122
+ }
123
+ // If the file is a public url we can finish here and just use that
124
+ if (!value.isPrivate) {
125
+ setImageUrlState({
126
+ imageUrl: value.url,
127
+ });
128
+ return;
129
+ }
130
+ // Check for locally stored Blob. Blob should be stored locally for private uploaded images only
131
+ const locallyStoredAttachment = getAttachmentBlobLocally(value.id);
132
+ if (locallyStoredAttachment) {
133
+ const imageUrl = URL.createObjectURL(locallyStoredAttachment.blob);
134
+ console.log('Created object url from locally stored Blob for private image attachment', imageUrl);
135
+ setImageUrlState({
136
+ imageUrl,
137
+ });
138
+ return;
139
+ }
140
+ // If user is not logged in or is offline, we can't download private images.
141
+ // If the blob was not stored locally (above) for some reason, the user is SOL
142
+ if (!isAuthenticated || isOffline) {
143
+ setImageUrlState({
144
+ imageUrl: null,
145
+ });
146
+ return;
147
+ }
148
+ let ignore = false;
149
+ const abortController = new AbortController();
150
+ const privateImageUrl = value.url;
151
+ const effect = async () => {
152
+ try {
153
+ const blob = await urlToBlobAsync(privateImageUrl, true, abortController.signal);
154
+ if (ignore) {
155
+ return;
156
+ }
157
+ // Store private image attachment in Context
158
+ storeAttachmentBlobLocally({ attachmentId: value.id, blob });
159
+ const imageUrl = URL.createObjectURL(blob);
160
+ console.log('Created object url from private attachment for image', imageUrl);
161
+ setImageUrlState({
162
+ imageUrl,
163
+ });
164
+ }
165
+ catch (error) {
166
+ if (ignore) {
167
+ return;
168
+ }
169
+ console.warn('Error loading file:', error);
170
+ setImageUrlState({
171
+ loadImageUrlError: error,
172
+ });
173
+ }
174
+ };
175
+ effect();
176
+ return () => {
177
+ ignore = true;
178
+ abortController.abort();
179
+ };
180
+ }, [
181
+ getAttachmentBlobLocally,
182
+ isAuthenticated,
183
+ isOffline,
184
+ storeAttachmentBlobLocally,
185
+ value,
186
+ ]);
187
+ React.useEffect(() => {
188
+ return () => {
189
+ const imageUrl = imageUrlState.imageUrl;
190
+ if (imageUrl && imageUrl.startsWith('blob:')) {
191
+ console.log('revoking image url:', imageUrl);
192
+ URL.revokeObjectURL(imageUrl);
193
+ }
194
+ };
195
+ }, [imageUrlState.imageUrl]);
196
+ const isUploading = React.useMemo(() => {
197
+ return !!(value &&
198
+ typeof value !== 'string' &&
199
+ value.type &&
200
+ value.type === 'NEW');
201
+ }, [value]);
202
+ const uploadErrorMessage = React.useMemo(() => {
203
+ if (value &&
204
+ typeof value !== 'string' &&
205
+ value.type &&
206
+ value.type === 'ERROR') {
207
+ return value.errorMessage;
208
+ }
209
+ }, [value]);
210
+ const canDownload = React.useMemo(() => {
211
+ if (!value) {
212
+ return false;
213
+ }
214
+ // legacy attachment as base64 data
215
+ if (typeof value === 'string') {
216
+ return true;
217
+ }
218
+ // attachments still uploading or failed to upload
219
+ if (value.type) {
220
+ // can only be downloaded if we still have the data
221
+ return !!value.data;
222
+ }
223
+ // attachments that have been uploaded
224
+ // public attachments can always be downloaded
225
+ if (!value.isPrivate) {
226
+ return true;
227
+ }
228
+ // private attachments can only be downloaded if user is authenticated
229
+ if (isAuthenticated) {
230
+ return true;
231
+ }
232
+ return false;
233
+ }, [isAuthenticated, value]);
234
+ return {
235
+ isUploading,
236
+ uploadErrorMessage,
237
+ isLoadingImageUrl: imageUrlState.imageUrl === undefined,
238
+ ...imageUrlState,
239
+ canDownload,
240
+ progress: progressState,
241
+ };
242
+ }
236
243
  //# sourceMappingURL=useAttachment.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAttachment.js","sourceRoot":"","sources":["../../../src/hooks/attachments/useAttachment.ts"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { submissionService } from '@oneblink/apps'\nimport { FormTypes } from '@oneblink/types'\nimport useFormDefinition from '../useFormDefinition'\nimport useIsOffline from '../useIsOffline'\nimport {\n Attachment,\n AttachmentNew,\n FormElementBinaryStorageValue,\n} from '../../types/attachments'\nimport { checkIfContentTypeIsImage } from '../../services/attachments'\nimport useAuth from '../../hooks/useAuth'\nimport { urlToBlobAsync } from '../../services/blob-utils'\nimport useAttachmentBlobs from '../../hooks/attachments/useAttachmentBlobs'\n\nexport type OnChange = (id: string, attachment: Attachment) => void\n\nexport default function useAttachment(\n value: FormElementBinaryStorageValue,\n element: FormTypes.FormElementBinaryStorage,\n onChange: OnChange,\n disableUpload?: boolean,\n) {\n const isPrivate = element.storageType !== 'public'\n const form = useFormDefinition()\n const isOffline = useIsOffline()\n const { isLoggedIn, isUsingFormsKey } = useAuth()\n const { storeAttachmentBlobLocally, getAttachmentBlobLocally } =\n useAttachmentBlobs()\n\n const isAuthenticated = isLoggedIn || isUsingFormsKey\n\n const [imageUrlState, setImageUrlState] = React.useState<{\n imageUrl?: string | null\n loadImageUrlError?: Error\n }>({})\n\n // TRIGGER UPLOAD\n React.useEffect(() => {\n const formId = form?.id\n\n if (\n isOffline ||\n disableUpload ||\n !formId ||\n !value ||\n typeof value !== 'object' ||\n value.type !== 'NEW' ||\n !value.data\n ) {\n return\n }\n\n const newAttachment = value as AttachmentNew\n const data = value.data\n\n let ignore = false\n const abortController = new AbortController()\n\n const effect = async () => {\n try {\n console.log(\n 'Attempting to upload attachment...',\n newAttachment.fileName,\n )\n const upload = await submissionService.uploadAttachment(\n {\n formId,\n fileName: newAttachment.fileName,\n contentType: data.type,\n data,\n isPrivate,\n },\n abortController.signal,\n )\n if (ignore) {\n return\n }\n // Store Blob in Context if image is private\n if (isPrivate) {\n storeAttachmentBlobLocally({ attachmentId: upload.id, blob: data })\n }\n\n console.log('Successfully Uploaded attachment!', upload)\n\n // UPDATE ATTACHMENT\n onChange(newAttachment._id, upload)\n } catch (error) {\n if (ignore) {\n return\n }\n\n console.warn(\n 'Failed to upload attachment...',\n newAttachment.fileName,\n error,\n )\n onChange(newAttachment._id, {\n ...newAttachment,\n type: 'ERROR',\n errorMessage: (error as Error).message,\n })\n }\n }\n\n effect()\n\n return () => {\n ignore = true\n abortController.abort()\n }\n }, [\n disableUpload,\n form?.id,\n isOffline,\n isPrivate,\n onChange,\n storeAttachmentBlobLocally,\n value,\n ])\n\n // TRIGGER DOWNLOAD\n React.useEffect(() => {\n if (!value) {\n return\n }\n\n // If the value is string we will assume a base64 data uri\n if (typeof value === 'string') {\n setImageUrlState({\n imageUrl: value,\n })\n return\n }\n\n if (value.type) {\n if (!value.data) {\n return\n }\n\n if (!checkIfContentTypeIsImage(value.data.type)) {\n // Not an image which we will represent as null\n setImageUrlState({\n imageUrl: null,\n })\n return\n }\n\n const imageUrl = URL.createObjectURL(value.data)\n console.log('Created object url from blob for image', imageUrl)\n setImageUrlState({\n imageUrl,\n })\n return\n }\n\n if (!checkIfContentTypeIsImage(value.contentType)) {\n // Not an image which we will represent as null\n setImageUrlState({\n imageUrl: null,\n })\n return\n }\n\n // If the file is a public url we can finish here and just use that\n if (!value.isPrivate) {\n setImageUrlState({\n imageUrl: value.url,\n })\n return\n }\n\n // Check for locally stored Blob. Blob should be stored locally for private uploaded images only\n const locallyStoredAttachment = getAttachmentBlobLocally(value.id)\n if (locallyStoredAttachment) {\n const imageUrl = URL.createObjectURL(locallyStoredAttachment.blob)\n console.log(\n 'Created object url from locally stored Blob for private image attachment',\n imageUrl,\n )\n setImageUrlState({\n imageUrl,\n })\n return\n }\n\n // If user is not logged in or is offline, we can't download private images.\n // If the blob was not stored locally (above) for some reason, the user is SOL\n if (!isAuthenticated || isOffline) {\n setImageUrlState({\n imageUrl: null,\n })\n return\n }\n\n let ignore = false\n const abortController = new AbortController()\n const privateImageUrl = value.url\n\n const effect = async () => {\n try {\n const blob = await urlToBlobAsync(\n privateImageUrl,\n true,\n abortController.signal,\n )\n if (ignore) {\n return\n }\n // Store private image attachment in Context\n storeAttachmentBlobLocally({ attachmentId: value.id, blob })\n const imageUrl = URL.createObjectURL(blob)\n console.log(\n 'Created object url from private attachment for image',\n imageUrl,\n )\n setImageUrlState({\n imageUrl,\n })\n } catch (error) {\n if (ignore) {\n return\n }\n console.warn('Error loading file:', error)\n setImageUrlState({\n loadImageUrlError: error as Error,\n })\n }\n }\n effect()\n\n return () => {\n ignore = true\n abortController.abort()\n }\n }, [\n getAttachmentBlobLocally,\n isAuthenticated,\n isOffline,\n storeAttachmentBlobLocally,\n value,\n ])\n\n React.useEffect(() => {\n return () => {\n const imageUrl = imageUrlState.imageUrl\n if (imageUrl && imageUrl.startsWith('blob:')) {\n console.log('revoking image url:', imageUrl)\n URL.revokeObjectURL(imageUrl)\n }\n }\n }, [imageUrlState.imageUrl])\n\n const isUploading = React.useMemo(() => {\n return !!(\n value &&\n typeof value !== 'string' &&\n value.type &&\n value.type === 'NEW'\n )\n }, [value])\n\n const uploadErrorMessage = React.useMemo(() => {\n if (\n value &&\n typeof value !== 'string' &&\n value.type &&\n value.type === 'ERROR'\n ) {\n return value.errorMessage\n }\n }, [value])\n\n const canDownload = React.useMemo(() => {\n if (!value) {\n return false\n }\n\n // legacy attachment as base64 data\n if (typeof value === 'string') {\n return true\n }\n\n // attachments still uploading or failed to upload\n if (value.type) {\n // can only be downloaded if we still have the data\n return !!value.data\n }\n\n // attachments that have been uploaded\n // public attachments can always be downloaded\n if (!value.isPrivate) {\n return true\n }\n\n // private attachments can only be downloaded if user is authenticated\n if (isAuthenticated) {\n return true\n }\n\n return false\n }, [isAuthenticated, value])\n\n return {\n isUploading,\n uploadErrorMessage,\n isLoadingImageUrl: imageUrlState.imageUrl === undefined,\n ...imageUrlState,\n canDownload,\n }\n}\n"]}
1
+ {"version":3,"file":"useAttachment.js","sourceRoot":"","sources":["../../../src/hooks/attachments/useAttachment.ts"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { submissionService } from '@oneblink/apps'\nimport { FormTypes } from '@oneblink/types'\nimport useFormDefinition from '../useFormDefinition'\nimport useIsOffline from '../useIsOffline'\nimport {\n Attachment,\n AttachmentNew,\n FormElementBinaryStorageValue,\n} from '../../types/attachments'\nimport { checkIfContentTypeIsImage } from '../../services/attachments'\nimport useAuth from '../../hooks/useAuth'\nimport { urlToBlobAsync } from '../../services/blob-utils'\nimport useAttachmentBlobs from '../../hooks/attachments/useAttachmentBlobs'\n\nexport type OnChange = (id: string, attachment: Attachment) => void\n\nexport default function useAttachment(\n value: FormElementBinaryStorageValue,\n element: FormTypes.FormElementBinaryStorage,\n onChange: OnChange,\n disableUpload?: boolean,\n) {\n const isPrivate = element.storageType !== 'public'\n const form = useFormDefinition()\n const isOffline = useIsOffline()\n const { isLoggedIn, isUsingFormsKey } = useAuth()\n const { storeAttachmentBlobLocally, getAttachmentBlobLocally } =\n useAttachmentBlobs()\n\n const isAuthenticated = isLoggedIn || isUsingFormsKey\n\n const [imageUrlState, setImageUrlState] = React.useState<{\n imageUrl?: string | null\n loadImageUrlError?: Error\n }>({})\n const [progressState, setProgressState] = React.useState<number | undefined>()\n\n const onProgress = React.useCallback(({ progress }: { progress: number }) => {\n setProgressState(progress)\n }, [])\n\n // TRIGGER UPLOAD\n React.useEffect(() => {\n const formId = form?.id\n\n if (\n isOffline ||\n disableUpload ||\n !formId ||\n !value ||\n typeof value !== 'object' ||\n value.type !== 'NEW' ||\n !value.data\n ) {\n return\n }\n\n const newAttachment = value as AttachmentNew\n const data = value.data\n\n let ignore = false\n const abortController = new AbortController()\n\n const effect = async () => {\n try {\n console.log(\n 'Attempting to upload attachment...',\n newAttachment.fileName,\n )\n const upload = await submissionService.uploadAttachment(\n {\n formId,\n fileName: newAttachment.fileName,\n contentType: data.type,\n data,\n isPrivate,\n onProgress,\n },\n abortController.signal,\n )\n if (ignore) {\n return\n }\n // Store Blob in Context if image is private\n if (isPrivate) {\n storeAttachmentBlobLocally({ attachmentId: upload.id, blob: data })\n }\n\n console.log('Successfully Uploaded attachment!', upload)\n\n // UPDATE ATTACHMENT\n onChange(newAttachment._id, upload)\n } catch (error) {\n if (ignore) {\n return\n }\n\n console.warn(\n 'Failed to upload attachment...',\n newAttachment.fileName,\n error,\n )\n onChange(newAttachment._id, {\n ...newAttachment,\n type: 'ERROR',\n errorMessage: (error as Error).message,\n })\n }\n }\n\n effect()\n\n return () => {\n ignore = true\n abortController.abort()\n }\n }, [\n disableUpload,\n form?.id,\n isOffline,\n isPrivate,\n onChange,\n onProgress,\n storeAttachmentBlobLocally,\n value,\n ])\n\n // TRIGGER DOWNLOAD\n React.useEffect(() => {\n if (!value) {\n return\n }\n\n // If the value is string we will assume a base64 data uri\n if (typeof value === 'string') {\n setImageUrlState({\n imageUrl: value,\n })\n return\n }\n\n if (value.type) {\n if (!value.data) {\n return\n }\n\n if (!checkIfContentTypeIsImage(value.data.type)) {\n // Not an image which we will represent as null\n setImageUrlState({\n imageUrl: null,\n })\n return\n }\n\n const imageUrl = URL.createObjectURL(value.data)\n console.log('Created object url from blob for image', imageUrl)\n setImageUrlState({\n imageUrl,\n })\n return\n }\n\n if (!checkIfContentTypeIsImage(value.contentType)) {\n // Not an image which we will represent as null\n setImageUrlState({\n imageUrl: null,\n })\n return\n }\n\n // If the file is a public url we can finish here and just use that\n if (!value.isPrivate) {\n setImageUrlState({\n imageUrl: value.url,\n })\n return\n }\n\n // Check for locally stored Blob. Blob should be stored locally for private uploaded images only\n const locallyStoredAttachment = getAttachmentBlobLocally(value.id)\n if (locallyStoredAttachment) {\n const imageUrl = URL.createObjectURL(locallyStoredAttachment.blob)\n console.log(\n 'Created object url from locally stored Blob for private image attachment',\n imageUrl,\n )\n setImageUrlState({\n imageUrl,\n })\n return\n }\n\n // If user is not logged in or is offline, we can't download private images.\n // If the blob was not stored locally (above) for some reason, the user is SOL\n if (!isAuthenticated || isOffline) {\n setImageUrlState({\n imageUrl: null,\n })\n return\n }\n\n let ignore = false\n const abortController = new AbortController()\n const privateImageUrl = value.url\n\n const effect = async () => {\n try {\n const blob = await urlToBlobAsync(\n privateImageUrl,\n true,\n abortController.signal,\n )\n if (ignore) {\n return\n }\n // Store private image attachment in Context\n storeAttachmentBlobLocally({ attachmentId: value.id, blob })\n const imageUrl = URL.createObjectURL(blob)\n console.log(\n 'Created object url from private attachment for image',\n imageUrl,\n )\n setImageUrlState({\n imageUrl,\n })\n } catch (error) {\n if (ignore) {\n return\n }\n console.warn('Error loading file:', error)\n setImageUrlState({\n loadImageUrlError: error as Error,\n })\n }\n }\n effect()\n\n return () => {\n ignore = true\n abortController.abort()\n }\n }, [\n getAttachmentBlobLocally,\n isAuthenticated,\n isOffline,\n storeAttachmentBlobLocally,\n value,\n ])\n\n React.useEffect(() => {\n return () => {\n const imageUrl = imageUrlState.imageUrl\n if (imageUrl && imageUrl.startsWith('blob:')) {\n console.log('revoking image url:', imageUrl)\n URL.revokeObjectURL(imageUrl)\n }\n }\n }, [imageUrlState.imageUrl])\n\n const isUploading = React.useMemo(() => {\n return !!(\n value &&\n typeof value !== 'string' &&\n value.type &&\n value.type === 'NEW'\n )\n }, [value])\n\n const uploadErrorMessage = React.useMemo(() => {\n if (\n value &&\n typeof value !== 'string' &&\n value.type &&\n value.type === 'ERROR'\n ) {\n return value.errorMessage\n }\n }, [value])\n\n const canDownload = React.useMemo(() => {\n if (!value) {\n return false\n }\n\n // legacy attachment as base64 data\n if (typeof value === 'string') {\n return true\n }\n\n // attachments still uploading or failed to upload\n if (value.type) {\n // can only be downloaded if we still have the data\n return !!value.data\n }\n\n // attachments that have been uploaded\n // public attachments can always be downloaded\n if (!value.isPrivate) {\n return true\n }\n\n // private attachments can only be downloaded if user is authenticated\n if (isAuthenticated) {\n return true\n }\n\n return false\n }, [isAuthenticated, value])\n\n return {\n isUploading,\n uploadErrorMessage,\n isLoadingImageUrl: imageUrlState.imageUrl === undefined,\n ...imageUrlState,\n canDownload,\n progress: progressState,\n }\n}\n"]}
@@ -1,19 +1,19 @@
1
- import * as React from 'react';
2
- declare type AttachmentObjectBlob = {
3
- attachmentId: string;
4
- blob: Blob;
5
- };
6
- declare type RegisterAttachmentParam = {
7
- blob: Blob;
8
- attachmentId: string;
9
- };
10
- declare type AttachmentBlobsContextValue = {
11
- storeAttachmentBlobLocally: (options: RegisterAttachmentParam) => void;
12
- getAttachmentBlobLocally: (attachmentId: string) => AttachmentObjectBlob | undefined;
13
- };
14
- declare type Props = {
15
- children: React.ReactNode;
16
- };
17
- export declare const AttachmentBlobsProvider: ({ children }: Props) => JSX.Element;
18
- declare const useAttachmentBlobs: () => AttachmentBlobsContextValue;
19
- export default useAttachmentBlobs;
1
+ import * as React from 'react';
2
+ declare type AttachmentObjectBlob = {
3
+ attachmentId: string;
4
+ blob: Blob;
5
+ };
6
+ declare type RegisterAttachmentParam = {
7
+ blob: Blob;
8
+ attachmentId: string;
9
+ };
10
+ declare type AttachmentBlobsContextValue = {
11
+ storeAttachmentBlobLocally: (options: RegisterAttachmentParam) => void;
12
+ getAttachmentBlobLocally: (attachmentId: string) => AttachmentObjectBlob | undefined;
13
+ };
14
+ declare type Props = {
15
+ children: React.ReactNode;
16
+ };
17
+ export declare const AttachmentBlobsProvider: ({ children }: Props) => JSX.Element;
18
+ declare const useAttachmentBlobs: () => AttachmentBlobsContextValue;
19
+ export default useAttachmentBlobs;
@@ -1,24 +1,24 @@
1
- import * as React from 'react';
2
- const AttachmentBlobsContext = React.createContext({
3
- storeAttachmentBlobLocally: () => { },
4
- getAttachmentBlobLocally: () => undefined,
5
- });
6
- export const AttachmentBlobsProvider = ({ children }) => {
7
- const [attachmentBlobs, setAttachmentBlobs] = React.useState([]);
8
- const storeAttachmentBlobLocally = React.useCallback((newAttachment) => {
9
- setAttachmentBlobs((c) => [...c, newAttachment]);
10
- }, []);
11
- const getAttachmentBlobLocally = React.useCallback((attachmentId) => {
12
- return attachmentBlobs.find((b) => b.attachmentId === attachmentId);
13
- }, [attachmentBlobs]);
14
- const value = React.useMemo(() => ({
15
- storeAttachmentBlobLocally,
16
- getAttachmentBlobLocally,
17
- }), [storeAttachmentBlobLocally, getAttachmentBlobLocally]);
18
- return (React.createElement(AttachmentBlobsContext.Provider, { value: value }, children));
19
- };
20
- const useAttachmentBlobs = () => {
21
- return React.useContext(AttachmentBlobsContext);
22
- };
23
- export default useAttachmentBlobs;
1
+ import * as React from 'react';
2
+ const AttachmentBlobsContext = React.createContext({
3
+ storeAttachmentBlobLocally: () => { },
4
+ getAttachmentBlobLocally: () => undefined,
5
+ });
6
+ export const AttachmentBlobsProvider = ({ children }) => {
7
+ const [attachmentBlobs, setAttachmentBlobs] = React.useState([]);
8
+ const storeAttachmentBlobLocally = React.useCallback((newAttachment) => {
9
+ setAttachmentBlobs((c) => [...c, newAttachment]);
10
+ }, []);
11
+ const getAttachmentBlobLocally = React.useCallback((attachmentId) => {
12
+ return attachmentBlobs.find((b) => b.attachmentId === attachmentId);
13
+ }, [attachmentBlobs]);
14
+ const value = React.useMemo(() => ({
15
+ storeAttachmentBlobLocally,
16
+ getAttachmentBlobLocally,
17
+ }), [storeAttachmentBlobLocally, getAttachmentBlobLocally]);
18
+ return (React.createElement(AttachmentBlobsContext.Provider, { value: value }, children));
19
+ };
20
+ const useAttachmentBlobs = () => {
21
+ return React.useContext(AttachmentBlobsContext);
22
+ };
23
+ export default useAttachmentBlobs;
24
24
  //# sourceMappingURL=useAttachmentBlobs.js.map