@oneblink/sdk-core 5.2.0-beta.1 → 5.2.0
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.
|
@@ -105,7 +105,7 @@ const ELEMENT_VALUES = [
|
|
|
105
105
|
* @returns
|
|
106
106
|
*/
|
|
107
107
|
function getElementSubmissionValue({ propertyName, submission, formElements, formatDate, formatDateTime, formatTime, formatNumber, formatCurrency, }) {
|
|
108
|
-
var _a, _b, _c, _d;
|
|
108
|
+
var _a, _b, _c, _d, _e;
|
|
109
109
|
const formElement = (0, formElementsService_1.findFormElement)(formElements, (element) => element.type !== 'page' &&
|
|
110
110
|
element.type !== 'section' &&
|
|
111
111
|
element.name === propertyName);
|
|
@@ -208,7 +208,7 @@ function getElementSubmissionValue({ propertyName, submission, formElements, for
|
|
|
208
208
|
}
|
|
209
209
|
case 'apiNSWLiquorLicence': {
|
|
210
210
|
const value = unknown;
|
|
211
|
-
return (_d = value === null || value === void 0 ? void 0 : value.licenceDetail) === null || _d === void 0 ? void 0 : _d.licenceNumber;
|
|
211
|
+
return `${(_d = value === null || value === void 0 ? void 0 : value.licenceDetail) === null || _d === void 0 ? void 0 : _d.licenceNumber} | ${(_e = value === null || value === void 0 ? void 0 : value.licenceDetail) === null || _e === void 0 ? void 0 : _e.licenceName}`.trim();
|
|
212
212
|
}
|
|
213
213
|
default: {
|
|
214
214
|
return unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replaceCustomValues.js","sourceRoot":"","sources":["../src/replaceCustomValues.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n APINSWTypes,\n CivicaTypes,\n FormTypes,\n GeoscapeTypes,\n MiscTypes,\n PointTypes,\n ScheduledTasksTypes,\n SubmissionTypes,\n} from '@oneblink/types'\nimport {\n findFormElement,\n matchElementsTagRegex,\n ElementWYSIWYGRegex,\n} from './formElementsService'\nimport { getABNNumberFromABNRecord } from './abnService'\n\nexport type ReplaceInjectablesFormatters = {\n formatDateTime: (value: string) => string\n formatDate: (value: string) => string\n formatTime: (value: string) => string\n formatNumber: (value: number) => string\n formatCurrency: (value: number) => string\n}\n\nexport type ReplaceInjectablesBaseOptions = ReplaceInjectablesFormatters & {\n submission: SubmissionTypes.S3SubmissionData['submission']\n userProfile: MiscTypes.UserProfile | undefined\n task: ScheduledTasksTypes.Task | undefined\n taskGroup: ScheduledTasksTypes.TaskGroup | undefined\n taskGroupInstance: ScheduledTasksTypes.TaskGroupInstance | undefined\n}\n\nexport type ReplaceInjectablesOptions = ReplaceInjectablesBaseOptions & {\n form: FormTypes.Form\n submissionId: string\n submissionTimestamp: string\n externalId: string | undefined\n previousApprovalId: string | undefined\n}\n\nconst SUBMISSION_VALUES = [\n {\n string: '{INFO_PAGE_ID}',\n value: ({ form }: ReplaceInjectablesOptions) => form.id.toString(),\n },\n {\n string: '{INFO_PAGE_NAME}',\n value: ({ form }: ReplaceInjectablesOptions) => form.name,\n },\n {\n string: '{FORM_ID}',\n value: ({ form }: ReplaceInjectablesOptions) => form.id.toString(),\n },\n {\n string: '{FORM_NAME}',\n value: ({ form }: ReplaceInjectablesOptions) => form.name,\n },\n {\n string: '{DATE}',\n value: ({\n submissionTimestamp,\n formatDateTime,\n }: ReplaceInjectablesOptions) => {\n if (!submissionTimestamp) {\n return ''\n }\n return formatDateTime(submissionTimestamp)\n },\n },\n {\n string: '{TIMESTAMP}',\n value: ({ submissionTimestamp }: ReplaceInjectablesOptions) =>\n submissionTimestamp || '',\n },\n {\n string: '{SUBMISSION_ID}',\n value: ({ submissionId }: ReplaceInjectablesOptions) => submissionId || '',\n },\n {\n string: '{EXTERNAL_ID}',\n value: ({ externalId }: ReplaceInjectablesOptions) => externalId || '',\n },\n {\n string: '{PREVIOUS_APPROVAL_ID}',\n value: ({ previousApprovalId }: ReplaceInjectablesOptions) =>\n previousApprovalId || '',\n },\n]\n\nconst ELEMENT_VALUES: Array<{\n string: string\n value: (options: ReplaceInjectablesBaseOptions) => string\n}> = [\n {\n string: '{USER:email}',\n value: ({ userProfile }) => userProfile?.email || '',\n },\n {\n string: '{USER:username}',\n value: ({ userProfile }) => userProfile?.username || '',\n },\n {\n string: '{TASK_NAME}',\n value: ({ task }) => task?.name || '',\n },\n {\n string: '{TASK_GROUP_NAME}',\n value: ({ taskGroup }) => taskGroup?.name || '',\n },\n {\n string: '{TASK_GROUP_INSTANCE_LABEL}',\n value: ({ taskGroupInstance }) => taskGroupInstance?.label || '',\n },\n]\n\n/**\n * Function to get the display value of a property in submission\n *\n * #### Example\n *\n * ```typescript\n * const result = submissionService.getElementSubmissionValue({\n * propertyName: 'search',\n * submission: {\n * search: 'Entered By User',\n * },\n * formElements: [\n * {\n * id: 'd4135b47-9004-4d75-aeb3-d2f6232da111',\n * name: 'search',\n * type: 'text',\n * label: 'Search',\n * readOnly: false,\n * required: false,\n * conditionallyShow: false,\n * requiresAllConditionallyShowPredicates: false,\n * isElementLookup: false,\n * isDataLookup: false,\n * },\n * ],\n * formatDate: (value) => new Date(value).toDateString(),\n * formatDateTime: (value) => new Date(value).toString(),\n * formatTime: (value) => new Date(value).toTimeString(),\n * formatNumber: (value) => Number(value).toString(),\n * formatCurrency: (value) => Number(value).toFixed(2),\n * })\n * ```\n *\n * @param options\n * @returns\n */\nexport function getElementSubmissionValue({\n propertyName,\n submission,\n formElements,\n formatDate,\n formatDateTime,\n formatTime,\n formatNumber,\n formatCurrency,\n}: {\n propertyName: string\n formElements: FormTypes.FormElement[]\n submission: SubmissionTypes.S3SubmissionData['submission']\n} & ReplaceInjectablesFormatters): unknown {\n const formElement = findFormElement(\n formElements,\n (element) =>\n element.type !== 'page' &&\n element.type !== 'section' &&\n element.name === propertyName,\n )\n\n const unknown = submission[propertyName]\n if (unknown === undefined || unknown === null) {\n return undefined\n }\n\n switch (formElement?.type) {\n case 'datetime': {\n const value = unknown as string\n return formatDateTime(value)\n }\n case 'date': {\n const value = unknown as string\n return formatDate(value)\n }\n case 'time': {\n const value = unknown as string\n return formatTime(value)\n }\n case 'radio':\n case 'autocomplete': {\n const value = unknown as string\n const option = formElement.options?.find((opt) => opt.value === value)\n return option?.label || value\n }\n\n case 'checkboxes': {\n const value = unknown as string[]\n const selectedOptionLabels: string[] = value.reduce(\n (labels: string[], selectedOption: string) => {\n const foundOption = formElement.options?.find(\n (o) => o.value === selectedOption,\n )\n if (foundOption) labels.push(foundOption.label)\n return labels\n },\n [],\n )\n return selectedOptionLabels.length ? selectedOptionLabels : undefined\n }\n case 'compliance': {\n const value = unknown as {\n value?: string\n }\n const option = (formElement.options || []).find(\n (option: FormTypes.ChoiceElementOption) => option.value === value.value,\n )\n return {\n ...value,\n value: option?.label || value.value,\n }\n }\n case 'select': {\n if (formElement.multi) {\n const value = unknown as string[]\n const selectedOptionLabels: string[] = value.reduce(\n (labels: string[], selectedOption: string) => {\n const foundOption = formElement.options?.find(\n (o) => o.value === selectedOption,\n )\n if (foundOption) labels.push(foundOption.label)\n return labels\n },\n [],\n )\n return selectedOptionLabels.length ? selectedOptionLabels : undefined\n } else {\n const value = unknown as string\n const option = formElement.options?.find((opt) => opt.value === value)\n return option?.label || ''\n }\n }\n case 'boolean': {\n const value = unknown as boolean\n return value ? 'Yes' : 'No'\n }\n case 'calculation': {\n const value = unknown as number\n if (!Number.isNaN(value) && Number.isFinite(value)) {\n let text\n if (formElement.displayAsCurrency) {\n text = formatCurrency(value)\n } else {\n text = formatNumber(value)\n }\n return text\n }\n return undefined\n }\n case 'pointAddress':\n case 'geoscapeAddress': {\n const value = unknown as\n | PointTypes.PointAddress\n | GeoscapeTypes.GeoscapeAddress\n return value?.addressDetails?.formattedAddress || value?.addressId\n }\n case 'civicaStreetName': {\n const value = unknown as CivicaTypes.CivicaStreetName\n return value?.formattedStreet\n }\n case 'civicaNameRecord': {\n const value = unknown as CivicaTypes.CivicaNameRecord\n return (\n [value?.title, value?.givenName1, value?.familyName]\n .filter((t) => t)\n .join(' ') || value?.emailAddress\n )\n }\n case 'abn': {\n const value = unknown as MiscTypes.ABNRecord\n return value ? getABNNumberFromABNRecord(value) : undefined\n }\n case 'apiNSWLiquorLicence': {\n const value = unknown as APINSWTypes.LiquorLicenceDetails | undefined\n return value?.licenceDetail?.licenceNumber\n }\n default: {\n return unknown\n }\n }\n}\n\n/**\n * Replace the `{ELEMENT:<elementName>}` values in text while a form is being\n * filled out. The replacements are suppose to be user friendly and for display\n * purposes, e.g. dates should be displayed in the user's desired format and\n * timezone.\n *\n * #### Example\n *\n * ```js\n * const result = submissionService.replaceInjectablesWithElementValues(\n * 'https://example.com/path?search{ELEMENT:search}',\n * {\n * formatDate: (value) => new Date(value).toDateString(),\n * formatDateTime: (value) => new Date(value).toString(),\n * formatTime: (value) => new Date(value).toTimeString(),\n * formatNumber: (value) => Number(value).toString(),\n * formatCurrency: (value) => Number(value).toFixed(2),\n * submission: {\n * search: 'Entered By User',\n * },\n * elements: [\n * {\n * id: 'd4135b47-9004-4d75-aeb3-d2f6232da111',\n * name: 'search',\n * type: 'text',\n * label: 'Search',\n * readOnly: false,\n * required: false,\n * conditionallyShow: false,\n * requiresAllConditionallyShowPredicates: false,\n * isElementLookup: false,\n * isDataLookup: false,\n * },\n * ],\n * userProfile: {\n * userId: 'abc123',\n * username: 'john-user',\n * email: 'john.user@domain.com',\n * },\n * },\n * )\n * ```\n *\n * @param text\n * @param options\n * @returns\n */\nexport function replaceInjectablesWithElementValues(\n text: string,\n options: {\n formElements: FormTypes.FormElement[]\n } & ReplaceInjectablesBaseOptions,\n): string {\n text = ELEMENT_VALUES.reduce((newString, customValue) => {\n return newString.replaceAll(customValue.string, customValue.value(options))\n }, text)\n\n const matchesElement = text.match(ElementWYSIWYGRegex)\n if (!matchesElement) {\n return text\n }\n\n matchElementsTagRegex(text, ({ elementName, elementMatch }) => {\n const value = getElementSubmissionValue({\n propertyName: elementName,\n ...options,\n })\n\n text = text.replace(\n elementMatch,\n value === undefined ? '' : (value as string),\n )\n })\n\n return text\n}\n\n/**\n * Replace the `{ELEMENT:<elementName>}` values in text after a successful form\n * submission as well as other replaceable parameters e.g. `submissionId`. The\n * replacements are suppose to be user friendly and for display purposes, e.g.\n * dates should be displayed in the user's desired format and timezone.\n *\n * #### Example\n *\n * ```js\n * const result = submissionService.replaceInjectablesWithSubmissionValues(\n * 'https://example.com/path?submissionId={SUBMISSION_ID}&externalId={EXTERNAL_ID}&search{ELEMENT:search}',\n * {\n * submissionId: 'abc-123',\n * submissionTimestamp: '2021-07-02T02:19:13.670Z',\n * formatDate: (value) => new Date(value).toDateString(),\n * formatDateTime: (value) => new Date(value).toString(),\n * formatTime: (value) => new Date(value).toTimeString(),\n * submission: {\n * search: 'Entered By User',\n * },\n * form: {\n * id: 1,\n * name: 'Form',\n * organisationId: '',\n * formsAppEnvironmentId: 1,\n * formsAppIds: [],\n * isAuthenticated: false,\n * isMultiPage: false,\n * isInfoPage: false,\n * postSubmissionAction: 'FORMS_LIBRARY',\n * cancelAction: 'FORMS_LIBRARY',\n * submissionEvents: [],\n * tags: [],\n * elements: [\n * {\n * id: 'd4135b47-9004-4d75-aeb3-d2f6232da111',\n * name: 'search',\n * type: 'text',\n * label: 'Search',\n * readOnly: false,\n * required: false,\n * conditionallyShow: false,\n * requiresAllConditionallyShowPredicates: false,\n * isElementLookup: false,\n * isDataLookup: false,\n * },\n * ],\n * },\n * },\n * )\n * ```\n *\n * @param text\n * @param options\n * @returns\n */\nexport function replaceInjectablesWithSubmissionValues(\n text: string,\n options: ReplaceInjectablesOptions,\n): string {\n const string = replaceInjectablesWithElementValues(text, {\n formElements: options.form.elements,\n ...options,\n })\n return SUBMISSION_VALUES.reduce((newString, customValue) => {\n return newString.replaceAll(customValue.string, customValue.value(options))\n }, string)\n}\n"]}
|
|
1
|
+
{"version":3,"file":"replaceCustomValues.js","sourceRoot":"","sources":["../src/replaceCustomValues.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n APINSWTypes,\n CivicaTypes,\n FormTypes,\n GeoscapeTypes,\n MiscTypes,\n PointTypes,\n ScheduledTasksTypes,\n SubmissionTypes,\n} from '@oneblink/types'\nimport {\n findFormElement,\n matchElementsTagRegex,\n ElementWYSIWYGRegex,\n} from './formElementsService'\nimport { getABNNumberFromABNRecord } from './abnService'\n\nexport type ReplaceInjectablesFormatters = {\n formatDateTime: (value: string) => string\n formatDate: (value: string) => string\n formatTime: (value: string) => string\n formatNumber: (value: number) => string\n formatCurrency: (value: number) => string\n}\n\nexport type ReplaceInjectablesBaseOptions = ReplaceInjectablesFormatters & {\n submission: SubmissionTypes.S3SubmissionData['submission']\n userProfile: MiscTypes.UserProfile | undefined\n task: ScheduledTasksTypes.Task | undefined\n taskGroup: ScheduledTasksTypes.TaskGroup | undefined\n taskGroupInstance: ScheduledTasksTypes.TaskGroupInstance | undefined\n}\n\nexport type ReplaceInjectablesOptions = ReplaceInjectablesBaseOptions & {\n form: FormTypes.Form\n submissionId: string\n submissionTimestamp: string\n externalId: string | undefined\n previousApprovalId: string | undefined\n}\n\nconst SUBMISSION_VALUES = [\n {\n string: '{INFO_PAGE_ID}',\n value: ({ form }: ReplaceInjectablesOptions) => form.id.toString(),\n },\n {\n string: '{INFO_PAGE_NAME}',\n value: ({ form }: ReplaceInjectablesOptions) => form.name,\n },\n {\n string: '{FORM_ID}',\n value: ({ form }: ReplaceInjectablesOptions) => form.id.toString(),\n },\n {\n string: '{FORM_NAME}',\n value: ({ form }: ReplaceInjectablesOptions) => form.name,\n },\n {\n string: '{DATE}',\n value: ({\n submissionTimestamp,\n formatDateTime,\n }: ReplaceInjectablesOptions) => {\n if (!submissionTimestamp) {\n return ''\n }\n return formatDateTime(submissionTimestamp)\n },\n },\n {\n string: '{TIMESTAMP}',\n value: ({ submissionTimestamp }: ReplaceInjectablesOptions) =>\n submissionTimestamp || '',\n },\n {\n string: '{SUBMISSION_ID}',\n value: ({ submissionId }: ReplaceInjectablesOptions) => submissionId || '',\n },\n {\n string: '{EXTERNAL_ID}',\n value: ({ externalId }: ReplaceInjectablesOptions) => externalId || '',\n },\n {\n string: '{PREVIOUS_APPROVAL_ID}',\n value: ({ previousApprovalId }: ReplaceInjectablesOptions) =>\n previousApprovalId || '',\n },\n]\n\nconst ELEMENT_VALUES: Array<{\n string: string\n value: (options: ReplaceInjectablesBaseOptions) => string\n}> = [\n {\n string: '{USER:email}',\n value: ({ userProfile }) => userProfile?.email || '',\n },\n {\n string: '{USER:username}',\n value: ({ userProfile }) => userProfile?.username || '',\n },\n {\n string: '{TASK_NAME}',\n value: ({ task }) => task?.name || '',\n },\n {\n string: '{TASK_GROUP_NAME}',\n value: ({ taskGroup }) => taskGroup?.name || '',\n },\n {\n string: '{TASK_GROUP_INSTANCE_LABEL}',\n value: ({ taskGroupInstance }) => taskGroupInstance?.label || '',\n },\n]\n\n/**\n * Function to get the display value of a property in submission\n *\n * #### Example\n *\n * ```typescript\n * const result = submissionService.getElementSubmissionValue({\n * propertyName: 'search',\n * submission: {\n * search: 'Entered By User',\n * },\n * formElements: [\n * {\n * id: 'd4135b47-9004-4d75-aeb3-d2f6232da111',\n * name: 'search',\n * type: 'text',\n * label: 'Search',\n * readOnly: false,\n * required: false,\n * conditionallyShow: false,\n * requiresAllConditionallyShowPredicates: false,\n * isElementLookup: false,\n * isDataLookup: false,\n * },\n * ],\n * formatDate: (value) => new Date(value).toDateString(),\n * formatDateTime: (value) => new Date(value).toString(),\n * formatTime: (value) => new Date(value).toTimeString(),\n * formatNumber: (value) => Number(value).toString(),\n * formatCurrency: (value) => Number(value).toFixed(2),\n * })\n * ```\n *\n * @param options\n * @returns\n */\nexport function getElementSubmissionValue({\n propertyName,\n submission,\n formElements,\n formatDate,\n formatDateTime,\n formatTime,\n formatNumber,\n formatCurrency,\n}: {\n propertyName: string\n formElements: FormTypes.FormElement[]\n submission: SubmissionTypes.S3SubmissionData['submission']\n} & ReplaceInjectablesFormatters): unknown {\n const formElement = findFormElement(\n formElements,\n (element) =>\n element.type !== 'page' &&\n element.type !== 'section' &&\n element.name === propertyName,\n )\n\n const unknown = submission[propertyName]\n if (unknown === undefined || unknown === null) {\n return undefined\n }\n\n switch (formElement?.type) {\n case 'datetime': {\n const value = unknown as string\n return formatDateTime(value)\n }\n case 'date': {\n const value = unknown as string\n return formatDate(value)\n }\n case 'time': {\n const value = unknown as string\n return formatTime(value)\n }\n case 'radio':\n case 'autocomplete': {\n const value = unknown as string\n const option = formElement.options?.find((opt) => opt.value === value)\n return option?.label || value\n }\n\n case 'checkboxes': {\n const value = unknown as string[]\n const selectedOptionLabels: string[] = value.reduce(\n (labels: string[], selectedOption: string) => {\n const foundOption = formElement.options?.find(\n (o) => o.value === selectedOption,\n )\n if (foundOption) labels.push(foundOption.label)\n return labels\n },\n [],\n )\n return selectedOptionLabels.length ? selectedOptionLabels : undefined\n }\n case 'compliance': {\n const value = unknown as {\n value?: string\n }\n const option = (formElement.options || []).find(\n (option: FormTypes.ChoiceElementOption) => option.value === value.value,\n )\n return {\n ...value,\n value: option?.label || value.value,\n }\n }\n case 'select': {\n if (formElement.multi) {\n const value = unknown as string[]\n const selectedOptionLabels: string[] = value.reduce(\n (labels: string[], selectedOption: string) => {\n const foundOption = formElement.options?.find(\n (o) => o.value === selectedOption,\n )\n if (foundOption) labels.push(foundOption.label)\n return labels\n },\n [],\n )\n return selectedOptionLabels.length ? selectedOptionLabels : undefined\n } else {\n const value = unknown as string\n const option = formElement.options?.find((opt) => opt.value === value)\n return option?.label || ''\n }\n }\n case 'boolean': {\n const value = unknown as boolean\n return value ? 'Yes' : 'No'\n }\n case 'calculation': {\n const value = unknown as number\n if (!Number.isNaN(value) && Number.isFinite(value)) {\n let text\n if (formElement.displayAsCurrency) {\n text = formatCurrency(value)\n } else {\n text = formatNumber(value)\n }\n return text\n }\n return undefined\n }\n case 'pointAddress':\n case 'geoscapeAddress': {\n const value = unknown as\n | PointTypes.PointAddress\n | GeoscapeTypes.GeoscapeAddress\n return value?.addressDetails?.formattedAddress || value?.addressId\n }\n case 'civicaStreetName': {\n const value = unknown as CivicaTypes.CivicaStreetName\n return value?.formattedStreet\n }\n case 'civicaNameRecord': {\n const value = unknown as CivicaTypes.CivicaNameRecord\n return (\n [value?.title, value?.givenName1, value?.familyName]\n .filter((t) => t)\n .join(' ') || value?.emailAddress\n )\n }\n case 'abn': {\n const value = unknown as MiscTypes.ABNRecord\n return value ? getABNNumberFromABNRecord(value) : undefined\n }\n case 'apiNSWLiquorLicence': {\n const value = unknown as APINSWTypes.LiquorLicenceDetails | undefined\n return `${value?.licenceDetail?.licenceNumber} | ${value?.licenceDetail?.licenceName}`.trim()\n }\n default: {\n return unknown\n }\n }\n}\n\n/**\n * Replace the `{ELEMENT:<elementName>}` values in text while a form is being\n * filled out. The replacements are suppose to be user friendly and for display\n * purposes, e.g. dates should be displayed in the user's desired format and\n * timezone.\n *\n * #### Example\n *\n * ```js\n * const result = submissionService.replaceInjectablesWithElementValues(\n * 'https://example.com/path?search{ELEMENT:search}',\n * {\n * formatDate: (value) => new Date(value).toDateString(),\n * formatDateTime: (value) => new Date(value).toString(),\n * formatTime: (value) => new Date(value).toTimeString(),\n * formatNumber: (value) => Number(value).toString(),\n * formatCurrency: (value) => Number(value).toFixed(2),\n * submission: {\n * search: 'Entered By User',\n * },\n * elements: [\n * {\n * id: 'd4135b47-9004-4d75-aeb3-d2f6232da111',\n * name: 'search',\n * type: 'text',\n * label: 'Search',\n * readOnly: false,\n * required: false,\n * conditionallyShow: false,\n * requiresAllConditionallyShowPredicates: false,\n * isElementLookup: false,\n * isDataLookup: false,\n * },\n * ],\n * userProfile: {\n * userId: 'abc123',\n * username: 'john-user',\n * email: 'john.user@domain.com',\n * },\n * },\n * )\n * ```\n *\n * @param text\n * @param options\n * @returns\n */\nexport function replaceInjectablesWithElementValues(\n text: string,\n options: {\n formElements: FormTypes.FormElement[]\n } & ReplaceInjectablesBaseOptions,\n): string {\n text = ELEMENT_VALUES.reduce((newString, customValue) => {\n return newString.replaceAll(customValue.string, customValue.value(options))\n }, text)\n\n const matchesElement = text.match(ElementWYSIWYGRegex)\n if (!matchesElement) {\n return text\n }\n\n matchElementsTagRegex(text, ({ elementName, elementMatch }) => {\n const value = getElementSubmissionValue({\n propertyName: elementName,\n ...options,\n })\n\n text = text.replace(\n elementMatch,\n value === undefined ? '' : (value as string),\n )\n })\n\n return text\n}\n\n/**\n * Replace the `{ELEMENT:<elementName>}` values in text after a successful form\n * submission as well as other replaceable parameters e.g. `submissionId`. The\n * replacements are suppose to be user friendly and for display purposes, e.g.\n * dates should be displayed in the user's desired format and timezone.\n *\n * #### Example\n *\n * ```js\n * const result = submissionService.replaceInjectablesWithSubmissionValues(\n * 'https://example.com/path?submissionId={SUBMISSION_ID}&externalId={EXTERNAL_ID}&search{ELEMENT:search}',\n * {\n * submissionId: 'abc-123',\n * submissionTimestamp: '2021-07-02T02:19:13.670Z',\n * formatDate: (value) => new Date(value).toDateString(),\n * formatDateTime: (value) => new Date(value).toString(),\n * formatTime: (value) => new Date(value).toTimeString(),\n * submission: {\n * search: 'Entered By User',\n * },\n * form: {\n * id: 1,\n * name: 'Form',\n * organisationId: '',\n * formsAppEnvironmentId: 1,\n * formsAppIds: [],\n * isAuthenticated: false,\n * isMultiPage: false,\n * isInfoPage: false,\n * postSubmissionAction: 'FORMS_LIBRARY',\n * cancelAction: 'FORMS_LIBRARY',\n * submissionEvents: [],\n * tags: [],\n * elements: [\n * {\n * id: 'd4135b47-9004-4d75-aeb3-d2f6232da111',\n * name: 'search',\n * type: 'text',\n * label: 'Search',\n * readOnly: false,\n * required: false,\n * conditionallyShow: false,\n * requiresAllConditionallyShowPredicates: false,\n * isElementLookup: false,\n * isDataLookup: false,\n * },\n * ],\n * },\n * },\n * )\n * ```\n *\n * @param text\n * @param options\n * @returns\n */\nexport function replaceInjectablesWithSubmissionValues(\n text: string,\n options: ReplaceInjectablesOptions,\n): string {\n const string = replaceInjectablesWithElementValues(text, {\n formElements: options.form.elements,\n ...options,\n })\n return SUBMISSION_VALUES.reduce((newString, customValue) => {\n return newString.replaceAll(customValue.string, customValue.value(options))\n }, string)\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oneblink/sdk-core",
|
|
3
3
|
"description": "OneBlink SDK for JavaScript (works in Browsers and NodeJS)",
|
|
4
|
-
"version": "5.2.0
|
|
4
|
+
"version": "5.2.0",
|
|
5
5
|
"author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
|
|
6
6
|
"bugs": {
|
|
7
7
|
"url": "https://github.com/oneblink/sdk-core-js/issues"
|