@oneblink/apps-react 0.5.8-beta.1 → 0.5.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.
- package/dist/hooks/useConditionalLogic.js +11 -130
- package/dist/hooks/useConditionalLogic.js.map +1 -1
- package/dist/hooks/useFlattenElementsContext.js +2 -2
- package/dist/hooks/useFlattenElementsContext.js.map +1 -1
- package/dist/services/cleanFormSubmissionModel.js +28 -6
- package/dist/services/cleanFormSubmissionModel.js.map +1 -1
- package/package.json +2 -2
- package/dist/services/flattenFormElements.d.ts +0 -2
- package/dist/services/flattenFormElements.js +0 -13
- package/dist/services/flattenFormElements.js.map +0 -1
@@ -1,139 +1,20 @@
|
|
1
1
|
import { Sentry } from '@oneblink/apps';
|
2
2
|
import * as React from 'react';
|
3
|
-
import
|
4
|
-
import conditionallyShowOption from '../services/conditionally-show-option';
|
5
|
-
import flattenFormElements from '../services/flattenFormElements';
|
3
|
+
import { conditionalLogicService } from '@oneblink/sdk-core';
|
6
4
|
export default function useConditionalLogic(definition, submission) {
|
7
5
|
const [conditionalLogicError, setConditionalLogicError] = React.useState();
|
8
|
-
const
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
catch (error) {
|
13
|
-
console.warn('Error while checking if element is conditional shown', error);
|
14
|
-
Sentry.captureException(error);
|
15
|
-
setConditionalLogicError(error);
|
16
|
-
return false;
|
17
|
-
}
|
6
|
+
const errorCallback = React.useCallback((error) => {
|
7
|
+
console.warn('Error while checking conditional logic');
|
8
|
+
Sentry.captureException(error);
|
9
|
+
setConditionalLogicError(error);
|
18
10
|
}, []);
|
19
|
-
const handleConditionallyShowOption = React.useCallback((formElementsCtrl, element, option) => {
|
20
|
-
try {
|
21
|
-
return conditionallyShowOption(formElementsCtrl, element, option, []);
|
22
|
-
}
|
23
|
-
catch (error) {
|
24
|
-
Sentry.captureException(error);
|
25
|
-
setConditionalLogicError(error);
|
26
|
-
return false;
|
27
|
-
}
|
28
|
-
}, []);
|
29
|
-
const generateFormElementsConditionallyShown = React.useCallback((elements, model, parentFormElementsCtrl) => {
|
30
|
-
const formElementsCtrl = {
|
31
|
-
flattenedElements: flattenFormElements(elements),
|
32
|
-
model,
|
33
|
-
parentFormElementsCtrl,
|
34
|
-
};
|
35
|
-
return formElementsCtrl.flattenedElements.reduce((formElementsConditionallyShown, element) => {
|
36
|
-
switch (element.type) {
|
37
|
-
case 'section':
|
38
|
-
case 'page': {
|
39
|
-
const formElementConditionallyShown = formElementsConditionallyShown[element.id];
|
40
|
-
const isHidden = formElementConditionallyShown
|
41
|
-
? formElementConditionallyShown.isHidden
|
42
|
-
: !handleConditionallyShowElement(formElementsCtrl, element);
|
43
|
-
formElementsConditionallyShown[element.id] = {
|
44
|
-
type: 'formElement',
|
45
|
-
isHidden,
|
46
|
-
};
|
47
|
-
// If the parent element is hidden, hide all the child elements
|
48
|
-
if (isHidden) {
|
49
|
-
element.elements.forEach((childElement) => {
|
50
|
-
switch (childElement.type) {
|
51
|
-
case 'section':
|
52
|
-
case 'page': {
|
53
|
-
formElementsConditionallyShown[childElement.id] = {
|
54
|
-
type: 'formElement',
|
55
|
-
isHidden: true,
|
56
|
-
};
|
57
|
-
break;
|
58
|
-
}
|
59
|
-
default: {
|
60
|
-
formElementsConditionallyShown[childElement.name] = {
|
61
|
-
type: 'formElement',
|
62
|
-
isHidden: true,
|
63
|
-
};
|
64
|
-
}
|
65
|
-
}
|
66
|
-
});
|
67
|
-
}
|
68
|
-
break;
|
69
|
-
}
|
70
|
-
case 'infoPage':
|
71
|
-
case 'form': {
|
72
|
-
if (formElementsConditionallyShown[element.name]) {
|
73
|
-
break;
|
74
|
-
}
|
75
|
-
const nestedModel = model[element.name];
|
76
|
-
formElementsConditionallyShown[element.name] = {
|
77
|
-
type: 'formElements',
|
78
|
-
isHidden: !handleConditionallyShowElement(formElementsCtrl, element),
|
79
|
-
formElements: generateFormElementsConditionallyShown(element.elements || [], nestedModel || {}, formElementsCtrl),
|
80
|
-
};
|
81
|
-
break;
|
82
|
-
}
|
83
|
-
case 'repeatableSet': {
|
84
|
-
if (formElementsConditionallyShown[element.name]) {
|
85
|
-
break;
|
86
|
-
}
|
87
|
-
const entries = formElementsCtrl.model[element.name];
|
88
|
-
formElementsConditionallyShown[element.name] = {
|
89
|
-
type: 'repeatableSet',
|
90
|
-
isHidden: !handleConditionallyShowElement(formElementsCtrl, element),
|
91
|
-
entries: (entries || []).reduce((result, entry, index) => {
|
92
|
-
result[index.toString()] =
|
93
|
-
generateFormElementsConditionallyShown(element.elements, entry, formElementsCtrl);
|
94
|
-
return result;
|
95
|
-
}, {}),
|
96
|
-
};
|
97
|
-
break;
|
98
|
-
}
|
99
|
-
default: {
|
100
|
-
if (formElementsConditionallyShown[element.name]) {
|
101
|
-
break;
|
102
|
-
}
|
103
|
-
const formElementConditionallyShown = {
|
104
|
-
type: 'formElement',
|
105
|
-
isHidden: !handleConditionallyShowElement(formElementsCtrl, element),
|
106
|
-
};
|
107
|
-
if (!formElementConditionallyShown.isHidden) {
|
108
|
-
switch (element.type) {
|
109
|
-
case 'compliance':
|
110
|
-
case 'autocomplete':
|
111
|
-
case 'radio':
|
112
|
-
case 'checkboxes':
|
113
|
-
case 'select': {
|
114
|
-
if (element.conditionallyShowOptions &&
|
115
|
-
Array.isArray(element.options)) {
|
116
|
-
formElementConditionallyShown.options =
|
117
|
-
element.options.filter((option) => handleConditionallyShowOption(formElementsCtrl, element, option));
|
118
|
-
}
|
119
|
-
break;
|
120
|
-
}
|
121
|
-
}
|
122
|
-
}
|
123
|
-
formElementsConditionallyShown[element.name] =
|
124
|
-
formElementConditionallyShown;
|
125
|
-
}
|
126
|
-
}
|
127
|
-
return formElementsConditionallyShown;
|
128
|
-
}, {});
|
129
|
-
}, [handleConditionallyShowElement, handleConditionallyShowOption]);
|
130
11
|
const formElementsConditionallyShown = React.useMemo(() => {
|
131
|
-
return generateFormElementsConditionallyShown(
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
]);
|
12
|
+
return conditionalLogicService.generateFormElementsConditionallyShown({
|
13
|
+
formElements: definition.elements,
|
14
|
+
submission,
|
15
|
+
errorCallback,
|
16
|
+
});
|
17
|
+
}, [definition.elements, submission, errorCallback]);
|
137
18
|
return {
|
138
19
|
conditionalLogicError,
|
139
20
|
formElementsConditionallyShown,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useConditionalLogic.js","sourceRoot":"","sources":["../../src/hooks/useConditionalLogic.ts"],"names":[],"mappings":"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","sourcesContent":["import { Sentry } from '@oneblink/apps'\nimport { FormTypes } from '@oneblink/types'\nimport * as React from 'react'\n\nimport conditionallyShowElement, {\n FormElementsCtrl,\n} from '../services/conditionally-show-element'\nimport conditionallyShowOption from '../services/conditionally-show-option'\nimport flattenFormElements from '../services/flattenFormElements'\nimport {\n FormElementConditionallyShown,\n FormElementsConditionallyShown,\n FormSubmissionModel,\n RepeatableSetEntryIndex,\n} from '../types/form'\n\nexport default function useConditionalLogic(\n definition: FormTypes.Form,\n submission: FormSubmissionModel,\n) {\n const [conditionalLogicError, setConditionalLogicError] = React.useState<\n Error | undefined\n >()\n\n const handleConditionallyShowElement = React.useCallback(\n (formElementsCtrl: FormElementsCtrl, element: FormTypes.FormElement) => {\n try {\n return conditionallyShowElement(formElementsCtrl, element, [])\n } catch (error) {\n console.warn(\n 'Error while checking if element is conditional shown',\n error,\n )\n Sentry.captureException(error)\n setConditionalLogicError(error as Error)\n return false\n }\n },\n [],\n )\n\n const handleConditionallyShowOption = React.useCallback(\n (\n formElementsCtrl: FormElementsCtrl,\n element: FormTypes.FormElementWithOptions,\n option: FormTypes.ChoiceElementOption,\n ) => {\n try {\n return conditionallyShowOption(formElementsCtrl, element, option, [])\n } catch (error) {\n Sentry.captureException(error)\n setConditionalLogicError(error as Error)\n return false\n }\n },\n [],\n )\n\n const generateFormElementsConditionallyShown = React.useCallback(\n (\n elements: FormTypes.FormElement[],\n model: FormSubmissionModel,\n parentFormElementsCtrl: FormElementsCtrl['parentFormElementsCtrl'],\n ): FormElementsConditionallyShown => {\n const formElementsCtrl = {\n flattenedElements: flattenFormElements(elements),\n model,\n parentFormElementsCtrl,\n }\n return formElementsCtrl.flattenedElements.reduce<FormElementsConditionallyShown>(\n (formElementsConditionallyShown, element) => {\n switch (element.type) {\n case 'section':\n case 'page': {\n const formElementConditionallyShown =\n formElementsConditionallyShown[element.id]\n const isHidden = formElementConditionallyShown\n ? formElementConditionallyShown.isHidden\n : !handleConditionallyShowElement(formElementsCtrl, element)\n\n formElementsConditionallyShown[element.id] = {\n type: 'formElement',\n isHidden,\n }\n\n // If the parent element is hidden, hide all the child elements\n if (isHidden) {\n element.elements.forEach((childElement) => {\n switch (childElement.type) {\n case 'section':\n case 'page': {\n formElementsConditionallyShown[childElement.id] = {\n type: 'formElement',\n isHidden: true,\n }\n break\n }\n default: {\n formElementsConditionallyShown[childElement.name] = {\n type: 'formElement',\n isHidden: true,\n }\n }\n }\n })\n }\n break\n }\n case 'infoPage':\n case 'form': {\n if (formElementsConditionallyShown[element.name]) {\n break\n }\n const nestedModel = model[element.name] as\n | FormSubmissionModel\n | undefined\n formElementsConditionallyShown[element.name] = {\n type: 'formElements',\n isHidden: !handleConditionallyShowElement(\n formElementsCtrl,\n element,\n ),\n formElements: generateFormElementsConditionallyShown(\n element.elements || [],\n nestedModel || {},\n formElementsCtrl,\n ),\n }\n break\n }\n case 'repeatableSet': {\n if (formElementsConditionallyShown[element.name]) {\n break\n }\n const entries = formElementsCtrl.model[element.name] as\n | Array<FormSubmissionModel>\n | undefined\n formElementsConditionallyShown[element.name] = {\n type: 'repeatableSet',\n isHidden: !handleConditionallyShowElement(\n formElementsCtrl,\n element,\n ),\n entries: (entries || []).reduce(\n (\n result: Record<\n RepeatableSetEntryIndex,\n FormElementsConditionallyShown | undefined\n >,\n entry,\n index,\n ) => {\n result[index.toString()] =\n generateFormElementsConditionallyShown(\n element.elements,\n entry,\n formElementsCtrl,\n )\n return result\n },\n {},\n ),\n }\n break\n }\n default: {\n if (formElementsConditionallyShown[element.name]) {\n break\n }\n const formElementConditionallyShown: FormElementConditionallyShown =\n {\n type: 'formElement',\n isHidden: !handleConditionallyShowElement(\n formElementsCtrl,\n element,\n ),\n }\n\n if (!formElementConditionallyShown.isHidden) {\n switch (element.type) {\n case 'compliance':\n case 'autocomplete':\n case 'radio':\n case 'checkboxes':\n case 'select': {\n if (\n element.conditionallyShowOptions &&\n Array.isArray(element.options)\n ) {\n formElementConditionallyShown.options =\n element.options.filter((option) =>\n handleConditionallyShowOption(\n formElementsCtrl,\n element,\n option,\n ),\n )\n }\n break\n }\n }\n }\n\n formElementsConditionallyShown[element.name] =\n formElementConditionallyShown\n }\n }\n\n return formElementsConditionallyShown\n },\n {},\n )\n },\n [handleConditionallyShowElement, handleConditionallyShowOption],\n )\n\n const formElementsConditionallyShown =\n React.useMemo<FormElementsConditionallyShown>(() => {\n return generateFormElementsConditionallyShown(\n definition.elements,\n submission,\n undefined,\n )\n }, [\n definition.elements,\n generateFormElementsConditionallyShown,\n submission,\n ])\n\n return {\n conditionalLogicError,\n formElementsConditionallyShown,\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"useConditionalLogic.js","sourceRoot":"","sources":["../../src/hooks/useConditionalLogic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAO5D,MAAM,CAAC,OAAO,UAAU,mBAAmB,CACzC,UAA0B,EAC1B,UAA+B;IAE/B,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,KAAK,CAAC,QAAQ,EAErE,CAAA;IAEH,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,KAAY,EAAE,EAAE;QACvD,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;QACtD,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAC9B,wBAAwB,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,8BAA8B,GAClC,KAAK,CAAC,OAAO,CAAiC,GAAG,EAAE;QACjD,OAAO,uBAAuB,CAAC,sCAAsC,CAAC;YACpE,YAAY,EAAE,UAAU,CAAC,QAAQ;YACjC,UAAU;YACV,aAAa;SACd,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAA;IAEtD,OAAO;QACL,qBAAqB;QACrB,8BAA8B;KAC/B,CAAA;AACH,CAAC","sourcesContent":["import { Sentry } from '@oneblink/apps'\nimport { FormTypes } from '@oneblink/types'\nimport * as React from 'react'\nimport { conditionalLogicService } from '@oneblink/sdk-core'\n\nimport {\n FormElementsConditionallyShown,\n FormSubmissionModel,\n} from '../types/form'\n\nexport default function useConditionalLogic(\n definition: FormTypes.Form,\n submission: FormSubmissionModel,\n) {\n const [conditionalLogicError, setConditionalLogicError] = React.useState<\n Error | undefined\n >()\n\n const errorCallback = React.useCallback((error: Error) => {\n console.warn('Error while checking conditional logic')\n Sentry.captureException(error)\n setConditionalLogicError(error)\n }, [])\n\n const formElementsConditionallyShown =\n React.useMemo<FormElementsConditionallyShown>(() => {\n return conditionalLogicService.generateFormElementsConditionallyShown({\n formElements: definition.elements,\n submission,\n errorCallback,\n })\n }, [definition.elements, submission, errorCallback])\n\n return {\n conditionalLogicError,\n formElementsConditionallyShown,\n }\n}\n"]}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import * as React from 'react';
|
2
|
-
import
|
2
|
+
import { formElementsService } from '@oneblink/sdk-core';
|
3
3
|
import useFormDefinition from './useFormDefinition';
|
4
4
|
export default function useFlattenElements() {
|
5
5
|
const definition = useFormDefinition();
|
6
|
-
return React.useMemo(() => flattenFormElements(definition.elements), [definition.elements]);
|
6
|
+
return React.useMemo(() => formElementsService.flattenFormElements(definition.elements), [definition.elements]);
|
7
7
|
}
|
8
8
|
//# sourceMappingURL=useFlattenElementsContext.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useFlattenElementsContext.js","sourceRoot":"","sources":["../../src/hooks/useFlattenElementsContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,mBAAmB,MAAM,
|
1
|
+
{"version":3,"file":"useFlattenElementsContext.js","sourceRoot":"","sources":["../../src/hooks/useFlattenElementsContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,iBAAiB,MAAM,qBAAqB,CAAA;AAEnD,MAAM,CAAC,OAAO,UAAU,kBAAkB;IACxC,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAA;IACtC,OAAO,KAAK,CAAC,OAAO,CAClB,GAAG,EAAE,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAClE,CAAC,UAAU,CAAC,QAAQ,CAAC,CACtB,CAAA;AACH,CAAC","sourcesContent":["import { FormTypes } from '@oneblink/types'\nimport * as React from 'react'\nimport { formElementsService } from '@oneblink/sdk-core'\nimport useFormDefinition from './useFormDefinition'\n\nexport default function useFlattenElements(): FormTypes.FormElement[] {\n const definition = useFormDefinition()\n return React.useMemo(\n () => formElementsService.flattenFormElements(definition.elements),\n [definition.elements],\n )\n}\n"]}
|
@@ -2,7 +2,7 @@ import { checkIsUsingLegacyStorage } from './attachments';
|
|
2
2
|
function cleanElementValue(submission, elements, formElementsConditionallyShown, stripBinaryData, captchaTokens) {
|
3
3
|
// Clear data from submission on fields that are hidden on visible pages
|
4
4
|
return elements.reduce((model, element) => {
|
5
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
5
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
6
6
|
switch (element.type) {
|
7
7
|
// For content element types, we just need to set true for shown and false for hidden.
|
8
8
|
// This is to allow renderers of the data to know when to show/hide the content
|
@@ -125,28 +125,50 @@ function cleanElementValue(submission, elements, formElementsConditionallyShown,
|
|
125
125
|
!submission[element.name]) {
|
126
126
|
break;
|
127
127
|
}
|
128
|
+
const checklistObject = submission[element.name];
|
129
|
+
const notes = (_g = checklistObject === null || checklistObject === void 0 ? void 0 : checklistObject.notes) === null || _g === void 0 ? void 0 : _g.trim();
|
128
130
|
if (stripBinaryData) {
|
129
131
|
model[element.name] = {
|
130
|
-
...
|
132
|
+
...checklistObject,
|
133
|
+
notes: notes,
|
131
134
|
files: undefined,
|
132
135
|
};
|
133
136
|
}
|
134
137
|
else {
|
135
|
-
model[element.name] =
|
138
|
+
model[element.name] = {
|
139
|
+
...checklistObject,
|
140
|
+
notes: notes,
|
141
|
+
};
|
136
142
|
}
|
137
143
|
break;
|
138
144
|
}
|
139
145
|
case 'page':
|
140
146
|
case 'section': {
|
141
|
-
if (!((
|
147
|
+
if (!((_h = formElementsConditionallyShown === null || formElementsConditionallyShown === void 0 ? void 0 : formElementsConditionallyShown[element.id]) === null || _h === void 0 ? void 0 : _h.isHidden)) {
|
142
148
|
const nestedModel = cleanElementValue(submission, element.elements, formElementsConditionallyShown, stripBinaryData, captchaTokens);
|
143
149
|
Object.assign(model, nestedModel);
|
144
150
|
}
|
145
151
|
break;
|
146
152
|
}
|
147
153
|
default: {
|
148
|
-
if (!((
|
149
|
-
|
154
|
+
if (!((_j = formElementsConditionallyShown === null || formElementsConditionallyShown === void 0 ? void 0 : formElementsConditionallyShown[element.name]) === null || _j === void 0 ? void 0 : _j.isHidden)) {
|
155
|
+
const value = submission[element.name];
|
156
|
+
switch (element.type) {
|
157
|
+
case 'text':
|
158
|
+
case 'textarea':
|
159
|
+
case 'email':
|
160
|
+
case 'barcodeScanner':
|
161
|
+
case 'telephone': {
|
162
|
+
model[element.name] =
|
163
|
+
typeof value === 'string'
|
164
|
+
? value.trim()
|
165
|
+
: submission[element.name];
|
166
|
+
break;
|
167
|
+
}
|
168
|
+
default: {
|
169
|
+
model[element.name] = value;
|
170
|
+
}
|
171
|
+
}
|
150
172
|
}
|
151
173
|
}
|
152
174
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"cleanFormSubmissionModel.js","sourceRoot":"","sources":["../../src/services/cleanFormSubmissionModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { CivicaTypes, FormTypes, GeoscapeTypes } from '@oneblink/types'\nimport { Value as ComplianceValue } from '../form-elements/FormElementCompliance'\nimport {\n FormElementsConditionallyShown,\n FormSubmissionModel,\n} from '../types/form'\nimport { checkIsUsingLegacyStorage } from './attachments'\n\nfunction cleanElementValue(\n submission: FormSubmissionModel,\n elements: FormTypes.FormElement[],\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined,\n stripBinaryData: boolean,\n captchaTokens: string[],\n): FormSubmissionModel {\n // Clear data from submission on fields that are hidden on visible pages\n return elements.reduce<FormSubmissionModel>((model, element) => {\n switch (element.type) {\n // For content element types, we just need to set true for shown and false for hidden.\n // This is to allow renderers of the data to know when to show/hide the content\n case 'image':\n case 'heading':\n case 'html': {\n if (\n !stripBinaryData &&\n !formElementsConditionallyShown?.[element.name]?.isHidden\n ) {\n model[element.name] = true\n }\n break\n }\n // Need to remove captcha tokens and save\n // them to POST them to the server for validation\n case 'captcha': {\n const token = submission[element.name]\n if (typeof token === 'string') {\n captchaTokens.push(token)\n }\n break\n }\n case 'files': {\n const value = submission[element.name] as\n | Array<Record<string, unknown>>\n | undefined\n const hasBinaryData =\n checkIsUsingLegacyStorage(element) ||\n (Array.isArray(value) &&\n value.some((attachment) => !!attachment.data))\n if (\n (!stripBinaryData || !hasBinaryData) &&\n !formElementsConditionallyShown?.[element.name]?.isHidden\n ) {\n model[element.name] = submission[element.name]\n }\n break\n }\n case 'camera':\n case 'draw': {\n const value = submission[element.name] as\n | Record<string, unknown>\n | undefined\n const hasBinaryData =\n checkIsUsingLegacyStorage(element) || !!value?.data\n if (\n (!stripBinaryData || !hasBinaryData) &&\n !formElementsConditionallyShown?.[element.name]?.isHidden\n ) {\n model[element.name] = submission[element.name]\n }\n break\n }\n case 'infoPage':\n case 'form': {\n // Here we will check to make sure that each embedded form\n // also has its values wiped if the element is hidden based on conditional logic\n const nestedElements = element.elements\n const nestedModel = submission[element.name] as\n | FormSubmissionModel\n | undefined\n const nestedFormElementConditionallyShown =\n formElementsConditionallyShown?.[element.name]\n if (\n !formElementsConditionallyShown?.[element.name]?.isHidden &&\n Array.isArray(nestedElements)\n ) {\n model[element.name] = cleanElementValue(\n nestedModel || {},\n nestedElements,\n nestedFormElementConditionallyShown?.type === 'formElements'\n ? nestedFormElementConditionallyShown.formElements\n : undefined,\n stripBinaryData,\n captchaTokens,\n )\n }\n break\n }\n case 'repeatableSet': {\n // Here we will check to make sure that each repeatable set entry\n // also has its values wiped if the element is hidden based on conditional logic\n const nestedElements = element.elements\n const entries = submission[element.name] as\n | Array<FormSubmissionModel>\n | undefined\n const formElementConditionallyShown =\n formElementsConditionallyShown?.[element.name]\n if (\n !formElementConditionallyShown?.isHidden &&\n Array.isArray(nestedElements) &&\n Array.isArray(entries) &&\n entries.length\n ) {\n model[element.name] = entries.map((entry, index) => {\n return cleanElementValue(\n entry || {},\n nestedElements,\n formElementConditionallyShown?.type === 'repeatableSet'\n ? formElementConditionallyShown.entries?.[index.toString()]\n : undefined,\n stripBinaryData,\n captchaTokens,\n )\n })\n }\n break\n }\n case 'civicaNameRecord': {\n const civicaNameRecord = submission[element.name] as\n | CivicaTypes.CivicaNameRecord\n | undefined\n if (\n formElementsConditionallyShown?.[element.name]?.isHidden ||\n !civicaNameRecord\n ) {\n break\n }\n\n for (const key in civicaNameRecord) {\n if (\n civicaNameRecord[key as keyof CivicaTypes.CivicaNameRecord] ===\n undefined\n ) {\n continue\n }\n\n if (\n !element.useGeoscapeAddressing ||\n !Array.isArray(civicaNameRecord.streetAddress)\n ) {\n model[element.name] = civicaNameRecord\n break\n }\n\n const streetAddresses = civicaNameRecord.streetAddress.map(\n (streetAddress) => {\n if (typeof streetAddress.address1 === 'object') {\n const geoscapeAddress = streetAddress.address1 as\n | GeoscapeTypes.GeoscapeAddress\n | undefined\n return {\n address1: [\n geoscapeAddress?.addressDetails?.streetNumber1,\n geoscapeAddress?.addressDetails?.streetName,\n geoscapeAddress?.addressDetails?.streetType,\n ]\n .filter((str) => !!str)\n .join(' '),\n address2: geoscapeAddress?.addressDetails?.localityName,\n postcode: geoscapeAddress?.addressDetails?.postcode,\n }\n }\n return streetAddress\n },\n )\n model[element.name] = {\n ...civicaNameRecord,\n streetAddress: streetAddresses,\n }\n }\n break\n }\n case 'compliance': {\n if (\n formElementsConditionallyShown?.[element.name]?.isHidden ||\n !submission[element.name]\n ) {\n break\n }\n if (stripBinaryData) {\n model[element.name] = {\n ...(submission[element.name] as ComplianceValue),\n files: undefined,\n }\n } else {\n model[element.name] = submission[element.name]\n }\n break\n }\n case 'page':\n case 'section': {\n if (!formElementsConditionallyShown?.[element.id]?.isHidden) {\n const nestedModel = cleanElementValue(\n submission,\n element.elements,\n formElementsConditionallyShown,\n stripBinaryData,\n captchaTokens,\n )\n Object.assign(model, nestedModel)\n }\n break\n }\n default: {\n if (!formElementsConditionallyShown?.[element.name]?.isHidden) {\n model[element.name] = submission[element.name]\n }\n }\n }\n\n return model\n }, {})\n}\n\nexport default function cleanFormSubmissionModel(\n submission: FormSubmissionModel,\n elements: FormTypes.FormElement[],\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined,\n stripBinaryData: boolean,\n): {\n model: FormSubmissionModel\n captchaTokens: string[]\n} {\n // Clear data from submission on fields that are hidden on visible pages\n const captchaTokens: string[] = []\n const model = cleanElementValue(\n submission,\n elements,\n formElementsConditionallyShown,\n stripBinaryData,\n captchaTokens,\n )\n return {\n model,\n captchaTokens,\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"cleanFormSubmissionModel.js","sourceRoot":"","sources":["../../src/services/cleanFormSubmissionModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { CivicaTypes, FormTypes, GeoscapeTypes } from '@oneblink/types'\nimport { Value as ComplianceValue } from '../form-elements/FormElementCompliance'\nimport {\n FormElementsConditionallyShown,\n FormSubmissionModel,\n} from '../types/form'\nimport { checkIsUsingLegacyStorage } from './attachments'\n\nfunction cleanElementValue(\n submission: FormSubmissionModel,\n elements: FormTypes.FormElement[],\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined,\n stripBinaryData: boolean,\n captchaTokens: string[],\n): FormSubmissionModel {\n // Clear data from submission on fields that are hidden on visible pages\n return elements.reduce<FormSubmissionModel>((model, element) => {\n switch (element.type) {\n // For content element types, we just need to set true for shown and false for hidden.\n // This is to allow renderers of the data to know when to show/hide the content\n case 'image':\n case 'heading':\n case 'html': {\n if (\n !stripBinaryData &&\n !formElementsConditionallyShown?.[element.name]?.isHidden\n ) {\n model[element.name] = true\n }\n break\n }\n // Need to remove captcha tokens and save\n // them to POST them to the server for validation\n case 'captcha': {\n const token = submission[element.name]\n if (typeof token === 'string') {\n captchaTokens.push(token)\n }\n break\n }\n case 'files': {\n const value = submission[element.name] as\n | Array<Record<string, unknown>>\n | undefined\n const hasBinaryData =\n checkIsUsingLegacyStorage(element) ||\n (Array.isArray(value) &&\n value.some((attachment) => !!attachment.data))\n if (\n (!stripBinaryData || !hasBinaryData) &&\n !formElementsConditionallyShown?.[element.name]?.isHidden\n ) {\n model[element.name] = submission[element.name]\n }\n break\n }\n case 'camera':\n case 'draw': {\n const value = submission[element.name] as\n | Record<string, unknown>\n | undefined\n const hasBinaryData =\n checkIsUsingLegacyStorage(element) || !!value?.data\n if (\n (!stripBinaryData || !hasBinaryData) &&\n !formElementsConditionallyShown?.[element.name]?.isHidden\n ) {\n model[element.name] = submission[element.name]\n }\n break\n }\n case 'infoPage':\n case 'form': {\n // Here we will check to make sure that each embedded form\n // also has its values wiped if the element is hidden based on conditional logic\n const nestedElements = element.elements\n const nestedModel = submission[element.name] as\n | FormSubmissionModel\n | undefined\n const nestedFormElementConditionallyShown =\n formElementsConditionallyShown?.[element.name]\n if (\n !formElementsConditionallyShown?.[element.name]?.isHidden &&\n Array.isArray(nestedElements)\n ) {\n model[element.name] = cleanElementValue(\n nestedModel || {},\n nestedElements,\n nestedFormElementConditionallyShown?.type === 'formElements'\n ? nestedFormElementConditionallyShown.formElements\n : undefined,\n stripBinaryData,\n captchaTokens,\n )\n }\n break\n }\n case 'repeatableSet': {\n // Here we will check to make sure that each repeatable set entry\n // also has its values wiped if the element is hidden based on conditional logic\n const nestedElements = element.elements\n const entries = submission[element.name] as\n | Array<FormSubmissionModel>\n | undefined\n const formElementConditionallyShown =\n formElementsConditionallyShown?.[element.name]\n if (\n !formElementConditionallyShown?.isHidden &&\n Array.isArray(nestedElements) &&\n Array.isArray(entries) &&\n entries.length\n ) {\n model[element.name] = entries.map((entry, index) => {\n return cleanElementValue(\n entry || {},\n nestedElements,\n formElementConditionallyShown?.type === 'repeatableSet'\n ? formElementConditionallyShown.entries?.[index.toString()]\n : undefined,\n stripBinaryData,\n captchaTokens,\n )\n })\n }\n break\n }\n case 'civicaNameRecord': {\n const civicaNameRecord = submission[element.name] as\n | CivicaTypes.CivicaNameRecord\n | undefined\n if (\n formElementsConditionallyShown?.[element.name]?.isHidden ||\n !civicaNameRecord\n ) {\n break\n }\n\n for (const key in civicaNameRecord) {\n if (\n civicaNameRecord[key as keyof CivicaTypes.CivicaNameRecord] ===\n undefined\n ) {\n continue\n }\n\n if (\n !element.useGeoscapeAddressing ||\n !Array.isArray(civicaNameRecord.streetAddress)\n ) {\n model[element.name] = civicaNameRecord\n break\n }\n\n const streetAddresses = civicaNameRecord.streetAddress.map(\n (streetAddress) => {\n if (typeof streetAddress.address1 === 'object') {\n const geoscapeAddress = streetAddress.address1 as\n | GeoscapeTypes.GeoscapeAddress\n | undefined\n return {\n address1: [\n geoscapeAddress?.addressDetails?.streetNumber1,\n geoscapeAddress?.addressDetails?.streetName,\n geoscapeAddress?.addressDetails?.streetType,\n ]\n .filter((str) => !!str)\n .join(' '),\n address2: geoscapeAddress?.addressDetails?.localityName,\n postcode: geoscapeAddress?.addressDetails?.postcode,\n }\n }\n return streetAddress\n },\n )\n model[element.name] = {\n ...civicaNameRecord,\n streetAddress: streetAddresses,\n }\n }\n break\n }\n case 'compliance': {\n if (\n formElementsConditionallyShown?.[element.name]?.isHidden ||\n !submission[element.name]\n ) {\n break\n }\n const checklistObject = submission[element.name] as ComplianceValue\n const notes = checklistObject?.notes?.trim()\n if (stripBinaryData) {\n model[element.name] = {\n ...checklistObject,\n notes: notes,\n files: undefined,\n }\n } else {\n model[element.name] = {\n ...checklistObject,\n notes: notes,\n }\n }\n break\n }\n case 'page':\n case 'section': {\n if (!formElementsConditionallyShown?.[element.id]?.isHidden) {\n const nestedModel = cleanElementValue(\n submission,\n element.elements,\n formElementsConditionallyShown,\n stripBinaryData,\n captchaTokens,\n )\n Object.assign(model, nestedModel)\n }\n break\n }\n default: {\n if (!formElementsConditionallyShown?.[element.name]?.isHidden) {\n const value = submission[element.name]\n switch (element.type) {\n case 'text':\n case 'textarea':\n case 'email':\n case 'barcodeScanner':\n case 'telephone': {\n model[element.name] =\n typeof value === 'string'\n ? value.trim()\n : submission[element.name]\n break\n }\n default: {\n model[element.name] = value\n }\n }\n }\n }\n }\n\n return model\n }, {})\n}\n\nexport default function cleanFormSubmissionModel(\n submission: FormSubmissionModel,\n elements: FormTypes.FormElement[],\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined,\n stripBinaryData: boolean,\n): {\n model: FormSubmissionModel\n captchaTokens: string[]\n} {\n // Clear data from submission on fields that are hidden on visible pages\n const captchaTokens: string[] = []\n const model = cleanElementValue(\n submission,\n elements,\n formElementsConditionallyShown,\n stripBinaryData,\n captchaTokens,\n )\n return {\n model,\n captchaTokens,\n }\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": "0.5.8
|
4
|
+
"version": "0.5.8",
|
5
5
|
"author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
|
6
6
|
"bugs": {
|
7
7
|
"url": "https://github.com/oneblink/apps-react/issues"
|
@@ -9,7 +9,7 @@
|
|
9
9
|
"dependencies": {
|
10
10
|
"@blinkmobile/geolocation": "^2.0.3",
|
11
11
|
"@material-ui/core": "^4.12.3",
|
12
|
-
"@oneblink/sdk-core": "^0.3.
|
12
|
+
"@oneblink/sdk-core": "^0.3.4-beta.1",
|
13
13
|
"@react-google-maps/api": "^2.4.0",
|
14
14
|
"blueimp-load-image": "^5.14.0",
|
15
15
|
"bulma": "^0.9.3",
|
@@ -1,13 +0,0 @@
|
|
1
|
-
export default function flattenFormElements(elements) {
|
2
|
-
return elements.reduce((flattenedElements, element) => {
|
3
|
-
flattenedElements.push(element);
|
4
|
-
switch (element.type) {
|
5
|
-
case 'section':
|
6
|
-
case 'page': {
|
7
|
-
flattenedElements.push(...flattenFormElements(element.elements));
|
8
|
-
}
|
9
|
-
}
|
10
|
-
return flattenedElements;
|
11
|
-
}, []);
|
12
|
-
}
|
13
|
-
//# sourceMappingURL=flattenFormElements.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"flattenFormElements.js","sourceRoot":"","sources":["../../src/services/flattenFormElements.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,mBAAmB,CACzC,QAAiC;IAEjC,OAAO,QAAQ,CAAC,MAAM,CACpB,CAAC,iBAAiB,EAAE,OAAO,EAAE,EAAE;QAC7B,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/B,QAAQ,OAAO,CAAC,IAAI,EAAE;YACpB,KAAK,SAAS,CAAC;YACf,KAAK,MAAM,CAAC,CAAC;gBACX,iBAAiB,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;aACjE;SACF;QACD,OAAO,iBAAiB,CAAA;IAC1B,CAAC,EACD,EAAE,CACH,CAAA;AACH,CAAC","sourcesContent":["import { FormTypes } from '@oneblink/types'\n\nexport default function flattenFormElements(\n elements: FormTypes.FormElement[],\n): FormTypes.FormElement[] {\n return elements.reduce<FormTypes.FormElement[]>(\n (flattenedElements, element) => {\n flattenedElements.push(element)\n switch (element.type) {\n case 'section':\n case 'page': {\n flattenedElements.push(...flattenFormElements(element.elements))\n }\n }\n return flattenedElements\n },\n [],\n )\n}\n"]}
|