@oneblink/apps-react 9.0.0-beta.2 → 9.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/OneBlinkForm.d.ts +6 -6
- package/dist/OneBlinkFormBase.js +1 -0
- package/dist/OneBlinkFormBase.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/CustomAccordion.d.ts +3 -3
- package/dist/components/Lists.d.ts +4 -1
- package/dist/components/formStore/display/ElementDisplay.js +2 -2
- package/dist/components/formStore/display/ElementDisplay.js.map +1 -1
- package/dist/components/formStore/useFormStoreTableContext.d.ts +2 -2
- package/dist/components/mfa/MultiFactorAuthentication.d.ts +1 -1
- package/dist/components/renderer/LookupNotification.js +1 -1
- package/dist/components/renderer/LookupNotification.js.map +1 -1
- package/dist/form-elements/FormElementAutocomplete.js +1 -1
- package/dist/form-elements/FormElementAutocomplete.js.map +1 -1
- package/dist/hooks/attachments/useAttachment.js +1 -1
- package/dist/hooks/attachments/useAttachment.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/download-file.js +1 -1
- package/dist/services/download-file.js.map +1 -1
- package/dist/styles.css +208 -204
- package/package.json +42 -34
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
let userToken = null;
|
|
2
|
+
/**
|
|
3
|
+
* Set the User token being included in requests to the OneBlink API on behalf
|
|
4
|
+
* of the user.
|
|
5
|
+
*
|
|
6
|
+
* #### Example
|
|
7
|
+
*
|
|
8
|
+
* ```js
|
|
9
|
+
* authService.setUserToken('a value')
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export function setUserToken(token) {
|
|
13
|
+
userToken = token || null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Can be used to retrieve the `userToken` passed to `setUserToken()`. Will be
|
|
17
|
+
* `undefined` if the token has not been set yet.
|
|
18
|
+
*
|
|
19
|
+
* #### Example
|
|
20
|
+
*
|
|
21
|
+
* ```js
|
|
22
|
+
* const userToken = authService.getUserToken()
|
|
23
|
+
* if (userToken) {
|
|
24
|
+
* // Use token here...
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
export function getUserToken() {
|
|
31
|
+
return userToken;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=user-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-token.js","sourceRoot":"","sources":["../../../src/apps/services/user-token.ts"],"names":[],"mappings":"AAAA,IAAI,SAAS,GAA8B,IAAI,CAAA;AAE/C;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,KAAgC;IAC3D,SAAS,GAAG,KAAK,IAAI,IAAI,CAAA;AAC3B,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,SAAS,CAAA;AAClB,CAAC","sourcesContent":["let userToken: string | null | undefined = null\n\n/**\n * Set the User token being included in requests to the OneBlink API on behalf\n * of the user.\n *\n * #### Example\n *\n * ```js\n * authService.setUserToken('a value')\n * ```\n */\nexport function setUserToken(token: string | undefined | null): void {\n userToken = token || null\n}\n\n/**\n * Can be used to retrieve the `userToken` passed to `setUserToken()`. Will be\n * `undefined` if the token has not been set yet.\n *\n * #### Example\n *\n * ```js\n * const userToken = authService.getUserToken()\n * if (userToken) {\n * // Use token here...\n * }\n * ```\n *\n * @returns\n */\nexport function getUserToken() {\n return userToken\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare function getLocalForageKeys(keyPrefix: string): Promise<string[]>;
|
|
2
|
+
declare function getLocalForageItem<T>(key: string): Promise<T | null>;
|
|
3
|
+
declare function setLocalForageItem<T extends object>(key: string, originalData: T): Promise<T>;
|
|
4
|
+
declare function removeLocalForageItem(key: string): Promise<void>;
|
|
5
|
+
declare const _default: {
|
|
6
|
+
localForage: LocalForage;
|
|
7
|
+
getLocalForageItem: typeof getLocalForageItem;
|
|
8
|
+
setLocalForageItem: typeof setLocalForageItem;
|
|
9
|
+
removeLocalForageItem: typeof removeLocalForageItem;
|
|
10
|
+
getLocalForageKeys: typeof getLocalForageKeys;
|
|
11
|
+
};
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { createInstance } from 'localforage';
|
|
2
|
+
import _cloneDeep from 'lodash.clonedeep';
|
|
3
|
+
const localForage = createInstance({
|
|
4
|
+
name: 'OneBlinkForms',
|
|
5
|
+
storeName: 'FORMS_V1',
|
|
6
|
+
description: 'Store of forms related data',
|
|
7
|
+
});
|
|
8
|
+
async function getLocalForageKeys(keyPrefix) {
|
|
9
|
+
const keys = await localForage.keys();
|
|
10
|
+
return keys.filter((key) => key.startsWith(keyPrefix));
|
|
11
|
+
}
|
|
12
|
+
function setValuesOnData(key, items, data) {
|
|
13
|
+
if (!data) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
Object.keys(data).forEach((property) => {
|
|
17
|
+
// @ts-expect-error
|
|
18
|
+
const value = data[property];
|
|
19
|
+
if (typeof value === 'string' && value.startsWith(key)) {
|
|
20
|
+
const item = items.find((item) => item && item.key === value);
|
|
21
|
+
// If we did not find the item that is suppose to be referenced
|
|
22
|
+
// by the `key` property, we will remove the data as something has
|
|
23
|
+
// gone wrong and the data has been lost to the IndexDB gods...
|
|
24
|
+
// @ts-expect-error
|
|
25
|
+
data[property] = item === null || item === void 0 ? void 0 : item.value;
|
|
26
|
+
}
|
|
27
|
+
else if (value !== null && typeof value === 'object') {
|
|
28
|
+
setValuesOnData(key, items, value);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
return data;
|
|
32
|
+
}
|
|
33
|
+
async function getLocalForageItem(key) {
|
|
34
|
+
const localForageKeys = await getLocalForageKeys(key);
|
|
35
|
+
const items = [];
|
|
36
|
+
for (const localForageKey of localForageKeys) {
|
|
37
|
+
const item = await localForage.getItem(localForageKey);
|
|
38
|
+
items.push(item);
|
|
39
|
+
}
|
|
40
|
+
const rootItem = items.find((item) => item && item.key === key);
|
|
41
|
+
if (!rootItem || !rootItem.value) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return setValuesOnData(key, items, rootItem.value);
|
|
45
|
+
}
|
|
46
|
+
function generateKeyValuesReducer(key, data, initialKeyValues) {
|
|
47
|
+
if (data === null) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
Object.keys(data).reduce((keyValues, property) => {
|
|
51
|
+
// @ts-expect-error
|
|
52
|
+
const value = data[property];
|
|
53
|
+
if ((typeof value === 'string' && value.length > 25000) ||
|
|
54
|
+
value instanceof Blob) {
|
|
55
|
+
const newKey = `${key}_${property}`;
|
|
56
|
+
keyValues.keys.push(newKey);
|
|
57
|
+
keyValues.items.push({
|
|
58
|
+
key: newKey,
|
|
59
|
+
value,
|
|
60
|
+
});
|
|
61
|
+
// @ts-expect-error
|
|
62
|
+
data[property] = newKey;
|
|
63
|
+
}
|
|
64
|
+
else if (value !== null && typeof value === 'object') {
|
|
65
|
+
generateKeyValuesReducer(`${key}_${property}`, value, keyValues);
|
|
66
|
+
}
|
|
67
|
+
return keyValues;
|
|
68
|
+
}, initialKeyValues);
|
|
69
|
+
}
|
|
70
|
+
async function setLocalForageItem(key, originalData) {
|
|
71
|
+
const data = _cloneDeep(originalData);
|
|
72
|
+
await removeLocalForageItem(key);
|
|
73
|
+
const keyValues = {
|
|
74
|
+
keys: [key],
|
|
75
|
+
items: [{ key, value: data }],
|
|
76
|
+
};
|
|
77
|
+
generateKeyValuesReducer(key, data, keyValues);
|
|
78
|
+
for (const keyToSet of keyValues.keys) {
|
|
79
|
+
const index = keyValues.keys.findIndex((k) => k === keyToSet);
|
|
80
|
+
const item = keyValues.items[index];
|
|
81
|
+
if (item) {
|
|
82
|
+
await localForage.setItem(keyToSet, item);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return originalData;
|
|
86
|
+
}
|
|
87
|
+
async function removeLocalForageItem(key) {
|
|
88
|
+
const keysToDelete = await getLocalForageKeys(key);
|
|
89
|
+
for (const keyToDelete of keysToDelete) {
|
|
90
|
+
await localForage.removeItem(keyToDelete);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export default {
|
|
94
|
+
localForage,
|
|
95
|
+
getLocalForageItem,
|
|
96
|
+
setLocalForageItem,
|
|
97
|
+
removeLocalForageItem,
|
|
98
|
+
getLocalForageKeys,
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/apps/services/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { createInstance } from 'localforage'\nimport _cloneDeep from 'lodash.clonedeep'\n\nconst localForage = createInstance({\n name: 'OneBlinkForms',\n storeName: 'FORMS_V1',\n description: 'Store of forms related data',\n})\n\nasync function getLocalForageKeys(keyPrefix: string): Promise<string[]> {\n const keys = await localForage.keys()\n return keys.filter((key) => key.startsWith(keyPrefix))\n}\n\nfunction setValuesOnData<T>(\n key: string,\n items: Array<\n | {\n key: string\n value: unknown\n }\n | undefined\n | null\n >,\n data?: T,\n) {\n if (!data) {\n return null\n }\n Object.keys(data).forEach((property) => {\n // @ts-expect-error\n const value = data[property]\n\n if (typeof value === 'string' && value.startsWith(key)) {\n const item = items.find((item) => item && item.key === value)\n // If we did not find the item that is suppose to be referenced\n // by the `key` property, we will remove the data as something has\n // gone wrong and the data has been lost to the IndexDB gods...\n // @ts-expect-error\n data[property] = item?.value\n } else if (value !== null && typeof value === 'object') {\n setValuesOnData(key, items, value)\n }\n })\n return data\n}\n\nasync function getLocalForageItem<T>(key: string): Promise<T | null> {\n const localForageKeys = await getLocalForageKeys(key)\n\n const items = []\n for (const localForageKey of localForageKeys) {\n const item = await localForage.getItem<{\n key: string\n value: unknown\n }>(localForageKey)\n items.push(item)\n }\n const rootItem = items.find((item) => item && item.key === key)\n if (!rootItem || !rootItem.value) {\n return null\n }\n return setValuesOnData(key, items, rootItem.value as T)\n}\n\nfunction generateKeyValuesReducer(\n key: string,\n data: object,\n initialKeyValues: {\n keys: string[]\n items: Array<{\n key: string\n value: unknown\n }>\n },\n) {\n if (data === null) {\n return\n }\n Object.keys(data).reduce((keyValues, property) => {\n // @ts-expect-error\n const value = data[property]\n\n if (\n (typeof value === 'string' && value.length > 25000) ||\n value instanceof Blob\n ) {\n const newKey = `${key}_${property}`\n keyValues.keys.push(newKey)\n keyValues.items.push({\n key: newKey,\n value,\n })\n // @ts-expect-error\n data[property] = newKey\n } else if (value !== null && typeof value === 'object') {\n generateKeyValuesReducer(`${key}_${property}`, value, keyValues)\n }\n return keyValues\n }, initialKeyValues)\n}\n\nasync function setLocalForageItem<T extends object>(\n key: string,\n originalData: T,\n): Promise<T> {\n const data: T = _cloneDeep(originalData)\n await removeLocalForageItem(key)\n const keyValues = {\n keys: [key],\n items: [{ key, value: data }],\n }\n generateKeyValuesReducer(key, data, keyValues)\n for (const keyToSet of keyValues.keys) {\n const index = keyValues.keys.findIndex((k) => k === keyToSet)\n const item = keyValues.items[index]\n if (item) {\n await localForage.setItem(keyToSet, item)\n }\n }\n return originalData\n}\n\nasync function removeLocalForageItem(key: string): Promise<void> {\n const keysToDelete = await getLocalForageKeys(key)\n for (const keyToDelete of keysToDelete) {\n await localForage.removeItem(keyToDelete)\n }\n}\n\nexport default {\n localForage,\n getLocalForageItem,\n setLocalForageItem,\n removeLocalForageItem,\n getLocalForageKeys,\n}\n"]}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { registerPendingQueueListener, getPendingQueueSubmissions, cancelEditingPendingQueueSubmission, deletePendingQueueSubmission, editPendingQueueSubmission, registerPendingQueueAttachmentProgressListener, registerPendingQueueProgressListener, PendingQueueListener, PendingQueueAction } from './services/pending-queue';
|
|
2
|
+
import { FormTypes, SubmissionTypes } from '@oneblink/types';
|
|
3
|
+
import { SubmissionParams, ProgressListener, ProgressListenerEvent } from './services/submit';
|
|
4
|
+
import { PendingFormSubmission, FormSubmission, FormSubmissionResult, BaseFormSubmission, NewDraftSubmission, NewFormSubmission, DraftSubmission, DraftSubmissionInput } from './types/submissions';
|
|
5
|
+
import getPostSubmissionAttachments from './services/api/post-submission-attachment-urls';
|
|
6
|
+
/**
|
|
7
|
+
* Force processing the pending queue. This must be called to process the
|
|
8
|
+
* pending queue and is best used when the application comes back online.
|
|
9
|
+
*
|
|
10
|
+
* ### Example
|
|
11
|
+
*
|
|
12
|
+
* ```js
|
|
13
|
+
* await submissionService.processPendingQueue()
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
declare function processPendingQueue({ shouldRunExternalIdGeneration, shouldRunServerValidation, }: {
|
|
19
|
+
shouldRunExternalIdGeneration: boolean;
|
|
20
|
+
shouldRunServerValidation: boolean;
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Submit a FormSubmission. Offline submissions will be added to a pending queue
|
|
24
|
+
* and be processed using the `processPendingQueue()` function. FormSubmissions
|
|
25
|
+
* with payment submission events will return the FormSubmissionResult with a
|
|
26
|
+
* `payment` property set, this should be used to redirect the user to the
|
|
27
|
+
* payment URL. Will also handle cleaning up auto save data (if the
|
|
28
|
+
* `autoSaveKey` property is passed), locally stored drafts and prefill data.
|
|
29
|
+
*
|
|
30
|
+
* ### Example
|
|
31
|
+
*
|
|
32
|
+
* ```js
|
|
33
|
+
* const formSubmission = {
|
|
34
|
+
* formsAppId: 1,
|
|
35
|
+
* submission: {
|
|
36
|
+
* form: 'data',
|
|
37
|
+
* goes: 'here',
|
|
38
|
+
* },
|
|
39
|
+
* definition: OneBlinkForm,
|
|
40
|
+
* captchaTokens: [],
|
|
41
|
+
* formSubmissionDraftId: '2974602c-2c5b-4b46-b086-87ee9b2aa233',
|
|
42
|
+
* jobId: 'bb37d1da-9cda-4950-a36a-22f58b25de3a',
|
|
43
|
+
* preFillFormDataId: '7763f828-4aaf-49dc-9c1b-e2eeea8fa990',
|
|
44
|
+
* externalId: 'external-id-set-by-developer',
|
|
45
|
+
* }
|
|
46
|
+
*
|
|
47
|
+
* // Pass paymentReceiptUrl if submission may require a payment
|
|
48
|
+
* const paymentReceiptUrl = `${window.location.origin}/payment-receipt`
|
|
49
|
+
*
|
|
50
|
+
* // Pass schedulingBookingUrlConfiguration if submission utilise scheduling
|
|
51
|
+
* const schedulingBookingUrlConfiguration = {
|
|
52
|
+
* schedulingBookingUrl: 'https://my-website.com/booking',
|
|
53
|
+
* schedulingRescheduleUrl: 'https://my-website.com/reschedule',
|
|
54
|
+
* schedulingCancelUrl: 'https://my-website.com/cancel',
|
|
55
|
+
* }
|
|
56
|
+
* const submissionResult = await submissionService.submit({
|
|
57
|
+
* formSubmission,
|
|
58
|
+
* paymentReceiptUrl,
|
|
59
|
+
* schedulingBookingUrlConfiguration,
|
|
60
|
+
* })
|
|
61
|
+
*
|
|
62
|
+
* if (submissionResult.scheduling) {
|
|
63
|
+
* // Redirect user to booking form
|
|
64
|
+
* window.location.href = submissionResult.scheduling.bookingUrl
|
|
65
|
+
* return
|
|
66
|
+
* }
|
|
67
|
+
*
|
|
68
|
+
* if (submissionResult.payment) {
|
|
69
|
+
* // Redirect user to payment form
|
|
70
|
+
* window.location.href = submissionResult.payment.hostedFormUrl
|
|
71
|
+
* return
|
|
72
|
+
* }
|
|
73
|
+
*
|
|
74
|
+
* if (submissionResult.isOffline) {
|
|
75
|
+
* if (submissionResult.isInPendingQueue) {
|
|
76
|
+
* // Display message to user that the submission
|
|
77
|
+
* // has been added to the pending queue
|
|
78
|
+
* } else {
|
|
79
|
+
* // Display message to user that this submission can
|
|
80
|
+
* // not be processed while offline (most likely because it requires a payment)
|
|
81
|
+
* }
|
|
82
|
+
* return
|
|
83
|
+
* }
|
|
84
|
+
*
|
|
85
|
+
* // submissionResult.submissionId and submissionResult.submissionTimestamp
|
|
86
|
+
* // will be set if the submission was successful
|
|
87
|
+
* ```
|
|
88
|
+
*
|
|
89
|
+
* @param params
|
|
90
|
+
* @returns
|
|
91
|
+
*/
|
|
92
|
+
declare function submit(params: SubmissionParams & {
|
|
93
|
+
autoSaveKey?: string;
|
|
94
|
+
}): Promise<FormSubmissionResult>;
|
|
95
|
+
/**
|
|
96
|
+
* Go back in the browser history or attempts to close the browser tab if there
|
|
97
|
+
* is no history.
|
|
98
|
+
*
|
|
99
|
+
* ### Example
|
|
100
|
+
*
|
|
101
|
+
* ```js
|
|
102
|
+
* try {
|
|
103
|
+
* await submissionService.goBackOrCloseWindow()
|
|
104
|
+
* } catch (error) {
|
|
105
|
+
* // Handle error while closing browser tab.
|
|
106
|
+
* // Display message to user to close it manually
|
|
107
|
+
* }
|
|
108
|
+
* ```
|
|
109
|
+
*
|
|
110
|
+
* @returns
|
|
111
|
+
*/
|
|
112
|
+
declare function goBackOrCloseWindow(): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* Action to cancel completing a form, currently goes back in the browser
|
|
115
|
+
* history or attempts to close the browser tab if there is no history.
|
|
116
|
+
*
|
|
117
|
+
* ### Example
|
|
118
|
+
*
|
|
119
|
+
* ```js
|
|
120
|
+
* const options = {
|
|
121
|
+
* definition: OneBlinkForm,
|
|
122
|
+
* externalId: 'external-id-set-by-developer',
|
|
123
|
+
* }
|
|
124
|
+
* // Only used for relative URLs
|
|
125
|
+
* const pushRelativePath = (path) => {
|
|
126
|
+
* window.location.href = path
|
|
127
|
+
* }
|
|
128
|
+
* // Only used for aboslute URLS
|
|
129
|
+
* const replaceAbsolutePath = window.location.replace
|
|
130
|
+
*
|
|
131
|
+
* try {
|
|
132
|
+
* await submissionService.executeCancelAction(options, {
|
|
133
|
+
* onRedirectToRelativeUrl: pushRelativePath,
|
|
134
|
+
* onRedirectToAbsoluteUrl: replaceAbsolutePath,
|
|
135
|
+
* })
|
|
136
|
+
* } catch (error) {
|
|
137
|
+
* // Handle error while closing browser tab.
|
|
138
|
+
* // Display message to user to close it manually
|
|
139
|
+
* }
|
|
140
|
+
* ```
|
|
141
|
+
*
|
|
142
|
+
* @param options
|
|
143
|
+
* @param redirectConfig
|
|
144
|
+
*/
|
|
145
|
+
declare function executeCancelAction(formSubmissionResultOptions: {
|
|
146
|
+
definition: FormTypes.Form;
|
|
147
|
+
externalId: string | null;
|
|
148
|
+
taskCompletion?: FormSubmissionResult['taskCompletion'];
|
|
149
|
+
}, { onRedirectToRelativeUrl, onRedirectToAbsoluteUrl, }: {
|
|
150
|
+
onRedirectToRelativeUrl: (url: string) => void;
|
|
151
|
+
onRedirectToAbsoluteUrl: (url: string) => void;
|
|
152
|
+
}): Promise<void>;
|
|
153
|
+
/**
|
|
154
|
+
* Execute the post submission action for a form after a successful form
|
|
155
|
+
* submission.
|
|
156
|
+
*
|
|
157
|
+
* ### Example
|
|
158
|
+
*
|
|
159
|
+
* ```js
|
|
160
|
+
* const formSubmissionResult = {
|
|
161
|
+
* submissionId: '89c6e98e-f56f-45fc-84fe-c4fc62331d34',
|
|
162
|
+
* submissionTimestamp: '2020-07-29T01:03:26.573Z'
|
|
163
|
+
* formsAppId: 1,
|
|
164
|
+
* submission: {
|
|
165
|
+
* form: 'data',
|
|
166
|
+
* goes: 'here'
|
|
167
|
+
* },
|
|
168
|
+
* definition: OneBlinkForm,
|
|
169
|
+
* payment: {
|
|
170
|
+
* hostedFormUrl: 'https://payment.com/transaction'
|
|
171
|
+
* },
|
|
172
|
+
* formSubmissionDraftId: '2974602c-2c5b-4b46-b086-87ee9b2aa233',
|
|
173
|
+
* jobId: 'bb37d1da-9cda-4950-a36a-22f58b25de3a',
|
|
174
|
+
* preFillFormDataId: '7763f828-4aaf-49dc-9c1b-e2eeea8fa990',
|
|
175
|
+
* externalId: 'external-id-set-by-developer',
|
|
176
|
+
* }
|
|
177
|
+
* // Only used for relative URLs
|
|
178
|
+
* const pushRelativePath = (path) => {
|
|
179
|
+
* window.location.href = path
|
|
180
|
+
* }
|
|
181
|
+
* // Only used for aboslute URLS
|
|
182
|
+
* const replaceAbsolutePath = window.location.replace
|
|
183
|
+
*
|
|
184
|
+
* try {
|
|
185
|
+
* await submissionService.executePostSubmissionAction(formSubmissionResult, {
|
|
186
|
+
* onRedirectToRelativeUrl: pushRelativePath,
|
|
187
|
+
* onRedirectToAbsoluteUrl: replaceAbsolutePath,
|
|
188
|
+
* })
|
|
189
|
+
* } catch (error) {
|
|
190
|
+
* // Handle error while closing browser tab.
|
|
191
|
+
* // Display message to user to close it manually
|
|
192
|
+
* }
|
|
193
|
+
* ```
|
|
194
|
+
*
|
|
195
|
+
* @param submissionResult
|
|
196
|
+
* @param redirectConfig
|
|
197
|
+
*/
|
|
198
|
+
declare function executePostSubmissionAction(submissionResult: FormSubmissionResult, { onRedirectToRelativeUrl, onRedirectToAbsoluteUrl, }: {
|
|
199
|
+
onRedirectToRelativeUrl: (url: string) => void;
|
|
200
|
+
onRedirectToAbsoluteUrl: (url: string) => void;
|
|
201
|
+
}): Promise<void>;
|
|
202
|
+
/**
|
|
203
|
+
* Retrieve submission data for a known formId and submissionId
|
|
204
|
+
*
|
|
205
|
+
* #### Example
|
|
206
|
+
*
|
|
207
|
+
* ```js
|
|
208
|
+
* const formId = 1
|
|
209
|
+
* const submissionId = 'fba95b9d-5a9c-463d-ab68-867f431e4120'
|
|
210
|
+
* const credentials = await formSubmissionService.getSubmissionData({
|
|
211
|
+
* formId,
|
|
212
|
+
* submissionId,
|
|
213
|
+
* })
|
|
214
|
+
* ```
|
|
215
|
+
*
|
|
216
|
+
* @param formId
|
|
217
|
+
* @param submissionId
|
|
218
|
+
* @param abortSignal
|
|
219
|
+
* @returns
|
|
220
|
+
*/
|
|
221
|
+
declare function getSubmissionData({ formId, submissionId, abortSignal, }: {
|
|
222
|
+
formId: number;
|
|
223
|
+
submissionId: string;
|
|
224
|
+
abortSignal?: AbortSignal;
|
|
225
|
+
}): Promise<SubmissionTypes.S3SubmissionData>;
|
|
226
|
+
export { submit, executePostSubmissionAction, executeCancelAction, goBackOrCloseWindow, getPendingQueueSubmissions, deletePendingQueueSubmission, editPendingQueueSubmission, cancelEditingPendingQueueSubmission, registerPendingQueueListener, processPendingQueue, BaseFormSubmission, NewDraftSubmission, NewFormSubmission, DraftSubmissionInput, DraftSubmission, FormSubmission, FormSubmissionResult, PendingFormSubmission, SubmissionParams, registerPendingQueueAttachmentProgressListener, registerPendingQueueProgressListener, ProgressListener, ProgressListenerEvent, PendingQueueListener, PendingQueueAction, getSubmissionData, getPostSubmissionAttachments, };
|