@oneblink/sdk-core 8.11.1-beta.4 → 9.0.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/abnService.d.ts +5 -5
- package/dist/abnService.js +9 -17
- package/dist/abnService.js.map +1 -1
- package/dist/conditionalLogicService/conditionallyShowElement.d.ts +1 -1
- package/dist/conditionalLogicService/conditionallyShowElement.js +4 -11
- package/dist/conditionalLogicService/conditionallyShowElement.js.map +1 -1
- package/dist/conditionalLogicService/conditionallyShowOption.d.ts +1 -1
- package/dist/conditionalLogicService/conditionallyShowOption.js +10 -18
- package/dist/conditionalLogicService/conditionallyShowOption.js.map +1 -1
- package/dist/conditionalLogicService/evaluateConditionalOptionsPredicate.js +2 -6
- package/dist/conditionalLogicService/evaluateConditionalOptionsPredicate.js.map +1 -1
- package/dist/conditionalLogicService/evaluateConditionalPredicate.d.ts +1 -1
- package/dist/conditionalLogicService/evaluateConditionalPredicate.js +14 -22
- package/dist/conditionalLogicService/evaluateConditionalPredicate.js.map +1 -1
- package/dist/conditionalLogicService/generateFormElementsConditionallyShown.js +12 -19
- package/dist/conditionalLogicService/generateFormElementsConditionallyShown.js.map +1 -1
- package/dist/conditionalLogicService/types.js +1 -2
- package/dist/conditionalLogicService.d.ts +1 -1
- package/dist/conditionalLogicService.js +6 -26
- package/dist/conditionalLogicService.js.map +1 -1
- package/dist/fileUploadService.js +2 -6
- package/dist/fileUploadService.js.map +1 -1
- package/dist/form-elements-regex.js +10 -14
- package/dist/form-elements-regex.js.map +1 -1
- package/dist/formElementsService.d.ts +2 -3
- package/dist/formElementsService.js +4 -15
- package/dist/formElementsService.js.map +1 -1
- package/dist/freshdeskService.d.ts +1 -1
- package/dist/freshdeskService.js +23 -31
- package/dist/freshdeskService.js.map +1 -1
- package/dist/goodToGoService.d.ts +1 -1
- package/dist/goodToGoService.js +2 -6
- package/dist/goodToGoService.js.map +1 -1
- package/dist/index.d.ts +14 -14
- package/dist/index.js +14 -50
- package/dist/index.js.map +1 -1
- package/dist/paymentService.d.ts +1 -1
- package/dist/paymentService.js +11 -18
- package/dist/paymentService.js.map +1 -1
- package/dist/replaceCustomValues.js +42 -50
- package/dist/replaceCustomValues.js.map +1 -1
- package/dist/schedulingService.js +3 -6
- package/dist/schedulingService.js.map +1 -1
- package/dist/sharepointService.d.ts +1 -1
- package/dist/sharepointService.js +4 -8
- package/dist/sharepointService.js.map +1 -1
- package/dist/submissionService.d.ts +1 -1
- package/dist/submissionService.js +4 -21
- package/dist/submissionService.js.map +1 -1
- package/dist/typeCastService.js +1 -5
- package/dist/typeCastService.js.map +1 -1
- package/dist/typedoc.d.ts +1 -1
- package/dist/typedoc.js +2 -18
- package/dist/typedoc.js.map +1 -1
- package/dist/types/resource-definitions.js +1 -2
- package/dist/userService.js +8 -11
- package/dist/userService.js.map +1 -1
- package/dist/webhookSubscriptionService.js +1 -3
- package/dist/webhookSubscriptionService.js.map +1 -1
- package/package.json +23 -25
package/dist/abnService.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MiscTypes } from '@oneblink/types';
|
|
2
2
|
/**
|
|
3
3
|
* Attempts to get the most relevant business name from the data returned in an
|
|
4
4
|
* `ABNRecord`. Will return `undefined` if a suitable name is not found.
|
|
@@ -12,7 +12,7 @@ import { ABNRecord } from '@oneblink/types/typescript/misc';
|
|
|
12
12
|
* @param abnRecord
|
|
13
13
|
* @returns
|
|
14
14
|
*/
|
|
15
|
-
export declare const getBusinessNameFromABNRecord: (abnRecord: ABNRecord) => string | undefined;
|
|
15
|
+
export declare const getBusinessNameFromABNRecord: (abnRecord: MiscTypes.ABNRecord) => string | undefined;
|
|
16
16
|
/**
|
|
17
17
|
* Get the most relevant business name from the data returned in an `ABNRecord`.
|
|
18
18
|
* Will return "Unknown Business Name" if a suitable name is not found.
|
|
@@ -27,7 +27,7 @@ export declare const getBusinessNameFromABNRecord: (abnRecord: ABNRecord) => str
|
|
|
27
27
|
* @param abnRecord
|
|
28
28
|
* @returns
|
|
29
29
|
*/
|
|
30
|
-
export declare const displayBusinessNameFromABNRecord: (abnRecord: ABNRecord) => string;
|
|
30
|
+
export declare const displayBusinessNameFromABNRecord: (abnRecord: MiscTypes.ABNRecord) => string;
|
|
31
31
|
/**
|
|
32
32
|
* Attempts to get the most recent ABN number from the data returned in an
|
|
33
33
|
* `ABNRecord`. Will return `undefined` if an ABN is not found.
|
|
@@ -41,7 +41,7 @@ export declare const displayBusinessNameFromABNRecord: (abnRecord: ABNRecord) =>
|
|
|
41
41
|
* @param abnRecord
|
|
42
42
|
* @returns
|
|
43
43
|
*/
|
|
44
|
-
export declare const getABNNumberFromABNRecord: (abnRecord: ABNRecord) => string | undefined;
|
|
44
|
+
export declare const getABNNumberFromABNRecord: (abnRecord: MiscTypes.ABNRecord) => string | undefined;
|
|
45
45
|
/**
|
|
46
46
|
* Attempts to get the most recent ABN number from the data returned in an
|
|
47
47
|
* `ABNRecord`. Will return "Unknown ABN Number" if an ABN is not found.
|
|
@@ -55,4 +55,4 @@ export declare const getABNNumberFromABNRecord: (abnRecord: ABNRecord) => string
|
|
|
55
55
|
* @param abnRecord
|
|
56
56
|
* @returns
|
|
57
57
|
*/
|
|
58
|
-
export declare const displayABNNumberFromABNRecord: (abnRecord: ABNRecord) => string;
|
|
58
|
+
export declare const displayABNNumberFromABNRecord: (abnRecord: MiscTypes.ABNRecord) => string;
|
package/dist/abnService.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.displayABNNumberFromABNRecord = exports.getABNNumberFromABNRecord = exports.displayBusinessNameFromABNRecord = exports.getBusinessNameFromABNRecord = void 0;
|
|
4
1
|
const createLegalName = ({ familyName, givenName, otherGivenName, }) => {
|
|
5
2
|
let legalName = '';
|
|
6
3
|
// Concat last name
|
|
@@ -27,17 +24,16 @@ const createLegalName = ({ familyName, givenName, otherGivenName, }) => {
|
|
|
27
24
|
* @param abnRecord
|
|
28
25
|
* @returns
|
|
29
26
|
*/
|
|
30
|
-
const getBusinessNameFromABNRecord = (abnRecord) => {
|
|
31
|
-
var _a, _b;
|
|
27
|
+
export const getBusinessNameFromABNRecord = (abnRecord) => {
|
|
32
28
|
if (abnRecord.entityType.entityTypeCode === 'IND' && abnRecord.legalName) {
|
|
33
29
|
const legalName = createLegalName(abnRecord.legalName);
|
|
34
30
|
if (legalName)
|
|
35
31
|
return legalName.trim();
|
|
36
32
|
}
|
|
37
|
-
if (
|
|
33
|
+
if (abnRecord.mainName?.organisationName) {
|
|
38
34
|
return abnRecord.mainName.organisationName;
|
|
39
35
|
}
|
|
40
|
-
if (
|
|
36
|
+
if (abnRecord.mainTradingName?.organisationName) {
|
|
41
37
|
return abnRecord.mainTradingName.organisationName;
|
|
42
38
|
}
|
|
43
39
|
if (abnRecord.legalName) {
|
|
@@ -46,7 +42,6 @@ const getBusinessNameFromABNRecord = (abnRecord) => {
|
|
|
46
42
|
return legalName.trim();
|
|
47
43
|
}
|
|
48
44
|
};
|
|
49
|
-
exports.getBusinessNameFromABNRecord = getBusinessNameFromABNRecord;
|
|
50
45
|
/**
|
|
51
46
|
* Get the most relevant business name from the data returned in an `ABNRecord`.
|
|
52
47
|
* Will return "Unknown Business Name" if a suitable name is not found.
|
|
@@ -61,11 +56,10 @@ exports.getBusinessNameFromABNRecord = getBusinessNameFromABNRecord;
|
|
|
61
56
|
* @param abnRecord
|
|
62
57
|
* @returns
|
|
63
58
|
*/
|
|
64
|
-
const displayBusinessNameFromABNRecord = (abnRecord) => {
|
|
65
|
-
const businessName =
|
|
59
|
+
export const displayBusinessNameFromABNRecord = (abnRecord) => {
|
|
60
|
+
const businessName = getBusinessNameFromABNRecord(abnRecord);
|
|
66
61
|
return businessName || 'ABN Details Suppressed';
|
|
67
62
|
};
|
|
68
|
-
exports.displayBusinessNameFromABNRecord = displayBusinessNameFromABNRecord;
|
|
69
63
|
/**
|
|
70
64
|
* Attempts to get the most recent ABN number from the data returned in an
|
|
71
65
|
* `ABNRecord`. Will return `undefined` if an ABN is not found.
|
|
@@ -79,16 +73,15 @@ exports.displayBusinessNameFromABNRecord = displayBusinessNameFromABNRecord;
|
|
|
79
73
|
* @param abnRecord
|
|
80
74
|
* @returns
|
|
81
75
|
*/
|
|
82
|
-
const getABNNumberFromABNRecord = (abnRecord) => {
|
|
76
|
+
export const getABNNumberFromABNRecord = (abnRecord) => {
|
|
83
77
|
if (!abnRecord.ABN)
|
|
84
78
|
return;
|
|
85
79
|
if (Array.isArray(abnRecord.ABN)) {
|
|
86
80
|
const relevantABN = abnRecord.ABN.find((abn) => abn.isCurrentIndicator === 'Y');
|
|
87
|
-
return relevantABN
|
|
81
|
+
return relevantABN?.identifierValue;
|
|
88
82
|
}
|
|
89
83
|
return abnRecord.ABN.identifierValue;
|
|
90
84
|
};
|
|
91
|
-
exports.getABNNumberFromABNRecord = getABNNumberFromABNRecord;
|
|
92
85
|
/**
|
|
93
86
|
* Attempts to get the most recent ABN number from the data returned in an
|
|
94
87
|
* `ABNRecord`. Will return "Unknown ABN Number" if an ABN is not found.
|
|
@@ -102,9 +95,8 @@ exports.getABNNumberFromABNRecord = getABNNumberFromABNRecord;
|
|
|
102
95
|
* @param abnRecord
|
|
103
96
|
* @returns
|
|
104
97
|
*/
|
|
105
|
-
const displayABNNumberFromABNRecord = (abnRecord) => {
|
|
106
|
-
const abnNumber =
|
|
98
|
+
export const displayABNNumberFromABNRecord = (abnRecord) => {
|
|
99
|
+
const abnNumber = getABNNumberFromABNRecord(abnRecord);
|
|
107
100
|
return abnNumber || 'Unknown ABN Number';
|
|
108
101
|
};
|
|
109
|
-
exports.displayABNNumberFromABNRecord = displayABNNumberFromABNRecord;
|
|
110
102
|
//# sourceMappingURL=abnService.js.map
|
package/dist/abnService.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abnService.js","sourceRoot":"","sources":["../src/abnService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"abnService.js","sourceRoot":"","sources":["../src/abnService.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG,CAAC,EACvB,UAAU,EACV,SAAS,EACT,cAAc,GACgC,EAAE,EAAE;IAClD,IAAI,SAAS,GAAG,EAAE,CAAA;IAClB,mBAAmB;IACnB,IAAI,UAAU;QAAE,SAAS,IAAI,GAAG,UAAU,IAAI,CAAA;IAC9C,oBAAoB;IACpB,IAAI,SAAS;QAAE,SAAS,IAAI,GAAG,SAAS,GAAG,CAAA;IAC3C,qBAAqB;IACrB,IAAI,cAAc;QAAE,SAAS,IAAI,GAAG,cAAc,EAAE,CAAA;IAEpD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,SAA8B,EACV,EAAE;IACtB,IAAI,SAAS,CAAC,UAAU,CAAC,cAAc,KAAK,KAAK,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACzE,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QACtD,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC,IAAI,EAAE,CAAA;IACxC,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QACzC,OAAO,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAA;IAC5C,CAAC;IACD,IAAI,SAAS,CAAC,eAAe,EAAE,gBAAgB,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC,eAAe,CAAC,gBAAgB,CAAA;IACnD,CAAC;IACD,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QACtD,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC,IAAI,EAAE,CAAA;IACxC,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,SAA8B,EACtB,EAAE;IACV,MAAM,YAAY,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAA;IAC5D,OAAO,YAAY,IAAI,wBAAwB,CAAA;AACjD,CAAC,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,SAA8B,EACV,EAAE;IACtB,IAAI,CAAC,SAAS,CAAC,GAAG;QAAE,OAAM;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CACpC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,CACxC,CAAA;QACD,OAAO,WAAW,EAAE,eAAe,CAAA;IACrC,CAAC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,eAAe,CAAA;AACtC,CAAC,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,SAA8B,EACtB,EAAE;IACV,MAAM,SAAS,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAA;IACtD,OAAO,SAAS,IAAI,oBAAoB,CAAA;AAC1C,CAAC,CAAA","sourcesContent":["import { MiscTypes } from '@oneblink/types'\n\nconst createLegalName = ({\n familyName,\n givenName,\n otherGivenName,\n}: NonNullable<MiscTypes.ABNRecord['legalName']>) => {\n let legalName = ''\n // Concat last name\n if (familyName) legalName += `${familyName}, `\n // Concat first name\n if (givenName) legalName += `${givenName} `\n // Concat middle name\n if (otherGivenName) legalName += `${otherGivenName}`\n\n return legalName\n}\n\n/**\n * Attempts to get the most relevant business name from the data returned in an\n * `ABNRecord`. Will return `undefined` if a suitable name is not found.\n *\n * #### Example\n *\n * ```js\n * const businessName = abnService.getBusinessNameFromABNRecord(abnRecord)\n * ```\n *\n * @param abnRecord\n * @returns\n */\nexport const getBusinessNameFromABNRecord = (\n abnRecord: MiscTypes.ABNRecord,\n): string | undefined => {\n if (abnRecord.entityType.entityTypeCode === 'IND' && abnRecord.legalName) {\n const legalName = createLegalName(abnRecord.legalName)\n if (legalName) return legalName.trim()\n }\n\n if (abnRecord.mainName?.organisationName) {\n return abnRecord.mainName.organisationName\n }\n if (abnRecord.mainTradingName?.organisationName) {\n return abnRecord.mainTradingName.organisationName\n }\n if (abnRecord.legalName) {\n const legalName = createLegalName(abnRecord.legalName)\n if (legalName) return legalName.trim()\n }\n}\n\n/**\n * Get the most relevant business name from the data returned in an `ABNRecord`.\n * Will return \"Unknown Business Name\" if a suitable name is not found.\n *\n * #### Example\n *\n * ```js\n * const businessName =\n * abnService.displayBusinessNameFromABNRecord(abnRecord)\n * ```\n *\n * @param abnRecord\n * @returns\n */\nexport const displayBusinessNameFromABNRecord = (\n abnRecord: MiscTypes.ABNRecord,\n): string => {\n const businessName = getBusinessNameFromABNRecord(abnRecord)\n return businessName || 'ABN Details Suppressed'\n}\n\n/**\n * Attempts to get the most recent ABN number from the data returned in an\n * `ABNRecord`. Will return `undefined` if an ABN is not found.\n *\n * #### Example\n *\n * ```js\n * const ABN = abnService.getABNNumberFromABNRecord(abnRecord)\n * ```\n *\n * @param abnRecord\n * @returns\n */\nexport const getABNNumberFromABNRecord = (\n abnRecord: MiscTypes.ABNRecord,\n): string | undefined => {\n if (!abnRecord.ABN) return\n if (Array.isArray(abnRecord.ABN)) {\n const relevantABN = abnRecord.ABN.find(\n (abn) => abn.isCurrentIndicator === 'Y',\n )\n return relevantABN?.identifierValue\n }\n return abnRecord.ABN.identifierValue\n}\n\n/**\n * Attempts to get the most recent ABN number from the data returned in an\n * `ABNRecord`. Will return \"Unknown ABN Number\" if an ABN is not found.\n *\n * #### Example\n *\n * ```js\n * const ABN = abnService.displayABNNumberFromABNRecord(abnRecord)\n * ```\n *\n * @param abnRecord\n * @returns\n */\nexport const displayABNNumberFromABNRecord = (\n abnRecord: MiscTypes.ABNRecord,\n): string => {\n const abnNumber = getABNNumberFromABNRecord(abnRecord)\n return abnNumber || 'Unknown ABN Number'\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FormTypes, ConditionTypes } from '@oneblink/types';
|
|
2
|
-
import { FormElementsCtrl } from './types';
|
|
2
|
+
import { FormElementsCtrl } from './types.js';
|
|
3
3
|
export declare function conditionallyShowByPredicate(formElementsCtrl: FormElementsCtrl, predicate: ConditionTypes.ConditionalPredicate, elementsEvaluated: Array<{
|
|
4
4
|
id: string;
|
|
5
5
|
label: string;
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.conditionallyShowByPredicate = conditionallyShowByPredicate;
|
|
7
|
-
exports.default = conditionallyShowElement;
|
|
8
|
-
const evaluateConditionalPredicate_1 = __importDefault(require("./evaluateConditionalPredicate"));
|
|
1
|
+
import evaluateConditionalPredicate from './evaluateConditionalPredicate.js';
|
|
9
2
|
const getParentFormElements = (formElementsCtrl, childElement) => {
|
|
10
3
|
const parentElement = formElementsCtrl.flattenedElements.find((element) => {
|
|
11
4
|
return ((element.type === 'page' || element.type === 'section') &&
|
|
@@ -20,8 +13,8 @@ const getParentFormElements = (formElementsCtrl, childElement) => {
|
|
|
20
13
|
}
|
|
21
14
|
return [];
|
|
22
15
|
};
|
|
23
|
-
function conditionallyShowByPredicate(formElementsCtrl, predicate, elementsEvaluated) {
|
|
24
|
-
const predicateElement = (
|
|
16
|
+
export function conditionallyShowByPredicate(formElementsCtrl, predicate, elementsEvaluated) {
|
|
17
|
+
const predicateElement = evaluateConditionalPredicate({
|
|
25
18
|
predicate,
|
|
26
19
|
formElementsCtrl,
|
|
27
20
|
});
|
|
@@ -43,7 +36,7 @@ function conditionallyShowByPredicate(formElementsCtrl, predicate, elementsEvalu
|
|
|
43
36
|
// Check to see if the model has one of the valid values to show the element
|
|
44
37
|
return conditionallyShowElement(formElementsCtrl, predicateElement, elementsEvaluated);
|
|
45
38
|
}
|
|
46
|
-
function conditionallyShowElement(formElementsCtrl, elementToEvaluate, elementsEvaluated) {
|
|
39
|
+
export default function conditionallyShowElement(formElementsCtrl, elementToEvaluate, elementsEvaluated) {
|
|
47
40
|
// If the element does not have the `conditionallyShow` flag set,
|
|
48
41
|
// we can always show the element.
|
|
49
42
|
if (!elementToEvaluate ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditionallyShowElement.js","sourceRoot":"","sources":["../../src/conditionalLogicService/conditionallyShowElement.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"conditionallyShowElement.js","sourceRoot":"","sources":["../../src/conditionalLogicService/conditionallyShowElement.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, ConditionTypes } from '@oneblink/types'\nimport { FormElementsCtrl } from './types.js'\nimport evaluateConditionalPredicate from './evaluateConditionalPredicate.js'\n\nconst getParentFormElements = (\n formElementsCtrl: FormElementsCtrl,\n childElement: FormTypes.FormElement,\n): Array<FormTypes.SectionElement | FormTypes.PageElement> => {\n const parentElement = formElementsCtrl.flattenedElements.find((element) => {\n return (\n (element.type === 'page' || element.type === 'section') &&\n element.elements.some(({ id }) => id === childElement.id)\n )\n })\n if (\n parentElement &&\n (parentElement.type === 'page' || parentElement.type === 'section')\n ) {\n return [\n parentElement,\n ...getParentFormElements(formElementsCtrl, parentElement),\n ]\n }\n return []\n}\n\nexport function conditionallyShowByPredicate(\n formElementsCtrl: FormElementsCtrl,\n predicate: ConditionTypes.ConditionalPredicate,\n elementsEvaluated: Array<{ id: string; label: string }>,\n): boolean {\n const predicateElement = evaluateConditionalPredicate({\n predicate,\n formElementsCtrl,\n })\n\n if (!predicateElement) {\n return false\n }\n\n // Here we will also need to check if the predicate element\n // is on a page/section element and the page/section element\n // is also hidden. If it is hidden we will treat this\n // predicate element as hidden as well.\n const parentFormElements = getParentFormElements(\n formElementsCtrl,\n predicateElement,\n )\n for (const parentFormElement of parentFormElements) {\n if (\n !conditionallyShowElement(formElementsCtrl, parentFormElement, [\n ...elementsEvaluated,\n ])\n ) {\n return false\n }\n }\n\n // Check to see if the model has one of the valid values to show the element\n return conditionallyShowElement(\n formElementsCtrl,\n predicateElement,\n elementsEvaluated,\n )\n}\n\nexport default function conditionallyShowElement(\n formElementsCtrl: FormElementsCtrl,\n elementToEvaluate: FormTypes.FormElement,\n elementsEvaluated: Array<{ id: string; label: string }>,\n): boolean {\n // If the element does not have the `conditionallyShow` flag set,\n // we can always show the element.\n if (\n !elementToEvaluate ||\n !elementToEvaluate.conditionallyShow ||\n !Array.isArray(elementToEvaluate.conditionallyShowPredicates) ||\n !elementToEvaluate.conditionallyShowPredicates.length\n ) {\n return true\n }\n const conditionallyShowPredicates =\n elementToEvaluate.conditionallyShowPredicates\n\n // Check to see if this element has already been used to evaluate\n // if the element should be shown based on parent element conditional logic\n const elementAlreadyEvaluated = elementsEvaluated.find(\n ({ id }) => id === elementToEvaluate.id,\n )\n if (elementAlreadyEvaluated) {\n throw new Error(\n `Your conditional logic has caused an infinite loop. Check the \"${elementAlreadyEvaluated.label}\" form element to ensure element A does not rely on element B if element B also relies on element A.`,\n )\n } else {\n elementsEvaluated.push({\n id: elementToEvaluate.id,\n label:\n 'label' in elementToEvaluate\n ? elementToEvaluate.label\n : elementToEvaluate.name,\n })\n }\n\n const predicateFunction = (\n predicate: ConditionTypes.ConditionalPredicate,\n ) => {\n // Spread the array of elements evaluated so that each predicate can\n // evaluate the tree without causing false positives for infinite\n // loop conditional logic\n return conditionallyShowByPredicate(formElementsCtrl, predicate, [\n ...elementsEvaluated,\n ])\n }\n\n if (elementToEvaluate.requiresAllConditionallyShowPredicates) {\n return conditionallyShowPredicates.every(predicateFunction)\n } else {\n return conditionallyShowPredicates.some(predicateFunction)\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { FormTypes } from '@oneblink/types';
|
|
2
|
-
import { FormElementsCtrl } from './types';
|
|
2
|
+
import { FormElementsCtrl } from './types.js';
|
|
3
3
|
export type ShouldShowOption = 'SHOW' | 'HIDE' | 'LOADING_DYNAMIC_DEPENDENCY' | 'LOADING_STATIC_DEPENDENCY';
|
|
4
4
|
export default function conditionallyShowOption(formElementsCtrl: FormElementsCtrl, elementToEvaluate: FormTypes.FormElementWithOptions, optionToEvaluate: FormTypes.ChoiceElementOption, optionsEvaluated: string[]): ShouldShowOption;
|
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.default = conditionallyShowOption;
|
|
7
|
-
const evaluateConditionalOptionsPredicate_1 = __importDefault(require("./evaluateConditionalOptionsPredicate"));
|
|
8
|
-
const __1 = require("..");
|
|
9
|
-
const conditionallyShowElement_1 = __importDefault(require("./conditionallyShowElement"));
|
|
1
|
+
import evaluateConditionalOptionsPredicate from './evaluateConditionalOptionsPredicate.js';
|
|
2
|
+
import { typeCastService } from '../index.js';
|
|
3
|
+
import conditionallyShowElement from './conditionallyShowElement.js';
|
|
10
4
|
const handleAttributePredicate = (predicate, model, predicateElement) => {
|
|
11
|
-
const values = model
|
|
5
|
+
const values = model?.[predicateElement.name];
|
|
12
6
|
if (!values)
|
|
13
7
|
return true;
|
|
14
8
|
if (Array.isArray(values) &&
|
|
@@ -16,7 +10,7 @@ const handleAttributePredicate = (predicate, model, predicateElement) => {
|
|
|
16
10
|
!values.filter((value) => typeof value !== 'undefined').length)) {
|
|
17
11
|
return true;
|
|
18
12
|
}
|
|
19
|
-
return (
|
|
13
|
+
return evaluateConditionalOptionsPredicate({
|
|
20
14
|
predicate: {
|
|
21
15
|
type: 'OPTIONS',
|
|
22
16
|
elementId: predicate.elementId,
|
|
@@ -50,7 +44,7 @@ const conditionallyShowOptionByPredicate = (formElementsCtrl, predicate, element
|
|
|
50
44
|
return 'HIDE';
|
|
51
45
|
}
|
|
52
46
|
}
|
|
53
|
-
const optionsPredicateElement =
|
|
47
|
+
const optionsPredicateElement = typeCastService.formElements.toOptionsElement(predicateElement);
|
|
54
48
|
if (!optionsPredicateElement) {
|
|
55
49
|
return 'HIDE';
|
|
56
50
|
}
|
|
@@ -68,8 +62,7 @@ const conditionallyShowOptionByPredicate = (formElementsCtrl, predicate, element
|
|
|
68
62
|
}
|
|
69
63
|
}
|
|
70
64
|
const everyOptionIsShowing = predicate.optionIds.every((id) => {
|
|
71
|
-
|
|
72
|
-
const predicateOption = (_a = optionsPredicateElement.options) === null || _a === void 0 ? void 0 : _a.find((o) => o.id === id);
|
|
65
|
+
const predicateOption = optionsPredicateElement.options?.find((o) => o.id === id);
|
|
73
66
|
if (!predicateOption)
|
|
74
67
|
return 'HIDE';
|
|
75
68
|
return conditionallyShowOption({ model: formElementsCtrl.model, flattenedElements: [] }, optionsPredicateElement, predicateOption, elementsEvaluated);
|
|
@@ -82,7 +75,6 @@ const conditionallyShowOptionByPredicate = (formElementsCtrl, predicate, element
|
|
|
82
75
|
return shouldShow ? 'SHOW' : 'HIDE';
|
|
83
76
|
};
|
|
84
77
|
const isAttributeFilterValid = (formElementsCtrl, predicate, elementsEvaluated) => {
|
|
85
|
-
var _a;
|
|
86
78
|
const predicateElement = formElementsCtrl.flattenedElements.find((element) => {
|
|
87
79
|
return element.id === predicate.elementId;
|
|
88
80
|
});
|
|
@@ -104,11 +96,11 @@ const isAttributeFilterValid = (formElementsCtrl, predicate, elementsEvaluated)
|
|
|
104
96
|
// Will never be a page, just making typescript happy :)
|
|
105
97
|
predicateElement.type === 'page' ||
|
|
106
98
|
predicateElement.type === 'section' ||
|
|
107
|
-
!(
|
|
99
|
+
!conditionallyShowElement(formElementsCtrl, predicateElement, [])) {
|
|
108
100
|
return false;
|
|
109
101
|
}
|
|
110
102
|
// verify that at least one option is selected
|
|
111
|
-
const values =
|
|
103
|
+
const values = formElementsCtrl.model?.[predicateElement.name];
|
|
112
104
|
if (!values)
|
|
113
105
|
return false;
|
|
114
106
|
// if the model value is an array, verify that it has a selection
|
|
@@ -119,7 +111,7 @@ const isAttributeFilterValid = (formElementsCtrl, predicate, elementsEvaluated)
|
|
|
119
111
|
}
|
|
120
112
|
return true;
|
|
121
113
|
};
|
|
122
|
-
function conditionallyShowOption(formElementsCtrl, elementToEvaluate, optionToEvaluate, optionsEvaluated) {
|
|
114
|
+
export default function conditionallyShowOption(formElementsCtrl, elementToEvaluate, optionToEvaluate, optionsEvaluated) {
|
|
123
115
|
// If the element does not have the `conditionallyShow` flag set,
|
|
124
116
|
// we can always show the option.
|
|
125
117
|
if (!elementToEvaluate.conditionallyShowOptions ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditionallyShowOption.js","sourceRoot":"","sources":["../../src/conditionalLogicService/conditionallyShowOption.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport evaluateConditionalOptionsPredicate from './evaluateConditionalOptionsPredicate'\nimport { FormElementsCtrl } from './types'\nimport { typeCastService } from '..'\nimport conditionallyShowElement from './conditionallyShowElement'\n\nexport type ShouldShowOption =\n | 'SHOW'\n | 'HIDE'\n | 'LOADING_DYNAMIC_DEPENDENCY'\n | 'LOADING_STATIC_DEPENDENCY'\n\nconst handleAttributePredicate = (\n predicate: FormTypes.ChoiceElementOptionAttribute,\n model: SubmissionTypes.S3SubmissionData['submission'] | undefined,\n predicateElement: FormTypes.FormElementWithOptions,\n) => {\n const values = model?.[predicateElement.name]\n if (!values) return true\n\n if (\n Array.isArray(values) &&\n (!values.length ||\n !values.filter((value) => typeof value !== 'undefined').length)\n ) {\n return true\n }\n\n return evaluateConditionalOptionsPredicate({\n predicate: {\n type: 'OPTIONS',\n elementId: predicate.elementId,\n optionIds: predicate.optionIds,\n },\n predicateValue: values,\n predicateElement,\n })\n}\n\nconst conditionallyShowOptionByPredicate = (\n formElementsCtrl: FormElementsCtrl,\n predicate: FormTypes.ChoiceElementOptionAttribute,\n elementsEvaluated: string[],\n): ShouldShowOption => {\n // Validate the predicate data, if it is invalid,\n // we will always show the field\n if (\n !predicate ||\n !predicate.elementId ||\n !predicate.optionIds ||\n !predicate.optionIds.length\n ) {\n return 'SHOW'\n }\n const predicateElement = formElementsCtrl.flattenedElements.find(\n (element) => {\n return element.id === predicate.elementId\n },\n )\n\n // If we cant find the element used for the predicate,\n // we can check to see if the element being evaluated\n // is in a repeatable set and the predicate element is\n // in a parent list of elements.\n if (!predicateElement) {\n if (formElementsCtrl.parentFormElementsCtrl) {\n return conditionallyShowOptionByPredicate(\n formElementsCtrl.parentFormElementsCtrl,\n predicate,\n elementsEvaluated,\n )\n } else {\n return 'HIDE'\n }\n }\n\n const optionsPredicateElement =\n typeCastService.formElements.toOptionsElement(predicateElement)\n if (!optionsPredicateElement) {\n return 'HIDE'\n }\n // If the predicate element does not have any options to evaluate,\n // we will show the element.\n // Unless the predicate element has dynamic options and\n // options have not been fetched yet.\n const isLoadingPredicateElementsOptions = !Array.isArray(\n optionsPredicateElement.options,\n )\n if (isLoadingPredicateElementsOptions) {\n if (optionsPredicateElement.optionsType === 'DYNAMIC') {\n return 'LOADING_DYNAMIC_DEPENDENCY'\n } else {\n return 'LOADING_STATIC_DEPENDENCY'\n }\n }\n\n const everyOptionIsShowing = predicate.optionIds.every((id) => {\n const predicateOption = optionsPredicateElement.options?.find(\n (o) => o.id === id,\n )\n if (!predicateOption) return 'HIDE'\n\n return conditionallyShowOption(\n { model: formElementsCtrl.model, flattenedElements: [] },\n optionsPredicateElement,\n predicateOption,\n elementsEvaluated,\n )\n })\n\n if (!everyOptionIsShowing) {\n return 'HIDE'\n }\n\n // Check to see if the model has one of the valid values to show the element\n const shouldShow = handleAttributePredicate(\n predicate,\n formElementsCtrl.model,\n optionsPredicateElement,\n )\n return shouldShow ? 'SHOW' : 'HIDE'\n}\n\nconst isAttributeFilterValid = (\n formElementsCtrl: FormElementsCtrl,\n predicate: FormTypes.ChoiceElementOptionAttribute,\n elementsEvaluated: string[],\n): boolean => {\n const predicateElement = formElementsCtrl.flattenedElements.find(\n (element) => {\n return element.id === predicate.elementId\n },\n )\n\n // If we cant find the element used for the predicate,\n // we can check to see if the element being evaluated\n // is in a repeatable set and the predicate element is\n // in a parent list of elements.\n if (!predicateElement) {\n if (formElementsCtrl.parentFormElementsCtrl) {\n return isAttributeFilterValid(\n formElementsCtrl.parentFormElementsCtrl,\n predicate,\n elementsEvaluated,\n )\n } else {\n return false\n }\n }\n\n // now we have the model and predicate element, verify that the predicate element\n // is not hidden\n if (\n // Will never be a page, just making typescript happy :)\n predicateElement.type === 'page' ||\n predicateElement.type === 'section' ||\n !conditionallyShowElement(formElementsCtrl, predicateElement, [])\n ) {\n return false\n }\n\n // verify that at least one option is selected\n const values = formElementsCtrl.model?.[predicateElement.name]\n if (!values) return false\n // if the model value is an array, verify that it has a selection\n if (\n Array.isArray(values) &&\n (!values.length ||\n !values.filter((value) => typeof value !== 'undefined').length)\n ) {\n return false\n }\n\n return true\n}\n\nexport default function conditionallyShowOption(\n formElementsCtrl: FormElementsCtrl,\n elementToEvaluate: FormTypes.FormElementWithOptions,\n optionToEvaluate: FormTypes.ChoiceElementOption,\n optionsEvaluated: string[],\n): ShouldShowOption {\n // If the element does not have the `conditionallyShow` flag set,\n // we can always show the option.\n\n if (\n !elementToEvaluate.conditionallyShowOptions ||\n !optionToEvaluate ||\n !optionToEvaluate.attributes ||\n !Array.isArray(optionToEvaluate.attributes) ||\n !optionToEvaluate.attributes.length\n ) {\n return 'SHOW'\n }\n\n // Check to see if this element has already been used to evaluate\n // if the option should be shown based on parent element conditional logic\n if (optionsEvaluated.some((optionId) => optionId === optionToEvaluate.id)) {\n throw new Error(\n 'Your conditional logic has caused an infinite loop. Check the following Fields to ensure element A does not rely on element B if element B also relies on element A.',\n )\n } else {\n optionsEvaluated.push(optionToEvaluate.id)\n }\n const validPredicates = (optionToEvaluate.attributes || []).filter(\n (predicate) => {\n return isAttributeFilterValid(\n formElementsCtrl,\n predicate,\n optionsEvaluated,\n )\n },\n )\n if (!validPredicates.length) return 'SHOW'\n\n let isLoadingDynamicDEPENDENCY = false\n let isLoadingStaticDEPENDENCY = false\n const showResults = Array(validPredicates.length).fill(false)\n for (let i = 0; i < validPredicates.length; i++) {\n const predicate = validPredicates[i]\n const predicateResult = conditionallyShowOptionByPredicate(\n formElementsCtrl,\n predicate,\n optionsEvaluated,\n )\n switch (predicateResult) {\n case 'SHOW': {\n if (elementToEvaluate.requiresAllConditionallyShowOptionsPredicates) {\n showResults[i] = true\n break\n }\n // if match any return show\n return 'SHOW'\n }\n case 'LOADING_DYNAMIC_DEPENDENCY': {\n isLoadingDynamicDEPENDENCY = true\n break\n }\n case 'LOADING_STATIC_DEPENDENCY': {\n isLoadingStaticDEPENDENCY = true\n break\n }\n }\n }\n if (\n elementToEvaluate.requiresAllConditionallyShowOptionsPredicates &&\n showResults.every((result) => result)\n ) {\n return 'SHOW'\n }\n if (isLoadingDynamicDEPENDENCY) {\n return 'LOADING_DYNAMIC_DEPENDENCY'\n } else if (isLoadingStaticDEPENDENCY) {\n return 'LOADING_STATIC_DEPENDENCY'\n } else {\n return 'HIDE'\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"conditionallyShowOption.js","sourceRoot":"","sources":["../../src/conditionalLogicService/conditionallyShowOption.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport evaluateConditionalOptionsPredicate from './evaluateConditionalOptionsPredicate.js'\nimport { FormElementsCtrl } from './types.js'\nimport { typeCastService } from '../index.js'\nimport conditionallyShowElement from './conditionallyShowElement.js'\n\nexport type ShouldShowOption =\n | 'SHOW'\n | 'HIDE'\n | 'LOADING_DYNAMIC_DEPENDENCY'\n | 'LOADING_STATIC_DEPENDENCY'\n\nconst handleAttributePredicate = (\n predicate: FormTypes.ChoiceElementOptionAttribute,\n model: SubmissionTypes.S3SubmissionData['submission'] | undefined,\n predicateElement: FormTypes.FormElementWithOptions,\n) => {\n const values = model?.[predicateElement.name]\n if (!values) return true\n\n if (\n Array.isArray(values) &&\n (!values.length ||\n !values.filter((value) => typeof value !== 'undefined').length)\n ) {\n return true\n }\n\n return evaluateConditionalOptionsPredicate({\n predicate: {\n type: 'OPTIONS',\n elementId: predicate.elementId,\n optionIds: predicate.optionIds,\n },\n predicateValue: values,\n predicateElement,\n })\n}\n\nconst conditionallyShowOptionByPredicate = (\n formElementsCtrl: FormElementsCtrl,\n predicate: FormTypes.ChoiceElementOptionAttribute,\n elementsEvaluated: string[],\n): ShouldShowOption => {\n // Validate the predicate data, if it is invalid,\n // we will always show the field\n if (\n !predicate ||\n !predicate.elementId ||\n !predicate.optionIds ||\n !predicate.optionIds.length\n ) {\n return 'SHOW'\n }\n const predicateElement = formElementsCtrl.flattenedElements.find(\n (element) => {\n return element.id === predicate.elementId\n },\n )\n\n // If we cant find the element used for the predicate,\n // we can check to see if the element being evaluated\n // is in a repeatable set and the predicate element is\n // in a parent list of elements.\n if (!predicateElement) {\n if (formElementsCtrl.parentFormElementsCtrl) {\n return conditionallyShowOptionByPredicate(\n formElementsCtrl.parentFormElementsCtrl,\n predicate,\n elementsEvaluated,\n )\n } else {\n return 'HIDE'\n }\n }\n\n const optionsPredicateElement =\n typeCastService.formElements.toOptionsElement(predicateElement)\n if (!optionsPredicateElement) {\n return 'HIDE'\n }\n // If the predicate element does not have any options to evaluate,\n // we will show the element.\n // Unless the predicate element has dynamic options and\n // options have not been fetched yet.\n const isLoadingPredicateElementsOptions = !Array.isArray(\n optionsPredicateElement.options,\n )\n if (isLoadingPredicateElementsOptions) {\n if (optionsPredicateElement.optionsType === 'DYNAMIC') {\n return 'LOADING_DYNAMIC_DEPENDENCY'\n } else {\n return 'LOADING_STATIC_DEPENDENCY'\n }\n }\n\n const everyOptionIsShowing = predicate.optionIds.every((id) => {\n const predicateOption = optionsPredicateElement.options?.find(\n (o) => o.id === id,\n )\n if (!predicateOption) return 'HIDE'\n\n return conditionallyShowOption(\n { model: formElementsCtrl.model, flattenedElements: [] },\n optionsPredicateElement,\n predicateOption,\n elementsEvaluated,\n )\n })\n\n if (!everyOptionIsShowing) {\n return 'HIDE'\n }\n\n // Check to see if the model has one of the valid values to show the element\n const shouldShow = handleAttributePredicate(\n predicate,\n formElementsCtrl.model,\n optionsPredicateElement,\n )\n return shouldShow ? 'SHOW' : 'HIDE'\n}\n\nconst isAttributeFilterValid = (\n formElementsCtrl: FormElementsCtrl,\n predicate: FormTypes.ChoiceElementOptionAttribute,\n elementsEvaluated: string[],\n): boolean => {\n const predicateElement = formElementsCtrl.flattenedElements.find(\n (element) => {\n return element.id === predicate.elementId\n },\n )\n\n // If we cant find the element used for the predicate,\n // we can check to see if the element being evaluated\n // is in a repeatable set and the predicate element is\n // in a parent list of elements.\n if (!predicateElement) {\n if (formElementsCtrl.parentFormElementsCtrl) {\n return isAttributeFilterValid(\n formElementsCtrl.parentFormElementsCtrl,\n predicate,\n elementsEvaluated,\n )\n } else {\n return false\n }\n }\n\n // now we have the model and predicate element, verify that the predicate element\n // is not hidden\n if (\n // Will never be a page, just making typescript happy :)\n predicateElement.type === 'page' ||\n predicateElement.type === 'section' ||\n !conditionallyShowElement(formElementsCtrl, predicateElement, [])\n ) {\n return false\n }\n\n // verify that at least one option is selected\n const values = formElementsCtrl.model?.[predicateElement.name]\n if (!values) return false\n // if the model value is an array, verify that it has a selection\n if (\n Array.isArray(values) &&\n (!values.length ||\n !values.filter((value) => typeof value !== 'undefined').length)\n ) {\n return false\n }\n\n return true\n}\n\nexport default function conditionallyShowOption(\n formElementsCtrl: FormElementsCtrl,\n elementToEvaluate: FormTypes.FormElementWithOptions,\n optionToEvaluate: FormTypes.ChoiceElementOption,\n optionsEvaluated: string[],\n): ShouldShowOption {\n // If the element does not have the `conditionallyShow` flag set,\n // we can always show the option.\n\n if (\n !elementToEvaluate.conditionallyShowOptions ||\n !optionToEvaluate ||\n !optionToEvaluate.attributes ||\n !Array.isArray(optionToEvaluate.attributes) ||\n !optionToEvaluate.attributes.length\n ) {\n return 'SHOW'\n }\n\n // Check to see if this element has already been used to evaluate\n // if the option should be shown based on parent element conditional logic\n if (optionsEvaluated.some((optionId) => optionId === optionToEvaluate.id)) {\n throw new Error(\n 'Your conditional logic has caused an infinite loop. Check the following Fields to ensure element A does not rely on element B if element B also relies on element A.',\n )\n } else {\n optionsEvaluated.push(optionToEvaluate.id)\n }\n const validPredicates = (optionToEvaluate.attributes || []).filter(\n (predicate) => {\n return isAttributeFilterValid(\n formElementsCtrl,\n predicate,\n optionsEvaluated,\n )\n },\n )\n if (!validPredicates.length) return 'SHOW'\n\n let isLoadingDynamicDEPENDENCY = false\n let isLoadingStaticDEPENDENCY = false\n const showResults = Array(validPredicates.length).fill(false)\n for (let i = 0; i < validPredicates.length; i++) {\n const predicate = validPredicates[i]\n const predicateResult = conditionallyShowOptionByPredicate(\n formElementsCtrl,\n predicate,\n optionsEvaluated,\n )\n switch (predicateResult) {\n case 'SHOW': {\n if (elementToEvaluate.requiresAllConditionallyShowOptionsPredicates) {\n showResults[i] = true\n break\n }\n // if match any return show\n return 'SHOW'\n }\n case 'LOADING_DYNAMIC_DEPENDENCY': {\n isLoadingDynamicDEPENDENCY = true\n break\n }\n case 'LOADING_STATIC_DEPENDENCY': {\n isLoadingStaticDEPENDENCY = true\n break\n }\n }\n }\n if (\n elementToEvaluate.requiresAllConditionallyShowOptionsPredicates &&\n showResults.every((result) => result)\n ) {\n return 'SHOW'\n }\n if (isLoadingDynamicDEPENDENCY) {\n return 'LOADING_DYNAMIC_DEPENDENCY'\n } else if (isLoadingStaticDEPENDENCY) {\n return 'LOADING_STATIC_DEPENDENCY'\n } else {\n return 'HIDE'\n }\n}\n"]}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = evaluateConditionalOptionsPredicate;
|
|
4
|
-
function evaluateConditionalOptionsPredicate({ predicate, predicateElement, predicateValue: value, }) {
|
|
1
|
+
export default function evaluateConditionalOptionsPredicate({ predicate, predicateElement, predicateValue: value, }) {
|
|
5
2
|
return predicate.optionIds.some((optionId) => {
|
|
6
|
-
|
|
7
|
-
const option = (_a = predicateElement.options) === null || _a === void 0 ? void 0 : _a.find((o) => o.id === optionId);
|
|
3
|
+
const option = predicateElement.options?.find((o) => o.id === optionId);
|
|
8
4
|
if (option) {
|
|
9
5
|
if (Array.isArray(value)) {
|
|
10
6
|
return value.some((modelValue) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluateConditionalOptionsPredicate.js","sourceRoot":"","sources":["../../src/conditionalLogicService/evaluateConditionalOptionsPredicate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"evaluateConditionalOptionsPredicate.js","sourceRoot":"","sources":["../../src/conditionalLogicService/evaluateConditionalOptionsPredicate.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,mCAAmC,CAAC,EAC1D,SAAS,EACT,gBAAgB,EAChB,cAAc,EAAE,KAAK,GAKtB;IACC,OAAO,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAA;QACvE,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;oBAC/B,OAAO,UAAU,KAAK,MAAM,CAAC,KAAK,CAAA;gBACpC,CAAC,CAAC,CAAA;YACJ,CAAC;iBAAM,IAAI,gBAAgB,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,EAAE,CAAC;gBAC3D,OAAO,MAAM,CAAC,KAAK,KAAM,KAA4B,CAAC,KAAK,CAAA;YAC7D,CAAC;iBAAM,CAAC;gBACN,OAAO,MAAM,CAAC,KAAK,KAAK,KAAK,CAAA;YAC/B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { FormTypes, ConditionTypes } from '@oneblink/types'\n\nexport default function evaluateConditionalOptionsPredicate({\n predicate,\n predicateElement,\n predicateValue: value,\n}: {\n predicate: ConditionTypes.ConditionalPredicateOptions\n predicateValue: unknown\n predicateElement: FormTypes.FormElementWithOptions\n}): boolean {\n return predicate.optionIds.some((optionId) => {\n const option = predicateElement.options?.find((o) => o.id === optionId)\n if (option) {\n if (Array.isArray(value)) {\n return value.some((modelValue) => {\n return modelValue === option.value\n })\n } else if (predicateElement.type === 'compliance' && value) {\n return option.value === (value as { value: unknown }).value\n } else {\n return option.value === value\n }\n } else {\n return false\n }\n })\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FormTypes, ConditionTypes } from '@oneblink/types';
|
|
2
|
-
import { FormElementsCtrl } from './types';
|
|
2
|
+
import { FormElementsCtrl } from './types.js';
|
|
3
3
|
export default function evaluateConditionalPredicate({ predicate, formElementsCtrl, }: {
|
|
4
4
|
predicate: ConditionTypes.ConditionalPredicate;
|
|
5
5
|
formElementsCtrl: FormElementsCtrl;
|
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.default = evaluateConditionalPredicate;
|
|
7
|
-
const __1 = require("..");
|
|
8
|
-
const evaluateConditionalOptionsPredicate_1 = __importDefault(require("./evaluateConditionalOptionsPredicate"));
|
|
9
|
-
const conditionallyShowElement_1 = require("./conditionallyShowElement");
|
|
10
|
-
const formElementsService_1 = require("../formElementsService");
|
|
1
|
+
import { typeCastService, formElementsService } from '../index.js';
|
|
2
|
+
import evaluateConditionalOptionsPredicate from './evaluateConditionalOptionsPredicate.js';
|
|
3
|
+
import { conditionallyShowByPredicate } from './conditionallyShowElement.js';
|
|
4
|
+
import { flattenFormElements } from '../formElementsService.js';
|
|
11
5
|
const fnMap = {
|
|
12
6
|
'>': (lhs, rhs) => lhs > rhs,
|
|
13
7
|
'>=': (lhs, rhs) => lhs >= rhs,
|
|
@@ -17,14 +11,13 @@ const fnMap = {
|
|
|
17
11
|
'<': (lhs, rhs) => lhs < rhs,
|
|
18
12
|
};
|
|
19
13
|
function getElementAndValue(formElementsCtrl, elementId) {
|
|
20
|
-
var _a;
|
|
21
14
|
const formElement = formElementsCtrl.flattenedElements.find((formElement) => formElement.id === elementId);
|
|
22
15
|
if (formElement) {
|
|
23
|
-
const formElementWithName =
|
|
16
|
+
const formElementWithName = typeCastService.formElements.toNamedElement(formElement);
|
|
24
17
|
if (formElementWithName) {
|
|
25
18
|
return {
|
|
26
19
|
formElementWithName,
|
|
27
|
-
value:
|
|
20
|
+
value: formElementsCtrl.model?.[formElementWithName.name],
|
|
28
21
|
};
|
|
29
22
|
}
|
|
30
23
|
}
|
|
@@ -33,8 +26,7 @@ function getElementAndValue(formElementsCtrl, elementId) {
|
|
|
33
26
|
}
|
|
34
27
|
return {};
|
|
35
28
|
}
|
|
36
|
-
function evaluateConditionalPredicate({ predicate, formElementsCtrl, }) {
|
|
37
|
-
var _a;
|
|
29
|
+
export default function evaluateConditionalPredicate({ predicate, formElementsCtrl, }) {
|
|
38
30
|
const { formElementWithName: predicateElement, value: predicateValue } = getElementAndValue(formElementsCtrl, predicate.elementId);
|
|
39
31
|
if (!predicateElement) {
|
|
40
32
|
return;
|
|
@@ -100,9 +92,9 @@ function evaluateConditionalPredicate({ predicate, formElementsCtrl, }) {
|
|
|
100
92
|
return;
|
|
101
93
|
}
|
|
102
94
|
for (const entry of repeatableSetValue) {
|
|
103
|
-
const result =
|
|
95
|
+
const result = conditionallyShowByPredicate({
|
|
104
96
|
model: entry,
|
|
105
|
-
flattenedElements:
|
|
97
|
+
flattenedElements: formElementsService.flattenFormElements(repeatableSetElement.elements),
|
|
106
98
|
parentFormElementsCtrl: formElementsCtrl,
|
|
107
99
|
}, predicate.repeatableSetPredicate, []);
|
|
108
100
|
if (result) {
|
|
@@ -118,10 +110,10 @@ function evaluateConditionalPredicate({ predicate, formElementsCtrl, }) {
|
|
|
118
110
|
!predicateElement.elements) {
|
|
119
111
|
return;
|
|
120
112
|
}
|
|
121
|
-
const formModel =
|
|
122
|
-
const result =
|
|
113
|
+
const formModel = formElementsCtrl.model?.[predicateElement.name];
|
|
114
|
+
const result = conditionallyShowByPredicate({
|
|
123
115
|
model: formModel,
|
|
124
|
-
flattenedElements:
|
|
116
|
+
flattenedElements: flattenFormElements(predicateElement.elements),
|
|
125
117
|
parentFormElementsCtrl: formElementsCtrl,
|
|
126
118
|
}, predicate.predicate, []);
|
|
127
119
|
if (result) {
|
|
@@ -214,7 +206,7 @@ function evaluateConditionalPredicate({ predicate, formElementsCtrl, }) {
|
|
|
214
206
|
}
|
|
215
207
|
case 'OPTIONS':
|
|
216
208
|
default: {
|
|
217
|
-
const optionsPredicateElement =
|
|
209
|
+
const optionsPredicateElement = typeCastService.formElements.toOptionsElement(predicateElement);
|
|
218
210
|
if (!optionsPredicateElement) {
|
|
219
211
|
return undefined;
|
|
220
212
|
}
|
|
@@ -228,7 +220,7 @@ function evaluateConditionalPredicate({ predicate, formElementsCtrl, }) {
|
|
|
228
220
|
: undefined;
|
|
229
221
|
}
|
|
230
222
|
else {
|
|
231
|
-
return (
|
|
223
|
+
return evaluateConditionalOptionsPredicate({
|
|
232
224
|
predicate,
|
|
233
225
|
predicateValue,
|
|
234
226
|
predicateElement: optionsPredicateElement,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluateConditionalPredicate.js","sourceRoot":"","sources":["../../src/conditionalLogicService/evaluateConditionalPredicate.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, ConditionTypes, SubmissionTypes } from '@oneblink/types'\nimport { FormElementsCtrl } from './types'\nimport { typeCastService, formElementsService } from '..'\nimport evaluateConditionalOptionsPredicate from './evaluateConditionalOptionsPredicate'\nimport { conditionallyShowByPredicate } from './conditionallyShowElement'\nimport { flattenFormElements } from '../formElementsService'\n\nconst fnMap = {\n '>': (lhs: number, rhs: number) => lhs > rhs,\n '>=': (lhs: number, rhs: number) => lhs >= rhs,\n '===': (lhs: number, rhs: number) => lhs === rhs,\n '!==': (lhs: number, rhs: number) => lhs !== rhs,\n '<=': (lhs: number, rhs: number) => lhs <= rhs,\n '<': (lhs: number, rhs: number) => lhs < rhs,\n}\n\nfunction getElementAndValue(\n formElementsCtrl: FormElementsCtrl,\n elementId: string,\n): { formElementWithName?: FormTypes.FormElementWithName; value?: unknown } {\n const formElement = formElementsCtrl.flattenedElements.find(\n (formElement) => formElement.id === elementId,\n )\n if (formElement) {\n const formElementWithName =\n typeCastService.formElements.toNamedElement(formElement)\n if (formElementWithName) {\n return {\n formElementWithName,\n value: formElementsCtrl.model?.[formElementWithName.name],\n }\n }\n } else if (formElementsCtrl.parentFormElementsCtrl) {\n return getElementAndValue(\n formElementsCtrl.parentFormElementsCtrl,\n elementId,\n )\n }\n return {}\n}\n\nexport default function evaluateConditionalPredicate({\n predicate,\n formElementsCtrl,\n}: {\n predicate: ConditionTypes.ConditionalPredicate\n formElementsCtrl: FormElementsCtrl\n}): FormTypes.FormElementWithName | undefined {\n const { formElementWithName: predicateElement, value: predicateValue } =\n getElementAndValue(formElementsCtrl, predicate.elementId)\n if (!predicateElement) {\n return\n }\n switch (predicate.type) {\n case 'VALUE': {\n if (Array.isArray(predicateValue)) {\n return !predicate.hasValue === !predicateValue.length\n ? predicateElement\n : undefined\n }\n return !predicate.hasValue === !predicateValue\n ? predicateElement\n : undefined\n }\n case 'NUMERIC': {\n // if the operator fn doesn't exist, hide the control\n const operatorFn = fnMap[predicate.operator]\n if (!operatorFn) return undefined\n\n const lhs = Number.parseFloat(predicateValue as string)\n // if left is not a number, hide the control\n if (isNaN(lhs)) return undefined\n\n let rhsValue = NaN\n switch (predicate.compareWith) {\n case 'ELEMENT': {\n const { value: comparisonValue } = getElementAndValue(\n formElementsCtrl,\n predicate.value,\n )\n rhsValue =\n comparisonValue === 'string'\n ? Number.parseFloat(comparisonValue)\n : (comparisonValue as number)\n break\n }\n case 'VALUE':\n default: {\n rhsValue = predicate.value\n break\n }\n }\n\n const rhs =\n typeof rhsValue === 'string' ? Number.parseFloat(rhsValue) : rhsValue\n\n // if right is not a number, hide the control\n if (isNaN(rhs)) return undefined\n\n return operatorFn(lhs, rhs) ? predicateElement : undefined\n }\n case 'BETWEEN': {\n const value = Number.parseFloat(predicateValue as string)\n if (Number.isNaN(value)) {\n return undefined\n }\n\n return value >= predicate.min && value <= predicate.max\n ? predicateElement\n : undefined\n }\n case 'REPEATABLESET': {\n const {\n formElementWithName: repeatableSetElement,\n value: repeatableSetValue,\n } = getElementAndValue(formElementsCtrl, predicate.elementId)\n\n if (!repeatableSetElement) {\n return\n }\n\n if (\n repeatableSetElement.type !== 'repeatableSet' ||\n !Array.isArray(repeatableSetValue)\n ) {\n return\n }\n\n for (const entry of repeatableSetValue) {\n const result = conditionallyShowByPredicate(\n {\n model: entry,\n flattenedElements: formElementsService.flattenFormElements(\n repeatableSetElement.elements,\n ),\n parentFormElementsCtrl: formElementsCtrl,\n },\n predicate.repeatableSetPredicate,\n [],\n )\n\n if (result) {\n return predicateElement\n }\n }\n return\n }\n case 'FORM':\n if (predicate.predicate) {\n if (\n !predicateElement ||\n predicateElement.type !== 'form' ||\n !predicateElement.elements\n ) {\n return\n }\n const formModel = formElementsCtrl.model?.[predicateElement.name] as\n | SubmissionTypes.S3SubmissionData['submission']\n | undefined\n\n const result = conditionallyShowByPredicate(\n {\n model: formModel,\n flattenedElements: flattenFormElements(predicateElement.elements),\n parentFormElementsCtrl: formElementsCtrl,\n },\n predicate.predicate,\n [],\n )\n\n if (result) {\n return predicateElement\n }\n }\n return\n case 'ADDRESS_PROPERTY': {\n // Only element types that should work as predicate element should be Point, Point V3 or Geoscape.\n if (\n predicateElement.type === 'pointAddress' ||\n predicateElement.type === 'geoscapeAddress' ||\n predicateElement.type === 'pointAddressV3'\n ) {\n if (predicateValue && typeof predicateValue === 'object') {\n if (predicate.definition.property === 'STATE_EQUALITY') {\n switch (predicateElement.type) {\n case 'pointAddressV3': {\n if (\n 'properties' in predicateValue &&\n predicateValue.properties &&\n typeof predicateValue.properties === 'object' &&\n 'stateTerritory' in predicateValue.properties &&\n typeof predicateValue.properties.stateTerritory === 'string'\n ) {\n // Validate that it has the properties we want, in case submission data\n // is incorrect but has the right element reference.\n const result =\n predicateValue.properties.stateTerritory ===\n predicate.definition.value\n if (result) {\n return predicateElement\n }\n return\n }\n break\n }\n case 'geoscapeAddress':\n case 'pointAddress': {\n // Validate that it has the properties we want, in case submission data\n // is incorrect but has the right element reference.\n if (\n 'addressDetails' in predicateValue &&\n predicateValue.addressDetails &&\n typeof predicateValue.addressDetails === 'object' &&\n 'stateTerritory' in predicateValue.addressDetails &&\n typeof predicateValue.addressDetails.stateTerritory ===\n 'string'\n ) {\n const result =\n predicateValue.addressDetails.stateTerritory ===\n predicate.definition.value\n if (result) {\n return predicateElement\n }\n return\n }\n }\n }\n }\n // If the property isn't State Equality, we are checking Physical addresses. This only exists for Point and Point V3.\n switch (predicateElement.type) {\n case 'pointAddressV3': {\n // If the value is true, we only want to return the element for PO Boxes. If it's false, then we only want\n // to return element for non mail address addresses.\n if (\n 'properties' in predicateValue &&\n predicateValue.properties &&\n typeof predicateValue.properties === 'object' &&\n 'dataset' in predicateValue.properties &&\n typeof predicateValue.properties.dataset === 'string'\n ) {\n const result = predicate.definition.value\n ? predicateValue.properties.dataset.startsWith('mailAddress')\n : predicateValue.properties.dataset.startsWith('gnaf')\n if (result) {\n return predicateElement\n }\n }\n break\n }\n case 'pointAddress': {\n // If the value is true, we only want to return the element for PO Boxes. If it's false, then we only want\n // to return element for non mail address addresses.\n if (\n 'dataset' in predicateValue &&\n typeof predicateValue.dataset === 'string'\n ) {\n const result = predicate.definition.value\n ? predicateValue.dataset === 'mailAddress'\n : predicateValue.dataset === 'GNAF'\n if (result) {\n return predicateElement\n }\n }\n break\n }\n }\n }\n }\n break\n }\n case 'OPTIONS':\n default: {\n const optionsPredicateElement =\n typeCastService.formElements.toOptionsElement(predicateElement)\n if (!optionsPredicateElement) {\n return undefined\n }\n\n // If the predicate element does not have any options to evaluate,\n // we will show the element.\n // Unless the predicate element has dynamic options and\n // options have not been fetched yet.\n if (!Array.isArray(optionsPredicateElement.options)) {\n return optionsPredicateElement.optionsType !== 'DYNAMIC'\n ? predicateElement\n : undefined\n } else {\n return evaluateConditionalOptionsPredicate({\n predicate,\n predicateValue,\n predicateElement: optionsPredicateElement,\n })\n ? predicateElement\n : undefined\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"evaluateConditionalPredicate.js","sourceRoot":"","sources":["../../src/conditionalLogicService/evaluateConditionalPredicate.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, ConditionTypes, SubmissionTypes } from '@oneblink/types'\nimport { FormElementsCtrl } from './types.js'\nimport { typeCastService, formElementsService } from '../index.js'\nimport evaluateConditionalOptionsPredicate from './evaluateConditionalOptionsPredicate.js'\nimport { conditionallyShowByPredicate } from './conditionallyShowElement.js'\nimport { flattenFormElements } from '../formElementsService.js'\n\nconst fnMap = {\n '>': (lhs: number, rhs: number) => lhs > rhs,\n '>=': (lhs: number, rhs: number) => lhs >= rhs,\n '===': (lhs: number, rhs: number) => lhs === rhs,\n '!==': (lhs: number, rhs: number) => lhs !== rhs,\n '<=': (lhs: number, rhs: number) => lhs <= rhs,\n '<': (lhs: number, rhs: number) => lhs < rhs,\n}\n\nfunction getElementAndValue(\n formElementsCtrl: FormElementsCtrl,\n elementId: string,\n): { formElementWithName?: FormTypes.FormElementWithName; value?: unknown } {\n const formElement = formElementsCtrl.flattenedElements.find(\n (formElement) => formElement.id === elementId,\n )\n if (formElement) {\n const formElementWithName =\n typeCastService.formElements.toNamedElement(formElement)\n if (formElementWithName) {\n return {\n formElementWithName,\n value: formElementsCtrl.model?.[formElementWithName.name],\n }\n }\n } else if (formElementsCtrl.parentFormElementsCtrl) {\n return getElementAndValue(\n formElementsCtrl.parentFormElementsCtrl,\n elementId,\n )\n }\n return {}\n}\n\nexport default function evaluateConditionalPredicate({\n predicate,\n formElementsCtrl,\n}: {\n predicate: ConditionTypes.ConditionalPredicate\n formElementsCtrl: FormElementsCtrl\n}): FormTypes.FormElementWithName | undefined {\n const { formElementWithName: predicateElement, value: predicateValue } =\n getElementAndValue(formElementsCtrl, predicate.elementId)\n if (!predicateElement) {\n return\n }\n switch (predicate.type) {\n case 'VALUE': {\n if (Array.isArray(predicateValue)) {\n return !predicate.hasValue === !predicateValue.length\n ? predicateElement\n : undefined\n }\n return !predicate.hasValue === !predicateValue\n ? predicateElement\n : undefined\n }\n case 'NUMERIC': {\n // if the operator fn doesn't exist, hide the control\n const operatorFn = fnMap[predicate.operator]\n if (!operatorFn) return undefined\n\n const lhs = Number.parseFloat(predicateValue as string)\n // if left is not a number, hide the control\n if (isNaN(lhs)) return undefined\n\n let rhsValue = NaN\n switch (predicate.compareWith) {\n case 'ELEMENT': {\n const { value: comparisonValue } = getElementAndValue(\n formElementsCtrl,\n predicate.value,\n )\n rhsValue =\n comparisonValue === 'string'\n ? Number.parseFloat(comparisonValue)\n : (comparisonValue as number)\n break\n }\n case 'VALUE':\n default: {\n rhsValue = predicate.value\n break\n }\n }\n\n const rhs =\n typeof rhsValue === 'string' ? Number.parseFloat(rhsValue) : rhsValue\n\n // if right is not a number, hide the control\n if (isNaN(rhs)) return undefined\n\n return operatorFn(lhs, rhs) ? predicateElement : undefined\n }\n case 'BETWEEN': {\n const value = Number.parseFloat(predicateValue as string)\n if (Number.isNaN(value)) {\n return undefined\n }\n\n return value >= predicate.min && value <= predicate.max\n ? predicateElement\n : undefined\n }\n case 'REPEATABLESET': {\n const {\n formElementWithName: repeatableSetElement,\n value: repeatableSetValue,\n } = getElementAndValue(formElementsCtrl, predicate.elementId)\n\n if (!repeatableSetElement) {\n return\n }\n\n if (\n repeatableSetElement.type !== 'repeatableSet' ||\n !Array.isArray(repeatableSetValue)\n ) {\n return\n }\n\n for (const entry of repeatableSetValue) {\n const result = conditionallyShowByPredicate(\n {\n model: entry,\n flattenedElements: formElementsService.flattenFormElements(\n repeatableSetElement.elements,\n ),\n parentFormElementsCtrl: formElementsCtrl,\n },\n predicate.repeatableSetPredicate,\n [],\n )\n\n if (result) {\n return predicateElement\n }\n }\n return\n }\n case 'FORM':\n if (predicate.predicate) {\n if (\n !predicateElement ||\n predicateElement.type !== 'form' ||\n !predicateElement.elements\n ) {\n return\n }\n const formModel = formElementsCtrl.model?.[predicateElement.name] as\n | SubmissionTypes.S3SubmissionData['submission']\n | undefined\n\n const result = conditionallyShowByPredicate(\n {\n model: formModel,\n flattenedElements: flattenFormElements(predicateElement.elements),\n parentFormElementsCtrl: formElementsCtrl,\n },\n predicate.predicate,\n [],\n )\n\n if (result) {\n return predicateElement\n }\n }\n return\n case 'ADDRESS_PROPERTY': {\n // Only element types that should work as predicate element should be Point, Point V3 or Geoscape.\n if (\n predicateElement.type === 'pointAddress' ||\n predicateElement.type === 'geoscapeAddress' ||\n predicateElement.type === 'pointAddressV3'\n ) {\n if (predicateValue && typeof predicateValue === 'object') {\n if (predicate.definition.property === 'STATE_EQUALITY') {\n switch (predicateElement.type) {\n case 'pointAddressV3': {\n if (\n 'properties' in predicateValue &&\n predicateValue.properties &&\n typeof predicateValue.properties === 'object' &&\n 'stateTerritory' in predicateValue.properties &&\n typeof predicateValue.properties.stateTerritory === 'string'\n ) {\n // Validate that it has the properties we want, in case submission data\n // is incorrect but has the right element reference.\n const result =\n predicateValue.properties.stateTerritory ===\n predicate.definition.value\n if (result) {\n return predicateElement\n }\n return\n }\n break\n }\n case 'geoscapeAddress':\n case 'pointAddress': {\n // Validate that it has the properties we want, in case submission data\n // is incorrect but has the right element reference.\n if (\n 'addressDetails' in predicateValue &&\n predicateValue.addressDetails &&\n typeof predicateValue.addressDetails === 'object' &&\n 'stateTerritory' in predicateValue.addressDetails &&\n typeof predicateValue.addressDetails.stateTerritory ===\n 'string'\n ) {\n const result =\n predicateValue.addressDetails.stateTerritory ===\n predicate.definition.value\n if (result) {\n return predicateElement\n }\n return\n }\n }\n }\n }\n // If the property isn't State Equality, we are checking Physical addresses. This only exists for Point and Point V3.\n switch (predicateElement.type) {\n case 'pointAddressV3': {\n // If the value is true, we only want to return the element for PO Boxes. If it's false, then we only want\n // to return element for non mail address addresses.\n if (\n 'properties' in predicateValue &&\n predicateValue.properties &&\n typeof predicateValue.properties === 'object' &&\n 'dataset' in predicateValue.properties &&\n typeof predicateValue.properties.dataset === 'string'\n ) {\n const result = predicate.definition.value\n ? predicateValue.properties.dataset.startsWith('mailAddress')\n : predicateValue.properties.dataset.startsWith('gnaf')\n if (result) {\n return predicateElement\n }\n }\n break\n }\n case 'pointAddress': {\n // If the value is true, we only want to return the element for PO Boxes. If it's false, then we only want\n // to return element for non mail address addresses.\n if (\n 'dataset' in predicateValue &&\n typeof predicateValue.dataset === 'string'\n ) {\n const result = predicate.definition.value\n ? predicateValue.dataset === 'mailAddress'\n : predicateValue.dataset === 'GNAF'\n if (result) {\n return predicateElement\n }\n }\n break\n }\n }\n }\n }\n break\n }\n case 'OPTIONS':\n default: {\n const optionsPredicateElement =\n typeCastService.formElements.toOptionsElement(predicateElement)\n if (!optionsPredicateElement) {\n return undefined\n }\n\n // If the predicate element does not have any options to evaluate,\n // we will show the element.\n // Unless the predicate element has dynamic options and\n // options have not been fetched yet.\n if (!Array.isArray(optionsPredicateElement.options)) {\n return optionsPredicateElement.optionsType !== 'DYNAMIC'\n ? predicateElement\n : undefined\n } else {\n return evaluateConditionalOptionsPredicate({\n predicate,\n predicateValue,\n predicateElement: optionsPredicateElement,\n })\n ? predicateElement\n : undefined\n }\n }\n }\n}\n"]}
|