@oneblink/apps-react 13.0.0-beta.6 → 13.0.0-beta.8
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.
|
@@ -214,15 +214,18 @@ declare function executePostSubmissionAction(submissionResult: FormSubmissionRes
|
|
|
214
214
|
* })
|
|
215
215
|
* ```
|
|
216
216
|
*
|
|
217
|
-
* @param
|
|
218
|
-
* @param
|
|
219
|
-
* @param
|
|
217
|
+
* @param options
|
|
218
|
+
* @param options.formId
|
|
219
|
+
* @param options.submissionId
|
|
220
|
+
* @param options.abortSignal
|
|
221
|
+
* @param options.versionId
|
|
220
222
|
* @returns
|
|
221
223
|
*/
|
|
222
|
-
declare function getSubmissionData({ formId, submissionId, abortSignal, }: {
|
|
224
|
+
declare function getSubmissionData({ formId, submissionId, abortSignal, versionId, }: {
|
|
223
225
|
formId: number;
|
|
224
226
|
submissionId: string;
|
|
225
227
|
abortSignal?: AbortSignal;
|
|
228
|
+
versionId?: string;
|
|
226
229
|
}): Promise<{
|
|
227
230
|
data: SubmissionTypes.S3SubmissionData;
|
|
228
231
|
versionId: string | undefined;
|
|
@@ -409,16 +409,19 @@ async function executeAction(submissionResult, { action, redirectUrl, onRedirect
|
|
|
409
409
|
* })
|
|
410
410
|
* ```
|
|
411
411
|
*
|
|
412
|
-
* @param
|
|
413
|
-
* @param
|
|
414
|
-
* @param
|
|
412
|
+
* @param options
|
|
413
|
+
* @param options.formId
|
|
414
|
+
* @param options.submissionId
|
|
415
|
+
* @param options.abortSignal
|
|
416
|
+
* @param options.versionId
|
|
415
417
|
* @returns
|
|
416
418
|
*/
|
|
417
|
-
async function getSubmissionData({ formId, submissionId, abortSignal, }) {
|
|
419
|
+
async function getSubmissionData({ formId, submissionId, abortSignal, versionId, }) {
|
|
418
420
|
return await downloadFormSubmission({
|
|
419
421
|
formId,
|
|
420
422
|
submissionId,
|
|
421
423
|
abortSignal,
|
|
424
|
+
versionId,
|
|
422
425
|
});
|
|
423
426
|
}
|
|
424
427
|
export { submit, executePostSubmissionAction, executeCancelAction, goBackOrCloseWindow, getPendingQueueSubmissions, deletePendingQueueSubmission, editPendingQueueSubmission, cancelEditingPendingQueueSubmission, registerPendingQueueListener, processPendingQueue, registerPendingQueueAttachmentProgressListener, registerPendingQueueProgressListener, getSubmissionData, uploadFormSubmissionEdit, getPostSubmissionAttachments, };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submission-service.js","sourceRoot":"","sources":["../../src/apps/submission-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { isOffline } from './offline-service'\nimport { getFormsKeyId, isLoggedIn } from './auth-service'\nimport {\n registerPendingQueueListener,\n getPendingQueueSubmissions,\n updatePendingQueueSubmission,\n cancelEditingPendingQueueSubmission,\n deletePendingQueueSubmission,\n editPendingQueueSubmission,\n registerPendingQueueAttachmentProgressListener,\n registerPendingQueueProgressListener,\n executePendingQueueProgressListeners,\n removePendingQueueSubmission,\n PendingQueueListener,\n PendingQueueAction,\n} from './services/pending-queue'\nimport replaceInjectablesWithSubmissionValues from './services/replaceInjectablesWithSubmissionValues'\nimport { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport Sentry from './Sentry'\nimport prepareSubmissionData from './services/prepareSubmissionData'\nimport submitForm, {\n SubmissionParams,\n ProgressListener,\n ProgressListenerEvent,\n} from './services/submit'\nimport {\n PendingFormSubmission,\n FormSubmission,\n FormSubmissionResult,\n BaseFormSubmission,\n NewDraftSubmission,\n NewFormSubmission,\n DraftSubmission,\n DraftSubmissionInput,\n} from './types/submissions'\nimport { deleteAutoSaveData } from './auto-save-service'\nimport {\n downloadFormSubmission,\n uploadFormSubmissionEdit,\n} from './services/api/submissions'\nimport { getSubmissionAttachmentDetails } from './attachments-service'\nimport getPostSubmissionAttachments from './services/api/post-submission-attachment-urls'\n\nlet _isProcessingPendingQueue = false\n\n/**\n * Force processing the pending queue. This must be called to process the\n * pending queue and is best used when the application comes back online.\n *\n * ### Example\n *\n * ```js\n * await submissionService.processPendingQueue()\n * ```\n *\n * @returns\n */\nasync function processPendingQueue({\n shouldRunExternalIdGeneration,\n shouldRunServerValidation,\n}: {\n shouldRunExternalIdGeneration: boolean\n shouldRunServerValidation: boolean\n}): Promise<void> {\n if (_isProcessingPendingQueue) {\n return\n }\n _isProcessingPendingQueue = true\n\n console.log('Checking pending queue for submissions.')\n const pendingQueueSubmissions = await getPendingQueueSubmissions()\n\n console.log(\n `Found ${pendingQueueSubmissions.length} submission(s) in the pending queue.`,\n )\n for (const pendingQueueSubmission of pendingQueueSubmissions) {\n if (isOffline()) {\n console.log(\n 'Application is offline, leaving submission in the pending queue:',\n pendingQueueSubmission,\n )\n continue\n }\n\n if (pendingQueueSubmission.isEditing) {\n console.log(\n 'submission is being edited, leaving submission in the pending queue:',\n pendingQueueSubmission,\n )\n continue\n }\n\n if (\n pendingQueueSubmission.definition.isAuthenticated &&\n !isLoggedIn() &&\n !getFormsKeyId()\n ) {\n console.log(\n 'Authentication is required for this form but the user does not have a valid token, leaving submission in the pending queue:',\n pendingQueueSubmission,\n )\n continue\n }\n\n try {\n console.log(\n 'Attempting to process submission from pending queue:',\n pendingQueueSubmission,\n )\n\n pendingQueueSubmission.isSubmitting = true\n pendingQueueSubmission.error = undefined\n await updatePendingQueueSubmission(\n pendingQueueSubmission.pendingTimestamp,\n pendingQueueSubmission,\n 'SUBMIT_STARTED',\n )\n\n const preparedSubmission = await prepareSubmissionData(\n pendingQueueSubmission,\n )\n pendingQueueSubmission.submission = {\n ...preparedSubmission,\n }\n const attachments = getSubmissionAttachmentDetails(\n pendingQueueSubmission.definition.elements,\n pendingQueueSubmission.submission,\n )\n const failedAttachments = attachments.filter(\n (attachment) => attachment.value.type === 'ERROR',\n )\n if (failedAttachments.length) {\n throw new Error(\n `Failed to upload ${failedAttachments.length} attachment${\n failedAttachments.length > 1 ? 's' : ''\n }.`,\n )\n }\n await submitWithCompletionTimestamp({\n isPendingQueueEnabled: true,\n formSubmission: pendingQueueSubmission,\n onProgress: (event) => {\n executePendingQueueProgressListeners({\n ...event,\n pendingTimestamp: pendingQueueSubmission.pendingTimestamp,\n })\n },\n shouldRunExternalIdGeneration,\n shouldRunServerValidation,\n paymentFormUrl: undefined,\n paymentReceiptUrl: undefined,\n completionTimestamp: pendingQueueSubmission.pendingTimestamp,\n })\n\n await removePendingQueueSubmission(\n pendingQueueSubmission.pendingTimestamp,\n 'SUBMIT_SUCCEEDED',\n )\n\n console.log(\n 'Successfully processed submission from the pending queue',\n pendingQueueSubmission,\n )\n } catch (error) {\n Sentry.captureException(error)\n console.error('Error processing submission from the pending queue', error)\n pendingQueueSubmission.isSubmitting = false\n if ((error as Error).message) {\n pendingQueueSubmission.error = (error as Error).message\n } else {\n pendingQueueSubmission.error =\n 'An unknown error has occurred, which has prevented your Form from submitting. Please try again, or contact your Administrator if the problem persists.'\n }\n await updatePendingQueueSubmission(\n pendingQueueSubmission.pendingTimestamp,\n pendingQueueSubmission,\n 'SUBMIT_FAILED',\n )\n }\n }\n\n console.log(\n 'Finished attempting to processing submissions in the pending queue.',\n )\n _isProcessingPendingQueue = false\n}\n\n/**\n * Submit a FormSubmission. Offline submissions will be added to a pending queue\n * and be processed using the `processPendingQueue()` function. FormSubmissions\n * with payment submission events will return the FormSubmissionResult with a\n * `payment` property set, this should be used to redirect the user to the\n * payment URL. Will also handle cleaning up auto save data (if the\n * `autoSaveKey` property is passed), locally stored drafts and prefill data.\n *\n * ### Example\n *\n * ```js\n * const formSubmission = {\n * formsAppId: 1,\n * submission: {\n * form: 'data',\n * goes: 'here',\n * },\n * definition: OneBlinkForm,\n * captchaTokens: [],\n * formSubmissionDraftId: '2974602c-2c5b-4b46-b086-87ee9b2aa233',\n * jobId: 'bb37d1da-9cda-4950-a36a-22f58b25de3a',\n * preFillFormDataId: '7763f828-4aaf-49dc-9c1b-e2eeea8fa990',\n * externalId: 'external-id-set-by-developer',\n * }\n *\n * // Pass paymentReceiptUrl if submission may require a payment\n * const paymentReceiptUrl = `${window.location.origin}/payment-receipt`\n *\n * // Pass schedulingBookingUrlConfiguration if submission utilise scheduling\n * const schedulingBookingUrlConfiguration = {\n * schedulingBookingUrl: 'https://my-website.com/booking',\n * schedulingRescheduleUrl: 'https://my-website.com/reschedule',\n * schedulingCancelUrl: 'https://my-website.com/cancel',\n * }\n * const submissionResult = await submissionService.submit({\n * formSubmission,\n * paymentReceiptUrl,\n * schedulingBookingUrlConfiguration,\n * })\n *\n * if (submissionResult.scheduling) {\n * // Redirect user to booking form\n * window.location.href = submissionResult.scheduling.bookingUrl\n * return\n * }\n *\n * if (submissionResult.payment) {\n * // Redirect user to payment form\n * window.location.href = submissionResult.payment.hostedFormUrl\n * return\n * }\n *\n * if (submissionResult.isOffline) {\n * if (submissionResult.isInPendingQueue) {\n * // Display message to user that the submission\n * // has been added to the pending queue\n * } else {\n * // Display message to user that this submission can\n * // not be processed while offline (most likely because it requires a payment)\n * }\n * return\n * }\n *\n * // submissionResult.submissionId and submissionResult.submissionTimestamp\n * // will be set if the submission was successful\n * ```\n *\n * @param params\n * @returns\n */\nasync function submit(\n params: SubmissionParams & {\n autoSaveKey?: string\n },\n): Promise<FormSubmissionResult> {\n return await submitWithCompletionTimestamp({\n ...params,\n completionTimestamp: new Date().toISOString(),\n })\n}\n\nasync function submitWithCompletionTimestamp({\n autoSaveKey,\n ...params\n}: SubmissionParams & {\n autoSaveKey?: string\n completionTimestamp: string\n}): Promise<FormSubmissionResult> {\n const formSubmissionResult = await submitForm(params)\n if (typeof autoSaveKey === 'string') {\n try {\n await deleteAutoSaveData(params.formSubmission.definition.id, autoSaveKey)\n } catch (error) {\n console.warn('Error removing auto save data: ', error)\n Sentry.captureException(error)\n }\n }\n return formSubmissionResult\n}\n\nasync function closeWindow(): Promise<void> {\n // @ts-expect-error\n if (window.cordova && window.cordova.plugins.exit) {\n // @ts-expect-error\n window.cordova.plugins.exit()\n return\n }\n\n window.close()\n\n // If the browser has not closed after timeout,\n // we throw an error to display to the user\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n console.log('Could not close as window was not opened using JavaScript')\n reject(\n new Error(\n 'We were unable to close your browser, could you please close it manually for us?',\n ),\n )\n }, 500)\n })\n}\n\n/**\n * Go back in the browser history or attempts to close the browser tab if there\n * is no history.\n *\n * ### Example\n *\n * ```js\n * try {\n * await submissionService.goBackOrCloseWindow()\n * } catch (error) {\n * // Handle error while closing browser tab.\n * // Display message to user to close it manually\n * }\n * ```\n *\n * @returns\n */\nasync function goBackOrCloseWindow(): Promise<void> {\n if (window.history.length <= 1) {\n return closeWindow()\n } else {\n window.history.back()\n }\n}\n\n/**\n * Action to cancel completing a form, currently goes back in the browser\n * history or attempts to close the browser tab if there is no history.\n *\n * ### Example\n *\n * ```js\n * const options = {\n * definition: OneBlinkForm,\n * externalId: 'external-id-set-by-developer',\n * }\n * // Only used for relative URLs\n * const pushRelativePath = (path) => {\n * window.location.href = path\n * }\n * // Only used for aboslute URLS\n * const replaceAbsolutePath = window.location.replace\n *\n * try {\n * await submissionService.executeCancelAction(options, {\n * onRedirectToRelativeUrl: pushRelativePath,\n * onRedirectToAbsoluteUrl: replaceAbsolutePath,\n * })\n * } catch (error) {\n * // Handle error while closing browser tab.\n * // Display message to user to close it manually\n * }\n * ```\n *\n * @param options\n * @param redirectConfig\n */\nasync function executeCancelAction(\n formSubmissionResultOptions: {\n definition: FormTypes.Form\n externalId: string | null\n taskCompletion?: FormSubmissionResult['taskCompletion']\n },\n {\n onRedirectToRelativeUrl,\n onRedirectToAbsoluteUrl,\n }: {\n onRedirectToRelativeUrl: (url: string) => void\n onRedirectToAbsoluteUrl: (url: string) => void\n },\n): Promise<void> {\n const formSubmissionResult: FormSubmissionResult = {\n ...formSubmissionResultOptions,\n formsAppId: NaN,\n formSubmissionDraftId: undefined,\n jobId: undefined,\n externalId: undefined,\n preFillFormDataId: null,\n recaptchas: [],\n submission: {},\n isInPendingQueue: false,\n isOffline: false,\n payment: null,\n scheduling: null,\n submissionId: null,\n submissionTimestamp: null,\n isUploadingAttachments: false,\n }\n\n let cancelAction = formSubmissionResult.definition.cancelAction\n let cancelRedirectUrl = formSubmissionResult.definition.cancelRedirectUrl\n\n if (formSubmissionResult.taskCompletion) {\n cancelAction = 'URL'\n cancelRedirectUrl = formSubmissionResult.taskCompletion.redirectUrl\n }\n\n await executeAction(formSubmissionResult, {\n action: cancelAction,\n redirectUrl: cancelRedirectUrl,\n onRedirectToRelativeUrl,\n onRedirectToAbsoluteUrl,\n })\n}\n\n/**\n * Execute the post submission action for a form after a successful form\n * submission.\n *\n * ### Example\n *\n * ```js\n * const formSubmissionResult = {\n * submissionId: '89c6e98e-f56f-45fc-84fe-c4fc62331d34',\n * submissionTimestamp: '2020-07-29T01:03:26.573Z'\n * formsAppId: 1,\n * submission: {\n * form: 'data',\n * goes: 'here'\n * },\n * definition: OneBlinkForm,\n * payment: {\n * hostedFormUrl: 'https://payment.com/transaction'\n * },\n * formSubmissionDraftId: '2974602c-2c5b-4b46-b086-87ee9b2aa233',\n * jobId: 'bb37d1da-9cda-4950-a36a-22f58b25de3a',\n * preFillFormDataId: '7763f828-4aaf-49dc-9c1b-e2eeea8fa990',\n * externalId: 'external-id-set-by-developer',\n * }\n * // Only used for relative URLs\n * const pushRelativePath = (path) => {\n * window.location.href = path\n * }\n * // Only used for aboslute URLS\n * const replaceAbsolutePath = window.location.replace\n *\n * try {\n * await submissionService.executePostSubmissionAction(formSubmissionResult, {\n * onRedirectToRelativeUrl: pushRelativePath,\n * onRedirectToAbsoluteUrl: replaceAbsolutePath,\n * })\n * } catch (error) {\n * // Handle error while closing browser tab.\n * // Display message to user to close it manually\n * }\n * ```\n *\n * @param submissionResult\n * @param redirectConfig\n */\nasync function executePostSubmissionAction(\n submissionResult: FormSubmissionResult,\n {\n onRedirectToRelativeUrl,\n onRedirectToAbsoluteUrl,\n }: {\n onRedirectToRelativeUrl: (url: string) => void\n onRedirectToAbsoluteUrl: (url: string) => void\n },\n): Promise<void> {\n console.log('Attempting to run post submission action')\n let postSubmissionAction = submissionResult.definition.postSubmissionAction\n let redirectUrl = submissionResult.definition.redirectUrl\n\n if (submissionResult.scheduling) {\n postSubmissionAction = 'URL'\n redirectUrl = submissionResult.scheduling.bookingUrl\n } else if (submissionResult.payment) {\n postSubmissionAction = 'URL'\n redirectUrl = submissionResult.payment.hostedFormUrl\n } else if (submissionResult.taskCompletion) {\n postSubmissionAction = 'URL'\n redirectUrl = submissionResult.taskCompletion.redirectUrl\n }\n\n await executeAction(submissionResult, {\n action: postSubmissionAction,\n redirectUrl,\n onRedirectToRelativeUrl,\n onRedirectToAbsoluteUrl,\n })\n}\n\nasync function executeAction(\n submissionResult: FormSubmissionResult,\n {\n action,\n redirectUrl,\n onRedirectToRelativeUrl,\n onRedirectToAbsoluteUrl,\n }: {\n action: FormTypes.FormPostSubmissionAction\n redirectUrl: string | undefined\n onRedirectToRelativeUrl: (url: string) => void\n onRedirectToAbsoluteUrl: (url: string) => void\n },\n): Promise<void> {\n switch (action) {\n case 'CLOSE':\n return closeWindow()\n case 'FORMS_LIBRARY': {\n if (window.location.pathname === '/') {\n onRedirectToAbsoluteUrl(window.location.origin)\n } else {\n onRedirectToRelativeUrl('/')\n }\n break\n }\n case 'URL': {\n const newUrl = replaceInjectablesWithSubmissionValues(\n redirectUrl || '/',\n submissionResult,\n ).text\n // Relative URLs can be navigated to internally\n if (newUrl[0] === '/') {\n onRedirectToRelativeUrl(newUrl)\n return\n }\n\n onRedirectToAbsoluteUrl(newUrl)\n\n // If we are in cordova land, we will navigate\n // back to the home screen after redirect\n if (window.cordova) {\n // Wait a couple of seconds to ensure the browser has\n // been opened before navigating away from form.\n setTimeout(() => {\n onRedirectToRelativeUrl('/')\n }, 2000)\n }\n break\n }\n case 'BACK':\n default: {\n // if there's no post submission action for some reason, use prev. logic...\n return goBackOrCloseWindow()\n }\n }\n}\n\n/**\n * Retrieve submission data for a known formId and submissionId\n *\n * #### Example\n *\n * ```js\n * const formId = 1\n * const submissionId = 'fba95b9d-5a9c-463d-ab68-867f431e4120'\n * const credentials = await formSubmissionService.getSubmissionData({\n * formId,\n * submissionId,\n * })\n * ```\n *\n * @param formId\n * @param submissionId\n * @param abortSignal\n * @returns\n */\nasync function getSubmissionData({\n formId,\n submissionId,\n abortSignal,\n}: {\n formId: number\n submissionId: string\n abortSignal?: AbortSignal\n}): Promise<{\n data: SubmissionTypes.S3SubmissionData\n versionId: string | undefined\n}> {\n return await downloadFormSubmission({\n formId,\n submissionId,\n abortSignal,\n })\n}\n\nexport {\n submit,\n executePostSubmissionAction,\n executeCancelAction,\n goBackOrCloseWindow,\n getPendingQueueSubmissions,\n deletePendingQueueSubmission,\n editPendingQueueSubmission,\n cancelEditingPendingQueueSubmission,\n registerPendingQueueListener,\n processPendingQueue,\n BaseFormSubmission,\n NewDraftSubmission,\n NewFormSubmission,\n DraftSubmissionInput,\n DraftSubmission,\n FormSubmission,\n FormSubmissionResult,\n PendingFormSubmission,\n SubmissionParams,\n registerPendingQueueAttachmentProgressListener,\n registerPendingQueueProgressListener,\n ProgressListener,\n ProgressListenerEvent,\n PendingQueueListener,\n PendingQueueAction,\n getSubmissionData,\n uploadFormSubmissionEdit,\n getPostSubmissionAttachments,\n}\n"]}
|
|
1
|
+
{"version":3,"file":"submission-service.js","sourceRoot":"","sources":["../../src/apps/submission-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { isOffline } from './offline-service'\nimport { getFormsKeyId, isLoggedIn } from './auth-service'\nimport {\n registerPendingQueueListener,\n getPendingQueueSubmissions,\n updatePendingQueueSubmission,\n cancelEditingPendingQueueSubmission,\n deletePendingQueueSubmission,\n editPendingQueueSubmission,\n registerPendingQueueAttachmentProgressListener,\n registerPendingQueueProgressListener,\n executePendingQueueProgressListeners,\n removePendingQueueSubmission,\n PendingQueueListener,\n PendingQueueAction,\n} from './services/pending-queue'\nimport replaceInjectablesWithSubmissionValues from './services/replaceInjectablesWithSubmissionValues'\nimport { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport Sentry from './Sentry'\nimport prepareSubmissionData from './services/prepareSubmissionData'\nimport submitForm, {\n SubmissionParams,\n ProgressListener,\n ProgressListenerEvent,\n} from './services/submit'\nimport {\n PendingFormSubmission,\n FormSubmission,\n FormSubmissionResult,\n BaseFormSubmission,\n NewDraftSubmission,\n NewFormSubmission,\n DraftSubmission,\n DraftSubmissionInput,\n} from './types/submissions'\nimport { deleteAutoSaveData } from './auto-save-service'\nimport {\n downloadFormSubmission,\n uploadFormSubmissionEdit,\n} from './services/api/submissions'\nimport { getSubmissionAttachmentDetails } from './attachments-service'\nimport getPostSubmissionAttachments from './services/api/post-submission-attachment-urls'\n\nlet _isProcessingPendingQueue = false\n\n/**\n * Force processing the pending queue. This must be called to process the\n * pending queue and is best used when the application comes back online.\n *\n * ### Example\n *\n * ```js\n * await submissionService.processPendingQueue()\n * ```\n *\n * @returns\n */\nasync function processPendingQueue({\n shouldRunExternalIdGeneration,\n shouldRunServerValidation,\n}: {\n shouldRunExternalIdGeneration: boolean\n shouldRunServerValidation: boolean\n}): Promise<void> {\n if (_isProcessingPendingQueue) {\n return\n }\n _isProcessingPendingQueue = true\n\n console.log('Checking pending queue for submissions.')\n const pendingQueueSubmissions = await getPendingQueueSubmissions()\n\n console.log(\n `Found ${pendingQueueSubmissions.length} submission(s) in the pending queue.`,\n )\n for (const pendingQueueSubmission of pendingQueueSubmissions) {\n if (isOffline()) {\n console.log(\n 'Application is offline, leaving submission in the pending queue:',\n pendingQueueSubmission,\n )\n continue\n }\n\n if (pendingQueueSubmission.isEditing) {\n console.log(\n 'submission is being edited, leaving submission in the pending queue:',\n pendingQueueSubmission,\n )\n continue\n }\n\n if (\n pendingQueueSubmission.definition.isAuthenticated &&\n !isLoggedIn() &&\n !getFormsKeyId()\n ) {\n console.log(\n 'Authentication is required for this form but the user does not have a valid token, leaving submission in the pending queue:',\n pendingQueueSubmission,\n )\n continue\n }\n\n try {\n console.log(\n 'Attempting to process submission from pending queue:',\n pendingQueueSubmission,\n )\n\n pendingQueueSubmission.isSubmitting = true\n pendingQueueSubmission.error = undefined\n await updatePendingQueueSubmission(\n pendingQueueSubmission.pendingTimestamp,\n pendingQueueSubmission,\n 'SUBMIT_STARTED',\n )\n\n const preparedSubmission = await prepareSubmissionData(\n pendingQueueSubmission,\n )\n pendingQueueSubmission.submission = {\n ...preparedSubmission,\n }\n const attachments = getSubmissionAttachmentDetails(\n pendingQueueSubmission.definition.elements,\n pendingQueueSubmission.submission,\n )\n const failedAttachments = attachments.filter(\n (attachment) => attachment.value.type === 'ERROR',\n )\n if (failedAttachments.length) {\n throw new Error(\n `Failed to upload ${failedAttachments.length} attachment${\n failedAttachments.length > 1 ? 's' : ''\n }.`,\n )\n }\n await submitWithCompletionTimestamp({\n isPendingQueueEnabled: true,\n formSubmission: pendingQueueSubmission,\n onProgress: (event) => {\n executePendingQueueProgressListeners({\n ...event,\n pendingTimestamp: pendingQueueSubmission.pendingTimestamp,\n })\n },\n shouldRunExternalIdGeneration,\n shouldRunServerValidation,\n paymentFormUrl: undefined,\n paymentReceiptUrl: undefined,\n completionTimestamp: pendingQueueSubmission.pendingTimestamp,\n })\n\n await removePendingQueueSubmission(\n pendingQueueSubmission.pendingTimestamp,\n 'SUBMIT_SUCCEEDED',\n )\n\n console.log(\n 'Successfully processed submission from the pending queue',\n pendingQueueSubmission,\n )\n } catch (error) {\n Sentry.captureException(error)\n console.error('Error processing submission from the pending queue', error)\n pendingQueueSubmission.isSubmitting = false\n if ((error as Error).message) {\n pendingQueueSubmission.error = (error as Error).message\n } else {\n pendingQueueSubmission.error =\n 'An unknown error has occurred, which has prevented your Form from submitting. Please try again, or contact your Administrator if the problem persists.'\n }\n await updatePendingQueueSubmission(\n pendingQueueSubmission.pendingTimestamp,\n pendingQueueSubmission,\n 'SUBMIT_FAILED',\n )\n }\n }\n\n console.log(\n 'Finished attempting to processing submissions in the pending queue.',\n )\n _isProcessingPendingQueue = false\n}\n\n/**\n * Submit a FormSubmission. Offline submissions will be added to a pending queue\n * and be processed using the `processPendingQueue()` function. FormSubmissions\n * with payment submission events will return the FormSubmissionResult with a\n * `payment` property set, this should be used to redirect the user to the\n * payment URL. Will also handle cleaning up auto save data (if the\n * `autoSaveKey` property is passed), locally stored drafts and prefill data.\n *\n * ### Example\n *\n * ```js\n * const formSubmission = {\n * formsAppId: 1,\n * submission: {\n * form: 'data',\n * goes: 'here',\n * },\n * definition: OneBlinkForm,\n * captchaTokens: [],\n * formSubmissionDraftId: '2974602c-2c5b-4b46-b086-87ee9b2aa233',\n * jobId: 'bb37d1da-9cda-4950-a36a-22f58b25de3a',\n * preFillFormDataId: '7763f828-4aaf-49dc-9c1b-e2eeea8fa990',\n * externalId: 'external-id-set-by-developer',\n * }\n *\n * // Pass paymentReceiptUrl if submission may require a payment\n * const paymentReceiptUrl = `${window.location.origin}/payment-receipt`\n *\n * // Pass schedulingBookingUrlConfiguration if submission utilise scheduling\n * const schedulingBookingUrlConfiguration = {\n * schedulingBookingUrl: 'https://my-website.com/booking',\n * schedulingRescheduleUrl: 'https://my-website.com/reschedule',\n * schedulingCancelUrl: 'https://my-website.com/cancel',\n * }\n * const submissionResult = await submissionService.submit({\n * formSubmission,\n * paymentReceiptUrl,\n * schedulingBookingUrlConfiguration,\n * })\n *\n * if (submissionResult.scheduling) {\n * // Redirect user to booking form\n * window.location.href = submissionResult.scheduling.bookingUrl\n * return\n * }\n *\n * if (submissionResult.payment) {\n * // Redirect user to payment form\n * window.location.href = submissionResult.payment.hostedFormUrl\n * return\n * }\n *\n * if (submissionResult.isOffline) {\n * if (submissionResult.isInPendingQueue) {\n * // Display message to user that the submission\n * // has been added to the pending queue\n * } else {\n * // Display message to user that this submission can\n * // not be processed while offline (most likely because it requires a payment)\n * }\n * return\n * }\n *\n * // submissionResult.submissionId and submissionResult.submissionTimestamp\n * // will be set if the submission was successful\n * ```\n *\n * @param params\n * @returns\n */\nasync function submit(\n params: SubmissionParams & {\n autoSaveKey?: string\n },\n): Promise<FormSubmissionResult> {\n return await submitWithCompletionTimestamp({\n ...params,\n completionTimestamp: new Date().toISOString(),\n })\n}\n\nasync function submitWithCompletionTimestamp({\n autoSaveKey,\n ...params\n}: SubmissionParams & {\n autoSaveKey?: string\n completionTimestamp: string\n}): Promise<FormSubmissionResult> {\n const formSubmissionResult = await submitForm(params)\n if (typeof autoSaveKey === 'string') {\n try {\n await deleteAutoSaveData(params.formSubmission.definition.id, autoSaveKey)\n } catch (error) {\n console.warn('Error removing auto save data: ', error)\n Sentry.captureException(error)\n }\n }\n return formSubmissionResult\n}\n\nasync function closeWindow(): Promise<void> {\n // @ts-expect-error\n if (window.cordova && window.cordova.plugins.exit) {\n // @ts-expect-error\n window.cordova.plugins.exit()\n return\n }\n\n window.close()\n\n // If the browser has not closed after timeout,\n // we throw an error to display to the user\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n console.log('Could not close as window was not opened using JavaScript')\n reject(\n new Error(\n 'We were unable to close your browser, could you please close it manually for us?',\n ),\n )\n }, 500)\n })\n}\n\n/**\n * Go back in the browser history or attempts to close the browser tab if there\n * is no history.\n *\n * ### Example\n *\n * ```js\n * try {\n * await submissionService.goBackOrCloseWindow()\n * } catch (error) {\n * // Handle error while closing browser tab.\n * // Display message to user to close it manually\n * }\n * ```\n *\n * @returns\n */\nasync function goBackOrCloseWindow(): Promise<void> {\n if (window.history.length <= 1) {\n return closeWindow()\n } else {\n window.history.back()\n }\n}\n\n/**\n * Action to cancel completing a form, currently goes back in the browser\n * history or attempts to close the browser tab if there is no history.\n *\n * ### Example\n *\n * ```js\n * const options = {\n * definition: OneBlinkForm,\n * externalId: 'external-id-set-by-developer',\n * }\n * // Only used for relative URLs\n * const pushRelativePath = (path) => {\n * window.location.href = path\n * }\n * // Only used for aboslute URLS\n * const replaceAbsolutePath = window.location.replace\n *\n * try {\n * await submissionService.executeCancelAction(options, {\n * onRedirectToRelativeUrl: pushRelativePath,\n * onRedirectToAbsoluteUrl: replaceAbsolutePath,\n * })\n * } catch (error) {\n * // Handle error while closing browser tab.\n * // Display message to user to close it manually\n * }\n * ```\n *\n * @param options\n * @param redirectConfig\n */\nasync function executeCancelAction(\n formSubmissionResultOptions: {\n definition: FormTypes.Form\n externalId: string | null\n taskCompletion?: FormSubmissionResult['taskCompletion']\n },\n {\n onRedirectToRelativeUrl,\n onRedirectToAbsoluteUrl,\n }: {\n onRedirectToRelativeUrl: (url: string) => void\n onRedirectToAbsoluteUrl: (url: string) => void\n },\n): Promise<void> {\n const formSubmissionResult: FormSubmissionResult = {\n ...formSubmissionResultOptions,\n formsAppId: NaN,\n formSubmissionDraftId: undefined,\n jobId: undefined,\n externalId: undefined,\n preFillFormDataId: null,\n recaptchas: [],\n submission: {},\n isInPendingQueue: false,\n isOffline: false,\n payment: null,\n scheduling: null,\n submissionId: null,\n submissionTimestamp: null,\n isUploadingAttachments: false,\n }\n\n let cancelAction = formSubmissionResult.definition.cancelAction\n let cancelRedirectUrl = formSubmissionResult.definition.cancelRedirectUrl\n\n if (formSubmissionResult.taskCompletion) {\n cancelAction = 'URL'\n cancelRedirectUrl = formSubmissionResult.taskCompletion.redirectUrl\n }\n\n await executeAction(formSubmissionResult, {\n action: cancelAction,\n redirectUrl: cancelRedirectUrl,\n onRedirectToRelativeUrl,\n onRedirectToAbsoluteUrl,\n })\n}\n\n/**\n * Execute the post submission action for a form after a successful form\n * submission.\n *\n * ### Example\n *\n * ```js\n * const formSubmissionResult = {\n * submissionId: '89c6e98e-f56f-45fc-84fe-c4fc62331d34',\n * submissionTimestamp: '2020-07-29T01:03:26.573Z'\n * formsAppId: 1,\n * submission: {\n * form: 'data',\n * goes: 'here'\n * },\n * definition: OneBlinkForm,\n * payment: {\n * hostedFormUrl: 'https://payment.com/transaction'\n * },\n * formSubmissionDraftId: '2974602c-2c5b-4b46-b086-87ee9b2aa233',\n * jobId: 'bb37d1da-9cda-4950-a36a-22f58b25de3a',\n * preFillFormDataId: '7763f828-4aaf-49dc-9c1b-e2eeea8fa990',\n * externalId: 'external-id-set-by-developer',\n * }\n * // Only used for relative URLs\n * const pushRelativePath = (path) => {\n * window.location.href = path\n * }\n * // Only used for aboslute URLS\n * const replaceAbsolutePath = window.location.replace\n *\n * try {\n * await submissionService.executePostSubmissionAction(formSubmissionResult, {\n * onRedirectToRelativeUrl: pushRelativePath,\n * onRedirectToAbsoluteUrl: replaceAbsolutePath,\n * })\n * } catch (error) {\n * // Handle error while closing browser tab.\n * // Display message to user to close it manually\n * }\n * ```\n *\n * @param submissionResult\n * @param redirectConfig\n */\nasync function executePostSubmissionAction(\n submissionResult: FormSubmissionResult,\n {\n onRedirectToRelativeUrl,\n onRedirectToAbsoluteUrl,\n }: {\n onRedirectToRelativeUrl: (url: string) => void\n onRedirectToAbsoluteUrl: (url: string) => void\n },\n): Promise<void> {\n console.log('Attempting to run post submission action')\n let postSubmissionAction = submissionResult.definition.postSubmissionAction\n let redirectUrl = submissionResult.definition.redirectUrl\n\n if (submissionResult.scheduling) {\n postSubmissionAction = 'URL'\n redirectUrl = submissionResult.scheduling.bookingUrl\n } else if (submissionResult.payment) {\n postSubmissionAction = 'URL'\n redirectUrl = submissionResult.payment.hostedFormUrl\n } else if (submissionResult.taskCompletion) {\n postSubmissionAction = 'URL'\n redirectUrl = submissionResult.taskCompletion.redirectUrl\n }\n\n await executeAction(submissionResult, {\n action: postSubmissionAction,\n redirectUrl,\n onRedirectToRelativeUrl,\n onRedirectToAbsoluteUrl,\n })\n}\n\nasync function executeAction(\n submissionResult: FormSubmissionResult,\n {\n action,\n redirectUrl,\n onRedirectToRelativeUrl,\n onRedirectToAbsoluteUrl,\n }: {\n action: FormTypes.FormPostSubmissionAction\n redirectUrl: string | undefined\n onRedirectToRelativeUrl: (url: string) => void\n onRedirectToAbsoluteUrl: (url: string) => void\n },\n): Promise<void> {\n switch (action) {\n case 'CLOSE':\n return closeWindow()\n case 'FORMS_LIBRARY': {\n if (window.location.pathname === '/') {\n onRedirectToAbsoluteUrl(window.location.origin)\n } else {\n onRedirectToRelativeUrl('/')\n }\n break\n }\n case 'URL': {\n const newUrl = replaceInjectablesWithSubmissionValues(\n redirectUrl || '/',\n submissionResult,\n ).text\n // Relative URLs can be navigated to internally\n if (newUrl[0] === '/') {\n onRedirectToRelativeUrl(newUrl)\n return\n }\n\n onRedirectToAbsoluteUrl(newUrl)\n\n // If we are in cordova land, we will navigate\n // back to the home screen after redirect\n if (window.cordova) {\n // Wait a couple of seconds to ensure the browser has\n // been opened before navigating away from form.\n setTimeout(() => {\n onRedirectToRelativeUrl('/')\n }, 2000)\n }\n break\n }\n case 'BACK':\n default: {\n // if there's no post submission action for some reason, use prev. logic...\n return goBackOrCloseWindow()\n }\n }\n}\n\n/**\n * Retrieve submission data for a known formId and submissionId\n *\n * #### Example\n *\n * ```js\n * const formId = 1\n * const submissionId = 'fba95b9d-5a9c-463d-ab68-867f431e4120'\n * const credentials = await formSubmissionService.getSubmissionData({\n * formId,\n * submissionId,\n * })\n * ```\n *\n * @param options\n * @param options.formId\n * @param options.submissionId\n * @param options.abortSignal\n * @param options.versionId\n * @returns\n */\nasync function getSubmissionData({\n formId,\n submissionId,\n abortSignal,\n versionId,\n}: {\n formId: number\n submissionId: string\n abortSignal?: AbortSignal\n versionId?: string\n}): Promise<{\n data: SubmissionTypes.S3SubmissionData\n versionId: string | undefined\n}> {\n return await downloadFormSubmission({\n formId,\n submissionId,\n abortSignal,\n versionId,\n })\n}\n\nexport {\n submit,\n executePostSubmissionAction,\n executeCancelAction,\n goBackOrCloseWindow,\n getPendingQueueSubmissions,\n deletePendingQueueSubmission,\n editPendingQueueSubmission,\n cancelEditingPendingQueueSubmission,\n registerPendingQueueListener,\n processPendingQueue,\n BaseFormSubmission,\n NewDraftSubmission,\n NewFormSubmission,\n DraftSubmissionInput,\n DraftSubmission,\n FormSubmission,\n FormSubmissionResult,\n PendingFormSubmission,\n SubmissionParams,\n registerPendingQueueAttachmentProgressListener,\n registerPendingQueueProgressListener,\n ProgressListener,\n ProgressListenerEvent,\n PendingQueueListener,\n PendingQueueAction,\n getSubmissionData,\n uploadFormSubmissionEdit,\n getPostSubmissionAttachments,\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oneblink/apps-react",
|
|
3
3
|
"description": "Helper functions for OneBlink apps in ReactJS.",
|
|
4
|
-
"version": "13.0.0-beta.
|
|
4
|
+
"version": "13.0.0-beta.8",
|
|
5
5
|
"author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
|
|
6
6
|
"bugs": {
|
|
7
7
|
"url": "https://github.com/oneblink/apps-react/issues"
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"@emotion/styled": "^11.14.1",
|
|
14
14
|
"@nylas/react": "^3.1.2",
|
|
15
15
|
"@oneblink/sdk-core": "^10.1.0-beta.9",
|
|
16
|
-
"@oneblink/storage": "^9.0.0-beta.
|
|
16
|
+
"@oneblink/storage": "^9.0.0-beta.3",
|
|
17
17
|
"@react-google-maps/api": "^2.20.8",
|
|
18
18
|
"@react-input/mask": "^2.0.4",
|
|
19
19
|
"@sentry/browser": "^10.38.0",
|