@securecall/client-component
Version:
SecureCall Core Web Component
124 lines (123 loc) • 4.22 kB
JavaScript
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);
}
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