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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. package/dist/OneBlinkAutoSaveForm.d.ts +10 -10
  2. package/dist/OneBlinkAutoSaveForm.js +28 -28
  3. package/dist/OneBlinkForm.d.ts +11 -11
  4. package/dist/OneBlinkForm.js +11 -11
  5. package/dist/OneBlinkFormBase.d.ts +29 -28
  6. package/dist/OneBlinkFormBase.js +476 -472
  7. package/dist/OneBlinkFormBase.js.map +1 -1
  8. package/dist/OneBlinkReadOnlyForm.d.ts +11 -11
  9. package/dist/OneBlinkReadOnlyForm.js +48 -48
  10. package/dist/components/CopyToClipboardIconButton.d.ts +10 -10
  11. package/dist/components/CopyToClipboardIconButton.js +32 -32
  12. package/dist/components/CustomAccordion.d.ts +27 -27
  13. package/dist/components/CustomAccordion.js +37 -37
  14. package/dist/components/ErrorSnackbar.d.ts +8 -8
  15. package/dist/components/ErrorSnackbar.js +25 -25
  16. package/dist/components/Lists.d.ts +25 -25
  17. package/dist/components/Lists.js +44 -44
  18. package/dist/components/LoadingWithMessage.d.ts +6 -6
  19. package/dist/components/LoadingWithMessage.js +11 -11
  20. package/dist/components/formStore/FormStoreTableProvider.d.ts +6 -6
  21. package/dist/components/formStore/FormStoreTableProvider.js +90 -90
  22. package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.d.ts +5 -5
  23. package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.js +19 -19
  24. package/dist/components/formStore/OneBlinkFormStoreColumnsButton.d.ts +5 -5
  25. package/dist/components/formStore/OneBlinkFormStoreColumnsButton.js +66 -66
  26. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.d.ts +5 -5
  27. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js +86 -86
  28. package/dist/components/formStore/OneBlinkFormStoreProvider.d.ts +8 -8
  29. package/dist/components/formStore/OneBlinkFormStoreProvider.js +24 -24
  30. package/dist/components/formStore/OneBlinkFormStoreRefreshButton.d.ts +5 -5
  31. package/dist/components/formStore/OneBlinkFormStoreRefreshButton.js +11 -11
  32. package/dist/components/formStore/OneBlinkFormStoreTable.d.ts +4 -4
  33. package/dist/components/formStore/OneBlinkFormStoreTable.js +194 -194
  34. package/dist/components/formStore/display/ElementDisplay.d.ts +23 -23
  35. package/dist/components/formStore/display/ElementDisplay.js +77 -77
  36. package/dist/components/formStore/display/FormStoreIcon.d.ts +2 -2
  37. package/dist/components/formStore/display/FormStoreIcon.js +2 -2
  38. package/dist/components/formStore/table/ActionedByTableCell.d.ts +11 -11
  39. package/dist/components/formStore/table/ActionedByTableCell.js +43 -43
  40. package/dist/components/formStore/table/ColumnFilters.d.ts +9 -9
  41. package/dist/components/formStore/table/ColumnFilters.js +179 -179
  42. package/dist/components/formStore/table/FormElementTableCell.d.ts +10 -10
  43. package/dist/components/formStore/table/FormElementTableCell.js +228 -228
  44. package/dist/components/formStore/table/HeaderCellMoreButton.d.ts +9 -9
  45. package/dist/components/formStore/table/HeaderCellMoreButton.js +48 -48
  46. package/dist/components/formStore/table/RepeatableSetCell.d.ts +8 -8
  47. package/dist/components/formStore/table/RepeatableSetCell.js +62 -62
  48. package/dist/components/formStore/table/RepeatableSetCellAccordion.d.ts +9 -9
  49. package/dist/components/formStore/table/RepeatableSetCellAccordion.js +11 -11
  50. package/dist/components/formStore/table/TableCellCopyButton.d.ts +7 -7
  51. package/dist/components/formStore/table/TableCellCopyButton.js +27 -27
  52. package/dist/components/formStore/table/generateColumns.d.ts +24 -24
  53. package/dist/components/formStore/table/generateColumns.js +290 -290
  54. package/dist/components/formStore/table/useFormStoreTable.d.ts +52 -52
  55. package/dist/components/formStore/table/useFormStoreTable.js +157 -157
  56. package/dist/components/formStore/useFormStoreTableContext.d.ts +44 -44
  57. package/dist/components/formStore/useFormStoreTableContext.js +9 -9
  58. package/dist/components/messages/ErrorMessage.d.ts +12 -12
  59. package/dist/components/messages/ErrorMessage.js +12 -12
  60. package/dist/components/messages/LargeIconMessage.d.ts +18 -18
  61. package/dist/components/messages/LargeIconMessage.js +33 -33
  62. package/dist/components/messages/NoResourcesYet.d.ts +11 -11
  63. package/dist/components/messages/NoResourcesYet.js +6 -6
  64. package/dist/components/pickers/V4CompatibleDatePicker.d.ts +32 -32
  65. package/dist/components/pickers/V4CompatibleDatePicker.js +70 -70
  66. package/dist/components/pickers/V4CompatibleDateTimePicker.d.ts +32 -32
  67. package/dist/components/pickers/V4CompatibleDateTimePicker.js +70 -70
  68. package/dist/components/pickers/V4CompatibleTimePicker.d.ts +28 -28
  69. package/dist/components/pickers/V4CompatibleTimePicker.js +53 -53
  70. package/dist/components/renderer/AnnotationModal.d.ts +8 -8
  71. package/dist/components/renderer/AnnotationModal.js +101 -101
  72. package/dist/components/renderer/AutocompleteDropdown.d.ts +26 -26
  73. package/dist/components/renderer/AutocompleteDropdown.js +175 -175
  74. package/dist/components/renderer/CopyToClipboardButton.d.ts +8 -8
  75. package/dist/components/renderer/CopyToClipboardButton.js +13 -13
  76. package/dist/components/renderer/CustomisableButtonInner.d.ts +7 -7
  77. package/dist/components/renderer/CustomisableButtonInner.js +8 -8
  78. package/dist/components/renderer/FormElementLabelContainer.d.ts +12 -12
  79. package/dist/components/renderer/FormElementLabelContainer.js +15 -15
  80. package/dist/components/renderer/FormElementOptions.d.ts +9 -9
  81. package/dist/components/renderer/FormElementOptions.js +14 -14
  82. package/dist/components/renderer/LookupButton.d.ts +10 -10
  83. package/dist/components/renderer/LookupButton.js +29 -29
  84. package/dist/components/renderer/LookupNotification.d.ts +12 -12
  85. package/dist/components/renderer/LookupNotification.js +230 -230
  86. package/dist/components/renderer/Modal.d.ts +14 -14
  87. package/dist/components/renderer/Modal.js +14 -14
  88. package/dist/components/renderer/OnLoading.d.ts +10 -10
  89. package/dist/components/renderer/OnLoading.js +11 -11
  90. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.d.ts +7 -7
  91. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js +12 -12
  92. package/dist/components/renderer/OneBlinkFormElements.d.ts +19 -19
  93. package/dist/components/renderer/OneBlinkFormElements.js +202 -202
  94. package/dist/components/renderer/PageFormElements.d.ts +17 -17
  95. package/dist/components/renderer/PageFormElements.js +48 -48
  96. package/dist/components/renderer/ProgressBar.d.ts +7 -7
  97. package/dist/components/renderer/ProgressBar.js +6 -6
  98. package/dist/components/renderer/ProgressBar.js.map +1 -1
  99. package/dist/components/renderer/ToggleAllCheckbox.d.ts +13 -13
  100. package/dist/components/renderer/ToggleAllCheckbox.js +26 -26
  101. package/dist/components/renderer/attachments/AttachmentStatus.d.ts +10 -10
  102. package/dist/components/renderer/attachments/AttachmentStatus.js +36 -36
  103. package/dist/components/renderer/attachments/FileCard.d.ts +19 -19
  104. package/dist/components/renderer/attachments/FileCard.js +60 -60
  105. package/dist/components/renderer/attachments/FileCardContent.d.ts +5 -5
  106. package/dist/components/renderer/attachments/FileCardContent.js +10 -10
  107. package/dist/components/renderer/attachments/ImagePreviewUnavailable.d.ts +4 -4
  108. package/dist/components/renderer/attachments/ImagePreviewUnavailable.js +11 -11
  109. package/dist/components/renderer/attachments/ProgressBar.d.ts +8 -8
  110. package/dist/components/renderer/attachments/ProgressBar.js +33 -33
  111. package/dist/form-elements/ComplianceButton.d.ts +10 -10
  112. package/dist/form-elements/ComplianceButton.js +11 -11
  113. package/dist/form-elements/FormElementABN.d.ts +14 -14
  114. package/dist/form-elements/FormElementABN.js +155 -155
  115. package/dist/form-elements/FormElementAutocomplete.d.ts +19 -19
  116. package/dist/form-elements/FormElementAutocomplete.js +81 -81
  117. package/dist/form-elements/FormElementBSB.d.ts +18 -18
  118. package/dist/form-elements/FormElementBSB.js +100 -100
  119. package/dist/form-elements/FormElementBarcodeScanner.d.ts +14 -14
  120. package/dist/form-elements/FormElementBarcodeScanner.js +306 -306
  121. package/dist/form-elements/FormElementBoolean.d.ts +14 -14
  122. package/dist/form-elements/FormElementBoolean.js +16 -16
  123. package/dist/form-elements/FormElementCalculation.d.ts +11 -11
  124. package/dist/form-elements/FormElementCalculation.js +179 -179
  125. package/dist/form-elements/FormElementCamera.d.ts +15 -15
  126. package/dist/form-elements/FormElementCamera.js +227 -227
  127. package/dist/form-elements/FormElementCaptcha.d.ts +12 -12
  128. package/dist/form-elements/FormElementCaptcha.js +14 -14
  129. package/dist/form-elements/FormElementCheckBoxes.d.ts +15 -15
  130. package/dist/form-elements/FormElementCheckBoxes.js +64 -64
  131. package/dist/form-elements/FormElementCivicaNameRecord.d.ts +8 -8
  132. package/dist/form-elements/FormElementCivicaNameRecord.js +51 -51
  133. package/dist/form-elements/FormElementCivicaStreetName.d.ts +15 -15
  134. package/dist/form-elements/FormElementCivicaStreetName.js +38 -38
  135. package/dist/form-elements/FormElementCompliance.d.ts +22 -22
  136. package/dist/form-elements/FormElementCompliance.js +129 -129
  137. package/dist/form-elements/FormElementDate.d.ts +14 -14
  138. package/dist/form-elements/FormElementDate.js +74 -74
  139. package/dist/form-elements/FormElementDateTime.d.ts +14 -14
  140. package/dist/form-elements/FormElementDateTime.js +67 -67
  141. package/dist/form-elements/FormElementEmail.d.ts +14 -14
  142. package/dist/form-elements/FormElementEmail.js +22 -22
  143. package/dist/form-elements/FormElementFile.d.ts +13 -13
  144. package/dist/form-elements/FormElementFile.js +31 -31
  145. package/dist/form-elements/FormElementFiles.d.ts +15 -15
  146. package/dist/form-elements/FormElementFiles.js +42 -42
  147. package/dist/form-elements/FormElementForm.d.ts +17 -17
  148. package/dist/form-elements/FormElementForm.js +63 -63
  149. package/dist/form-elements/FormElementFreshdeskDependentField.d.ts +8 -8
  150. package/dist/form-elements/FormElementFreshdeskDependentField.js +15 -15
  151. package/dist/form-elements/FormElementGeoscapeAddress.d.ts +15 -15
  152. package/dist/form-elements/FormElementGeoscapeAddress.js +62 -62
  153. package/dist/form-elements/FormElementHTML.d.ts +8 -8
  154. package/dist/form-elements/FormElementHTML.js +15 -15
  155. package/dist/form-elements/FormElementHeading.d.ts +8 -8
  156. package/dist/form-elements/FormElementHeading.js +23 -23
  157. package/dist/form-elements/FormElementImage.d.ts +8 -8
  158. package/dist/form-elements/FormElementImage.js +6 -6
  159. package/dist/form-elements/FormElementLocation.d.ts +20 -20
  160. package/dist/form-elements/FormElementLocation.js +204 -204
  161. package/dist/form-elements/FormElementNumber.d.ts +14 -14
  162. package/dist/form-elements/FormElementNumber.js +72 -72
  163. package/dist/form-elements/FormElementPointAddress.d.ts +15 -15
  164. package/dist/form-elements/FormElementPointAddress.js +69 -69
  165. package/dist/form-elements/FormElementRadio.d.ts +15 -15
  166. package/dist/form-elements/FormElementRadio.js +41 -41
  167. package/dist/form-elements/FormElementRepeatableSet.d.ts +19 -19
  168. package/dist/form-elements/FormElementRepeatableSet.js +126 -126
  169. package/dist/form-elements/FormElementSection.d.ts +8 -8
  170. package/dist/form-elements/FormElementSection.js +69 -69
  171. package/dist/form-elements/FormElementSelect.d.ts +15 -15
  172. package/dist/form-elements/FormElementSelect.js +44 -44
  173. package/dist/form-elements/FormElementSignature.d.ts +15 -15
  174. package/dist/form-elements/FormElementSignature.js +138 -138
  175. package/dist/form-elements/FormElementSummary.d.ts +11 -11
  176. package/dist/form-elements/FormElementSummary.js +159 -159
  177. package/dist/form-elements/FormElementTelephone.d.ts +14 -14
  178. package/dist/form-elements/FormElementTelephone.js +22 -22
  179. package/dist/form-elements/FormElementText.d.ts +14 -14
  180. package/dist/form-elements/FormElementText.js +29 -29
  181. package/dist/form-elements/FormElementTextarea.d.ts +14 -14
  182. package/dist/form-elements/FormElementTextarea.js +30 -30
  183. package/dist/form-elements/FormElementTime.d.ts +14 -14
  184. package/dist/form-elements/FormElementTime.js +53 -53
  185. package/dist/form-elements/OptionButton.d.ts +11 -11
  186. package/dist/form-elements/OptionButton.js +9 -9
  187. package/dist/hooks/attachments/useAttachment.d.ts +12 -12
  188. package/dist/hooks/attachments/useAttachment.js +242 -242
  189. package/dist/hooks/attachments/useAttachmentBlobs.d.ts +19 -19
  190. package/dist/hooks/attachments/useAttachmentBlobs.js +23 -23
  191. package/dist/hooks/attachments/useAttachments.d.ts +10 -10
  192. package/dist/hooks/attachments/useAttachments.js +69 -69
  193. package/dist/hooks/useAbnLookupAuthenticationGuid.d.ts +3 -3
  194. package/dist/hooks/useAbnLookupAuthenticationGuid.js +5 -5
  195. package/dist/hooks/useAuth.d.ts +15 -15
  196. package/dist/hooks/useAuth.js +42 -42
  197. package/dist/hooks/useBooleanState.d.ts +5 -5
  198. package/dist/hooks/useBooleanState.js +8 -8
  199. package/dist/hooks/useCaptchaSiteKey.d.ts +3 -3
  200. package/dist/hooks/useCaptchaSiteKey.js +5 -5
  201. package/dist/hooks/useClickOutsideElement.d.ts +3 -3
  202. package/dist/hooks/useClickOutsideElement.js +14 -14
  203. package/dist/hooks/useConditionalLogic.d.ts +6 -6
  204. package/dist/hooks/useConditionalLogic.js +22 -22
  205. package/dist/hooks/useContrastColor.d.ts +2 -2
  206. package/dist/hooks/useContrastColor.js +12 -12
  207. package/dist/hooks/useDynamicOptionsLoaderState.d.ts +7 -7
  208. package/dist/hooks/useDynamicOptionsLoaderState.js +44 -44
  209. package/dist/hooks/useExecutedLookupCallback.d.ts +12 -12
  210. package/dist/hooks/useExecutedLookupCallback.js +15 -15
  211. package/dist/hooks/useFlatpickr.d.ts +10 -10
  212. package/dist/hooks/useFlatpickr.js +73 -73
  213. package/dist/hooks/useFlatpickrGuid.d.ts +7 -7
  214. package/dist/hooks/useFlatpickrGuid.js +11 -11
  215. package/dist/hooks/useFlattenElementsContext.d.ts +2 -2
  216. package/dist/hooks/useFlattenElementsContext.js +7 -7
  217. package/dist/hooks/useFormDefinition.d.ts +4 -4
  218. package/dist/hooks/useFormDefinition.js +9 -9
  219. package/dist/hooks/useFormElementOptions.d.ts +9 -9
  220. package/dist/hooks/useFormElementOptions.js +35 -35
  221. package/dist/hooks/useFormIsReadOnly.d.ts +3 -3
  222. package/dist/hooks/useFormIsReadOnly.js +5 -5
  223. package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +24 -24
  224. package/dist/hooks/useFormSubmissionAutoSaveState.js +145 -145
  225. package/dist/hooks/useFormSubmissionModelContext.d.ts +15 -15
  226. package/dist/hooks/useFormSubmissionModelContext.js +32 -32
  227. package/dist/hooks/useFormSubmissionState.d.ts +10 -10
  228. package/dist/hooks/useFormSubmissionState.js +13 -13
  229. package/dist/hooks/useFormValidation.d.ts +7 -7
  230. package/dist/hooks/useFormValidation.js +29 -29
  231. package/dist/hooks/useGoogleMapsApiKey.d.ts +3 -3
  232. package/dist/hooks/useGoogleMapsApiKey.js +5 -5
  233. package/dist/hooks/useInfiniteScrollDataLoad.d.ts +30 -30
  234. package/dist/hooks/useInfiniteScrollDataLoad.js +124 -124
  235. package/dist/hooks/useInjectPages.d.ts +7 -7
  236. package/dist/hooks/useInjectPages.js +5 -5
  237. package/dist/hooks/useIsHovering.d.ts +5 -5
  238. package/dist/hooks/useIsHovering.js +12 -12
  239. package/dist/hooks/useIsMounted.d.ts +3 -3
  240. package/dist/hooks/useIsMounted.js +11 -11
  241. package/dist/hooks/useIsOffline.d.ts +6 -6
  242. package/dist/hooks/useIsOffline.js +26 -26
  243. package/dist/hooks/useIsPageVisible.d.ts +9 -9
  244. package/dist/hooks/useIsPageVisible.js +8 -8
  245. package/dist/hooks/useLoadDataState.d.ts +15 -15
  246. package/dist/hooks/useLoadDataState.js +54 -54
  247. package/dist/hooks/useLogin.d.ts +46 -46
  248. package/dist/hooks/useLogin.js +295 -295
  249. package/dist/hooks/useLookupNotification.d.ts +9 -9
  250. package/dist/hooks/useLookupNotification.js +10 -10
  251. package/dist/hooks/useLookups.d.ts +5 -5
  252. package/dist/hooks/useLookups.js +62 -62
  253. package/dist/hooks/useNullableState.d.ts +2 -2
  254. package/dist/hooks/useNullableState.js +6 -6
  255. package/dist/hooks/usePages.d.ts +24 -24
  256. package/dist/hooks/usePages.js +141 -141
  257. package/dist/hooks/useQuery.d.ts +2 -2
  258. package/dist/hooks/useQuery.js +7 -7
  259. package/dist/hooks/useSubmissionIdIsValid.d.ts +3 -3
  260. package/dist/hooks/useSubmissionIdIsValid.js +19 -19
  261. package/dist/hooks/useToggleComplianceChildren.d.ts +3 -3
  262. package/dist/hooks/useToggleComplianceChildren.js +13 -13
  263. package/dist/index.d.ts +23 -23
  264. package/dist/index.js +23 -23
  265. package/dist/services/attachments.d.ts +10 -10
  266. package/dist/services/attachments.js +72 -72
  267. package/dist/services/barcode-readers/quagger.d.ts +1 -1
  268. package/dist/services/barcode-readers/quagger.js +34 -34
  269. package/dist/services/blob-utils.d.ts +5 -5
  270. package/dist/services/blob-utils.js +73 -73
  271. package/dist/services/checkBsbsAreInvalid.d.ts +3 -3
  272. package/dist/services/checkBsbsAreInvalid.js +40 -40
  273. package/dist/services/checkIfAttachmentsExist.d.ts +5 -5
  274. package/dist/services/checkIfAttachmentsExist.js +144 -144
  275. package/dist/services/checkIfBsbsAreValidating.d.ts +3 -3
  276. package/dist/services/checkIfBsbsAreValidating.js +40 -40
  277. package/dist/services/cleanFormSubmissionModel.d.ts +6 -6
  278. package/dist/services/cleanFormSubmissionModel.js +203 -203
  279. package/dist/services/defaultCoordinates.d.ts +5 -5
  280. package/dist/services/defaultCoordinates.js +8 -8
  281. package/dist/services/download-file.d.ts +3 -3
  282. package/dist/services/download-file.js +90 -90
  283. package/dist/services/drawTimestampOnCanvas.d.ts +1 -1
  284. package/dist/services/drawTimestampOnCanvas.js +22 -22
  285. package/dist/services/form-validation.d.ts +10 -10
  286. package/dist/services/form-validation.js +561 -561
  287. package/dist/services/generate-default-data.d.ts +13 -13
  288. package/dist/services/generate-default-data.js +494 -494
  289. package/dist/services/generateCivicaNameRecordElements.d.ts +2 -2
  290. package/dist/services/generateCivicaNameRecordElements.js +140 -140
  291. package/dist/services/generateFreshdeskDependentFieldElements.d.ts +2 -2
  292. package/dist/services/generateFreshdeskDependentFieldElements.js +69 -69
  293. package/dist/services/sanitize-html.d.ts +2 -2
  294. package/dist/services/sanitize-html.js +20 -20
  295. package/dist/services/scrolling-service.d.ts +7 -7
  296. package/dist/services/scrolling-service.js +38 -38
  297. package/dist/services/utils-service.d.ts +5 -5
  298. package/dist/services/utils-service.js +16 -16
  299. package/dist/types/attachments.d.ts +19 -19
  300. package/dist/types/attachments.js +1 -1
  301. package/dist/types/form.d.ts +40 -40
  302. package/dist/types/form.js +2 -2
  303. package/package.json +2 -2
  304. package/dist/OneBlinkFormStoreView.d.ts +0 -8
  305. package/dist/OneBlinkFormStoreView.js +0 -55
  306. package/dist/OneBlinkFormStoreView.js.map +0 -1
  307. package/dist/components/AnnotationModal.d.ts +0 -8
  308. package/dist/components/AnnotationModal.js +0 -104
  309. package/dist/components/AnnotationModal.js.map +0 -1
  310. package/dist/components/AutocompleteDropdown.d.ts +0 -26
  311. package/dist/components/AutocompleteDropdown.js +0 -174
  312. package/dist/components/AutocompleteDropdown.js.map +0 -1
  313. package/dist/components/CopyToClipboardButton.d.ts +0 -9
  314. package/dist/components/CopyToClipboardButton.js +0 -14
  315. package/dist/components/CopyToClipboardButton.js.map +0 -1
  316. package/dist/components/CustomisableButtonInner.d.ts +0 -7
  317. package/dist/components/CustomisableButtonInner.js +0 -9
  318. package/dist/components/CustomisableButtonInner.js.map +0 -1
  319. package/dist/components/ErrorMessage.d.ts +0 -13
  320. package/dist/components/ErrorMessage.js +0 -13
  321. package/dist/components/ErrorMessage.js.map +0 -1
  322. package/dist/components/FormElementLabelContainer.d.ts +0 -12
  323. package/dist/components/FormElementLabelContainer.js +0 -16
  324. package/dist/components/FormElementLabelContainer.js.map +0 -1
  325. package/dist/components/FormElementOptions.d.ts +0 -9
  326. package/dist/components/FormElementOptions.js +0 -15
  327. package/dist/components/FormElementOptions.js.map +0 -1
  328. package/dist/components/LookupButton.d.ts +0 -10
  329. package/dist/components/LookupButton.js +0 -30
  330. package/dist/components/LookupButton.js.map +0 -1
  331. package/dist/components/LookupNotification.d.ts +0 -12
  332. package/dist/components/LookupNotification.js +0 -231
  333. package/dist/components/LookupNotification.js.map +0 -1
  334. package/dist/components/Modal.d.ts +0 -14
  335. package/dist/components/Modal.js +0 -15
  336. package/dist/components/Modal.js.map +0 -1
  337. package/dist/components/NoResourcesYet.d.ts +0 -12
  338. package/dist/components/NoResourcesYet.js +0 -7
  339. package/dist/components/NoResourcesYet.js.map +0 -1
  340. package/dist/components/OnLoading.d.ts +0 -10
  341. package/dist/components/OnLoading.js +0 -12
  342. package/dist/components/OnLoading.js.map +0 -1
  343. package/dist/components/OneBlinkAppsErrorOriginalMessage.d.ts +0 -7
  344. package/dist/components/OneBlinkAppsErrorOriginalMessage.js +0 -13
  345. package/dist/components/OneBlinkAppsErrorOriginalMessage.js.map +0 -1
  346. package/dist/components/OneBlinkFormElements.d.ts +0 -19
  347. package/dist/components/OneBlinkFormElements.js +0 -196
  348. package/dist/components/OneBlinkFormElements.js.map +0 -1
  349. package/dist/components/PageFormElements.d.ts +0 -17
  350. package/dist/components/PageFormElements.js +0 -49
  351. package/dist/components/PageFormElements.js.map +0 -1
  352. package/dist/components/ToggleAllCheckbox.d.ts +0 -13
  353. package/dist/components/ToggleAllCheckbox.js +0 -27
  354. package/dist/components/ToggleAllCheckbox.js.map +0 -1
  355. package/dist/components/attachments/AttachmentStatus.d.ts +0 -12
  356. package/dist/components/attachments/AttachmentStatus.js +0 -35
  357. package/dist/components/attachments/AttachmentStatus.js.map +0 -1
  358. package/dist/components/attachments/FileCard.d.ts +0 -18
  359. package/dist/components/attachments/FileCard.js +0 -58
  360. package/dist/components/attachments/FileCard.js.map +0 -1
  361. package/dist/components/attachments/FileCardContent.d.ts +0 -5
  362. package/dist/components/attachments/FileCardContent.js +0 -11
  363. package/dist/components/attachments/FileCardContent.js.map +0 -1
  364. package/dist/components/attachments/Files.d.ts +0 -14
  365. package/dist/components/attachments/Files.js +0 -27
  366. package/dist/components/attachments/Files.js.map +0 -1
  367. package/dist/components/attachments/ImagePreviewUnavailable.d.ts +0 -4
  368. package/dist/components/attachments/ImagePreviewUnavailable.js +0 -12
  369. package/dist/components/attachments/ImagePreviewUnavailable.js.map +0 -1
  370. package/dist/components/attachments/UploadingAttachment.d.ts +0 -4
  371. package/dist/components/attachments/UploadingAttachment.js +0 -13
  372. package/dist/components/attachments/UploadingAttachment.js.map +0 -1
  373. package/dist/components/formStore/ColumnsConfigurationButton.d.ts +0 -10
  374. package/dist/components/formStore/ColumnsConfigurationButton.js +0 -29
  375. package/dist/components/formStore/ColumnsConfigurationButton.js.map +0 -1
  376. package/dist/components/formStore/DownloadSubmissionDataButton.d.ts +0 -13
  377. package/dist/components/formStore/DownloadSubmissionDataButton.js +0 -45
  378. package/dist/components/formStore/DownloadSubmissionDataButton.js.map +0 -1
  379. package/dist/components/formStore/FormStore.d.ts +0 -9
  380. package/dist/components/formStore/FormStore.js +0 -103
  381. package/dist/components/formStore/FormStore.js.map +0 -1
  382. package/dist/components/formStore/table/index.d.ts +0 -17
  383. package/dist/components/formStore/table/index.js +0 -194
  384. package/dist/components/formStore/table/index.js.map +0 -1
  385. package/dist/components/renderer/attachments/Files.d.ts +0 -14
  386. package/dist/components/renderer/attachments/Files.js +0 -27
  387. package/dist/components/renderer/attachments/Files.js.map +0 -1
  388. package/dist/components/renderer/attachments/UploadingAttachment.d.ts +0 -4
  389. package/dist/components/renderer/attachments/UploadingAttachment.js +0 -13
  390. package/dist/components/renderer/attachments/UploadingAttachment.js.map +0 -1
  391. package/dist/form-elements/FormElementFiles/FormElementFile.d.ts +0 -13
  392. package/dist/form-elements/FormElementFiles/FormElementFile.js +0 -32
  393. package/dist/form-elements/FormElementFiles/FormElementFile.js.map +0 -1
  394. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.d.ts +0 -10
  395. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.js +0 -11
  396. package/dist/form-elements/FormElementFiles/FormElementFileDisplay.js.map +0 -1
  397. package/dist/form-elements/FormElementFiles/FormElementFiles.d.ts +0 -15
  398. package/dist/form-elements/FormElementFiles/FormElementFiles.js +0 -17
  399. package/dist/form-elements/FormElementFiles/FormElementFiles.js.map +0 -1
  400. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.d.ts +0 -7
  401. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.js +0 -11
  402. package/dist/form-elements/FormElementFiles/FormElementFilesInvalidAttachment.js.map +0 -1
  403. package/dist/form-elements/FormElementFiles/index.d.ts +0 -17
  404. package/dist/form-elements/FormElementFiles/index.js +0 -18
  405. package/dist/form-elements/FormElementFiles/index.js.map +0 -1
  406. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.d.ts +0 -18
  407. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js +0 -61
  408. package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js.map +0 -1
  409. package/dist/hooks/attachments/useAttachmentObjectURLs.d.ts +0 -24
  410. package/dist/hooks/attachments/useAttachmentObjectURLs.js +0 -37
  411. package/dist/hooks/attachments/useAttachmentObjectURLs.js.map +0 -1
  412. package/dist/hooks/attachments/useLocalAttachmentBlobs.d.ts +0 -24
  413. package/dist/hooks/attachments/useLocalAttachmentBlobs.js +0 -40
  414. package/dist/hooks/attachments/useLocalAttachmentBlobs.js.map +0 -1
  415. package/dist/hooks/useButtonsConfiguration.d.ts +0 -45
  416. package/dist/hooks/useButtonsConfiguration.js +0 -6
  417. package/dist/hooks/useButtonsConfiguration.js.map +0 -1
  418. package/dist/hooks/useChangeEffect.d.ts +0 -1
  419. package/dist/hooks/useChangeEffect.js +0 -14
  420. package/dist/hooks/useChangeEffect.js.map +0 -1
  421. package/dist/hooks/useConditionallyShowOptionCallback.d.ts +0 -5
  422. package/dist/hooks/useConditionallyShowOptionCallback.js +0 -20
  423. package/dist/hooks/useConditionallyShowOptionCallback.js.map +0 -1
  424. package/dist/hooks/useCustomValidation.d.ts +0 -1
  425. package/dist/hooks/useCustomValidation.js +0 -9
  426. package/dist/hooks/useCustomValidation.js.map +0 -1
  427. package/dist/hooks/useDynamicOptionsLoaderEffect.d.ts +0 -7
  428. package/dist/hooks/useDynamicOptionsLoaderEffect.js +0 -45
  429. package/dist/hooks/useDynamicOptionsLoaderEffect.js.map +0 -1
  430. package/dist/hooks/useLegacyElements.d.ts +0 -16
  431. package/dist/hooks/useLegacyElements.js +0 -55
  432. package/dist/hooks/useLegacyElements.js.map +0 -1
  433. package/dist/hooks/useToggleAll.d.ts +0 -6
  434. package/dist/hooks/useToggleAll.js +0 -24
  435. package/dist/hooks/useToggleAll.js.map +0 -1
  436. package/dist/services/checkIfAttachmentsAreUploading.d.ts +0 -3
  437. package/dist/services/checkIfAttachmentsAreUploading.js +0 -58
  438. package/dist/services/checkIfAttachmentsAreUploading.js.map +0 -1
  439. package/dist/services/clean-form-elements-ctrl-model.d.ts +0 -4
  440. package/dist/services/clean-form-elements-ctrl-model.js +0 -166
  441. package/dist/services/clean-form-elements-ctrl-model.js.map +0 -1
  442. package/dist/services/conditionally-show-element.d.ts +0 -11
  443. package/dist/services/conditionally-show-element.js +0 -92
  444. package/dist/services/conditionally-show-element.js.map +0 -1
  445. package/dist/services/conditionally-show-option.d.ts +0 -3
  446. package/dist/services/conditionally-show-option.js +0 -135
  447. package/dist/services/conditionally-show-option.js.map +0 -1
  448. package/dist/services/flattenFormElements.d.ts +0 -2
  449. package/dist/services/flattenFormElements.js +0 -13
  450. package/dist/services/flattenFormElements.js.map +0 -1
  451. package/dist/services/getCorrectDateFromDateOnlyString.d.ts +0 -2
  452. package/dist/services/getCorrectDateFromDateOnlyString.js +0 -4
  453. package/dist/services/getCorrectDateFromDateOnlyString.js.map +0 -1
  454. package/dist/styles/boolean.scss +0 -12
  455. package/dist/styles/ob-file.scss +0 -63
