@oneblink/apps-react 9.0.0-beta.2 → 9.0.0-beta.4
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.
- package/dist/OneBlinkForm.d.ts +6 -10
- package/dist/OneBlinkForm.js +0 -4
- package/dist/OneBlinkForm.js.map +1 -1
- package/dist/OneBlinkFormBase.d.ts +1 -1
- package/dist/OneBlinkFormBase.js +2 -1
- package/dist/OneBlinkFormBase.js.map +1 -1
- package/dist/OneBlinkReadOnlyForm.d.ts +1 -1
- package/dist/OneBlinkReadOnlyForm.js +1 -1
- package/dist/OneBlinkReadOnlyForm.js.map +1 -1
- package/dist/PaymentReceipt.d.ts +1 -1
- package/dist/PaymentReceipt.js +1 -1
- package/dist/PaymentReceipt.js.map +1 -1
- package/dist/apps/Sentry.d.ts +7 -0
- package/dist/apps/Sentry.js +16 -0
- package/dist/apps/Sentry.js.map +1 -0
- package/dist/apps/approvals-service.d.ts +390 -0
- package/dist/apps/approvals-service.js +987 -0
- package/dist/apps/approvals-service.js.map +1 -0
- package/dist/apps/attachments-service.d.ts +49 -0
- package/dist/apps/attachments-service.js +134 -0
- package/dist/apps/attachments-service.js.map +1 -0
- package/dist/apps/auth-service.d.ts +114 -0
- package/dist/apps/auth-service.js +194 -0
- package/dist/apps/auth-service.js.map +1 -0
- package/dist/apps/auto-save-service.d.ts +82 -0
- package/dist/apps/auto-save-service.js +105 -0
- package/dist/apps/auto-save-service.js.map +1 -0
- package/dist/apps/draft-service.d.ts +148 -0
- package/dist/apps/draft-service.js +583 -0
- package/dist/apps/draft-service.js.map +1 -0
- package/dist/apps/form-service.d.ts +204 -0
- package/dist/apps/form-service.js +718 -0
- package/dist/apps/form-service.js.map +1 -0
- package/dist/apps/form-store-service.d.ts +141 -0
- package/dist/apps/form-store-service.js +114 -0
- package/dist/apps/form-store-service.js.map +1 -0
- package/dist/apps/forms-app-environment-service.d.ts +19 -0
- package/dist/apps/forms-app-environment-service.js +55 -0
- package/dist/apps/forms-app-environment-service.js.map +1 -0
- package/dist/apps/forms-app-service.d.ts +18 -0
- package/dist/apps/forms-app-service.js +53 -0
- package/dist/apps/forms-app-service.js.map +1 -0
- package/dist/apps/index.d.ts +252 -0
- package/dist/apps/index.js +254 -0
- package/dist/apps/index.js.map +1 -0
- package/dist/apps/job-service.d.ts +20 -0
- package/dist/apps/job-service.js +95 -0
- package/dist/apps/job-service.js.map +1 -0
- package/dist/apps/localisation-service.d.ts +207 -0
- package/dist/apps/localisation-service.js +321 -0
- package/dist/apps/localisation-service.js.map +1 -0
- package/dist/apps/notification-service.d.ts +83 -0
- package/dist/apps/notification-service.js +315 -0
- package/dist/apps/notification-service.js.map +1 -0
- package/dist/apps/offline-service.d.ts +18 -0
- package/dist/apps/offline-service.js +25 -0
- package/dist/apps/offline-service.js.map +1 -0
- package/dist/apps/payment-service.d.ts +110 -0
- package/dist/apps/payment-service.js +182 -0
- package/dist/apps/payment-service.js.map +1 -0
- package/dist/apps/prefill-service.d.ts +14 -0
- package/dist/apps/prefill-service.js +19 -0
- package/dist/apps/prefill-service.js.map +1 -0
- package/dist/apps/scheduled-tasks-service.d.ts +127 -0
- package/dist/apps/scheduled-tasks-service.js +240 -0
- package/dist/apps/scheduled-tasks-service.js.map +1 -0
- package/dist/apps/scheduling-service.d.ts +101 -0
- package/dist/apps/scheduling-service.js +171 -0
- package/dist/apps/scheduling-service.js.map +1 -0
- package/dist/apps/services/AWSCognitoClient.d.ts +55 -0
- package/dist/apps/services/AWSCognitoClient.js +436 -0
- package/dist/apps/services/AWSCognitoClient.js.map +1 -0
- package/dist/apps/services/api/drafts.d.ts +7 -0
- package/dist/apps/services/api/drafts.js +236 -0
- package/dist/apps/services/api/drafts.js.map +1 -0
- package/dist/apps/services/api/notifications.d.ts +3 -0
- package/dist/apps/services/api/notifications.js +60 -0
- package/dist/apps/services/api/notifications.js.map +1 -0
- package/dist/apps/services/api/payment.d.ts +23 -0
- package/dist/apps/services/api/payment.js +235 -0
- package/dist/apps/services/api/payment.js.map +1 -0
- package/dist/apps/services/api/post-submission-attachment-urls.d.ts +7 -0
- package/dist/apps/services/api/post-submission-attachment-urls.js +19 -0
- package/dist/apps/services/api/post-submission-attachment-urls.js.map +1 -0
- package/dist/apps/services/api/prefill.d.ts +1 -0
- package/dist/apps/services/api/prefill.js +70 -0
- package/dist/apps/services/api/prefill.js.map +1 -0
- package/dist/apps/services/api/receipt-id.d.ts +2 -0
- package/dist/apps/services/api/receipt-id.js +54 -0
- package/dist/apps/services/api/receipt-id.js.map +1 -0
- package/dist/apps/services/api/scheduling.d.ts +38 -0
- package/dist/apps/services/api/scheduling.js +142 -0
- package/dist/apps/services/api/scheduling.js.map +1 -0
- package/dist/apps/services/api/submissions.d.ts +18 -0
- package/dist/apps/services/api/submissions.js +166 -0
- package/dist/apps/services/api/submissions.js.map +1 -0
- package/dist/apps/services/cognito.d.ts +302 -0
- package/dist/apps/services/cognito.js +441 -0
- package/dist/apps/services/cognito.js.map +1 -0
- package/dist/apps/services/draft-data-store.d.ts +16 -0
- package/dist/apps/services/draft-data-store.js +115 -0
- package/dist/apps/services/draft-data-store.js.map +1 -0
- package/dist/apps/services/errors/oneBlinkAppsError.d.ts +35 -0
- package/dist/apps/services/errors/oneBlinkAppsError.js +32 -0
- package/dist/apps/services/errors/oneBlinkAppsError.js.map +1 -0
- package/dist/apps/services/external-id-generation.d.ts +4 -0
- package/dist/apps/services/external-id-generation.js +59 -0
- package/dist/apps/services/external-id-generation.js.map +1 -0
- package/dist/apps/services/fetch.d.ts +12 -0
- package/dist/apps/services/fetch.js +95 -0
- package/dist/apps/services/fetch.js.map +1 -0
- package/dist/apps/services/forms-key.d.ts +51 -0
- package/dist/apps/services/forms-key.js +83 -0
- package/dist/apps/services/forms-key.js.map +1 -0
- package/dist/apps/services/generate-generic-error.d.ts +3 -0
- package/dist/apps/services/generate-generic-error.js +52 -0
- package/dist/apps/services/generate-generic-error.js.map +1 -0
- package/dist/apps/services/generateOneBlinkDownloader.d.ts +2 -0
- package/dist/apps/services/generateOneBlinkDownloader.js +11 -0
- package/dist/apps/services/generateOneBlinkDownloader.js.map +1 -0
- package/dist/apps/services/generateOneBlinkUploader.d.ts +2 -0
- package/dist/apps/services/generateOneBlinkUploader.js +11 -0
- package/dist/apps/services/generateOneBlinkUploader.js.map +1 -0
- package/dist/apps/services/getDeviceInformation.d.ts +17 -0
- package/dist/apps/services/getDeviceInformation.js +38 -0
- package/dist/apps/services/getDeviceInformation.js.map +1 -0
- package/dist/apps/services/integration-elements.d.ts +383 -0
- package/dist/apps/services/integration-elements.js +761 -0
- package/dist/apps/services/integration-elements.js.map +1 -0
- package/dist/apps/services/job-prefill.d.ts +40 -0
- package/dist/apps/services/job-prefill.js +78 -0
- package/dist/apps/services/job-prefill.js.map +1 -0
- package/dist/apps/services/payment-providers/BPOINTPaymentProvider.d.ts +29 -0
- package/dist/apps/services/payment-providers/BPOINTPaymentProvider.js +59 -0
- package/dist/apps/services/payment-providers/BPOINTPaymentProvider.js.map +1 -0
- package/dist/apps/services/payment-providers/CPPayPaymentProvider.d.ts +27 -0
- package/dist/apps/services/payment-providers/CPPayPaymentProvider.js +63 -0
- package/dist/apps/services/payment-providers/CPPayPaymentProvider.js.map +1 -0
- package/dist/apps/services/payment-providers/NSWGovPayPaymentProvider.d.ts +30 -0
- package/dist/apps/services/payment-providers/NSWGovPayPaymentProvider.js +116 -0
- package/dist/apps/services/payment-providers/NSWGovPayPaymentProvider.js.map +1 -0
- package/dist/apps/services/payment-providers/WestpacQuickStreamPaymentProvider.d.ts +49 -0
- package/dist/apps/services/payment-providers/WestpacQuickStreamPaymentProvider.js +116 -0
- package/dist/apps/services/payment-providers/WestpacQuickStreamPaymentProvider.js.map +1 -0
- package/dist/apps/services/payment-providers/receipt-items.d.ts +8 -0
- package/dist/apps/services/payment-providers/receipt-items.js +58 -0
- package/dist/apps/services/payment-providers/receipt-items.js.map +1 -0
- package/dist/apps/services/pending-queue.d.ts +150 -0
- package/dist/apps/services/pending-queue.js +316 -0
- package/dist/apps/services/pending-queue.js.map +1 -0
- package/dist/apps/services/prepareSubmissionData.d.ts +2 -0
- package/dist/apps/services/prepareSubmissionData.js +113 -0
- package/dist/apps/services/prepareSubmissionData.js.map +1 -0
- package/dist/apps/services/query-string.d.ts +1 -0
- package/dist/apps/services/query-string.js +16 -0
- package/dist/apps/services/query-string.js.map +1 -0
- package/dist/apps/services/replaceInjectablesWithSubmissionValues.d.ts +3 -0
- package/dist/apps/services/replaceInjectablesWithSubmissionValues.js +18 -0
- package/dist/apps/services/replaceInjectablesWithSubmissionValues.js.map +1 -0
- package/dist/apps/services/schedulingHandlers.d.ts +36 -0
- package/dist/apps/services/schedulingHandlers.js +76 -0
- package/dist/apps/services/schedulingHandlers.js.map +1 -0
- package/dist/apps/services/server-validation.d.ts +2 -0
- package/dist/apps/services/server-validation.js +36 -0
- package/dist/apps/services/server-validation.js.map +1 -0
- package/dist/apps/services/serverRequest.d.ts +5 -0
- package/dist/apps/services/serverRequest.js +24 -0
- package/dist/apps/services/serverRequest.js.map +1 -0
- package/dist/apps/services/submit.d.ts +19 -0
- package/dist/apps/services/submit.js +219 -0
- package/dist/apps/services/submit.js.map +1 -0
- package/dist/apps/services/uploadAttachment.d.ts +52 -0
- package/dist/apps/services/uploadAttachment.js +73 -0
- package/dist/apps/services/uploadAttachment.js.map +1 -0
- package/dist/apps/services/user-token.d.ts +27 -0
- package/dist/apps/services/user-token.js +33 -0
- package/dist/apps/services/user-token.js.map +1 -0
- package/dist/apps/services/utils.d.ts +12 -0
- package/dist/apps/services/utils.js +100 -0
- package/dist/apps/services/utils.js.map +1 -0
- package/dist/apps/submission-service.d.ts +226 -0
- package/dist/apps/submission-service.js +425 -0
- package/dist/apps/submission-service.js.map +1 -0
- package/dist/apps/tenants.d.ts +29 -0
- package/dist/apps/tenants.js +127 -0
- package/dist/apps/tenants.js.map +1 -0
- package/dist/apps/types/form.d.ts +4 -0
- package/dist/apps/types/form.js +2 -0
- package/dist/apps/types/form.js.map +1 -0
- package/dist/apps/types/payments.d.ts +45 -0
- package/dist/apps/types/payments.js +2 -0
- package/dist/apps/types/payments.js.map +1 -0
- package/dist/apps/types/scheduling.d.ts +5 -0
- package/dist/apps/types/scheduling.js +2 -0
- package/dist/apps/types/scheduling.js.map +1 -0
- package/dist/apps/types/submissions.d.ts +175 -0
- package/dist/apps/types/submissions.js +2 -0
- package/dist/apps/types/submissions.js.map +1 -0
- package/dist/components/ArcGISWebMap.js +1 -1
- package/dist/components/ArcGISWebMap.js.map +1 -1
- package/dist/components/CustomAccordion.d.ts +3 -3
- package/dist/components/Lists.d.ts +4 -1
- package/dist/components/calendar-bookings/CalendarBookingsCancelForm.js +1 -1
- package/dist/components/calendar-bookings/CalendarBookingsCancelForm.js.map +1 -1
- package/dist/components/calendar-bookings/CalendarBookingsForm.d.ts +1 -1
- package/dist/components/calendar-bookings/CalendarBookingsForm.js +1 -1
- package/dist/components/calendar-bookings/CalendarBookingsForm.js.map +1 -1
- package/dist/components/calendar-bookings/CalendarBookingsReschedulingForm.js +1 -1
- package/dist/components/calendar-bookings/CalendarBookingsReschedulingForm.js.map +1 -1
- package/dist/components/calendar-bookings/ErrorModal.d.ts +1 -1
- package/dist/components/calendar-bookings/ErrorModal.js +1 -1
- package/dist/components/calendar-bookings/ErrorModal.js.map +1 -1
- package/dist/components/downloadable-files/index.d.ts +1 -1
- package/dist/components/downloadable-files/index.js +1 -1
- package/dist/components/downloadable-files/index.js.map +1 -1
- package/dist/components/downloadable-files/resource-components.d.ts +1 -1
- package/dist/components/downloadable-files/resource-components.js +1 -1
- package/dist/components/downloadable-files/resource-components.js.map +1 -1
- package/dist/components/formStore/FormStoreTableProvider.js +1 -1
- package/dist/components/formStore/FormStoreTableProvider.js.map +1 -1
- package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.js.map +1 -1
- package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js +1 -1
- package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js.map +1 -1
- package/dist/components/formStore/OneBlinkFormStoreProvider.js +1 -1
- package/dist/components/formStore/OneBlinkFormStoreProvider.js.map +1 -1
- package/dist/components/formStore/OneBlinkFormStoreTable.js.map +1 -1
- package/dist/components/formStore/display/ElementDisplay.js +2 -2
- package/dist/components/formStore/display/ElementDisplay.js.map +1 -1
- package/dist/components/formStore/table/ColumnFilters.js +1 -1
- package/dist/components/formStore/table/ColumnFilters.js.map +1 -1
- package/dist/components/formStore/table/FormElementTableCell.js +1 -1
- package/dist/components/formStore/table/FormElementTableCell.js.map +1 -1
- package/dist/components/formStore/table/Pickers.js +1 -1
- package/dist/components/formStore/table/Pickers.js.map +1 -1
- package/dist/components/formStore/table/generateColumns.d.ts +1 -1
- package/dist/components/formStore/table/generateColumns.js.map +1 -1
- package/dist/components/formStore/table/useFormStoreTable.d.ts +1 -1
- package/dist/components/formStore/table/useFormStoreTable.js +1 -1
- package/dist/components/formStore/table/useFormStoreTable.js.map +1 -1
- package/dist/components/formStore/useFormStoreTableContext.d.ts +2 -2
- package/dist/components/mfa/MfaDialog.d.ts +1 -1
- package/dist/components/mfa/MfaDialog.js +1 -1
- package/dist/components/mfa/MfaDialog.js.map +1 -1
- package/dist/components/mfa/MultiFactorAuthentication.d.ts +1 -1
- package/dist/components/payments/PaymentForm.js +1 -1
- package/dist/components/payments/PaymentForm.js.map +1 -1
- package/dist/components/payments/WestpacQuickStreamPaymentForm.d.ts +1 -1
- package/dist/components/payments/WestpacQuickStreamPaymentForm.js +1 -1
- package/dist/components/payments/WestpacQuickStreamPaymentForm.js.map +1 -1
- package/dist/components/renderer/AutocompleteDropdown.js +1 -1
- package/dist/components/renderer/AutocompleteDropdown.js.map +1 -1
- package/dist/components/renderer/LookupNotification.js +2 -2
- package/dist/components/renderer/LookupNotification.js.map +1 -1
- package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js +1 -1
- package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js.map +1 -1
- package/dist/components/renderer/OneBlinkFormElements.js.map +1 -1
- package/dist/components/renderer/ReverseGeocode.js +1 -1
- package/dist/components/renderer/ReverseGeocode.js.map +1 -1
- package/dist/form-elements/FormElementAPINSWLiquorLicence.js +1 -1
- package/dist/form-elements/FormElementAPINSWLiquorLicence.js.map +1 -1
- package/dist/form-elements/FormElementArcGISWebMap.js.map +1 -1
- package/dist/form-elements/FormElementAutocomplete.js +1 -1
- package/dist/form-elements/FormElementAutocomplete.js.map +1 -1
- package/dist/form-elements/FormElementBSB.js +1 -1
- package/dist/form-elements/FormElementBSB.js.map +1 -1
- package/dist/form-elements/FormElementCalculation.js +2 -2
- package/dist/form-elements/FormElementCalculation.js.map +1 -1
- package/dist/form-elements/FormElementCivicaNameRecord.js +1 -1
- package/dist/form-elements/FormElementCivicaNameRecord.js.map +1 -1
- package/dist/form-elements/FormElementCivicaStreetName.js +1 -1
- package/dist/form-elements/FormElementCivicaStreetName.js.map +1 -1
- package/dist/form-elements/FormElementCompliance.d.ts +1 -1
- package/dist/form-elements/FormElementCompliance.js.map +1 -1
- package/dist/form-elements/FormElementDate.js +1 -1
- package/dist/form-elements/FormElementDate.js.map +1 -1
- package/dist/form-elements/FormElementDateTime.js +1 -1
- package/dist/form-elements/FormElementDateTime.js.map +1 -1
- package/dist/form-elements/FormElementFile.d.ts +1 -1
- package/dist/form-elements/FormElementFile.js.map +1 -1
- package/dist/form-elements/FormElementFiles.d.ts +1 -1
- package/dist/form-elements/FormElementFiles.js.map +1 -1
- package/dist/form-elements/FormElementGeoscapeAddress.js +1 -1
- package/dist/form-elements/FormElementGeoscapeAddress.js.map +1 -1
- package/dist/form-elements/FormElementGoogleAddress.js +1 -1
- package/dist/form-elements/FormElementGoogleAddress.js.map +1 -1
- package/dist/form-elements/FormElementLocation.js +1 -1
- package/dist/form-elements/FormElementLocation.js.map +1 -1
- package/dist/form-elements/FormElementNumber.js +1 -1
- package/dist/form-elements/FormElementNumber.js.map +1 -1
- package/dist/form-elements/FormElementPointAddress.js +1 -1
- package/dist/form-elements/FormElementPointAddress.js.map +1 -1
- package/dist/form-elements/FormElementPointAddressV3.js +1 -1
- package/dist/form-elements/FormElementPointAddressV3.js.map +1 -1
- package/dist/form-elements/FormElementPointCadastralParcel.js +1 -1
- package/dist/form-elements/FormElementPointCadastralParcel.js.map +1 -1
- package/dist/form-elements/FormElementSummary.js +1 -1
- package/dist/form-elements/FormElementSummary.js.map +1 -1
- package/dist/form-elements/FormElementTime.js +1 -1
- package/dist/form-elements/FormElementTime.js.map +1 -1
- package/dist/hooks/attachments/useAttachment.d.ts +1 -1
- package/dist/hooks/attachments/useAttachment.js +1 -1
- package/dist/hooks/attachments/useAttachment.js.map +1 -1
- package/dist/hooks/attachments/useAttachments.d.ts +1 -1
- package/dist/hooks/attachments/useAttachments.js.map +1 -1
- package/dist/hooks/useAuth.js +1 -1
- package/dist/hooks/useAuth.js.map +1 -1
- package/dist/hooks/useConditionalLogic.js +1 -1
- package/dist/hooks/useConditionalLogic.js.map +1 -1
- package/dist/hooks/useDrafts.d.ts +1 -1
- package/dist/hooks/useDrafts.js +1 -1
- package/dist/hooks/useDrafts.js.map +1 -1
- package/dist/hooks/useDynamicOptionsLoaderState.d.ts +1 -1
- package/dist/hooks/useDynamicOptionsLoaderState.js +1 -1
- package/dist/hooks/useDynamicOptionsLoaderState.js.map +1 -1
- package/dist/hooks/useFormElementLookups.d.ts +1 -1
- package/dist/hooks/useFormElementLookups.js +1 -1
- package/dist/hooks/useFormElementLookups.js.map +1 -1
- package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +1 -1
- package/dist/hooks/useFormSubmissionAutoSaveState.js +1 -1
- package/dist/hooks/useFormSubmissionAutoSaveState.js.map +1 -1
- package/dist/hooks/useIsOffline.js +1 -1
- package/dist/hooks/useIsOffline.js.map +1 -1
- package/dist/hooks/useLogin.js +1 -1
- package/dist/hooks/useLogin.js.map +1 -1
- package/dist/hooks/useMfa.d.ts +1 -1
- package/dist/hooks/useMfa.js +1 -1
- package/dist/hooks/useMfa.js.map +1 -1
- package/dist/hooks/useOnUploadAttachment.d.ts +1 -1
- package/dist/hooks/useOnUploadAttachment.js +1 -1
- package/dist/hooks/useOnUploadAttachment.js.map +1 -1
- package/dist/hooks/usePendingSubmissions.d.ts +1 -1
- package/dist/hooks/usePendingSubmissions.js +1 -1
- package/dist/hooks/usePendingSubmissions.js.map +1 -1
- package/dist/hooks/useReplaceableText.js +1 -1
- package/dist/hooks/useReplaceableText.js.map +1 -1
- package/dist/hooks/useSignUp.js +1 -1
- package/dist/hooks/useSignUp.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/services/attachments.d.ts +1 -1
- package/dist/services/attachments.js +1 -1
- package/dist/services/attachments.js.map +1 -1
- package/dist/services/blob-utils.js +1 -1
- package/dist/services/blob-utils.js.map +1 -1
- package/dist/services/checkIfAttachmentsExist.d.ts +1 -1
- package/dist/services/checkIfAttachmentsExist.js.map +1 -1
- package/dist/services/defaultCoordinates.js +1 -1
- package/dist/services/defaultCoordinates.js.map +1 -1
- package/dist/services/download-file.d.ts +1 -1
- package/dist/services/download-file.js +2 -2
- package/dist/services/download-file.js.map +1 -1
- package/dist/services/drawTimestampOnCanvas.js +1 -1
- package/dist/services/drawTimestampOnCanvas.js.map +1 -1
- package/dist/services/form-validation/validateSubmission.js +1 -1
- package/dist/services/form-validation/validateSubmission.js.map +1 -1
- package/dist/services/form-validation/validators.d.ts +1 -1
- package/dist/services/form-validation/validators.js.map +1 -1
- package/dist/services/generate-default-data.js +1 -1
- package/dist/services/generate-default-data.js.map +1 -1
- package/dist/services/injectableOptions.js +1 -1
- package/dist/services/injectableOptions.js.map +1 -1
- package/dist/styles.css +208 -204
- package/dist/types/attachments.d.ts +1 -1
- package/dist/types/attachments.js.map +1 -1
- package/dist/utils/sendGoogleAnalyticsEvent.js +1 -1
- package/dist/utils/sendGoogleAnalyticsEvent.js.map +1 -1
- package/package.json +42 -34
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePendingSubmissions.js","sourceRoot":"","sources":["../../src/hooks/usePendingSubmissions.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { submissionService } from '@oneblink/apps'\nimport useBooleanState from './useBooleanState'\nimport useIsMounted from './useIsMounted'\nimport useIsOffline from './useIsOffline'\n\n/** The value returned from `usePendingSubmissions()` hook */\nexport type PendingSubmissionsContextValue = {\n /** `true` if the pending submissions are currently loading */\n isLoading: boolean\n /** An Error object if loading pending submissions fails */\n loadError: Error | null\n /**\n * The submissions that were submitted offline and can be processed when back\n * online\n */\n pendingSubmissions: submissionService.PendingFormSubmission[]\n /** `true` submissions that where submitted offline are being processed */\n isProcessingPendingQueue: boolean\n /** A function to trigger processing of the pending queue */\n processPendingQueue: () => unknown\n /**\n * A function to trigger loading of the submissions that were submitted\n * offline\n */\n reloadPendingSubmissions: () => unknown\n /** A function to remove a submission from the pending submissions */\n deletePendingSubmission: (pendingTimestamp: string) => unknown\n /** `true` if a submission being processed fails */\n isShowingFailedNotification: boolean\n /** A function to hide the notification when a submission fails to process */\n hideFailedNotification: () => unknown\n /** `true` if a submission being processed completes successfully. */\n isShowingSuccessNotification: boolean\n /**\n * A function to hide the notification after a submission completed\n * successfully\n */\n hideSuccessNotification: () => unknown\n}\n\nconst defaultState = {\n isLoading: false,\n loadError: null,\n pendingSubmissions: [],\n}\n\nconst PendingSubmissionsContext = React.createContext<\n PendingSubmissionsContextValue | undefined\n>(undefined)\n\n/**\n * React Component that provides the context for the `usePendingSubmissions()`\n * hook to be used by components further down your component tree. **It should\n * only be included in your component tree once and ideally at the root of the\n * application.**\n *\n * #### Example\n *\n * ```jsx\n * import * as React from 'react'\n * import {\n * PendingSubmissionsContextProvider,\n * usePendingSubmissions,\n * } from '@oneblink/apps-react'\n *\n * function Component() {\n * const pendingSubmissionsContext = usePendingSubmissions()\n * // use pending submissions here\n * }\n *\n * function App() {\n * return (\n * <PendingSubmissionsContextProvider\n * isPendingQueueEnabled\n * successNotificationTimeoutMs={3000}\n * >\n * <Component />\n * </PendingSubmissionsContextProvider>\n * )\n * }\n *\n * const root = document.getElementById('root')\n * if (root) {\n * ReactDOM.render(<App />, root)\n * }\n * ```\n *\n * @param props\n * @returns\n * @group Components\n */\nexport function PendingSubmissionsContextProvider({\n isPendingQueueEnabled,\n successNotificationTimeoutMs = 5000,\n children,\n}: {\n /**\n * `true` if pending queue is enabled, otherwise `false`. Can be used prevent\n * offline submissions from being processed.\n */\n isPendingQueueEnabled: boolean\n /**\n * When a submission is processed successfully the\n * `isShowingSuccessNotification` will be temporarily set to `true`, it will\n * be set back to `false` after 5 seconds. This prop will allow you to\n * customise how long to wait before hiding the notification with a\n * milliseconds value.\n */\n successNotificationTimeoutMs?: number\n /** Your application components */\n children: React.ReactNode\n}) {\n const isMounted = useIsMounted()\n const isOffline = useIsOffline()\n\n // Using a number as state so we can reset the timer used to close\n // the snack bar each time a pending queue item is processed\n const [submittedNotificationCount, setSubmittedNotificationCount] =\n React.useState(0)\n const hideSuccessNotification = React.useCallback(() => {\n setSubmittedNotificationCount(0)\n }, [])\n const [\n isShowingFailedNotification,\n showFailedNotification,\n hideFailedNotification,\n ] = useBooleanState(false)\n const [isProcessingPendingQueue, setIsProcessingPendingQueue] =\n React.useState(false)\n const [state, setState] = React.useState<{\n isLoading: boolean\n loadError: Error | null\n pendingSubmissions: submissionService.PendingFormSubmission[]\n }>(defaultState)\n\n const processPendingQueue = React.useCallback(async () => {\n if (isMounted.current) {\n setIsProcessingPendingQueue(true)\n }\n\n await submissionService.processPendingQueue({\n shouldRunExternalIdGeneration: true,\n shouldRunServerValidation: true,\n })\n\n if (isMounted.current) {\n setIsProcessingPendingQueue(false)\n }\n }, [isMounted])\n\n const reloadPendingSubmissions = React.useCallback(async () => {\n if (isMounted.current) {\n setState((currentState) => ({\n isLoading: true,\n loadError: null,\n pendingSubmissions: currentState.pendingSubmissions,\n }))\n }\n let newError = null\n let newPendingSubmissions: submissionService.PendingFormSubmission[] = []\n\n try {\n newPendingSubmissions =\n await submissionService.getPendingQueueSubmissions()\n } catch (error) {\n newError = error as Error\n }\n\n if (isMounted.current) {\n setState({\n isLoading: false,\n loadError: newError,\n pendingSubmissions: newPendingSubmissions,\n })\n }\n }, [isMounted])\n\n React.useEffect(() => {\n if (!isPendingQueueEnabled) {\n return\n }\n reloadPendingSubmissions()\n return submissionService.registerPendingQueueListener(\n (pendingSubmissions, action) => {\n switch (action) {\n case 'SUBMIT_SUCCEEDED': {\n setSubmittedNotificationCount((current) => current + 1)\n break\n }\n case 'SUBMIT_FAILED': {\n showFailedNotification()\n break\n }\n case 'SUBMIT_STARTED': {\n hideFailedNotification()\n break\n }\n // EDIT_CANCELLED is here for when beginnning edit offline and then hitting cancel while online\n // among other use cases\n case 'ADDITION':\n case 'EDIT_CANCELLED': {\n processPendingQueue()\n break\n }\n }\n setState({\n isLoading: false,\n pendingSubmissions,\n loadError: null,\n })\n },\n )\n }, [\n hideFailedNotification,\n isPendingQueueEnabled,\n processPendingQueue,\n reloadPendingSubmissions,\n showFailedNotification,\n ])\n\n React.useEffect(() => {\n if (!isOffline) {\n processPendingQueue()\n }\n }, [isOffline, processPendingQueue])\n\n React.useEffect(() => {\n if (submittedNotificationCount > 0) {\n const timeoutId = setTimeout(() => {\n hideSuccessNotification()\n }, successNotificationTimeoutMs)\n return () => {\n clearTimeout(timeoutId)\n }\n }\n }, [\n hideSuccessNotification,\n submittedNotificationCount,\n successNotificationTimeoutMs,\n ])\n\n const value = React.useMemo<PendingSubmissionsContextValue>(\n () => ({\n ...state,\n isShowingFailedNotification,\n hideFailedNotification,\n isProcessingPendingQueue,\n processPendingQueue,\n reloadPendingSubmissions,\n deletePendingSubmission: submissionService.deletePendingQueueSubmission,\n isShowingSuccessNotification: submittedNotificationCount > 0,\n hideSuccessNotification,\n }),\n [\n state,\n isShowingFailedNotification,\n hideFailedNotification,\n isProcessingPendingQueue,\n processPendingQueue,\n reloadPendingSubmissions,\n submittedNotificationCount,\n hideSuccessNotification,\n ],\n )\n\n return (\n <PendingSubmissionsContext.Provider value={value}>\n {children}\n </PendingSubmissionsContext.Provider>\n )\n}\n\n/**\n * React hook to get the context value for Pending Submissions. Will throw an\n * Error if used outside of the `<PendingSubmissionsContextProvider />`\n * component.\n *\n * @returns\n * @group Hooks\n */\nexport default function usePendingSubmissions(): PendingSubmissionsContextValue {\n const value = React.useContext(PendingSubmissionsContext)\n if (!value) {\n throw new Error(\n `\"usePendingSubmissions\" hook was used outside of the \"<PendingSubmissionsContextProvider />\" component's children.`,\n )\n }\n return value\n}\n"]}
|
|
1
|
+
{"version":3,"file":"usePendingSubmissions.js","sourceRoot":"","sources":["../../src/hooks/usePendingSubmissions.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { submissionService } from '../apps'\nimport useBooleanState from './useBooleanState'\nimport useIsMounted from './useIsMounted'\nimport useIsOffline from './useIsOffline'\n\n/** The value returned from `usePendingSubmissions()` hook */\nexport type PendingSubmissionsContextValue = {\n /** `true` if the pending submissions are currently loading */\n isLoading: boolean\n /** An Error object if loading pending submissions fails */\n loadError: Error | null\n /**\n * The submissions that were submitted offline and can be processed when back\n * online\n */\n pendingSubmissions: submissionService.PendingFormSubmission[]\n /** `true` submissions that where submitted offline are being processed */\n isProcessingPendingQueue: boolean\n /** A function to trigger processing of the pending queue */\n processPendingQueue: () => unknown\n /**\n * A function to trigger loading of the submissions that were submitted\n * offline\n */\n reloadPendingSubmissions: () => unknown\n /** A function to remove a submission from the pending submissions */\n deletePendingSubmission: (pendingTimestamp: string) => unknown\n /** `true` if a submission being processed fails */\n isShowingFailedNotification: boolean\n /** A function to hide the notification when a submission fails to process */\n hideFailedNotification: () => unknown\n /** `true` if a submission being processed completes successfully. */\n isShowingSuccessNotification: boolean\n /**\n * A function to hide the notification after a submission completed\n * successfully\n */\n hideSuccessNotification: () => unknown\n}\n\nconst defaultState = {\n isLoading: false,\n loadError: null,\n pendingSubmissions: [],\n}\n\nconst PendingSubmissionsContext = React.createContext<\n PendingSubmissionsContextValue | undefined\n>(undefined)\n\n/**\n * React Component that provides the context for the `usePendingSubmissions()`\n * hook to be used by components further down your component tree. **It should\n * only be included in your component tree once and ideally at the root of the\n * application.**\n *\n * #### Example\n *\n * ```jsx\n * import * as React from 'react'\n * import {\n * PendingSubmissionsContextProvider,\n * usePendingSubmissions,\n * } from '@oneblink/apps-react'\n *\n * function Component() {\n * const pendingSubmissionsContext = usePendingSubmissions()\n * // use pending submissions here\n * }\n *\n * function App() {\n * return (\n * <PendingSubmissionsContextProvider\n * isPendingQueueEnabled\n * successNotificationTimeoutMs={3000}\n * >\n * <Component />\n * </PendingSubmissionsContextProvider>\n * )\n * }\n *\n * const root = document.getElementById('root')\n * if (root) {\n * ReactDOM.render(<App />, root)\n * }\n * ```\n *\n * @param props\n * @returns\n * @group Components\n */\nexport function PendingSubmissionsContextProvider({\n isPendingQueueEnabled,\n successNotificationTimeoutMs = 5000,\n children,\n}: {\n /**\n * `true` if pending queue is enabled, otherwise `false`. Can be used prevent\n * offline submissions from being processed.\n */\n isPendingQueueEnabled: boolean\n /**\n * When a submission is processed successfully the\n * `isShowingSuccessNotification` will be temporarily set to `true`, it will\n * be set back to `false` after 5 seconds. This prop will allow you to\n * customise how long to wait before hiding the notification with a\n * milliseconds value.\n */\n successNotificationTimeoutMs?: number\n /** Your application components */\n children: React.ReactNode\n}) {\n const isMounted = useIsMounted()\n const isOffline = useIsOffline()\n\n // Using a number as state so we can reset the timer used to close\n // the snack bar each time a pending queue item is processed\n const [submittedNotificationCount, setSubmittedNotificationCount] =\n React.useState(0)\n const hideSuccessNotification = React.useCallback(() => {\n setSubmittedNotificationCount(0)\n }, [])\n const [\n isShowingFailedNotification,\n showFailedNotification,\n hideFailedNotification,\n ] = useBooleanState(false)\n const [isProcessingPendingQueue, setIsProcessingPendingQueue] =\n React.useState(false)\n const [state, setState] = React.useState<{\n isLoading: boolean\n loadError: Error | null\n pendingSubmissions: submissionService.PendingFormSubmission[]\n }>(defaultState)\n\n const processPendingQueue = React.useCallback(async () => {\n if (isMounted.current) {\n setIsProcessingPendingQueue(true)\n }\n\n await submissionService.processPendingQueue({\n shouldRunExternalIdGeneration: true,\n shouldRunServerValidation: true,\n })\n\n if (isMounted.current) {\n setIsProcessingPendingQueue(false)\n }\n }, [isMounted])\n\n const reloadPendingSubmissions = React.useCallback(async () => {\n if (isMounted.current) {\n setState((currentState) => ({\n isLoading: true,\n loadError: null,\n pendingSubmissions: currentState.pendingSubmissions,\n }))\n }\n let newError = null\n let newPendingSubmissions: submissionService.PendingFormSubmission[] = []\n\n try {\n newPendingSubmissions =\n await submissionService.getPendingQueueSubmissions()\n } catch (error) {\n newError = error as Error\n }\n\n if (isMounted.current) {\n setState({\n isLoading: false,\n loadError: newError,\n pendingSubmissions: newPendingSubmissions,\n })\n }\n }, [isMounted])\n\n React.useEffect(() => {\n if (!isPendingQueueEnabled) {\n return\n }\n reloadPendingSubmissions()\n return submissionService.registerPendingQueueListener(\n (pendingSubmissions, action) => {\n switch (action) {\n case 'SUBMIT_SUCCEEDED': {\n setSubmittedNotificationCount((current) => current + 1)\n break\n }\n case 'SUBMIT_FAILED': {\n showFailedNotification()\n break\n }\n case 'SUBMIT_STARTED': {\n hideFailedNotification()\n break\n }\n // EDIT_CANCELLED is here for when beginnning edit offline and then hitting cancel while online\n // among other use cases\n case 'ADDITION':\n case 'EDIT_CANCELLED': {\n processPendingQueue()\n break\n }\n }\n setState({\n isLoading: false,\n pendingSubmissions,\n loadError: null,\n })\n },\n )\n }, [\n hideFailedNotification,\n isPendingQueueEnabled,\n processPendingQueue,\n reloadPendingSubmissions,\n showFailedNotification,\n ])\n\n React.useEffect(() => {\n if (!isOffline) {\n processPendingQueue()\n }\n }, [isOffline, processPendingQueue])\n\n React.useEffect(() => {\n if (submittedNotificationCount > 0) {\n const timeoutId = setTimeout(() => {\n hideSuccessNotification()\n }, successNotificationTimeoutMs)\n return () => {\n clearTimeout(timeoutId)\n }\n }\n }, [\n hideSuccessNotification,\n submittedNotificationCount,\n successNotificationTimeoutMs,\n ])\n\n const value = React.useMemo<PendingSubmissionsContextValue>(\n () => ({\n ...state,\n isShowingFailedNotification,\n hideFailedNotification,\n isProcessingPendingQueue,\n processPendingQueue,\n reloadPendingSubmissions,\n deletePendingSubmission: submissionService.deletePendingQueueSubmission,\n isShowingSuccessNotification: submittedNotificationCount > 0,\n hideSuccessNotification,\n }),\n [\n state,\n isShowingFailedNotification,\n hideFailedNotification,\n isProcessingPendingQueue,\n processPendingQueue,\n reloadPendingSubmissions,\n submittedNotificationCount,\n hideSuccessNotification,\n ],\n )\n\n return (\n <PendingSubmissionsContext.Provider value={value}>\n {children}\n </PendingSubmissionsContext.Provider>\n )\n}\n\n/**\n * React hook to get the context value for Pending Submissions. Will throw an\n * Error if used outside of the `<PendingSubmissionsContextProvider />`\n * component.\n *\n * @returns\n * @group Hooks\n */\nexport default function usePendingSubmissions(): PendingSubmissionsContextValue {\n const value = React.useContext(PendingSubmissionsContext)\n if (!value) {\n throw new Error(\n `\"usePendingSubmissions\" hook was used outside of the \"<PendingSubmissionsContextProvider />\" component's children.`,\n )\n }\n return value\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { localisationService } from '
|
|
1
|
+
import { localisationService } from '../apps';
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
3
|
import useFormSubmissionModel from './useFormSubmissionModelContext';
|
|
4
4
|
import { useRepeatableSetIndexText } from '../form-elements/FormElementRepeatableSet';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useReplaceableText.js","sourceRoot":"","sources":["../../src/hooks/useReplaceableText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"useReplaceableText.js","sourceRoot":"","sources":["../../src/hooks/useReplaceableText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,sBAAsB,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAA;AACrF,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,4BAA4B,MAAM,gCAAgC,CAAA;AAEzE,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,IAAY;IACrD,MAAM,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAA;IACrD,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,GAAG,sBAAsB,EAAE,CAAA;IAClE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,cAAc,EAAE,CAAA;IAE/D,MAAM,WAAW,GAAG,4BAA4B,EAAE,CAAA;IAElD,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,OAAO,mBAAmB,CAAC,mCAAmC,CAC5D,aAAa,EACb;YACE,UAAU,EAAE,mBAAmB;YAC/B,YAAY,EAAE,QAAQ;YACtB,WAAW;YACX,IAAI;YACJ,SAAS;YACT,iBAAiB;SAClB,CACF,CAAC,IAAI,CAAA;IACR,CAAC,EAAE;QACD,QAAQ;QACR,mBAAmB;QACnB,IAAI;QACJ,SAAS;QACT,iBAAiB;QACjB,aAAa;QACb,WAAW;KACZ,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { localisationService } from '../apps'\nimport { useMemo } from 'react'\nimport useFormSubmissionModel from './useFormSubmissionModelContext'\nimport { useRepeatableSetIndexText } from '../form-elements/FormElementRepeatableSet'\nimport useTaskContext from './useTaskContext'\nimport useUserProfileForInjectables from './useUserProfileForInjectables'\n\nexport default function useReplaceableText(text: string) {\n const textWithIndex = useRepeatableSetIndexText(text)\n const { formSubmissionModel, elements } = useFormSubmissionModel()\n const { task, taskGroup, taskGroupInstance } = useTaskContext()\n\n const userProfile = useUserProfileForInjectables()\n\n return useMemo(() => {\n return localisationService.replaceInjectablesWithElementValues(\n textWithIndex,\n {\n submission: formSubmissionModel,\n formElements: elements,\n userProfile,\n task,\n taskGroup,\n taskGroupInstance,\n },\n ).text\n }, [\n elements,\n formSubmissionModel,\n task,\n taskGroup,\n taskGroupInstance,\n textWithIndex,\n userProfile,\n ])\n}\n"]}
|
package/dist/hooks/useSignUp.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSignUp.js","sourceRoot":"","sources":["../../src/hooks/useSignUp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"useSignUp.js","sourceRoot":"","sources":["../../src/hooks/useSignUp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAE7C;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,SAAS,EACT,OAAO,GAQR;IACC,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAC5C,qIAAqI;QACrI,OAAO;YACL,SAAS,EAAE,CAAC,QAAQ,CAAC,KAAK,CACxB,sEAAsE,CACvE;SACF,CAAA;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,MAAM,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,cAAc,CAAC,GAClE,KAAK,CAAC,QAAQ,CAIX;QACD,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,KAAK;KACtB,CAAC,CAAA;IAEJ,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,CACxC,GAAG,EAAE,CACH,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3B,GAAG,OAAO;QACV,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC,EACL,EAAE,CACH,CAAA;IAED,MAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;QACzD,IAAI,kBAAkB,CAAC,SAAS,EAAE,CAAC;YACjC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC3B,GAAG,OAAO;gBACV,WAAW,EAAE,IAAI,KAAK,CAAC,oCAAoC,CAAC;aAC7D,CAAC,CAAC,CAAA;YACH,OAAM;QACR,CAAC;QAED,cAAc,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YAChC,GAAG,YAAY;YACf,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC,CAAA;QAEH,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,MAAM,CAAC;gBACvB,UAAU;gBACV,KAAK,EAAE,QAAQ;gBACf,SAAS;gBACT,QAAQ;aACT,CAAC,CAAA;YAEF,cAAc,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;gBAChC,GAAG,YAAY;gBACf,WAAW,EAAE,KAAK;gBAClB,cAAc,EAAE,IAAI;aACrB,CAAC,CAAC,CAAA;YACH,SAAS,aAAT,SAAS,uBAAT,SAAS,EAAI,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;YAC9B,cAAc,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;gBAChC,GAAG,YAAY;gBACf,WAAW,EAAE,KAAK;gBAClB,WAAW,EAAE,KAAc;aAC5B,CAAC,CAAC,CAAA;YACH,OAAO,aAAP,OAAO,uBAAP,OAAO,EAAI,CAAA;QACb,CAAC;IACH,CAAC,EAAE;QACD,SAAS;QACT,UAAU;QACV,QAAQ;QACR,OAAO;QACP,SAAS;QACT,QAAQ;QACR,kBAAkB,CAAC,SAAS;KAC7B,CAAC,CAAA;IAEF,OAAO;QACL,qBAAqB;QACrB,gBAAgB;QAChB,WAAW;QACX,WAAW;QACX,cAAc;QACd,kBAAkB;KACnB,CAAA;AACH,CAAC","sourcesContent":["import * as React from 'react'\nimport { authService, Sentry } from '../apps'\n\n/**\n * @param options\n * @returns\n * @group Hooks\n */\nexport default function useSignUp({\n formsAppId,\n username,\n firstName,\n lastName,\n onSuccess,\n onError,\n}: {\n formsAppId: number\n username: string\n firstName?: string\n lastName?: string\n onSuccess?: () => void\n onError?: () => void\n}) {\n const usernameValidation = React.useMemo(() => {\n // regex source: https://www.w3resource.com/javascript/form/email-validation.php#:~:text=To%20get%20a%20valid%20email,%5D%2B)*%24%2F.\n return {\n isInvalid: !username.match(\n /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/,\n ),\n }\n }, [username])\n\n const [{ isSigningUp, signUpError, signUpComplete }, setSignUpState] =\n React.useState<{\n isSigningUp: boolean\n signUpError: Error | null\n signUpComplete: boolean\n }>({\n isSigningUp: false,\n signUpError: null,\n signUpComplete: false,\n })\n\n const clearSignUpError = React.useCallback(\n () =>\n setSignUpState((current) => ({\n ...current,\n signUpError: null,\n })),\n [],\n )\n\n const signUpWithUserDetails = React.useCallback(async () => {\n if (usernameValidation.isInvalid) {\n setSignUpState((current) => ({\n ...current,\n signUpError: new Error('Please enter a valid email address'),\n }))\n return\n }\n\n setSignUpState((currentState) => ({\n ...currentState,\n isSigningUp: true,\n signUpError: null,\n }))\n\n try {\n await authService.signUp({\n formsAppId,\n email: username,\n firstName,\n lastName,\n })\n\n setSignUpState((currentState) => ({\n ...currentState,\n isSigningUp: false,\n signUpComplete: true,\n }))\n onSuccess?.()\n } catch (error) {\n Sentry.captureException(error)\n setSignUpState((currentState) => ({\n ...currentState,\n isSigningUp: false,\n signUpError: error as Error,\n }))\n onError?.()\n }\n }, [\n firstName,\n formsAppId,\n lastName,\n onError,\n onSuccess,\n username,\n usernameValidation.isInvalid,\n ])\n\n return {\n signUpWithUserDetails,\n clearSignUpError,\n isSigningUp,\n signUpError,\n signUpComplete,\n usernameValidation,\n }\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -35,3 +35,4 @@ export { default as useMfa, MfaProvider, useUserMeetsMfaRequirement, } from './h
|
|
|
35
35
|
export { default as DownloadableFiles } from './components/downloadable-files';
|
|
36
36
|
export { default as ImageCropper, getAspectRatio, generateCroppedImageBlob, PercentCrop, } from './components/ImageCropper';
|
|
37
37
|
export * from './types/form';
|
|
38
|
+
export * from './apps';
|
package/dist/index.js
CHANGED
|
@@ -35,4 +35,6 @@ export { default as useMfa, MfaProvider, useUserMeetsMfaRequirement, } from './h
|
|
|
35
35
|
export { default as DownloadableFiles } from './components/downloadable-files';
|
|
36
36
|
export { default as ImageCropper, getAspectRatio, generateCroppedImageBlob, } from './components/ImageCropper';
|
|
37
37
|
export * from './types/form';
|
|
38
|
+
// Former apps package now exported through here
|
|
39
|
+
export * from './apps';
|
|
38
40
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export {\n OneBlinkFormBaseProps,\n OneBlinkFormControlledProps,\n OneBlinkFormUncontrolled as OneBlinkForm,\n OneBlinkFormControlled,\n} from './OneBlinkForm'\nexport { default as OneBlinkAutoSaveForm } from './OneBlinkAutoSaveForm'\nexport { default as OneBlinkReadOnlyForm } from './OneBlinkReadOnlyForm'\nexport { OneBlinkFormStoreProvider } from './components/formStore/OneBlinkFormStoreProvider'\nexport { default as OneBlinkFormStoreClearFiltersButton } from './components/formStore/OneBlinkFormStoreClearFiltersButton'\nexport { default as OneBlinkFormStoreColumnsButton } from './components/formStore/OneBlinkFormStoreColumnsButton'\nexport { default as OneBlinkFormStoreDownloadButton } from './components/formStore/OneBlinkFormStoreDownloadButton'\nexport { default as OneBlinkFormStoreRefreshButton } from './components/formStore/OneBlinkFormStoreRefreshButton'\nexport { default as OneBlinkFormStoreTable } from './components/formStore/OneBlinkFormStoreTable'\n\nexport { default as useIsMounted } from './hooks/useIsMounted'\nexport { default as useBooleanState } from './hooks/useBooleanState'\nexport { default as useNullableState } from './hooks/useNullableState'\nexport { default as useClickOutsideElement } from './hooks/useClickOutsideElement'\nexport {\n default as useIsOffline,\n IsOfflineContextProvider,\n} from './hooks/useIsOffline'\nexport { default as useLogin, UseLoginValue } from './hooks/useLogin'\nexport { default as useSignUp } from './hooks/useSignUp'\nexport {\n default as useAuth,\n AuthContextProvider,\n AuthContextValue,\n} from './hooks/useAuth'\nexport {\n default as usePendingSubmissions,\n PendingSubmissionsContextProvider,\n PendingSubmissionsContextValue,\n} from './hooks/usePendingSubmissions'\nexport {\n default as useDrafts,\n DraftsContextProvider,\n DraftsContextValue,\n} from './hooks/useDrafts'\nexport {\n default as useLoadDataState,\n LoadDataState,\n} from './hooks/useLoadDataState'\nexport { default as useLoadResourcesState } from './hooks/useLoadResourcesState'\nexport { default as useLoadDataEffect } from './hooks/useLoadDataEffect'\nexport { default as useFormSubmissionState } from './hooks/useFormSubmissionState'\nexport { default as useFormSubmissionAutoSaveState } from './hooks/useFormSubmissionAutoSaveState'\nexport { default as useGoogleJsApiLoader } from './hooks/useGoogleJsApiLoader'\nexport { default as useFormSubmissionDuration } from './hooks/useFormSubmissionDuration'\n\nexport { default as ProgressBar } from './components/renderer/ProgressBar'\nexport { default as PaymentReceipt } from './PaymentReceipt'\nexport { default as PaymentForm } from './components/payments/PaymentForm'\n\nexport { default as CalendarBookingsForm } from './components/calendar-bookings/CalendarBookingsForm'\nexport { default as CalendarBookingsRescheduleForm } from './components/calendar-bookings/CalendarBookingsReschedulingForm'\nexport { default as CalendarBookingsCancelForm } from './components/calendar-bookings/CalendarBookingsCancelForm'\n\nexport { default as MultiFactorAuthentication } from './components/mfa/MultiFactorAuthentication'\n\nexport {\n default as useMfa,\n MfaProvider,\n useUserMeetsMfaRequirement,\n} from './hooks/useMfa'\n\nexport { default as DownloadableFiles } from './components/downloadable-files'\n\nexport {\n default as ImageCropper,\n getAspectRatio,\n generateCroppedImageBlob,\n PercentCrop,\n} from './components/ImageCropper'\n\nexport * from './types/form'\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export {\n OneBlinkFormBaseProps,\n OneBlinkFormControlledProps,\n OneBlinkFormUncontrolled as OneBlinkForm,\n OneBlinkFormControlled,\n} from './OneBlinkForm'\nexport { default as OneBlinkAutoSaveForm } from './OneBlinkAutoSaveForm'\nexport { default as OneBlinkReadOnlyForm } from './OneBlinkReadOnlyForm'\nexport { OneBlinkFormStoreProvider } from './components/formStore/OneBlinkFormStoreProvider'\nexport { default as OneBlinkFormStoreClearFiltersButton } from './components/formStore/OneBlinkFormStoreClearFiltersButton'\nexport { default as OneBlinkFormStoreColumnsButton } from './components/formStore/OneBlinkFormStoreColumnsButton'\nexport { default as OneBlinkFormStoreDownloadButton } from './components/formStore/OneBlinkFormStoreDownloadButton'\nexport { default as OneBlinkFormStoreRefreshButton } from './components/formStore/OneBlinkFormStoreRefreshButton'\nexport { default as OneBlinkFormStoreTable } from './components/formStore/OneBlinkFormStoreTable'\n\nexport { default as useIsMounted } from './hooks/useIsMounted'\nexport { default as useBooleanState } from './hooks/useBooleanState'\nexport { default as useNullableState } from './hooks/useNullableState'\nexport { default as useClickOutsideElement } from './hooks/useClickOutsideElement'\nexport {\n default as useIsOffline,\n IsOfflineContextProvider,\n} from './hooks/useIsOffline'\nexport { default as useLogin, UseLoginValue } from './hooks/useLogin'\nexport { default as useSignUp } from './hooks/useSignUp'\nexport {\n default as useAuth,\n AuthContextProvider,\n AuthContextValue,\n} from './hooks/useAuth'\nexport {\n default as usePendingSubmissions,\n PendingSubmissionsContextProvider,\n PendingSubmissionsContextValue,\n} from './hooks/usePendingSubmissions'\nexport {\n default as useDrafts,\n DraftsContextProvider,\n DraftsContextValue,\n} from './hooks/useDrafts'\nexport {\n default as useLoadDataState,\n LoadDataState,\n} from './hooks/useLoadDataState'\nexport { default as useLoadResourcesState } from './hooks/useLoadResourcesState'\nexport { default as useLoadDataEffect } from './hooks/useLoadDataEffect'\nexport { default as useFormSubmissionState } from './hooks/useFormSubmissionState'\nexport { default as useFormSubmissionAutoSaveState } from './hooks/useFormSubmissionAutoSaveState'\nexport { default as useGoogleJsApiLoader } from './hooks/useGoogleJsApiLoader'\nexport { default as useFormSubmissionDuration } from './hooks/useFormSubmissionDuration'\n\nexport { default as ProgressBar } from './components/renderer/ProgressBar'\nexport { default as PaymentReceipt } from './PaymentReceipt'\nexport { default as PaymentForm } from './components/payments/PaymentForm'\n\nexport { default as CalendarBookingsForm } from './components/calendar-bookings/CalendarBookingsForm'\nexport { default as CalendarBookingsRescheduleForm } from './components/calendar-bookings/CalendarBookingsReschedulingForm'\nexport { default as CalendarBookingsCancelForm } from './components/calendar-bookings/CalendarBookingsCancelForm'\n\nexport { default as MultiFactorAuthentication } from './components/mfa/MultiFactorAuthentication'\n\nexport {\n default as useMfa,\n MfaProvider,\n useUserMeetsMfaRequirement,\n} from './hooks/useMfa'\n\nexport { default as DownloadableFiles } from './components/downloadable-files'\n\nexport {\n default as ImageCropper,\n getAspectRatio,\n generateCroppedImageBlob,\n PercentCrop,\n} from './components/ImageCropper'\n\nexport * from './types/form'\n// Former apps package now exported through here\nexport * from './apps'\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FormTypes } from '@oneblink/types';
|
|
2
|
-
import { attachmentsService } from '
|
|
2
|
+
import { attachmentsService } from '../apps';
|
|
3
3
|
export declare function generateErrorAttachment(blob: Blob | undefined, fileName: string, element: FormTypes.FormElementBinaryStorage, errorMessage: string, errorType?: attachmentsService.AttachmentError['errorType']): attachmentsService.AttachmentError;
|
|
4
4
|
export declare function prepareNewAttachment(blob: Blob, fileName: string, element: FormTypes.FormElementBinaryStorage): attachmentsService.AttachmentNew;
|
|
5
5
|
export declare function checkIfContentTypeIsImage(contentType: string): boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Sentry } from '
|
|
1
|
+
import { Sentry } from '../apps';
|
|
2
2
|
import { v4 as uuid } from 'uuid';
|
|
3
3
|
import { blobToCanvas, getBlobOrientation } from './blob-utils';
|
|
4
4
|
export function generateErrorAttachment(blob, fileName, element, errorMessage, errorType) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/services/attachments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAsB,MAAM,
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/services/attachments.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes } from '@oneblink/types'\nimport { Sentry, attachmentsService } from '../apps'\nimport { v4 as uuid } from 'uuid'\nimport { blobToCanvas, getBlobOrientation } from './blob-utils'\n\nexport function generateErrorAttachment(\n blob: Blob | undefined,\n fileName: string,\n element: FormTypes.FormElementBinaryStorage,\n errorMessage: string,\n errorType?: attachmentsService.AttachmentError['errorType'],\n): attachmentsService.AttachmentError {\n return {\n _id: uuid(),\n data: blob,\n fileName,\n isPrivate: element.storageType !== 'public',\n type: 'ERROR',\n errorMessage,\n errorType,\n }\n}\n\nexport function prepareNewAttachment(\n blob: Blob,\n fileName: string,\n element: FormTypes.FormElementBinaryStorage,\n): attachmentsService.AttachmentNew {\n return {\n _id: uuid(),\n data: blob,\n fileName,\n isPrivate: element.storageType !== 'public',\n type: 'NEW',\n }\n}\n\nexport function checkIfContentTypeIsImage(contentType: string) {\n return contentType.indexOf('image/') === 0\n}\n\nexport async function parseFilesAsAttachmentsLegacy(\n files: File[],\n onAnnotateCanvas?: (file: File, canvas: HTMLCanvasElement) => void,\n): Promise<Array<{ data: string; fileName: string; contentType: string }>> {\n const attachments: Array<{\n data: string\n fileName: string\n contentType: string\n }> = []\n\n for (const file of files) {\n const result = await correctFileOrientation(file, onAnnotateCanvas)\n\n if (result instanceof Blob) {\n console.log('Attempting to parse File as attachment', file)\n\n const base64data = await new Promise<string>((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = function () {\n resolve(reader.result as string)\n }\n reader.onerror = function () {\n reject(new Error('Could not read file from data url'))\n }\n reader.readAsDataURL(file)\n })\n\n attachments.push({\n fileName: file.name,\n contentType: file.type,\n data: base64data,\n })\n } else {\n attachments.push({\n fileName: file.name,\n contentType: file.type,\n data: result.toDataURL(),\n })\n }\n }\n\n return attachments\n}\n\nexport async function correctFileOrientation(\n file: File,\n onAnnotateCanvas?: (file: File, canvas: HTMLCanvasElement) => void,\n): Promise<Blob | HTMLCanvasElement> {\n try {\n if (!checkIfContentTypeIsImage(file.type)) {\n return file\n }\n\n console.log('Attempting to parse File as image attachment', file)\n\n const orientation = await getBlobOrientation(file)\n if (\n (typeof orientation !== 'number' || orientation === 1) &&\n !onAnnotateCanvas\n ) {\n console.log('Skipping orientation correction for image')\n return file\n }\n\n console.log(\n 'Loading image onto canvas to correct orientation using image meta data',\n { orientation },\n )\n const canvas = await blobToCanvas(file, orientation)\n if (onAnnotateCanvas) {\n onAnnotateCanvas(file, canvas)\n }\n return canvas\n } catch (err) {\n console.warn('Failed to rotate the orientation of a file:', err)\n Sentry.captureException(err)\n return file\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { authService } from '
|
|
1
|
+
import { authService } from '../apps';
|
|
2
2
|
import loadImage from 'blueimp-load-image';
|
|
3
3
|
// Copied from https://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript
|
|
4
4
|
const b64toBlob = (b64Data, contentType = '', sliceSize = 512) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blob-utils.js","sourceRoot":"","sources":["../../src/services/blob-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"blob-utils.js","sourceRoot":"","sources":["../../src/services/blob-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { authService } from '../apps'\nimport loadImage from 'blueimp-load-image'\n\n// Copied from https://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript\nconst b64toBlob = (b64Data: string, contentType = '', sliceSize = 512) => {\n const byteCharacters = atob(b64Data)\n const byteArrays = []\n\n for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n const slice = byteCharacters.slice(offset, offset + sliceSize)\n\n const byteNumbers = new Array(slice.length)\n for (let i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i)\n }\n\n const byteArray = new Uint8Array(byteNumbers)\n byteArrays.push(byteArray)\n }\n\n const blob = new Blob(byteArrays, { type: contentType })\n return blob\n}\n\nexport function dataUriToBlobSync(dataUri: string) {\n const [prefix, b64Data] = dataUri.split(',')\n const matches = prefix.match(/data:(.*);base64/)\n const [, contentType] = matches || []\n return b64toBlob(b64Data, contentType)\n}\n\nasync function generateRequestInit(\n abortSignal?: AbortSignal,\n): Promise<RequestInit | undefined> {\n const idToken = await authService.getIdToken()\n if (idToken) {\n return {\n signal: abortSignal,\n headers: {\n Authorization: `Bearer ${idToken}`,\n },\n }\n }\n}\n\nexport async function urlToBlobAsync(url: string, abortSignal?: AbortSignal) {\n const requestInit = await generateRequestInit(abortSignal)\n const response = await fetch(url, requestInit)\n if (!response.ok) {\n throw new Error(\n `Unable to download file. HTTP Status Code: ${response.status}`,\n )\n }\n return await response.blob()\n}\n\nexport async function blobToCanvas(\n blob: Blob,\n orientation?: number,\n): Promise<HTMLCanvasElement> {\n const loadImageResult = await loadImage(blob, {\n canvas: true,\n orientation: orientation,\n })\n // @ts-expect-error this it always be a HTMLCanvasElement because we passed `canvas: true` above\n const canvas: HTMLCanvasElement = loadImageResult.image\n return canvas\n}\n\nexport async function canvasToBlob(canvas: HTMLCanvasElement) {\n const blob: Blob = await new Promise((resolve, reject) => {\n canvas.toBlob((blob) => {\n if (blob) resolve(blob)\n reject(new Error('Failed to convert canvas back to blob.'))\n })\n })\n return blob\n}\n\nexport async function getBlobOrientation(\n blob: Blob,\n): Promise<number | undefined> {\n const imageMetaData: loadImage.MetaData = await loadImage.parseMetaData(blob)\n const orientation = imageMetaData.exif?.get('Orientation')\n return orientation as number | undefined\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { FormTypes, SubmissionTypes } from '@oneblink/types';
|
|
2
|
-
import { attachmentsService } from '
|
|
2
|
+
import { attachmentsService } from '../apps';
|
|
3
3
|
export declare function validateAttachmentExists(attachment: attachmentsService.Attachment, attachmentRetentionInDays: number | undefined): attachmentsService.AttachmentError | void;
|
|
4
4
|
export default function checkIfAttachmentsExist(form: FormTypes.Form, submission: SubmissionTypes.S3SubmissionData['submission'], attachmentRetentionInDays: number | undefined): SubmissionTypes.S3SubmissionData['submission'] | void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkIfAttachmentsExist.js","sourceRoot":"","sources":["../../src/services/checkIfAttachmentsExist.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArcGISTypes, FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { v4 as uuid } from 'uuid'\nimport { attachmentsService } from '@oneblink/apps'\n\nimport { Value as FormElementComplianceValue } from '../form-elements/FormElementCompliance'\n\nexport function validateAttachmentExists(\n attachment: attachmentsService.Attachment,\n attachmentRetentionInDays: number | undefined,\n): attachmentsService.AttachmentError | void {\n if (attachment.type || !attachment.uploadedAt || !attachmentRetentionInDays) {\n return\n }\n\n const uploadedAt = new Date(attachment.uploadedAt)\n const expiresAt = new Date(attachment.uploadedAt)\n expiresAt.setDate(uploadedAt.getDate() + attachmentRetentionInDays)\n const now = new Date()\n console.log('Checking if attachment still exists', {\n uploadedAt,\n expiresAt,\n attachment,\n })\n // check if attachment exists\n if (expiresAt > now) {\n return\n }\n\n const attachmentError: attachmentsService.AttachmentError = {\n type: 'ERROR',\n errorMessage:\n \"This attachment has been removed based on your administrator's data retention policy, please remove it and upload it again.\",\n _id: uuid(),\n fileName: attachment.fileName,\n isPrivate: attachment.isPrivate,\n }\n return attachmentError\n}\n\nfunction validateAttachmentsExists(\n attachments: unknown,\n attachmentRetentionInDays: number | undefined,\n): attachmentsService.Attachment[] | void {\n if (!Array.isArray(attachments)) {\n return\n }\n const newAttachments = [...attachments]\n let hasChanges = false\n for (let index = 0; index < newAttachments.length; index++) {\n const attachmentError = validateAttachmentExists(\n newAttachments[index] as attachmentsService.Attachment,\n attachmentRetentionInDays,\n )\n if (attachmentError) {\n hasChanges = true\n newAttachments[index] = attachmentError\n }\n }\n if (hasChanges) {\n return newAttachments\n }\n}\n\nfunction checkIfAttachmentsExistForFormElements(\n formElements: FormTypes.FormElement[],\n submission: SubmissionTypes.S3SubmissionData['submission'],\n attachmentRetentionInDays: number | undefined,\n): SubmissionTypes.S3SubmissionData['submission'] | void {\n const result: SubmissionTypes.S3SubmissionData['submission'] = {\n ...submission,\n }\n let hasChanges = false\n for (const formElement of formElements) {\n switch (formElement.type) {\n case 'section':\n case 'page': {\n const newSubmission = checkIfAttachmentsExistForFormElements(\n formElement.elements,\n result,\n attachmentRetentionInDays,\n )\n if (newSubmission) {\n hasChanges = true\n Object.assign(result, newSubmission)\n }\n break\n }\n case 'form': {\n const nestedSubmission = submission[formElement.name]\n if (!nestedSubmission || typeof nestedSubmission !== 'object') {\n break\n }\n const newSubmission = checkIfAttachmentsExistForFormElements(\n formElement.elements || [],\n nestedSubmission as SubmissionTypes.S3SubmissionData['submission'],\n attachmentRetentionInDays,\n )\n if (newSubmission) {\n hasChanges = true\n result[formElement.name] = newSubmission\n }\n break\n }\n case 'repeatableSet': {\n const entries = submission[formElement.name]\n if (!Array.isArray(entries)) {\n break\n }\n const newEntries = [...entries]\n let hasEntryChanges = false\n for (let index = 0; index < entries.length; index++) {\n const entry = entries[index]\n if (typeof entry === 'object') {\n const newEntry = checkIfAttachmentsExistForFormElements(\n formElement.elements,\n entry,\n attachmentRetentionInDays,\n )\n if (newEntry) {\n hasEntryChanges = true\n newEntries[index] = newEntry\n }\n }\n }\n if (hasEntryChanges) {\n hasChanges = true\n result[formElement.name] = newEntries\n }\n break\n }\n case 'arcGISWebMap':\n case 'camera':\n case 'draw':\n case 'compliance':\n case 'files': {\n const value = submission[formElement.name]\n if (!value) {\n break\n }\n\n // If the attachment has a type, it has not finished uploading\n switch (formElement.type) {\n case 'camera':\n case 'draw': {\n const attachmentError = validateAttachmentExists(\n value as attachmentsService.Attachment,\n attachmentRetentionInDays,\n )\n if (attachmentError) {\n hasChanges = true\n result[formElement.name] = attachmentError\n }\n break\n }\n case 'compliance': {\n const newAttachments = validateAttachmentsExists(\n (value as FormElementComplianceValue).files,\n attachmentRetentionInDays,\n )\n if (newAttachments) {\n hasChanges = true\n result[formElement.name] = {\n ...(value as FormElementComplianceValue),\n files: newAttachments,\n }\n }\n break\n }\n case 'files': {\n const newAttachments = validateAttachmentsExists(\n value,\n attachmentRetentionInDays,\n )\n if (newAttachments) {\n hasChanges = true\n result[formElement.name] = newAttachments\n }\n break\n }\n case 'arcGISWebMap': {\n const arcGISWebMapElementValue =\n value as ArcGISTypes.ArcGISWebMapElementValue\n const snapshotImages = validateAttachmentsExists(\n arcGISWebMapElementValue.snapshotImages,\n attachmentRetentionInDays,\n )\n if (snapshotImages) {\n hasChanges = true\n result[formElement.name] = {\n ...value,\n snapshotImages,\n }\n }\n break\n }\n }\n }\n }\n }\n if (hasChanges) {\n return result\n }\n}\n\nexport default function checkIfAttachmentsExist(\n form: FormTypes.Form,\n submission: SubmissionTypes.S3SubmissionData['submission'],\n attachmentRetentionInDays: number | undefined,\n): SubmissionTypes.S3SubmissionData['submission'] | void {\n return checkIfAttachmentsExistForFormElements(\n form.elements,\n submission,\n attachmentRetentionInDays,\n )\n}\n"]}
|
|
1
|
+
{"version":3,"file":"checkIfAttachmentsExist.js","sourceRoot":"","sources":["../../src/services/checkIfAttachmentsExist.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArcGISTypes, FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { v4 as uuid } from 'uuid'\nimport { attachmentsService } from '../apps'\n\nimport { Value as FormElementComplianceValue } from '../form-elements/FormElementCompliance'\n\nexport function validateAttachmentExists(\n attachment: attachmentsService.Attachment,\n attachmentRetentionInDays: number | undefined,\n): attachmentsService.AttachmentError | void {\n if (attachment.type || !attachment.uploadedAt || !attachmentRetentionInDays) {\n return\n }\n\n const uploadedAt = new Date(attachment.uploadedAt)\n const expiresAt = new Date(attachment.uploadedAt)\n expiresAt.setDate(uploadedAt.getDate() + attachmentRetentionInDays)\n const now = new Date()\n console.log('Checking if attachment still exists', {\n uploadedAt,\n expiresAt,\n attachment,\n })\n // check if attachment exists\n if (expiresAt > now) {\n return\n }\n\n const attachmentError: attachmentsService.AttachmentError = {\n type: 'ERROR',\n errorMessage:\n \"This attachment has been removed based on your administrator's data retention policy, please remove it and upload it again.\",\n _id: uuid(),\n fileName: attachment.fileName,\n isPrivate: attachment.isPrivate,\n }\n return attachmentError\n}\n\nfunction validateAttachmentsExists(\n attachments: unknown,\n attachmentRetentionInDays: number | undefined,\n): attachmentsService.Attachment[] | void {\n if (!Array.isArray(attachments)) {\n return\n }\n const newAttachments = [...attachments]\n let hasChanges = false\n for (let index = 0; index < newAttachments.length; index++) {\n const attachmentError = validateAttachmentExists(\n newAttachments[index] as attachmentsService.Attachment,\n attachmentRetentionInDays,\n )\n if (attachmentError) {\n hasChanges = true\n newAttachments[index] = attachmentError\n }\n }\n if (hasChanges) {\n return newAttachments\n }\n}\n\nfunction checkIfAttachmentsExistForFormElements(\n formElements: FormTypes.FormElement[],\n submission: SubmissionTypes.S3SubmissionData['submission'],\n attachmentRetentionInDays: number | undefined,\n): SubmissionTypes.S3SubmissionData['submission'] | void {\n const result: SubmissionTypes.S3SubmissionData['submission'] = {\n ...submission,\n }\n let hasChanges = false\n for (const formElement of formElements) {\n switch (formElement.type) {\n case 'section':\n case 'page': {\n const newSubmission = checkIfAttachmentsExistForFormElements(\n formElement.elements,\n result,\n attachmentRetentionInDays,\n )\n if (newSubmission) {\n hasChanges = true\n Object.assign(result, newSubmission)\n }\n break\n }\n case 'form': {\n const nestedSubmission = submission[formElement.name]\n if (!nestedSubmission || typeof nestedSubmission !== 'object') {\n break\n }\n const newSubmission = checkIfAttachmentsExistForFormElements(\n formElement.elements || [],\n nestedSubmission as SubmissionTypes.S3SubmissionData['submission'],\n attachmentRetentionInDays,\n )\n if (newSubmission) {\n hasChanges = true\n result[formElement.name] = newSubmission\n }\n break\n }\n case 'repeatableSet': {\n const entries = submission[formElement.name]\n if (!Array.isArray(entries)) {\n break\n }\n const newEntries = [...entries]\n let hasEntryChanges = false\n for (let index = 0; index < entries.length; index++) {\n const entry = entries[index]\n if (typeof entry === 'object') {\n const newEntry = checkIfAttachmentsExistForFormElements(\n formElement.elements,\n entry,\n attachmentRetentionInDays,\n )\n if (newEntry) {\n hasEntryChanges = true\n newEntries[index] = newEntry\n }\n }\n }\n if (hasEntryChanges) {\n hasChanges = true\n result[formElement.name] = newEntries\n }\n break\n }\n case 'arcGISWebMap':\n case 'camera':\n case 'draw':\n case 'compliance':\n case 'files': {\n const value = submission[formElement.name]\n if (!value) {\n break\n }\n\n // If the attachment has a type, it has not finished uploading\n switch (formElement.type) {\n case 'camera':\n case 'draw': {\n const attachmentError = validateAttachmentExists(\n value as attachmentsService.Attachment,\n attachmentRetentionInDays,\n )\n if (attachmentError) {\n hasChanges = true\n result[formElement.name] = attachmentError\n }\n break\n }\n case 'compliance': {\n const newAttachments = validateAttachmentsExists(\n (value as FormElementComplianceValue).files,\n attachmentRetentionInDays,\n )\n if (newAttachments) {\n hasChanges = true\n result[formElement.name] = {\n ...(value as FormElementComplianceValue),\n files: newAttachments,\n }\n }\n break\n }\n case 'files': {\n const newAttachments = validateAttachmentsExists(\n value,\n attachmentRetentionInDays,\n )\n if (newAttachments) {\n hasChanges = true\n result[formElement.name] = newAttachments\n }\n break\n }\n case 'arcGISWebMap': {\n const arcGISWebMapElementValue =\n value as ArcGISTypes.ArcGISWebMapElementValue\n const snapshotImages = validateAttachmentsExists(\n arcGISWebMapElementValue.snapshotImages,\n attachmentRetentionInDays,\n )\n if (snapshotImages) {\n hasChanges = true\n result[formElement.name] = {\n ...value,\n snapshotImages,\n }\n }\n break\n }\n }\n }\n }\n }\n if (hasChanges) {\n return result\n }\n}\n\nexport default function checkIfAttachmentsExist(\n form: FormTypes.Form,\n submission: SubmissionTypes.S3SubmissionData['submission'],\n attachmentRetentionInDays: number | undefined,\n): SubmissionTypes.S3SubmissionData['submission'] | void {\n return checkIfAttachmentsExistForFormElements(\n form.elements,\n submission,\n attachmentRetentionInDays,\n )\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultCoordinates.js","sourceRoot":"","sources":["../../src/services/defaultCoordinates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"defaultCoordinates.js","sourceRoot":"","sources":["../../src/services/defaultCoordinates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAE7C,MAAM,QAAQ,GAAG,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,iBAAiB,EAAE,CAAA,CAAC,kBAAkB;AAClG,MAAM,QAAQ,GAAG;IACf,QAAQ,EAAE,CAAC,kBAAkB;IAC7B,SAAS,EAAE,kBAAkB;CAC9B,CAAA,CAAC,uBAAuB;AACzB,MAAM,MAAM,GAAG,GAAG,EAAE,CAClB,mBAAmB,CAAC,SAAS,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAA;AAEnE,eAAe,MAAM,CAAA","sourcesContent":["import { localisationService } from '../apps'\n\nconst usCoords = { latitude: 40.75764768718219, longitude: -73.98578582987093 } //TIMES SQUARE, NY\nconst auCoords = {\n latitude: -33.861146727854496,\n longitude: 151.20863228242192,\n} //CIRCULAR QUAY, SYDNEY\nconst coords = () =>\n localisationService.getLocale() === 'en-US' ? usCoords : auCoords\n\nexport default coords\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { attachmentsService } from '
|
|
1
|
+
import { attachmentsService } from '../apps';
|
|
2
2
|
export declare function downloadFileLegacy(dataURI: string, fileName: string): Promise<void>;
|
|
3
3
|
export default function downloadAttachment(attachment: attachmentsService.Attachment): Promise<void>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Sentry } from '
|
|
1
|
+
import { Sentry } from '../apps';
|
|
2
2
|
import * as bulmaToast from 'bulma-toast';
|
|
3
3
|
import fileSaver from 'file-saver';
|
|
4
4
|
import { urlToBlobAsync } from './blob-utils';
|
|
5
|
-
import tenants from '
|
|
5
|
+
import tenants from '../apps/tenants';
|
|
6
6
|
async function downloadFile(data, fileName) {
|
|
7
7
|
if (window.cordova) {
|
|
8
8
|
const file = typeof data === 'string' ? await urlToBlobAsync(data) : data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download-file.js","sourceRoot":"","sources":["../../src/services/download-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAsB,MAAM,
|
|
1
|
+
{"version":3,"file":"download-file.js","sourceRoot":"","sources":["../../src/services/download-file.ts"],"names":[],"mappings":"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","sourcesContent":["import { Sentry, attachmentsService } from '../apps'\nimport * as bulmaToast from 'bulma-toast'\nimport fileSaver from 'file-saver'\nimport { urlToBlobAsync } from './blob-utils'\nimport tenants from '../apps/tenants'\n\nasync function downloadFile(data: Blob | string, fileName: string) {\n if (window.cordova) {\n const file = typeof data === 'string' ? await urlToBlobAsync(data) : data\n await new Promise((resolve, reject) => {\n window.requestFileSystem(\n window.PERSISTENT,\n 0,\n (fs) => {\n fs.root.getFile(\n fileName,\n {\n create: true,\n exclusive: false,\n },\n (fileEntry) => {\n // Create a FileWriter object for our FileEntry\n fileEntry.createWriter(\n (fileWriter) => {\n fileWriter.onwriteend = () => {\n // @ts-expect-error ???\n window.cordova.plugins.fileOpener2.open(\n // @ts-expect-error ???\n fileEntry.nativeURL,\n file.type,\n {\n error: (error: Error) => {\n console.log(\n 'An error occurred opening the downloaded file',\n )\n reject(error)\n },\n success: () => resolve(undefined),\n },\n )\n }\n\n fileWriter.onerror = (error) => {\n console.log(\n 'An error occurred writing the file to file system',\n )\n reject(error)\n }\n\n fileWriter.write(file)\n },\n (error) => {\n console.log(\n 'An error attempting to create file writer for new file',\n )\n reject(error)\n },\n )\n },\n (error) => {\n console.log(\n 'An error occurred getting new file data from file system',\n )\n reject(error)\n },\n )\n },\n (error) => {\n console.log('An error occurred requesting access to the file system')\n reject(error)\n },\n )\n })\n return\n } else {\n fileSaver.saveAs(data, fileName)\n }\n}\n\nconst handleError = (error?: Error) => {\n if (error) {\n console.warn('An error occurred attempting to download file:', error)\n Sentry.captureException(error)\n bulmaToast.toast({\n message:\n 'Sorry, there was an issue downloading your file, please try again.',\n // @ts-expect-error bulma sets this string as a class, so we are hacking in our own classes\n type: 'ob-toast is-danger cypress-download-file-toast',\n dismissible: true,\n closeOnClick: true,\n })\n }\n}\n\nexport async function downloadFileLegacy(dataURI: string, fileName: string) {\n try {\n return await downloadFile(dataURI, fileName)\n } catch (error) {\n handleError(error as Error)\n }\n}\n\nexport default async function downloadAttachment(\n attachment: attachmentsService.Attachment,\n) {\n try {\n if (attachment.type) {\n if (attachment.data) {\n await downloadFile(attachment.data, attachment.fileName)\n }\n return\n }\n const safeAttachmentUrl = new URL(tenants.current.apiOrigin)\n const unsafeAttachmentUrl = new URL(attachment.url)\n safeAttachmentUrl.pathname = unsafeAttachmentUrl.pathname\n const blob = await urlToBlobAsync(safeAttachmentUrl.href)\n return await downloadFile(blob, attachment.fileName)\n } catch (error) {\n handleError(error as Error)\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawTimestampOnCanvas.js","sourceRoot":"","sources":["../../src/services/drawTimestampOnCanvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"drawTimestampOnCanvas.js","sourceRoot":"","sources":["../../src/services/drawTimestampOnCanvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAE7C,MAAM,CAAC,OAAO,WAAW,IAAU,EAAE,MAAyB;IAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACnC,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,GAAG,GAAG,mBAAmB,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;QAC3E,MAAM,gCAAgC,GAAG,MAAM,CAAA;QAC/C,MAAM,qBAAqB,GAAG,EAAE,CAAA;QAChC,MAAM,2BAA2B,GAAG,EAAE,CAAA;QAEtC,MAAM,UAAU,GACd,gCAAgC,GAAG,MAAM,CAAC,MAAM,GAAG,qBAAqB,CAAA;QAE1E,MAAM,gBAAgB,GACpB,gCAAgC;YAChC,MAAM,CAAC,MAAM;YACb,2BAA2B,CAAA;QAE7B,GAAG,CAAC,IAAI,GAAG,GAAG,UAAU,UAAU,CAAA;QAClC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QAEjD,MAAM,eAAe,GAAG,gBAAgB,GAAG,CAAC,GAAG,SAAS,CAAA;QACxD,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,CAAC,GAAG,UAAU,CAAA;QAE1D,GAAG,CAAC,SAAS,GAAG,uBAAuB,CAAA;QACvC,GAAG,CAAC,QAAQ,CACV,MAAM,CAAC,KAAK,GAAG,eAAe,GAAG,gBAAgB,EACjD,MAAM,CAAC,MAAM,GAAG,gBAAgB,GAAG,gBAAgB,EACnD,eAAe,EACf,gBAAgB,CACjB,CAAA;QAED,GAAG,CAAC,SAAS,GAAG,MAAM,CAAA;QACtB,GAAG,CAAC,QAAQ,CACV,GAAG,EACH,MAAM,CAAC,KAAK,GAAG,SAAS,GAAG,gBAAgB,GAAG,CAAC,EAC/C,MAAM,CAAC,MAAM,GAAG,UAAU,GAAG,gBAAgB,GAAG,CAAC,CAClD,CAAA;IACH,CAAC;AACH,CAAC","sourcesContent":["import { localisationService } from '../apps'\n\nexport default function (file: File, canvas: HTMLCanvasElement): void {\n const ctx = canvas.getContext('2d')\n if (ctx) {\n const now = localisationService.formatDatetime(new Date(file.lastModified))\n const imageHeightMultiplierCoefficient = 0.0021\n const textHeightCoefficient = 20\n const backgroundMarginCoefficient = 10\n\n const textHeight =\n imageHeightMultiplierCoefficient * canvas.height * textHeightCoefficient\n\n const backgroundMargin =\n imageHeightMultiplierCoefficient *\n canvas.height *\n backgroundMarginCoefficient\n\n ctx.font = `${textHeight}px Arial`\n const { width: textWidth } = ctx.measureText(now)\n\n const backgroundWidth = backgroundMargin * 2 + textWidth\n const backgroundHeight = backgroundMargin * 2 + textHeight\n\n ctx.fillStyle = 'rgba(20, 20, 20, 0.6)'\n ctx.fillRect(\n canvas.width - backgroundWidth - backgroundMargin,\n canvas.height - backgroundHeight - backgroundMargin,\n backgroundWidth,\n backgroundHeight,\n )\n\n ctx.fillStyle = '#FFF'\n ctx.fillText(\n now,\n canvas.width - textWidth - backgroundMargin * 2,\n canvas.height - textHeight - backgroundMargin / 3,\n )\n }\n}\n"]}
|
|
@@ -4,7 +4,7 @@ import { checkFileNameExtensionIsValid, checkFileNameIsValid, getCleanRepeatable
|
|
|
4
4
|
import generateCivicaNameRecordElements from '../generateCivicaNameRecordElements';
|
|
5
5
|
import generateFreshdeskDependentFieldElements from '../generateFreshdeskDependentFieldElements';
|
|
6
6
|
import { parseDateValue } from '../generate-default-data';
|
|
7
|
-
import { localisationService } from '
|
|
7
|
+
import { localisationService } from '../../apps';
|
|
8
8
|
import { generateConfirmationFormElementName } from '../dynamic-elements';
|
|
9
9
|
import { determineLookupButtonIsRequired } from './determineLookupButtonIsRequired';
|
|
10
10
|
import { defaultAutoSnapshotButtonLabel, generateArcGISAutomatedSnapshotFileName, } from '../../form-elements/FormElementArcGISWebMap';
|