tuain-ng-forms-lib
Version:
Componentes y Clases Angular para la gestión de formularios TUAIN
81 lines • 10.9 kB
JavaScript
import { nanoid } from 'nanoid';
export class LibFormManagerService {
pageStack;
constructor() {
this.cleanStack();
}
// Métodos virtuales para las aplicaciones
getFormDefinition(formCode) { }
execServerAction(actionDetail) { }
goToForm(formCode, token, subject) { }
async loadStack() { }
saveStack() { }
cleanStack() { this.pageStack = []; }
resetPageStack() { this.cleanStack(); }
findFormInStack(token) {
const index = this.pageStack.findIndex(item => item?.token === token);
const data = (index >= 0) ? this.pageStack[index] : null;
return { index, data };
}
replaceItem(token, formInfo) {
if (!token || !formInfo) {
return;
}
const { index, data: storedForm } = this.findFormInStack(token);
let updatedForm = null;
if (index >= 0) {
updatedForm = { ...storedForm };
updatedForm.subject = formInfo?.subject ?? storedForm.subject;
updatedForm.state = formInfo?.state ?? storedForm.state;
updatedForm.fields = storedForm?.fields ?? {};
updatedForm.extra = storedForm?.extra ?? {};
if (formInfo.fields) {
Object.assign(updatedForm.fields, formInfo.fields);
}
if (formInfo.extra) {
Object.assign(updatedForm.extra, formInfo.extra);
}
this.pageStack[index] = updatedForm;
this.saveStack();
}
}
stack(origin, target) {
const token = nanoid(6);
this.replaceItem(target.originToken, origin);
this.pageStack.push({ token, ...target });
this.saveStack();
return token;
}
unstack(token = null) {
let index = (token) ? this.findFormInStack(token).index : this.pageStack.length - 2;
let formInfo = null;
if (index >= 0) {
formInfo = this.pageStack[index];
this.pageStack.splice(index + 1);
this.saveStack();
}
return formInfo;
}
getFormInfo(token) {
const { data } = this.findFormInStack(token);
return {
token: data?.token,
subject: data?.subject,
state: data?.state,
originToken: data?.originToken,
fields: data?.fields ?? {},
extra: data?.extra ?? {}
};
}
openForm(origin, target) {
(!origin) && this.cleanStack();
target.originToken = origin?.token ?? null;
const token = this.stack(origin, target);
this.goToForm(target.name, token, target.subject);
}
backTo(targetToken = null) {
const formInfo = this.unstack(targetToken);
formInfo && formInfo.name && this.goToForm(formInfo.name, formInfo.token, formInfo.subject);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWhDLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsU0FBUyxDQUFRO0lBRWpCO1FBQ0UsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsaUJBQWlCLENBQUMsUUFBUSxJQUFJLENBQUM7SUFDL0IsZ0JBQWdCLENBQUMsWUFBWSxJQUFJLENBQUM7SUFDbEMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEMsS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDO0lBQ3JCLFNBQVMsS0FBSyxDQUFDO0lBRWYsVUFBVSxLQUFLLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyQyxjQUFjLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBLENBQUMsQ0FBQztJQUV0QyxlQUFlLENBQUMsS0FBSztRQUNuQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDdEUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN6RCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFX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LElBQUksRUFBRSxNQUFNLElBQUksRUFBRTtZQUMxQixLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO1NBQ3pCLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQVcsRUFBRSxNQUFXO1FBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0IsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJO1FBQ3ZCLE1BQU0sUUFBUSxHQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEQsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCc7XG5cbmV4cG9ydCBjbGFzcyBMaWJGb3JtTWFuYWdlclNlcnZpY2Uge1xuICBwYWdlU3RhY2s6IGFueVtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2xlYW5TdGFjaygpO1xuICB9XG5cbiAgLy8gTcOpdG9kb3MgdmlydHVhbGVzIHBhcmEgbGFzIGFwbGljYWNpb25lc1xuICBnZXRGb3JtRGVmaW5pdGlvbihmb3JtQ29kZSkgeyB9XG4gIGV4ZWNTZXJ2ZXJBY3Rpb24oYWN0aW9uRGV0YWlsKSB7IH1cbiAgZ29Ub0Zvcm0oZm9ybUNvZGUsIHRva2VuLCBzdWJqZWN0KSB7IH1cbiAgYXN5bmMgbG9hZFN0YWNrKCkgeyB9XG4gIHNhdmVTdGFjaygpIHsgfVxuXG4gIGNsZWFuU3RhY2soKSB7IHRoaXMucGFnZVN0YWNrID0gW107IH1cbiAgcmVzZXRQYWdlU3RhY2soKSB7IHRoaXMuY2xlYW5TdGFjaygpIH1cblxuICBmaW5kRm9ybUluU3RhY2sodG9rZW4pIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucGFnZVN0YWNrLmZpbmRJbmRleChpdGVtID0+IGl0ZW0/LnRva2VuID09PSB0b2tlbik7XG4gICAgY29uc3QgZGF0YSA9IChpbmRleCA+PSAwKSA/IHRoaXMucGFnZVN0YWNrW2luZGV4XSA6IG51bGw7XG4gICAgcmV0dXJuIHsgaW5kZXgsIGRhdGEgfTtcbiAgfVxuXG4gIHJlcGxhY2VJdGVtKHRva2VuLCBmb3JtSW5mbykge1xuICAgIGlmICghdG9rZW4gfHwgIWZvcm1JbmZvKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHsgaW5kZXgsIGRhdGE6IHN0b3JlZEZvcm0gfSA9IHRoaXMuZmluZEZvcm1JblN0YWNrKHRva2VuKTtcbiAgICBsZXQgdXBkYXRlZEZvcm06IGFueSA9IG51bGw7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHVwZGF0ZWRGb3JtID0geyAuLi5zdG9yZWRGb3JtIH07XG4gICAgICB1cGRhdGVkRm9ybS5zdWJqZWN0ID0gZm9ybUluZm8/LnN1YmplY3QgPz8gc3RvcmVkRm9ybS5zdWJqZWN0O1xuICAgICAgdXBkYXRlZEZvcm0uc3RhdGUgPSBmb3JtSW5mbz8uc3RhdGUgPz8gc3RvcmVkRm9ybS5zdGF0ZTtcbiAgICAgIHVwZGF0ZWRGb3JtLmZpZWxkcyA9IHN0b3JlZEZvcm0/LmZpZWxkcyA/PyB7fTtcbiAgICAgIHVwZGF0ZWRGb3JtLmV4dHJhID0gc3RvcmVkRm9ybT8uZXh0cmEgPz8ge307XG4gICAgICBpZiAoZm9ybUluZm8uZmllbGRzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odXBkYXRlZEZvcm0uZmllbGRzLCBmb3JtSW5mby5maWVsZHMpO1xuICAgICAgfVxuICAgICAgaWYgKGZvcm1JbmZvLmV4dHJhKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odXBkYXRlZEZvcm0uZXh0cmEsIGZvcm1JbmZvLmV4dHJhKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFnZVN0YWNrW2luZGV4XSA9IHVwZGF0ZWRGb3JtO1xuICAgICAgdGhpcy5zYXZlU3RhY2soKTtcbiAgICB9XG4gIH1cblxuICBzdGFjayhvcmlnaW4sIHRhcmdldCkge1xuICAgIGNvbnN0IHRva2VuID0gbmFub2lkKDYpO1xuICAgIHRoaXMucmVwbGFjZUl0ZW0odGFyZ2V0Lm9yaWdpblRva2VuLCBvcmlnaW4pO1xuICAgIHRoaXMucGFnZVN0YWNrLnB1c2goeyB0b2tlbiwgLi4udGFyZ2V0IH0pO1xuICAgIHRoaXMuc2F2ZVN0YWNrKCk7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgdW5zdGFjayh0b2tlbiA9IG51bGwpIHtcbiAgICBsZXQgaW5kZXggPSAodG9rZW4pID8gdGhpcy5maW5kRm9ybUluU3RhY2sodG9rZW4pLmluZGV4IDogdGhpcy5wYWdlU3RhY2subGVuZ3RoIC0gMjtcbiAgICBsZXQgZm9ybUluZm8gPSBudWxsO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICBmb3JtSW5mbyA9IHRoaXMucGFnZVN0YWNrW2luZGV4XTtcbiAgICAgIHRoaXMucGFnZVN0YWNrLnNwbGljZShpbmRleCArIDEpO1xuICAgICAgdGhpcy5zYXZlU3RhY2soKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1JbmZvO1xuICB9XG5cbiAgZ2V0Rm9ybUluZm8odG9rZW46IHN0cmluZykge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5maW5kRm9ybUluU3RhY2sodG9rZW4pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogZGF0YT8udG9rZW4sXG4gICAgICBzdWJqZWN0OiBkYXRhPy5zdWJqZWN0LFxuICAgICAgc3RhdGU6IGRhdGE/LnN0YXRlLFxuICAgICAgb3JpZ2luVG9rZW46IGRhdGE/Lm9yaWdpblRva2VuLFxuICAgICAgZmllbGRzOiBkYXRhPy5maWVsZHMgPz8ge30sXG4gICAgICBleHRyYTogZGF0YT8uZXh0cmEgPz8ge31cbiAgICB9O1xuICB9XG5cbiAgb3BlbkZvcm0ob3JpZ2luOiBhbnksIHRhcmdldDogYW55KSB7XG4gICAgKCFvcmlnaW4pICYmIHRoaXMuY2xlYW5TdGFjaygpO1xuICAgIHRhcmdldC5vcmlnaW5Ub2tlbiA9IG9yaWdpbj8udG9rZW4gPz8gbnVsbDtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuc3RhY2sob3JpZ2luLCB0YXJnZXQpO1xuICAgIHRoaXMuZ29Ub0Zvcm0odGFyZ2V0Lm5hbWUsIHRva2VuLCB0YXJnZXQuc3ViamVjdCk7XG4gIH1cblxuICBiYWNrVG8odGFyZ2V0VG9rZW4gPSBudWxsKSB7XG4gICAgY29uc3QgZm9ybUluZm86IGFueSA9IHRoaXMudW5zdGFjayh0YXJnZXRUb2tlbik7XG4gICAgZm9ybUluZm8gJiYgZm9ybUluZm8ubmFtZSAmJiB0aGlzLmdvVG9Gb3JtKGZvcm1JbmZvLm5hbWUsIGZvcm1JbmZvLnRva2VuLCBmb3JtSW5mby5zdWJqZWN0KTtcbiAgfVxufVxuIl19