@@ -1,307 +1,307 @@
1
- import * as React from 'react';
2
- import clsx from 'clsx';
3
- import jsQR from 'jsqr';
4
- import OnLoading from '../components/renderer/OnLoading';
5
- import CopyToClipboardButton from '../components/renderer/CopyToClipboardButton';
6
- import quaggaReader from '../services/barcode-readers/quagger.js';
7
- import useBooleanState from '../hooks/useBooleanState';
8
- import LookupButton from '../components/renderer/LookupButton';
9
- import FormElementLabelContainer from '../components/renderer/FormElementLabelContainer';
10
- import { Sentry } from '@oneblink/apps';
11
- import useLookupNotification from '../hooks/useLookupNotification';
12
- const MS_BETWEEN_IMAGE_PROCESSING = 10;
13
- const fadedSquareWidthInPixels = 200;
14
- const fadedSquareHeightInPixels = 150;
15
- const redLineHeightInPixels = 1;
16
- function FormElementBarcodeScanner({ id, element, value, onChange, validationMessage, displayValidationMessage, }) {
17
- const [isDirty, setIsDirty] = useBooleanState(false);
18
- const [isCameraOpen, startBarcodeScanner, stopBarcodeScanner] = useBooleanState(false);
19
- const [error, setError] = React.useState(null);
20
- const { onLookup } = useLookupNotification();
21
- const handleScan = React.useCallback((newValue) => {
22
- setIsDirty();
23
- onChange(element, newValue);
24
- stopBarcodeScanner();
25
- onLookup(newValue);
26
- }, [element, onChange, onLookup, setIsDirty, stopBarcodeScanner]);
27
- const openBarcodeScanner = React.useCallback(() => {
28
- if (window.cordova) {
29
- setError(null);
30
- // @ts-expect-error ???
31
- window.cordova.plugins.barcodeScanner.scan(
32
- // @ts-expect-error ???
33
- (result) => {
34
- if (!result.cancelled) {
35
- handleScan(result.text);
36
- }
37
- },
38
- // @ts-expect-error ???
39
- (error) => {
40
- setError(new Error(`An error has occurred: "${error}". Please click "Cancel" below to try again. If the problem persists, please contact support.`));
41
- }, {
42
- showFlipCameraButton: true,
43
- showTorchButton: true,
44
- });
45
- }
46
- else {
47
- startBarcodeScanner();
48
- }
49
- }, [handleScan, startBarcodeScanner]);
50
- const text = typeof value === 'string' ? value : '';
51
- return (React.createElement("div", { className: "cypress-barcode-scanner-element" },
52
- React.createElement(FormElementLabelContainer, { className: "ob-barcode-scanner", element: element, id: id, required: element.required },
53
- error && (React.createElement("figure", { className: "ob-figure" },
54
- React.createElement("div", { className: "figure-content has-text-centered" },
55
- React.createElement("div", null,
56
- React.createElement("h4", { className: "title is-4" }, "Whoops..."),
57
- React.createElement("p", null, error.message))))),
58
- isCameraOpen ? (React.createElement(BarcodeScanner, { element: element, onScan: handleScan, onClose: stopBarcodeScanner })) : (React.createElement("div", null,
59
- React.createElement("div", { className: "field has-addons" },
60
- React.createElement("div", { className: "control is-expanded has-icons-right" },
61
- React.createElement("input", { type: "text", placeholder: element.placeholderValue, id: id, name: element.name, className: "input ob-input cypress-barcode-scanner-control has-margin-bottom-8", value: text, onChange: (e) => onChange(element, e.target.value || undefined), required: element.required, disabled: element.readOnly, onBlur: setIsDirty }),
62
- React.createElement("span", { className: "ob-input-icon icon is-small is-right" },
63
- React.createElement("i", { className: "material-icons is-size-5" }, "document_scanner"))),
64
- !!element.readOnly && !!value && (React.createElement("div", { className: "control" },
65
- React.createElement(CopyToClipboardButton, { className: "button is-input-addon copy-button cypress-copy-to-clipboard-button", text: text }))),
66
- React.createElement(LookupButton, { isInputButton: true, value: value, validationMessage: validationMessage })),
67
- React.createElement("button", { type: "button", className: "button ob-button ob-button__open is-primary cypress-start-scan-barcode-button", disabled: element.readOnly, onClick: openBarcodeScanner }, "Scan Barcode"))),
68
- (isDirty || displayValidationMessage) && !!validationMessage && (React.createElement("div", { role: "alert", className: "has-margin-top-8" },
69
- React.createElement("div", { className: "has-text-danger ob-error__text cypress-validation-message" }, validationMessage))))));
70
- }
71
- export default React.memo(FormElementBarcodeScanner);
72
- function BarcodeScanner({ element, onScan, onClose }) {
73
- const videoElementRef = React.useRef(null);
74
- const figureElementRef = React.useRef(null);
75
- const [{ isLoading = false, selectedDeviceId, error }, setState] = React.useState({
76
- isLoading: true,
77
- selectedDeviceId: undefined,
78
- error: undefined,
79
- });
80
- const [camera, setCamera] = React.useState(null);
81
- const setError = React.useCallback((error) => {
82
- setState({
83
- error,
84
- isLoading: false,
85
- selectedDeviceId: undefined,
86
- });
87
- }, []);
88
- // Create timeout using $timeout outside of the scan function so
89
- // so that we can cancel it when navigating away from screen
90
- const scanImageForBarcode = React.useCallback((videoElement, waitInMS, options, checkStop) => {
91
- const restrictedBarcodeTypes = element.restrictedBarcodeTypes || [];
92
- // Using $timeout here instead of $interval as we dont know
93
- // exactly how long each processing of the image will take.
94
- setTimeout(async () => {
95
- if (checkStop())
96
- return;
97
- const canvasElement = document.createElement('canvas');
98
- canvasElement.width = options.sourceWidth;
99
- canvasElement.height = options.sourceHeight;
100
- const canvasContext = canvasElement.getContext('2d');
101
- if (canvasContext) {
102
- canvasContext.drawImage(videoElement, options.sourceX, options.sourceY, canvasElement.width, canvasElement.height, 0, 0, canvasElement.width, canvasElement.height);
103
- if (!element.restrictBarcodeTypes ||
104
- (element.restrictedBarcodeTypes || []).indexOf('qr_reader') > -1) {
105
- const imageData = canvasContext.getImageData(0, 0, canvasElement.width, canvasElement.height);
106
- const code = jsQR(imageData.data, imageData.width, imageData.height, {
107
- inversionAttempts: 'dontInvert',
108
- });
109
- if (code) {
110
- return onScan(code.data);
111
- }
112
- }
113
- }
114
- if (!element.restrictBarcodeTypes ||
115
- !(restrictedBarcodeTypes.length === 1 &&
116
- restrictedBarcodeTypes[0] === 'qr_reader')) {
117
- const base64Image = canvasElement.toDataURL('image/png');
118
- const quaggaResult = await quaggaReader(base64Image, restrictedBarcodeTypes);
119
- if (quaggaResult) {
120
- return onScan(quaggaResult);
121
- }
122
- }
123
- if (checkStop())
124
- return;
125
- scanImageForBarcode(videoElement, MS_BETWEEN_IMAGE_PROCESSING, options, checkStop);
126
- }, waitInMS);
127
- }, [element.restrictBarcodeTypes, element.restrictedBarcodeTypes, onScan]);
128
- const switchCamera = React.useCallback(() => {
129
- if (!camera) {
130
- return;
131
- }
132
- // We will just be rotating between the available camera.
133
- const nextDeviceIndex = camera.availableDevices.findIndex((mediaDeviceInfo) => mediaDeviceInfo.deviceId === camera.activeDeviceId) + 1;
134
- const nextDevice = camera.availableDevices[nextDeviceIndex] || camera.availableDevices[0];
135
- setState({
136
- error: undefined,
137
- isLoading: true,
138
- selectedDeviceId: nextDevice.deviceId,
139
- });
140
- }, [camera]);
141
- React.useEffect(() => {
142
- if (!videoElementRef.current) {
143
- return;
144
- }
145
- const newCamera = new HTML5Camera(videoElementRef.current);
146
- setCamera(newCamera);
147
- return () => {
148
- newCamera.close();
149
- };
150
- }, []);
151
- React.useEffect(() => {
152
- if (!camera ||
153
- error ||
154
- // If attempting to open the device that is currently open,
155
- // we will not attempt to open again.
156
- (selectedDeviceId && camera.activeDeviceId === selectedDeviceId)) {
157
- return;
158
- }
159
- let ignore = false;
160
- (async () => {
161
- try {
162
- const videoElement = videoElementRef.current;
163
- const figureElement = figureElementRef.current;
164
- if (!videoElement || !figureElement) {
165
- return;
166
- }
167
- console.log('Opening camera with:', selectedDeviceId || 'UNKNOWN');
168
- await camera.open(selectedDeviceId);
169
- if (ignore) {
170
- return;
171
- }
172
- setState({
173
- error: undefined,
174
- isLoading: false,
175
- selectedDeviceId,
176
- });
177
- // @ts-expect-error ???
178
- const fadedSquareElement = figureElement.getElementsByClassName('ob-barcode-scanner__square')[0];
179
- // @ts-expect-error ???
180
- const redLineElement = figureElement.getElementsByClassName('ob-barcode-scanner__line')[0];
181
- console.log('videoElement Width pixels', videoElement.clientWidth);
182
- console.log('videoElement Height pixels', videoElement.clientHeight);
183
- console.log('videoElement Width', videoElement.videoWidth);
184
- console.log('videoElement Height', videoElement.videoHeight);
185
- // Faded Square needs its values set in pixels
186
- const fadedSquareLeftInPixels = (videoElement.clientWidth - fadedSquareWidthInPixels) / 2;
187
- console.log('fadedSquareLeftInPixels', fadedSquareLeftInPixels);
188
- const fadedSquareTopInPixels = (videoElement.clientHeight - fadedSquareHeightInPixels) / 2;
189
- console.log('fadedSquareTopInPixels', fadedSquareTopInPixels);
190
- fadedSquareElement.style.borderBottom = `${fadedSquareTopInPixels}px`;
191
- fadedSquareElement.style.borderTop = `${fadedSquareTopInPixels}px`;
192
- fadedSquareElement.style.borderLeft = `${fadedSquareLeftInPixels}px`;
193
- fadedSquareElement.style.borderRight = `${fadedSquareLeftInPixels}px`;
194
- fadedSquareElement.style.borderColor = 'rgba(0, 0, 0, 0.25)';
195
- fadedSquareElement.style.borderStyle = 'solid';
196
- redLineElement.style.height = `${redLineHeightInPixels}px`;
197
- redLineElement.style.top = `${(videoElement.clientHeight - redLineHeightInPixels) / 2}px`;
198
- redLineElement.style.left = `${fadedSquareLeftInPixels}px`;
199
- redLineElement.style.right = `${fadedSquareLeftInPixels}px`;
200
- // Need to calculate the actual width, which is not in pixels
201
- const ratio = videoElement.videoWidth / videoElement.clientWidth;
202
- console.log('pixel to video Ratio', ratio);
203
- const left = ratio * fadedSquareLeftInPixels;
204
- console.log('left in video measurement', left);
205
- const top = ratio * fadedSquareTopInPixels;
206
- console.log('top in video measurement', top);
207
- const fadedSquareWidth = fadedSquareWidthInPixels * ratio;
208
- console.log('red square in video measurement', fadedSquareWidth);
209
- // Wait a little before scanning the first image
210
- // to prevent image processing staring before
211
- // camera is ready.
212
- scanImageForBarcode(videoElement, 250, {
213
- sourceX: left,
214
- sourceY: top,
215
- sourceWidth: fadedSquareWidth,
216
- sourceHeight: fadedSquareWidth,
217
- }, () => ignore);
218
- }
219
- catch (error) {
220
- if (ignore) {
221
- return;
222
- }
223
- console.warn('Error while attempting to open camera', error);
224
- Sentry.captureException(error);
225
- switch (error.name) {
226
- case 'NotSupportedError': {
227
- setError(new Error('Your browser does not support accessing your camera. Please click "Cancel" below and type in the barcode value manually.'));
228
- break;
229
- }
230
- case 'NotAllowedError': {
231
- setError(new Error('Cannot scan for barcodes without granting the application access to the camera. Please click "Cancel" below to try again.'));
232
- break;
233
- }
234
- default: {
235
- setError(new Error('An unknown error has occurred, please click "Cancel" below to try again. If the problem persists, please contact support.'));
236
- }
237
- }
238
- }
239
- })();
240
- return () => {
241
- ignore = true;
242
- };
243
- }, [camera, error, scanImageForBarcode, selectedDeviceId, setError]);
244
- return (React.createElement("div", null,
245
- React.createElement("figure", { className: "ob-figure", ref: figureElementRef },
246
- React.createElement("div", { className: "figure-content has-text-centered" },
247
- isLoading && React.createElement(OnLoading, { small: true }),
248
- !!error && (React.createElement("div", null,
249
- React.createElement("h4", { className: "title is-4" }, "Whoops..."),
250
- React.createElement("p", null, error.message))),
251
- React.createElement("div", { className: clsx('is-relative', {
252
- 'is-hidden': isLoading || error,
253
- }) },
254
- React.createElement("div", { className: "ob-barcode-scanner__square" }),
255
- React.createElement("div", { className: "ob-barcode-scanner__line" }),
256
- React.createElement("video", { ref: videoElementRef, autoPlay: true, playsInline: true, className: "ob-barcode-scanner__video" })))),
257
- React.createElement("div", { className: "buttons ob-buttons" },
258
- React.createElement("button", { type: "button", className: "button ob-button ob-button__cancel is-light cypress-cancel-scan-barcode-button", onClick: onClose }, "Cancel"),
259
- ((camera === null || camera === void 0 ? void 0 : camera.availableDevices.length) || 1) > 1 && (React.createElement("button", { type: "button", className: "button ob-button ob-button__switch-camera is-primary cypress-switch-camera-button", onClick: switchCamera }, "Switch Camera")))));
260
- }
261
- class HTML5Camera {
262
- constructor(htmlVideoElement) {
263
- this.htmlVideoElement = htmlVideoElement;
264
- this.availableDevices = [];
265
- this.mediaStream = undefined;
266
- }
267
- get activeDeviceId() {
268
- var _a;
269
- if (this.mediaStream) {
270
- const [activeMediaStreamTrack] = this.mediaStream.getTracks();
271
- return (_a = activeMediaStreamTrack === null || activeMediaStreamTrack === void 0 ? void 0 : activeMediaStreamTrack.getSettings()) === null || _a === void 0 ? void 0 : _a.deviceId;
272
- }
273
- }
274
- async open(deviceId) {
275
- if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
276
- const error = new Error();
277
- error.name = 'NotSupportedError';
278
- throw error;
279
- }
280
- this.close();
281
- const constraints = {
282
- video: {
283
- facingMode: deviceId ? undefined : 'environment',
284
- deviceId: deviceId ? { exact: deviceId } : undefined,
285
- },
286
- };
287
- const mediaStream = await navigator.mediaDevices.getUserMedia(constraints);
288
- this.mediaStream = mediaStream;
289
- this.htmlVideoElement.srcObject = mediaStream;
290
- if (!this.availableDevices.length) {
291
- const availableDevices = await navigator.mediaDevices.enumerateDevices();
292
- this.availableDevices = availableDevices.filter((mediaDeviceInfo) => mediaDeviceInfo.kind === 'videoinput' && !!mediaDeviceInfo.deviceId);
293
- }
294
- await new Promise((resolve) => this.htmlVideoElement.addEventListener('canplay', resolve, {
295
- once: true,
296
- }));
297
- }
298
- close() {
299
- if (this.mediaStream) {
300
- this.mediaStream.getTracks().forEach((track) => {
301
- track.stop();
302
- });
303
- this.mediaStream = undefined;
304
- }
305
- }
306
- }
1
+ import * as React from 'react';
2
+ import clsx from 'clsx';
3
+ import jsQR from 'jsqr';
4
+ import OnLoading from '../components/renderer/OnLoading';
5
+ import CopyToClipboardButton from '../components/renderer/CopyToClipboardButton';
6
+ import quaggaReader from '../services/barcode-readers/quagger.js';
7
+ import useBooleanState from '../hooks/useBooleanState';
8
+ import LookupButton from '../components/renderer/LookupButton';
9
+ import FormElementLabelContainer from '../components/renderer/FormElementLabelContainer';
10
+ import { Sentry } from '@oneblink/apps';
11
+ import useLookupNotification from '../hooks/useLookupNotification';
12
+ const MS_BETWEEN_IMAGE_PROCESSING = 10;
13
+ const fadedSquareWidthInPixels = 200;
14
+ const fadedSquareHeightInPixels = 150;
15
+ const redLineHeightInPixels = 1;
16
+ function FormElementBarcodeScanner({ id, element, value, onChange, validationMessage, displayValidationMessage, }) {
17
+ const [isDirty, setIsDirty] = useBooleanState(false);
18
+ const [isCameraOpen, startBarcodeScanner, stopBarcodeScanner] = useBooleanState(false);
19
+ const [error, setError] = React.useState(null);
20
+ const { onLookup } = useLookupNotification();
21
+ const handleScan = React.useCallback((newValue) => {
22
+ setIsDirty();
23
+ onChange(element, newValue);
24
+ stopBarcodeScanner();
25
+ onLookup(newValue);
26
+ }, [element, onChange, onLookup, setIsDirty, stopBarcodeScanner]);
27
+ const openBarcodeScanner = React.useCallback(() => {
28
+ if (window.cordova) {
29
+ setError(null);
30
+ // @ts-expect-error ???
31
+ window.cordova.plugins.barcodeScanner.scan(
32
+ // @ts-expect-error ???
33
+ (result) => {
34
+ if (!result.cancelled) {
35
+ handleScan(result.text);
36
+ }
37
+ },
38
+ // @ts-expect-error ???
39
+ (error) => {
40
+ setError(new Error(`An error has occurred: "${error}". Please click "Cancel" below to try again. If the problem persists, please contact support.`));
41
+ }, {
42
+ showFlipCameraButton: true,
43
+ showTorchButton: true,
44
+ });
45
+ }
46
+ else {
47
+ startBarcodeScanner();
48
+ }
49
+ }, [handleScan, startBarcodeScanner]);
50
+ const text = typeof value === 'string' ? value : '';
51
+ return (React.createElement("div", { className: "cypress-barcode-scanner-element" },
52
+ React.createElement(FormElementLabelContainer, { className: "ob-barcode-scanner", element: element, id: id, required: element.required },
53
+ error && (React.createElement("figure", { className: "ob-figure" },
54
+ React.createElement("div", { className: "figure-content has-text-centered" },
55
+ React.createElement("div", null,
56
+ React.createElement("h4", { className: "title is-4" }, "Whoops..."),
57
+ React.createElement("p", null, error.message))))),
58
+ isCameraOpen ? (React.createElement(BarcodeScanner, { element: element, onScan: handleScan, onClose: stopBarcodeScanner })) : (React.createElement("div", null,
59
+ React.createElement("div", { className: "field has-addons" },
60
+ React.createElement("div", { className: "control is-expanded has-icons-right" },
61
+ React.createElement("input", { type: "text", placeholder: element.placeholderValue, id: id, name: element.name, className: "input ob-input cypress-barcode-scanner-control has-margin-bottom-8", value: text, onChange: (e) => onChange(element, e.target.value || undefined), required: element.required, disabled: element.readOnly, onBlur: setIsDirty }),
62
+ React.createElement("span", { className: "ob-input-icon icon is-small is-right" },
63
+ React.createElement("i", { className: "material-icons is-size-5" }, "document_scanner"))),
64
+ !!element.readOnly && !!value && (React.createElement("div", { className: "control" },
65
+ React.createElement(CopyToClipboardButton, { className: "button is-input-addon copy-button cypress-copy-to-clipboard-button", text: text }))),
66
+ React.createElement(LookupButton, { isInputButton: true, value: value, validationMessage: validationMessage })),
67
+ React.createElement("button", { type: "button", className: "button ob-button ob-button__open is-primary cypress-start-scan-barcode-button", disabled: element.readOnly, onClick: openBarcodeScanner }, "Scan Barcode"))),
68
+ (isDirty || displayValidationMessage) && !!validationMessage && (React.createElement("div", { role: "alert", className: "has-margin-top-8" },
69
+ React.createElement("div", { className: "has-text-danger ob-error__text cypress-validation-message" }, validationMessage))))));
70
+ }
71
+ export default React.memo(FormElementBarcodeScanner);
72
+ function BarcodeScanner({ element, onScan, onClose }) {
73
+ const videoElementRef = React.useRef(null);
74
+ const figureElementRef = React.useRef(null);
75
+ const [{ isLoading = false, selectedDeviceId, error }, setState] = React.useState({
76
+ isLoading: true,
77
+ selectedDeviceId: undefined,
78
+ error: undefined,
79
+ });
80
+ const [camera, setCamera] = React.useState(null);
81
+ const setError = React.useCallback((error) => {
82
+ setState({
83
+ error,
84
+ isLoading: false,
85
+ selectedDeviceId: undefined,
86
+ });
87
+ }, []);
88
+ // Create timeout using $timeout outside of the scan function so
89
+ // so that we can cancel it when navigating away from screen
90
+ const scanImageForBarcode = React.useCallback((videoElement, waitInMS, options, checkStop) => {
91
+ const restrictedBarcodeTypes = element.restrictedBarcodeTypes || [];
92
+ // Using $timeout here instead of $interval as we dont know
93
+ // exactly how long each processing of the image will take.
94
+ setTimeout(async () => {
95
+ if (checkStop())
96
+ return;
97
+ const canvasElement = document.createElement('canvas');
98
+ canvasElement.width = options.sourceWidth;
99
+ canvasElement.height = options.sourceHeight;
100
+ const canvasContext = canvasElement.getContext('2d');
101
+ if (canvasContext) {
102
+ canvasContext.drawImage(videoElement, options.sourceX, options.sourceY, canvasElement.width, canvasElement.height, 0, 0, canvasElement.width, canvasElement.height);
103
+ if (!element.restrictBarcodeTypes ||
104
+ (element.restrictedBarcodeTypes || []).indexOf('qr_reader') > -1) {
105
+ const imageData = canvasContext.getImageData(0, 0, canvasElement.width, canvasElement.height);
106
+ const code = jsQR(imageData.data, imageData.width, imageData.height, {
107
+ inversionAttempts: 'dontInvert',
108
+ });
109
+ if (code) {
110
+ return onScan(code.data);
111
+ }
112
+ }
113
+ }
114
+ if (!element.restrictBarcodeTypes ||
115
+ !(restrictedBarcodeTypes.length === 1 &&
116
+ restrictedBarcodeTypes[0] === 'qr_reader')) {
117
+ const base64Image = canvasElement.toDataURL('image/png');
118
+ const quaggaResult = await quaggaReader(base64Image, restrictedBarcodeTypes);
119
+ if (quaggaResult) {
120
+ return onScan(quaggaResult);
121
+ }
122
+ }
123
+ if (checkStop())
124
+ return;
125
+ scanImageForBarcode(videoElement, MS_BETWEEN_IMAGE_PROCESSING, options, checkStop);
126
+ }, waitInMS);
127
+ }, [element.restrictBarcodeTypes, element.restrictedBarcodeTypes, onScan]);
128
+ const switchCamera = React.useCallback(() => {
129
+ if (!camera) {
130
+ return;
131
+ }
132
+ // We will just be rotating between the available camera.
133
+ const nextDeviceIndex = camera.availableDevices.findIndex((mediaDeviceInfo) => mediaDeviceInfo.deviceId === camera.activeDeviceId) + 1;
134
+ const nextDevice = camera.availableDevices[nextDeviceIndex] || camera.availableDevices[0];
135
+ setState({
136
+ error: undefined,
137
+ isLoading: true,
138
+ selectedDeviceId: nextDevice.deviceId,
139
+ });
140
+ }, [camera]);
141
+ React.useEffect(() => {
142
+ if (!videoElementRef.current) {
143
+ return;
144
+ }
145
+ const newCamera = new HTML5Camera(videoElementRef.current);
146
+ setCamera(newCamera);
147
+ return () => {
148
+ newCamera.close();
149
+ };
150
+ }, []);
151
+ React.useEffect(() => {
152
+ if (!camera ||
153
+ error ||
154
+ // If attempting to open the device that is currently open,
155
+ // we will not attempt to open again.
156
+ (selectedDeviceId && camera.activeDeviceId === selectedDeviceId)) {
157
+ return;
158
+ }
159
+ let ignore = false;
160
+ (async () => {
161
+ try {
162
+ const videoElement = videoElementRef.current;
163
+ const figureElement = figureElementRef.current;
164
+ if (!videoElement || !figureElement) {
165
+ return;
166
+ }
167
+ console.log('Opening camera with:', selectedDeviceId || 'UNKNOWN');
168
+ await camera.open(selectedDeviceId);
169
+ if (ignore) {
170
+ return;
171
+ }
172
+ setState({
173
+ error: undefined,
174
+ isLoading: false,
175
+ selectedDeviceId,
176
+ });
177
+ // @ts-expect-error ???
178
+ const fadedSquareElement = figureElement.getElementsByClassName('ob-barcode-scanner__square')[0];
179
+ // @ts-expect-error ???
180
+ const redLineElement = figureElement.getElementsByClassName('ob-barcode-scanner__line')[0];
181
+ console.log('videoElement Width pixels', videoElement.clientWidth);
182
+ console.log('videoElement Height pixels', videoElement.clientHeight);
183
+ console.log('videoElement Width', videoElement.videoWidth);
184
+ console.log('videoElement Height', videoElement.videoHeight);
185
+ // Faded Square needs its values set in pixels
186
+ const fadedSquareLeftInPixels = (videoElement.clientWidth - fadedSquareWidthInPixels) / 2;
187
+ console.log('fadedSquareLeftInPixels', fadedSquareLeftInPixels);
188
+ const fadedSquareTopInPixels = (videoElement.clientHeight - fadedSquareHeightInPixels) / 2;
189
+ console.log('fadedSquareTopInPixels', fadedSquareTopInPixels);
190
+ fadedSquareElement.style.borderBottom = `${fadedSquareTopInPixels}px`;
191
+ fadedSquareElement.style.borderTop = `${fadedSquareTopInPixels}px`;
192
+ fadedSquareElement.style.borderLeft = `${fadedSquareLeftInPixels}px`;
193
+ fadedSquareElement.style.borderRight = `${fadedSquareLeftInPixels}px`;
194
+ fadedSquareElement.style.borderColor = 'rgba(0, 0, 0, 0.25)';
195
+ fadedSquareElement.style.borderStyle = 'solid';
196
+ redLineElement.style.height = `${redLineHeightInPixels}px`;
197
+ redLineElement.style.top = `${(videoElement.clientHeight - redLineHeightInPixels) / 2}px`;
198
+ redLineElement.style.left = `${fadedSquareLeftInPixels}px`;
199
+ redLineElement.style.right = `${fadedSquareLeftInPixels}px`;
200
+ // Need to calculate the actual width, which is not in pixels
201
+ const ratio = videoElement.videoWidth / videoElement.clientWidth;
202
+ console.log('pixel to video Ratio', ratio);
203
+ const left = ratio * fadedSquareLeftInPixels;
204
+ console.log('left in video measurement', left);
205
+ const top = ratio * fadedSquareTopInPixels;
206
+ console.log('top in video measurement', top);
207
+ const fadedSquareWidth = fadedSquareWidthInPixels * ratio;
208
+ console.log('red square in video measurement', fadedSquareWidth);
209
+ // Wait a little before scanning the first image
210
+ // to prevent image processing staring before
211
+ // camera is ready.
212
+ scanImageForBarcode(videoElement, 250, {
213
+ sourceX: left,
214
+ sourceY: top,
215
+ sourceWidth: fadedSquareWidth,
216
+ sourceHeight: fadedSquareWidth,
217
+ }, () => ignore);
218
+ }
219
+ catch (error) {
220
+ if (ignore) {
221
+ return;
222
+ }
223
+ console.warn('Error while attempting to open camera', error);
224
+ Sentry.captureException(error);
225
+ switch (error.name) {
226
+ case 'NotSupportedError': {
227
+ setError(new Error('Your browser does not support accessing your camera. Please click "Cancel" below and type in the barcode value manually.'));
228
+ break;
229
+ }
230
+ case 'NotAllowedError': {
231
+ setError(new Error('Cannot scan for barcodes without granting the application access to the camera. Please click "Cancel" below to try again.'));
232
+ break;
233
+ }
234
+ default: {
235
+ setError(new Error('An unknown error has occurred, please click "Cancel" below to try again. If the problem persists, please contact support.'));
236
+ }
237
+ }
238
+ }
239
+ })();
240
+ return () => {
241
+ ignore = true;
242
+ };
243
+ }, [camera, error, scanImageForBarcode, selectedDeviceId, setError]);
244
+ return (React.createElement("div", null,
245
+ React.createElement("figure", { className: "ob-figure", ref: figureElementRef },
246
+ React.createElement("div", { className: "figure-content has-text-centered" },
247
+ isLoading && React.createElement(OnLoading, { small: true }),
248
+ !!error && (React.createElement("div", null,
249
+ React.createElement("h4", { className: "title is-4" }, "Whoops..."),
250
+ React.createElement("p", null, error.message))),
251
+ React.createElement("div", { className: clsx('is-relative', {
252
+ 'is-hidden': isLoading || error,
253
+ }) },
254
+ React.createElement("div", { className: "ob-barcode-scanner__square" }),
255
+ React.createElement("div", { className: "ob-barcode-scanner__line" }),
256
+ React.createElement("video", { ref: videoElementRef, autoPlay: true, playsInline: true, className: "ob-barcode-scanner__video" })))),
257
+ React.createElement("div", { className: "buttons ob-buttons" },
258
+ React.createElement("button", { type: "button", className: "button ob-button ob-button__cancel is-light cypress-cancel-scan-barcode-button", onClick: onClose }, "Cancel"),
259
+ ((camera === null || camera === void 0 ? void 0 : camera.availableDevices.length) || 1) > 1 && (React.createElement("button", { type: "button", className: "button ob-button ob-button__switch-camera is-primary cypress-switch-camera-button", onClick: switchCamera }, "Switch Camera")))));
260
+ }
261
+ class HTML5Camera {
262
+ constructor(htmlVideoElement) {
263
+ this.htmlVideoElement = htmlVideoElement;
264
+ this.availableDevices = [];
265
+ this.mediaStream = undefined;
266
+ }
267
+ get activeDeviceId() {
268
+ var _a;
269
+ if (this.mediaStream) {
270
+ const [activeMediaStreamTrack] = this.mediaStream.getTracks();
271
+ return (_a = activeMediaStreamTrack === null || activeMediaStreamTrack === void 0 ? void 0 : activeMediaStreamTrack.getSettings()) === null || _a === void 0 ? void 0 : _a.deviceId;
272
+ }
273
+ }
274
+ async open(deviceId) {
275
+ if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
276
+ const error = new Error();
277
+ error.name = 'NotSupportedError';
278
+ throw error;
279
+ }
280
+ this.close();
281
+ const constraints = {
282
+ video: {
283
+ facingMode: deviceId ? undefined : 'environment',
284
+ deviceId: deviceId ? { exact: deviceId } : undefined,
285
+ },
286
+ };
287
+ const mediaStream = await navigator.mediaDevices.getUserMedia(constraints);
288
+ this.mediaStream = mediaStream;
289
+ this.htmlVideoElement.srcObject = mediaStream;
290
+ if (!this.availableDevices.length) {
291
+ const availableDevices = await navigator.mediaDevices.enumerateDevices();
292
+ this.availableDevices = availableDevices.filter((mediaDeviceInfo) => mediaDeviceInfo.kind === 'videoinput' && !!mediaDeviceInfo.deviceId);
293
+ }
294
+ await new Promise((resolve) => this.htmlVideoElement.addEventListener('canplay', resolve, {
295
+ once: true,
296
+ }));
297
+ }
298
+ close() {
299
+ if (this.mediaStream) {
300
+ this.mediaStream.getTracks().forEach((track) => {
301
+ track.stop();
302
+ });
303
+ this.mediaStream = undefined;
304
+ }
305
+ }
306
+ }
307
307
  //# sourceMappingURL=FormElementBarcodeScanner.js.map