@oneblink/sdk-core 6.3.0-beta.2 → 6.3.1-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.
@@ -38,6 +38,11 @@ function evaluateConditionalPredicate({ predicate, formElementsCtrl, }) {
38
38
  }
39
39
  switch (predicate.type) {
40
40
  case 'VALUE': {
41
+ if (Array.isArray(predicateValue)) {
42
+ return !predicate.hasValue === !predicateValue.length
43
+ ? predicateElement
44
+ : undefined;
45
+ }
41
46
  return !predicate.hasValue === !predicateValue
42
47
  ? predicateElement
43
48
  : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"evaluateConditionalPredicate.js","sourceRoot":"","sources":["../../src/conditionalLogicService/evaluateConditionalPredicate.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, ConditionTypes } 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 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 [name: string]: unknown\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 that should work as predicate element should be Point or Geoscape.\n if (\n !(\n predicateElement.type === 'pointAddress' ||\n predicateElement.type === 'geoscapeAddress'\n )\n ) {\n return\n }\n if (predicateValue && typeof predicateValue === 'object') {\n if (predicate.definition.property === 'STATE_EQUALITY') {\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 === 'string'\n ) {\n const result =\n predicateValue.addressDetails.stateTerritory ===\n predicate.definition.value\n if (result) {\n return predicateElement\n }\n }\n return\n }\n // If the property isn't State Equality, we are checking Physical addresses. This only exists for Point.\n if (predicateElement.type === '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 }\n }\n return\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 } 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 [name: string]: unknown\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 that should work as predicate element should be Point or Geoscape.\n if (\n !(\n predicateElement.type === 'pointAddress' ||\n predicateElement.type === 'geoscapeAddress'\n )\n ) {\n return\n }\n if (predicateValue && typeof predicateValue === 'object') {\n if (predicate.definition.property === 'STATE_EQUALITY') {\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 === 'string'\n ) {\n const result =\n predicateValue.addressDetails.stateTerritory ===\n predicate.definition.value\n if (result) {\n return predicateElement\n }\n }\n return\n }\n // If the property isn't State Equality, we are checking Physical addresses. This only exists for Point.\n if (predicateElement.type === '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 }\n }\n return\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"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@oneblink/sdk-core",
3
3
  "description": "OneBlink SDK for JavaScript (works in Browsers and NodeJS)",
4
- "version": "6.3.0-beta.2",
4
+ "version": "6.3.1-beta.1",
5
5
  "author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
6
6
  "bugs": {
7
7
  "url": "https://github.com/oneblink/sdk-core-js/issues"