@oneblink/apps-react 0.5.8-beta.1 → 0.5.8-beta.2

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.
@@ -1,139 +1,20 @@
1
1
  import { Sentry } from '@oneblink/apps';
2
2
  import * as React from 'react';
3
- import conditionallyShowElement from '../services/conditionally-show-element';
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 handleConditionallyShowElement = React.useCallback((formElementsCtrl, element) => {
9
- try {
10
- return conditionallyShowElement(formElementsCtrl, element, []);
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(definition.elements, submission, undefined);
132
- }, [
133
- definition.elements,
134
- generateFormElementsConditionallyShown,
135
- submission,
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":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,wBAEN,MAAM,wCAAwC,CAAA;AAC/C,OAAO,uBAAuB,MAAM,uCAAuC,CAAA;AAC3E,OAAO,mBAAmB,MAAM,iCAAiC,CAAA;AAQjE,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,8BAA8B,GAAG,KAAK,CAAC,WAAW,CACtD,CAAC,gBAAkC,EAAE,OAA8B,EAAE,EAAE;QACrE,IAAI;YACF,OAAO,wBAAwB,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;SAC/D;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,IAAI,CACV,sDAAsD,EACtD,KAAK,CACN,CAAA;YACD,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;YAC9B,wBAAwB,CAAC,KAAc,CAAC,CAAA;YACxC,OAAO,KAAK,CAAA;SACb;IACH,CAAC,EACD,EAAE,CACH,CAAA;IAED,MAAM,6BAA6B,GAAG,KAAK,CAAC,WAAW,CACrD,CACE,gBAAkC,EAClC,OAAyC,EACzC,MAAqC,EACrC,EAAE;QACF,IAAI;YACF,OAAO,uBAAuB,CAAC,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;SACtE;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;YAC9B,wBAAwB,CAAC,KAAc,CAAC,CAAA;YACxC,OAAO,KAAK,CAAA;SACb;IACH,CAAC,EACD,EAAE,CACH,CAAA;IAED,MAAM,sCAAsC,GAAG,KAAK,CAAC,WAAW,CAC9D,CACE,QAAiC,EACjC,KAA0B,EAC1B,sBAAkE,EAClC,EAAE;QAClC,MAAM,gBAAgB,GAAG;YACvB,iBAAiB,EAAE,mBAAmB,CAAC,QAAQ,CAAC;YAChD,KAAK;YACL,sBAAsB;SACvB,CAAA;QACD,OAAO,gBAAgB,CAAC,iBAAiB,CAAC,MAAM,CAC9C,CAAC,8BAA8B,EAAE,OAAO,EAAE,EAAE;YAC1C,QAAQ,OAAO,CAAC,IAAI,EAAE;gBACpB,KAAK,SAAS,CAAC;gBACf,KAAK,MAAM,CAAC,CAAC;oBACX,MAAM,6BAA6B,GACjC,8BAA8B,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;oBAC5C,MAAM,QAAQ,GAAG,6BAA6B;wBAC5C,CAAC,CAAC,6BAA6B,CAAC,QAAQ;wBACxC,CAAC,CAAC,CAAC,8BAA8B,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;oBAE9D,8BAA8B,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG;wBAC3C,IAAI,EAAE,aAAa;wBACnB,QAAQ;qBACT,CAAA;oBAED,+DAA+D;oBAC/D,IAAI,QAAQ,EAAE;wBACZ,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;4BACxC,QAAQ,YAAY,CAAC,IAAI,EAAE;gCACzB,KAAK,SAAS,CAAC;gCACf,KAAK,MAAM,CAAC,CAAC;oCACX,8BAA8B,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG;wCAChD,IAAI,EAAE,aAAa;wCACnB,QAAQ,EAAE,IAAI;qCACf,CAAA;oCACD,MAAK;iCACN;gCACD,OAAO,CAAC,CAAC;oCACP,8BAA8B,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG;wCAClD,IAAI,EAAE,aAAa;wCACnB,QAAQ,EAAE,IAAI;qCACf,CAAA;iCACF;6BACF;wBACH,CAAC,CAAC,CAAA;qBACH;oBACD,MAAK;iBACN;gBACD,KAAK,UAAU,CAAC;gBAChB,KAAK,MAAM,CAAC,CAAC;oBACX,IAAI,8BAA8B,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;wBAChD,MAAK;qBACN;oBACD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAEzB,CAAA;oBACb,8BAA8B,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;wBAC7C,IAAI,EAAE,cAAc;wBACpB,QAAQ,EAAE,CAAC,8BAA8B,CACvC,gBAAgB,EAChB,OAAO,CACR;wBACD,YAAY,EAAE,sCAAsC,CAClD,OAAO,CAAC,QAAQ,IAAI,EAAE,EACtB,WAAW,IAAI,EAAE,EACjB,gBAAgB,CACjB;qBACF,CAAA;oBACD,MAAK;iBACN;gBACD,KAAK,eAAe,CAAC,CAAC;oBACpB,IAAI,8BAA8B,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;wBAChD,MAAK;qBACN;oBACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAEtC,CAAA;oBACb,8BAA8B,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;wBAC7C,IAAI,EAAE,eAAe;wBACrB,QAAQ,EAAE,CAAC,8BAA8B,CACvC,gBAAgB,EAChB,OAAO,CACR;wBACD,OAAO,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAC7B,CACE,MAGC,EACD,KAAK,EACL,KAAK,EACL,EAAE;4BACF,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gCACtB,sCAAsC,CACpC,OAAO,CAAC,QAAQ,EAChB,KAAK,EACL,gBAAgB,CACjB,CAAA;4BACH,OAAO,MAAM,CAAA;wBACf,CAAC,EACD,EAAE,CACH;qBACF,CAAA;oBACD,MAAK;iBACN;gBACD,OAAO,CAAC,CAAC;oBACP,IAAI,8BAA8B,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;wBAChD,MAAK;qBACN;oBACD,MAAM,6BAA6B,GACjC;wBACE,IAAI,EAAE,aAAa;wBACnB,QAAQ,EAAE,CAAC,8BAA8B,CACvC,gBAAgB,EAChB,OAAO,CACR;qBACF,CAAA;oBAEH,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE;wBAC3C,QAAQ,OAAO,CAAC,IAAI,EAAE;4BACpB,KAAK,YAAY,CAAC;4BAClB,KAAK,cAAc,CAAC;4BACpB,KAAK,OAAO,CAAC;4BACb,KAAK,YAAY,CAAC;4BAClB,KAAK,QAAQ,CAAC,CAAC;gCACb,IACE,OAAO,CAAC,wBAAwB;oCAChC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAC9B;oCACA,6BAA6B,CAAC,OAAO;wCACnC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAChC,6BAA6B,CAC3B,gBAAgB,EAChB,OAAO,EACP,MAAM,CACP,CACF,CAAA;iCACJ;gCACD,MAAK;6BACN;yBACF;qBACF;oBAED,8BAA8B,CAAC,OAAO,CAAC,IAAI,CAAC;wBAC1C,6BAA6B,CAAA;iBAChC;aACF;YAED,OAAO,8BAA8B,CAAA;QACvC,CAAC,EACD,EAAE,CACH,CAAA;IACH,CAAC,EACD,CAAC,8BAA8B,EAAE,6BAA6B,CAAC,CAChE,CAAA;IAED,MAAM,8BAA8B,GAClC,KAAK,CAAC,OAAO,CAAiC,GAAG,EAAE;QACjD,OAAO,sCAAsC,CAC3C,UAAU,CAAC,QAAQ,EACnB,UAAU,EACV,SAAS,CACV,CAAA;IACH,CAAC,EAAE;QACD,UAAU,CAAC,QAAQ;QACnB,sCAAsC;QACtC,UAAU;KACX,CAAC,CAAA;IAEJ,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'\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 flattenFormElements from '../services/flattenFormElements';
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,iCAAiC,CAAA;AACjE,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,UAAU,CAAC,QAAQ,CAAC,EAC9C,CAAC,UAAU,CAAC,QAAQ,CAAC,CACtB,CAAA;AACH,CAAC","sourcesContent":["import { FormTypes } from '@oneblink/types'\nimport * as React from 'react'\nimport flattenFormElements from '../services/flattenFormElements'\nimport useFormDefinition from './useFormDefinition'\n\nexport default function useFlattenElements(): FormTypes.FormElement[] {\n const definition = useFormDefinition()\n return React.useMemo(\n () => flattenFormElements(definition.elements),\n [definition.elements],\n )\n}\n"]}
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,47 @@ 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
- ...submission[element.name],
132
+ ...checklistObject,
133
+ notes: notes,
131
134
  files: undefined,
132
135
  };
133
136
  }
134
137
  else {
135
- model[element.name] = submission[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 (!((_g = formElementsConditionallyShown === null || formElementsConditionallyShown === void 0 ? void 0 : formElementsConditionallyShown[element.id]) === null || _g === void 0 ? void 0 : _g.isHidden)) {
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 (!((_h = formElementsConditionallyShown === null || formElementsConditionallyShown === void 0 ? void 0 : formElementsConditionallyShown[element.name]) === null || _h === void 0 ? void 0 : _h.isHidden)) {
149
- model[element.name] = submission[element.name];
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] = value.trim();
163
+ break;
164
+ }
165
+ default: {
166
+ model[element.name] = value;
167
+ }
168
+ }
150
169
  }
151
170
  }
152
171
  }
@@ -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] as string\n switch (element.type) {\n case 'text':\n case 'textarea':\n case 'email':\n case 'barcodeScanner':\n case 'telephone': {\n model[element.name] = value.trim()\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-beta.1",
4
+ "version": "0.5.8-beta.2",
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.2-beta.6",
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,2 +0,0 @@
1
- import { FormTypes } from '@oneblink/types';
2
- export default function flattenFormElements(elements: FormTypes.FormElement[]): FormTypes.FormElement[];
@@ -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"]}