@oneblink/sdk-core 0.2.5 → 0.3.0-beta.1
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/conditionalLogicService.d.ts +19 -19
- package/dist/conditionalLogicService.js +138 -138
- package/dist/formElementsService.d.ts +6 -6
- package/dist/formElementsService.js +81 -81
- package/dist/index.d.ts +6 -6
- package/dist/index.js +29 -29
- package/dist/replaceCustomValues.d.ts +25 -25
- package/dist/replaceCustomValues.js +169 -169
- package/dist/replaceCustomValues.js.map +1 -1
- package/dist/typeCastService.d.ts +18 -18
- package/dist/typeCastService.js +150 -150
- package/dist/userService.d.ts +3 -3
- package/dist/userService.js +77 -77
- package/package.json +1 -1
|
@@ -1,170 +1,170 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getElementSubmissionValue = void 0;
|
|
4
|
-
const formElementsService_1 = require("./formElementsService");
|
|
5
|
-
const CUSTOM_VALUES = [
|
|
6
|
-
{
|
|
7
|
-
string: '{INFO_PAGE_ID}',
|
|
8
|
-
value: ({ form }) => form.id.toString(),
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
string: '{INFO_PAGE_NAME}',
|
|
12
|
-
value: ({ form }) => form.name,
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
string: '{FORM_ID}',
|
|
16
|
-
value: ({ form }) => form.id.toString(),
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
string: '{FORM_NAME}',
|
|
20
|
-
value: ({ form }) => form.name,
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
string: '{DATE}',
|
|
24
|
-
value: ({ submissionTimestamp, formatDate, formatTime, }) => {
|
|
25
|
-
if (!submissionTimestamp) {
|
|
26
|
-
return '';
|
|
27
|
-
}
|
|
28
|
-
return `${formatDate(submissionTimestamp)} ${formatTime(submissionTimestamp)}`;
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
string: '{TIMESTAMP}',
|
|
33
|
-
value: ({ submissionTimestamp }) => submissionTimestamp || '',
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
string: '{SUBMISSION_ID}',
|
|
37
|
-
value: ({ submissionId }) => submissionId || '',
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
string: '{EXTERNAL_ID}',
|
|
41
|
-
value: ({ externalId }) => externalId || '',
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
string: '{PREVIOUS_APPROVAL_ID}',
|
|
45
|
-
value: ({ previousApprovalId }) => previousApprovalId || '',
|
|
46
|
-
},
|
|
47
|
-
];
|
|
48
|
-
function getElementSubmissionValue({ propertyName, submission,
|
|
49
|
-
var _a, _b;
|
|
50
|
-
const formElement = (0, formElementsService_1.findFormElement)(
|
|
51
|
-
element.type !== 'section' &&
|
|
52
|
-
element.name === propertyName);
|
|
53
|
-
const value = submission[propertyName];
|
|
54
|
-
if (value === undefined || value === null) {
|
|
55
|
-
return undefined;
|
|
56
|
-
}
|
|
57
|
-
switch (formElement === null || formElement === void 0 ? void 0 : formElement.type) {
|
|
58
|
-
case 'datetime': {
|
|
59
|
-
return `${formatDate(value)} ${formatTime(value)}`;
|
|
60
|
-
}
|
|
61
|
-
case 'date': {
|
|
62
|
-
return formatDate(value);
|
|
63
|
-
}
|
|
64
|
-
case 'time': {
|
|
65
|
-
return formatTime(value);
|
|
66
|
-
}
|
|
67
|
-
case 'radio':
|
|
68
|
-
case 'autocomplete': {
|
|
69
|
-
const option = (_a = formElement.options) === null || _a === void 0 ? void 0 : _a.find((opt) => opt.value === value);
|
|
70
|
-
return (option === null || option === void 0 ? void 0 : option.label) || value;
|
|
71
|
-
}
|
|
72
|
-
case 'checkboxes': {
|
|
73
|
-
const selectedOptionLabels = value.reduce((labels, selectedOption) => {
|
|
74
|
-
var _a;
|
|
75
|
-
const foundOption = (_a = formElement.options) === null || _a === void 0 ? void 0 : _a.find((o) => o.value === selectedOption);
|
|
76
|
-
if (foundOption)
|
|
77
|
-
labels.push(foundOption.label);
|
|
78
|
-
return labels;
|
|
79
|
-
}, []);
|
|
80
|
-
return selectedOptionLabels.length ? selectedOptionLabels : undefined;
|
|
81
|
-
}
|
|
82
|
-
case 'compliance': {
|
|
83
|
-
const option = (formElement.options || []).find((option) => option.value === value.value);
|
|
84
|
-
return {
|
|
85
|
-
...value,
|
|
86
|
-
value: (option === null || option === void 0 ? void 0 : option.label) || value.value,
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
case 'select': {
|
|
90
|
-
if (formElement.multi) {
|
|
91
|
-
const selectedOptionLabels = value.reduce((labels, selectedOption) => {
|
|
92
|
-
var _a;
|
|
93
|
-
const foundOption = (_a = formElement.options) === null || _a === void 0 ? void 0 : _a.find((o) => o.value === selectedOption);
|
|
94
|
-
if (foundOption)
|
|
95
|
-
labels.push(foundOption.label);
|
|
96
|
-
return labels;
|
|
97
|
-
}, []);
|
|
98
|
-
return selectedOptionLabels.length ? selectedOptionLabels : undefined;
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
const option = (_b = formElement.options) === null || _b === void 0 ? void 0 : _b.find((opt) => opt.value === value);
|
|
102
|
-
return (option === null || option === void 0 ? void 0 : option.label) || '';
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
case 'boolean': {
|
|
106
|
-
return value ? 'Yes' : 'No';
|
|
107
|
-
}
|
|
108
|
-
case 'calculation': {
|
|
109
|
-
if (!Number.isNaN(value) && Number.isFinite(value)) {
|
|
110
|
-
let text;
|
|
111
|
-
if (formElement.displayAsCurrency) {
|
|
112
|
-
text = formatCurrency(value);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
text = formatNumber(value);
|
|
116
|
-
}
|
|
117
|
-
return text;
|
|
118
|
-
}
|
|
119
|
-
return undefined;
|
|
120
|
-
}
|
|
121
|
-
default: {
|
|
122
|
-
return value;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
exports.getElementSubmissionValue = getElementSubmissionValue;
|
|
127
|
-
function replaceElementValues(text, { form, submission, formatDate, formatTime, formatNumber, formatCurrency, }) {
|
|
128
|
-
const matches = text.match(/({ELEMENT:)([^}]+)(})/g);
|
|
129
|
-
if (!matches) {
|
|
130
|
-
return text;
|
|
131
|
-
}
|
|
132
|
-
return matches.reduce((newString, match) => {
|
|
133
|
-
const propertyName = match.substring(match.indexOf(':') + 1, match.lastIndexOf('}'));
|
|
134
|
-
const value = getElementSubmissionValue({
|
|
135
|
-
propertyName,
|
|
136
|
-
form,
|
|
137
|
-
submission,
|
|
138
|
-
formatDate,
|
|
139
|
-
formatTime,
|
|
140
|
-
formatNumber,
|
|
141
|
-
formatCurrency,
|
|
142
|
-
});
|
|
143
|
-
return newString.replace(match, value === undefined ? '' : value);
|
|
144
|
-
}, text);
|
|
145
|
-
}
|
|
146
|
-
function replaceCustomValues(text, { form, submission, externalId, submissionId, submissionTimestamp, formatDate, formatTime, formatNumber, formatCurrency, previousApprovalId, }) {
|
|
147
|
-
const string = replaceElementValues(text, {
|
|
148
|
-
form,
|
|
149
|
-
submission,
|
|
150
|
-
formatDate,
|
|
151
|
-
formatTime,
|
|
152
|
-
formatNumber,
|
|
153
|
-
formatCurrency,
|
|
154
|
-
});
|
|
155
|
-
return CUSTOM_VALUES.reduce((newString, customValue) => {
|
|
156
|
-
return newString.replace(customValue.string, customValue.value({
|
|
157
|
-
form,
|
|
158
|
-
submissionTimestamp,
|
|
159
|
-
externalId,
|
|
160
|
-
submissionId,
|
|
161
|
-
formatDate,
|
|
162
|
-
formatTime,
|
|
163
|
-
formatNumber,
|
|
164
|
-
formatCurrency,
|
|
165
|
-
previousApprovalId,
|
|
166
|
-
}));
|
|
167
|
-
}, string);
|
|
168
|
-
}
|
|
169
|
-
exports.default = replaceCustomValues;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getElementSubmissionValue = void 0;
|
|
4
|
+
const formElementsService_1 = require("./formElementsService");
|
|
5
|
+
const CUSTOM_VALUES = [
|
|
6
|
+
{
|
|
7
|
+
string: '{INFO_PAGE_ID}',
|
|
8
|
+
value: ({ form }) => form.id.toString(),
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
string: '{INFO_PAGE_NAME}',
|
|
12
|
+
value: ({ form }) => form.name,
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
string: '{FORM_ID}',
|
|
16
|
+
value: ({ form }) => form.id.toString(),
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
string: '{FORM_NAME}',
|
|
20
|
+
value: ({ form }) => form.name,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
string: '{DATE}',
|
|
24
|
+
value: ({ submissionTimestamp, formatDate, formatTime, }) => {
|
|
25
|
+
if (!submissionTimestamp) {
|
|
26
|
+
return '';
|
|
27
|
+
}
|
|
28
|
+
return `${formatDate(submissionTimestamp)} ${formatTime(submissionTimestamp)}`;
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
string: '{TIMESTAMP}',
|
|
33
|
+
value: ({ submissionTimestamp }) => submissionTimestamp || '',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
string: '{SUBMISSION_ID}',
|
|
37
|
+
value: ({ submissionId }) => submissionId || '',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
string: '{EXTERNAL_ID}',
|
|
41
|
+
value: ({ externalId }) => externalId || '',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
string: '{PREVIOUS_APPROVAL_ID}',
|
|
45
|
+
value: ({ previousApprovalId }) => previousApprovalId || '',
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
function getElementSubmissionValue({ propertyName, submission, formElements, formatDate, formatTime, formatNumber, formatCurrency, }) {
|
|
49
|
+
var _a, _b;
|
|
50
|
+
const formElement = (0, formElementsService_1.findFormElement)(formElements, (element) => element.type !== 'page' &&
|
|
51
|
+
element.type !== 'section' &&
|
|
52
|
+
element.name === propertyName);
|
|
53
|
+
const value = submission[propertyName];
|
|
54
|
+
if (value === undefined || value === null) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
switch (formElement === null || formElement === void 0 ? void 0 : formElement.type) {
|
|
58
|
+
case 'datetime': {
|
|
59
|
+
return `${formatDate(value)} ${formatTime(value)}`;
|
|
60
|
+
}
|
|
61
|
+
case 'date': {
|
|
62
|
+
return formatDate(value);
|
|
63
|
+
}
|
|
64
|
+
case 'time': {
|
|
65
|
+
return formatTime(value);
|
|
66
|
+
}
|
|
67
|
+
case 'radio':
|
|
68
|
+
case 'autocomplete': {
|
|
69
|
+
const option = (_a = formElement.options) === null || _a === void 0 ? void 0 : _a.find((opt) => opt.value === value);
|
|
70
|
+
return (option === null || option === void 0 ? void 0 : option.label) || value;
|
|
71
|
+
}
|
|
72
|
+
case 'checkboxes': {
|
|
73
|
+
const selectedOptionLabels = value.reduce((labels, selectedOption) => {
|
|
74
|
+
var _a;
|
|
75
|
+
const foundOption = (_a = formElement.options) === null || _a === void 0 ? void 0 : _a.find((o) => o.value === selectedOption);
|
|
76
|
+
if (foundOption)
|
|
77
|
+
labels.push(foundOption.label);
|
|
78
|
+
return labels;
|
|
79
|
+
}, []);
|
|
80
|
+
return selectedOptionLabels.length ? selectedOptionLabels : undefined;
|
|
81
|
+
}
|
|
82
|
+
case 'compliance': {
|
|
83
|
+
const option = (formElement.options || []).find((option) => option.value === value.value);
|
|
84
|
+
return {
|
|
85
|
+
...value,
|
|
86
|
+
value: (option === null || option === void 0 ? void 0 : option.label) || value.value,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
case 'select': {
|
|
90
|
+
if (formElement.multi) {
|
|
91
|
+
const selectedOptionLabels = value.reduce((labels, selectedOption) => {
|
|
92
|
+
var _a;
|
|
93
|
+
const foundOption = (_a = formElement.options) === null || _a === void 0 ? void 0 : _a.find((o) => o.value === selectedOption);
|
|
94
|
+
if (foundOption)
|
|
95
|
+
labels.push(foundOption.label);
|
|
96
|
+
return labels;
|
|
97
|
+
}, []);
|
|
98
|
+
return selectedOptionLabels.length ? selectedOptionLabels : undefined;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
const option = (_b = formElement.options) === null || _b === void 0 ? void 0 : _b.find((opt) => opt.value === value);
|
|
102
|
+
return (option === null || option === void 0 ? void 0 : option.label) || '';
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
case 'boolean': {
|
|
106
|
+
return value ? 'Yes' : 'No';
|
|
107
|
+
}
|
|
108
|
+
case 'calculation': {
|
|
109
|
+
if (!Number.isNaN(value) && Number.isFinite(value)) {
|
|
110
|
+
let text;
|
|
111
|
+
if (formElement.displayAsCurrency) {
|
|
112
|
+
text = formatCurrency(value);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
text = formatNumber(value);
|
|
116
|
+
}
|
|
117
|
+
return text;
|
|
118
|
+
}
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
default: {
|
|
122
|
+
return value;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.getElementSubmissionValue = getElementSubmissionValue;
|
|
127
|
+
function replaceElementValues(text, { form, submission, formatDate, formatTime, formatNumber, formatCurrency, }) {
|
|
128
|
+
const matches = text.match(/({ELEMENT:)([^}]+)(})/g);
|
|
129
|
+
if (!matches) {
|
|
130
|
+
return text;
|
|
131
|
+
}
|
|
132
|
+
return matches.reduce((newString, match) => {
|
|
133
|
+
const propertyName = match.substring(match.indexOf(':') + 1, match.lastIndexOf('}'));
|
|
134
|
+
const value = getElementSubmissionValue({
|
|
135
|
+
propertyName,
|
|
136
|
+
formElements: form.elements,
|
|
137
|
+
submission,
|
|
138
|
+
formatDate,
|
|
139
|
+
formatTime,
|
|
140
|
+
formatNumber,
|
|
141
|
+
formatCurrency,
|
|
142
|
+
});
|
|
143
|
+
return newString.replace(match, value === undefined ? '' : value);
|
|
144
|
+
}, text);
|
|
145
|
+
}
|
|
146
|
+
function replaceCustomValues(text, { form, submission, externalId, submissionId, submissionTimestamp, formatDate, formatTime, formatNumber, formatCurrency, previousApprovalId, }) {
|
|
147
|
+
const string = replaceElementValues(text, {
|
|
148
|
+
form,
|
|
149
|
+
submission,
|
|
150
|
+
formatDate,
|
|
151
|
+
formatTime,
|
|
152
|
+
formatNumber,
|
|
153
|
+
formatCurrency,
|
|
154
|
+
});
|
|
155
|
+
return CUSTOM_VALUES.reduce((newString, customValue) => {
|
|
156
|
+
return newString.replace(customValue.string, customValue.value({
|
|
157
|
+
form,
|
|
158
|
+
submissionTimestamp,
|
|
159
|
+
externalId,
|
|
160
|
+
submissionId,
|
|
161
|
+
formatDate,
|
|
162
|
+
formatTime,
|
|
163
|
+
formatNumber,
|
|
164
|
+
formatCurrency,
|
|
165
|
+
previousApprovalId,
|
|
166
|
+
}));
|
|
167
|
+
}, string);
|
|
168
|
+
}
|
|
169
|
+
exports.default = replaceCustomValues;
|
|
170
170
|
//# sourceMappingURL=replaceCustomValues.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replaceCustomValues.js","sourceRoot":"","sources":["../src/replaceCustomValues.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { findFormElement } from './formElementsService'\n\ntype CustomValuesOptions = {\n form: FormTypes.Form\n externalId?: string\n submissionId: string\n submissionTimestamp: string\n formatDate: (value: string) => string\n formatTime: (value: string) => string\n formatNumber: (value: number) => string\n formatCurrency: (value: number) => string\n previousApprovalId?: string\n}\n\nconst CUSTOM_VALUES = [\n {\n string: '{INFO_PAGE_ID}',\n value: ({ form }: CustomValuesOptions) => form.id.toString(),\n },\n {\n string: '{INFO_PAGE_NAME}',\n value: ({ form }: CustomValuesOptions) => form.name,\n },\n {\n string: '{FORM_ID}',\n value: ({ form }: CustomValuesOptions) => form.id.toString(),\n },\n {\n string: '{FORM_NAME}',\n value: ({ form }: CustomValuesOptions) => form.name,\n },\n {\n string: '{DATE}',\n value: ({\n submissionTimestamp,\n formatDate,\n formatTime,\n }: CustomValuesOptions) => {\n if (!submissionTimestamp) {\n return ''\n }\n return `${formatDate(submissionTimestamp)} ${formatTime(\n submissionTimestamp,\n )}`\n },\n },\n {\n string: '{TIMESTAMP}',\n value: ({ submissionTimestamp }: CustomValuesOptions) =>\n submissionTimestamp || '',\n },\n {\n string: '{SUBMISSION_ID}',\n value: ({ submissionId }: CustomValuesOptions) => submissionId || '',\n },\n {\n string: '{EXTERNAL_ID}',\n value: ({ externalId }: CustomValuesOptions) => externalId || '',\n },\n {\n string: '{PREVIOUS_APPROVAL_ID}',\n value: ({ previousApprovalId }: CustomValuesOptions) =>\n previousApprovalId || '',\n },\n]\n\nexport function getElementSubmissionValue({\n propertyName,\n submission,\n form,\n formatDate,\n formatTime,\n formatNumber,\n formatCurrency,\n}: {\n propertyName: string\n form: FormTypes.Form\n submission: SubmissionTypes.S3SubmissionData['submission']\n formatDate: (value: string) => string\n formatTime: (value: string) => string\n formatNumber: (value: number) => string\n formatCurrency: (value: number) => string\n}): unknown {\n const formElement = findFormElement(\n form.elements,\n (element) =>\n element.type !== 'page' &&\n element.type !== 'section' &&\n element.name === propertyName,\n )\n\n const value = submission[propertyName]\n if (value === undefined || value === null) {\n return undefined\n }\n\n switch (formElement?.type) {\n case 'datetime': {\n return `${formatDate(value)} ${formatTime(value)}`\n }\n case 'date': {\n return formatDate(value)\n }\n case 'time': {\n return formatTime(value)\n }\n case 'radio':\n case 'autocomplete': {\n const option = formElement.options?.find((opt) => opt.value === value)\n return option?.label || value\n }\n\n case 'checkboxes': {\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 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 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 option = formElement.options?.find((opt) => opt.value === value)\n return option?.label || ''\n }\n }\n case 'boolean': {\n return value ? 'Yes' : 'No'\n }\n case 'calculation': {\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\n default: {\n return value\n }\n }\n}\n\nfunction replaceElementValues(\n text: string,\n {\n form,\n submission,\n formatDate,\n formatTime,\n formatNumber,\n formatCurrency,\n }: {\n form: FormTypes.Form\n submission: SubmissionTypes.S3SubmissionData['submission']\n formatDate: (value: string) => string\n formatTime: (value: string) => string\n formatNumber: (value: number) => string\n formatCurrency: (value: number) => string\n },\n): string {\n const matches = text.match(/({ELEMENT:)([^}]+)(})/g)\n if (!matches) {\n return text\n }\n\n return matches.reduce((newString, match) => {\n const propertyName = match.substring(\n match.indexOf(':') + 1,\n match.lastIndexOf('}'),\n )\n\n const value = getElementSubmissionValue({\n propertyName,\n form,\n submission,\n formatDate,\n formatTime,\n formatNumber,\n formatCurrency,\n })\n\n return newString.replace(\n match,\n value === undefined ? '' : (value as string),\n )\n }, text)\n}\n\nexport default function replaceCustomValues(\n text: string,\n {\n form,\n submission,\n externalId,\n submissionId,\n submissionTimestamp,\n formatDate,\n formatTime,\n formatNumber,\n formatCurrency,\n previousApprovalId,\n }: CustomValuesOptions & {\n submission: SubmissionTypes.S3SubmissionData['submission']\n },\n): string {\n const string = replaceElementValues(text, {\n form,\n submission,\n formatDate,\n formatTime,\n formatNumber,\n formatCurrency,\n })\n return CUSTOM_VALUES.reduce((newString, customValue) => {\n return newString.replace(\n customValue.string,\n customValue.value({\n form,\n submissionTimestamp,\n externalId,\n submissionId,\n formatDate,\n formatTime,\n formatNumber,\n formatCurrency,\n previousApprovalId,\n }),\n )\n }, string)\n}\n"]}
|
|
1
|
+
{"version":3,"file":"replaceCustomValues.js","sourceRoot":"","sources":["../src/replaceCustomValues.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { findFormElement } from './formElementsService'\n\ntype CustomValuesOptions = {\n form: FormTypes.Form\n externalId?: string\n submissionId: string\n submissionTimestamp: string\n formatDate: (value: string) => string\n formatTime: (value: string) => string\n formatNumber: (value: number) => string\n formatCurrency: (value: number) => string\n previousApprovalId?: string\n}\n\nconst CUSTOM_VALUES = [\n {\n string: '{INFO_PAGE_ID}',\n value: ({ form }: CustomValuesOptions) => form.id.toString(),\n },\n {\n string: '{INFO_PAGE_NAME}',\n value: ({ form }: CustomValuesOptions) => form.name,\n },\n {\n string: '{FORM_ID}',\n value: ({ form }: CustomValuesOptions) => form.id.toString(),\n },\n {\n string: '{FORM_NAME}',\n value: ({ form }: CustomValuesOptions) => form.name,\n },\n {\n string: '{DATE}',\n value: ({\n submissionTimestamp,\n formatDate,\n formatTime,\n }: CustomValuesOptions) => {\n if (!submissionTimestamp) {\n return ''\n }\n return `${formatDate(submissionTimestamp)} ${formatTime(\n submissionTimestamp,\n )}`\n },\n },\n {\n string: '{TIMESTAMP}',\n value: ({ submissionTimestamp }: CustomValuesOptions) =>\n submissionTimestamp || '',\n },\n {\n string: '{SUBMISSION_ID}',\n value: ({ submissionId }: CustomValuesOptions) => submissionId || '',\n },\n {\n string: '{EXTERNAL_ID}',\n value: ({ externalId }: CustomValuesOptions) => externalId || '',\n },\n {\n string: '{PREVIOUS_APPROVAL_ID}',\n value: ({ previousApprovalId }: CustomValuesOptions) =>\n previousApprovalId || '',\n },\n]\n\nexport function getElementSubmissionValue({\n propertyName,\n submission,\n formElements,\n formatDate,\n formatTime,\n formatNumber,\n formatCurrency,\n}: {\n propertyName: string\n formElements: FormTypes.FormElement[]\n submission: SubmissionTypes.S3SubmissionData['submission']\n formatDate: (value: string) => string\n formatTime: (value: string) => string\n formatNumber: (value: number) => string\n formatCurrency: (value: number) => string\n}): 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 value = submission[propertyName]\n if (value === undefined || value === null) {\n return undefined\n }\n\n switch (formElement?.type) {\n case 'datetime': {\n return `${formatDate(value)} ${formatTime(value)}`\n }\n case 'date': {\n return formatDate(value)\n }\n case 'time': {\n return formatTime(value)\n }\n case 'radio':\n case 'autocomplete': {\n const option = formElement.options?.find((opt) => opt.value === value)\n return option?.label || value\n }\n\n case 'checkboxes': {\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 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 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 option = formElement.options?.find((opt) => opt.value === value)\n return option?.label || ''\n }\n }\n case 'boolean': {\n return value ? 'Yes' : 'No'\n }\n case 'calculation': {\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\n default: {\n return value\n }\n }\n}\n\nfunction replaceElementValues(\n text: string,\n {\n form,\n submission,\n formatDate,\n formatTime,\n formatNumber,\n formatCurrency,\n }: {\n form: FormTypes.Form\n submission: SubmissionTypes.S3SubmissionData['submission']\n formatDate: (value: string) => string\n formatTime: (value: string) => string\n formatNumber: (value: number) => string\n formatCurrency: (value: number) => string\n },\n): string {\n const matches = text.match(/({ELEMENT:)([^}]+)(})/g)\n if (!matches) {\n return text\n }\n\n return matches.reduce((newString, match) => {\n const propertyName = match.substring(\n match.indexOf(':') + 1,\n match.lastIndexOf('}'),\n )\n\n const value = getElementSubmissionValue({\n propertyName,\n formElements: form.elements,\n submission,\n formatDate,\n formatTime,\n formatNumber,\n formatCurrency,\n })\n\n return newString.replace(\n match,\n value === undefined ? '' : (value as string),\n )\n }, text)\n}\n\nexport default function replaceCustomValues(\n text: string,\n {\n form,\n submission,\n externalId,\n submissionId,\n submissionTimestamp,\n formatDate,\n formatTime,\n formatNumber,\n formatCurrency,\n previousApprovalId,\n }: CustomValuesOptions & {\n submission: SubmissionTypes.S3SubmissionData['submission']\n },\n): string {\n const string = replaceElementValues(text, {\n form,\n submission,\n formatDate,\n formatTime,\n formatNumber,\n formatCurrency,\n })\n return CUSTOM_VALUES.reduce((newString, customValue) => {\n return newString.replace(\n customValue.string,\n customValue.value({\n form,\n submissionTimestamp,\n externalId,\n submissionId,\n formatDate,\n formatTime,\n formatNumber,\n formatCurrency,\n previousApprovalId,\n }),\n )\n }, string)\n}\n"]}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { FormTypes, SubmissionEventTypes } from '@oneblink/types';
|
|
2
|
-
declare type NamelessElement = FormTypes.PageElement | FormTypes.SectionElement;
|
|
3
|
-
declare type NonNestedElementsFormElement = FormTypes.NonNestedElementsElement | FormTypes.FormElementWithForm;
|
|
4
|
-
declare const formElements: {
|
|
5
|
-
toOptionsElement: (e: FormTypes.FormElement) => FormTypes.FormElementWithOptions | undefined;
|
|
6
|
-
toFormElementWithForm: (e: FormTypes.FormElement) => FormTypes.FormElementWithForm | undefined;
|
|
7
|
-
toFormElementWithoutForm: (e: FormTypes.FormElement) => FormTypes.FormElementWithoutForm | undefined;
|
|
8
|
-
toLookupElement: (e: FormTypes.FormElement) => FormTypes.LookupFormElement | undefined;
|
|
9
|
-
toNestedElementsElement: (e: FormTypes.FormElement) => FormTypes.NestedElementsElement | undefined;
|
|
10
|
-
toNamelessElement: (e: FormTypes.FormElement) => NamelessElement | undefined;
|
|
11
|
-
toNonNestedElementsElement: (e: FormTypes.FormElement) => NonNestedElementsFormElement | undefined;
|
|
12
|
-
toPageElement: (e: FormTypes.FormElement) => FormTypes.PageElement | undefined;
|
|
13
|
-
toRepeatableSetElement: (e: FormTypes.FormElement) => FormTypes.RepeatableSetElement | undefined;
|
|
14
|
-
};
|
|
15
|
-
declare const submissionEvents: {
|
|
16
|
-
toPaymentSubmissionEvent: (e: SubmissionEventTypes.FormSubmissionEvent) => SubmissionEventTypes.PaymentSubmissionEvent | undefined;
|
|
17
|
-
};
|
|
18
|
-
export { formElements, submissionEvents };
|
|
1
|
+
import { FormTypes, SubmissionEventTypes } from '@oneblink/types';
|
|
2
|
+
declare type NamelessElement = FormTypes.PageElement | FormTypes.SectionElement;
|
|
3
|
+
declare type NonNestedElementsFormElement = FormTypes.NonNestedElementsElement | FormTypes.FormElementWithForm;
|
|
4
|
+
declare const formElements: {
|
|
5
|
+
toOptionsElement: (e: FormTypes.FormElement) => FormTypes.FormElementWithOptions | undefined;
|
|
6
|
+
toFormElementWithForm: (e: FormTypes.FormElement) => FormTypes.FormElementWithForm | undefined;
|
|
7
|
+
toFormElementWithoutForm: (e: FormTypes.FormElement) => FormTypes.FormElementWithoutForm | undefined;
|
|
8
|
+
toLookupElement: (e: FormTypes.FormElement) => FormTypes.LookupFormElement | undefined;
|
|
9
|
+
toNestedElementsElement: (e: FormTypes.FormElement) => FormTypes.NestedElementsElement | undefined;
|
|
10
|
+
toNamelessElement: (e: FormTypes.FormElement) => NamelessElement | undefined;
|
|
11
|
+
toNonNestedElementsElement: (e: FormTypes.FormElement) => NonNestedElementsFormElement | undefined;
|
|
12
|
+
toPageElement: (e: FormTypes.FormElement) => FormTypes.PageElement | undefined;
|
|
13
|
+
toRepeatableSetElement: (e: FormTypes.FormElement) => FormTypes.RepeatableSetElement | undefined;
|
|
14
|
+
};
|
|
15
|
+
declare const submissionEvents: {
|
|
16
|
+
toPaymentSubmissionEvent: (e: SubmissionEventTypes.FormSubmissionEvent) => SubmissionEventTypes.PaymentSubmissionEvent | undefined;
|
|
17
|
+
};
|
|
18
|
+
export { formElements, submissionEvents };
|