UNPKG

@securecall/client-component

Version:

SecureCall Core Web Component

127 lines (126 loc) 4.32 kB
import { mergeDeep } from "../utils/utils"; import { RequestFieldList } from "./request_field_list"; export var FieldLevelType; (function (FieldLevelType) { FieldLevelType["Instance"] = "instance"; FieldLevelType["Session"] = "session"; FieldLevelType["Transaction"] = "transaction"; })(FieldLevelType || (FieldLevelType = {})); export class RequestFieldGroup { _defaults; _instance; _session; _transaction; _fieldNames; constructor(defaults) { this._defaults = JSON.parse(JSON.stringify(defaults)); this._fieldNames = Object.keys(defaults); this._instance = new RequestFieldList(this, FieldLevelType.Instance); this._session = new RequestFieldList(this, FieldLevelType.Session); this._transaction = new RequestFieldList(this, FieldLevelType.Transaction); return new Proxy(this, { get(target, prop, receiver) { const propStr = prop.toString(); if (target.fieldNames.includes(propStr)) { return target.instance[propStr]; } return Reflect.get(target, prop, receiver); }, }); } get fieldNames() { return this._fieldNames; } get instance() { return this._instance; } get session() { return this._session; } get transaction() { return this._transaction; } addNewField(name, config) { this._instance.addNewField(name, config); } addOrUpdateField(name, config) { this._instance.addOrUpdateField(name, config); } processSecureData(data) { const calc = this.calculatedFields(); //Reset the active flag for each secure this._fieldNames.forEach(k => { if (calc[k].secure) this._transaction[k].active = undefined; }); Object.entries(data).forEach(([k, v]) => { let f = this._transaction[k]; Object.entries(v).forEach(([k2, v2]) => { f[k2] = v2; }); }); } clearNonSecureFields() { const calc = this.calculatedFields(); this._fieldNames.forEach(k => { if (!calc[k].secure) this._transaction[k].value = undefined; }); } resetInstance() { this._instance = new RequestFieldList(this, FieldLevelType.Instance); } resetSession() { this._session = new RequestFieldList(this, FieldLevelType.Session); } resetTransaction() { this._transaction = new RequestFieldList(this, FieldLevelType.Transaction); } calculatedFields() { return mergeDeep(this._defaults, this._instance.calculatedFields(), this._session.calculatedFields(), this._transaction.calculatedFields()); } asComponentChildren() { return Object.entries(this.calculatedFields()) .filter(([_k, v]) => !v.hidden) .sort(([_ak, av], [_bk, bv]) => { const orderA = av.order === undefined ? 1000 : av.order; const orderB = bv.order === undefined ? 1000 : bv.order; return orderA - orderB; }) .map(([k, v]) => { const { component, ...config } = v; return { name: k, component: component || 'string', config }; }); } asAPITransaction() { let fields = { metadata: {} }; Object.entries(this.calculatedFields()) .filter(([_k, v]) => !v.secure) .filter(([_k, v]) => !(v.optional && (!v.value || v.value.trim() === ''))) .forEach(([k, v]) => { if (v.mapping) { let mapping = v.mapping.split('.'); if (mapping[0] === 'metadata') { fields.metadata[mapping[1]] = v.value; } else { fields[mapping[0]] = v.value; } } else { if (k === 'metadata') { fields[k] = { ...fields.metadata, ...v.value }; } else { fields[k] = v.value; } } }); return fields; } } //# sourceMappingURL=request_field_group.js.map