UNPKG

tuain-ng-forms-lib

Version:

Componentes y Clases Angular para la gestión de formularios TUAIN

88 lines 12.8 kB
import { Injectable } from '@angular/core'; import { nanoid } from 'nanoid'; import * as i0 from "@angular/core"; 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); if (index >= 0 && storedForm) { const 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 ?? '', name: data?.name ?? '', 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 ?? null); } backTo(targetToken = null) { const formInfo = this.unstack(targetToken); formInfo && formInfo.name && this.goToForm(formInfo.name, formInfo.token, formInfo.subject ?? null); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LibFormManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LibFormManagerService }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LibFormManagerService, decorators: [{ type: Injectable }], ctorParameters: () => [] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7O0FBY2hDLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsU0FBUyxDQUFrQjtJQUUzQjtRQUNFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsMENBQTBDO0lBQzFDLGlCQUFpQixDQUFDLFFBQWdCLElBQVMsQ0FBQztJQUM1QyxnQkFBZ0IsQ0FBQyxZQUFpQixJQUFTLENBQUM7SUFDNUMsUUFBUSxDQUFDLFFBQWdCLEVBQUUsS0FBYSxFQUFFLE9BQXNCLElBQVUsQ0FBQztJQUMzRSxLQUFLLENBQUMsU0FBUyxLQUFvQixDQUFDO0lBQ3BDLFNBQVMsS0FBVyxDQUFDO0lBRXJCLFVBQVUsS0FBVyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0MsY0FBYyxLQUFXLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQSxDQUFDLENBQUM7SUFFNUMsZUFBZSxDQUFDLEtBQWE7UUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDekQsT0FBTyxF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RUFBRSxJQUFJLEVBQUUsT0FBTztZQUN0QixLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUs7WUFDbEIsV0FBVyxFQUFFLElBQUksRUFBRSxXQUFXO1lBQzlCLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLEVBQUU7WUFDMUIsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUFxQyxFQUFFLE1BQThCO1FBQzVFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0IsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQTZCLElBQUk7UUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQ3RHLENBQUM7d0dBckZVLHFCQUFxQjs0R0FBckIscUJBQXFCOzs0RkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJztcblxuZXhwb3J0IGludGVyZmFjZSBGb3JtU3RhY2tJdGVtIHtcbiAgdG9rZW46IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG4gIHN1YmplY3Q/OiBzdHJpbmcgfCBudWxsO1xuICBzdGF0ZT86IHN0cmluZyB8IG51bGw7XG4gIGZpZWxkcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGV4dHJhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgb3JpZ2luVG9rZW4/OiBzdHJpbmcgfCBudWxsO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTGliRm9ybU1hbmFnZXJTZXJ2aWNlIHtcbiAgcGFnZVN0YWNrOiBGb3JtU3RhY2tJdGVtW107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jbGVhblN0YWNrKCk7XG4gIH1cblxuICAvLyBNw6l0b2RvcyB2aXJ0dWFsZXMgcGFyYSBsYXMgYXBsaWNhY2lvbmVzXG4gIGdldEZvcm1EZWZpbml0aW9uKGZvcm1Db2RlOiBzdHJpbmcpOiBhbnkgeyB9XG4gIGV4ZWNTZXJ2ZXJBY3Rpb24oYWN0aW9uRGV0YWlsOiBhbnkpOiBhbnkgeyB9XG4gIGdvVG9Gb3JtKGZvcm1Db2RlOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIHN1YmplY3Q6IHN0cmluZyB8IG51bGwpOiB2b2lkIHsgfVxuICBhc3luYyBsb2FkU3RhY2soKTogUHJvbWlzZTx2b2lkPiB7IH1cbiAgc2F2ZVN0YWNrKCk6IHZvaWQgeyB9XG5cbiAgY2xlYW5TdGFjaygpOiB2b2lkIHsgdGhpcy5wYWdlU3RhY2sgPSBbXTsgfVxuICByZXNldFBhZ2VTdGFjaygpOiB2b2lkIHsgdGhpcy5jbGVhblN0YWNrKCkgfVxuXG4gIGZpbmRGb3JtSW5TdGFjayh0b2tlbjogc3RyaW5nKTogeyBpbmRleDogbnVtYmVyOyBkYXRhOiBGb3JtU3RhY2tJdGVtIHwgbnVsbCB9IHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucGFnZVN0YWNrLmZpbmRJbmRleChpdGVtID0+IGl0ZW0/LnRva2VuID09PSB0b2tlbik7XG4gICAgY29uc3QgZGF0YSA9IChpbmRleCA+PSAwKSA/IHRoaXMucGFnZVN0YWNrW2luZGV4XSA6IG51bGw7XG4gICAgcmV0dXJuIHsgaW5kZXgsIGRhdGEgfTtcbiAgfVxuXG4gIHJlcGxhY2VJdGVtKHRva2VuOiBzdHJpbmcsIGZvcm1JbmZvOiBQYXJ0aWFsPEZvcm1TdGFja0l0ZW0+KTogdm9pZCB7XG4gICAgaWYgKCF0b2tlbiB8fCAhZm9ybUluZm8pIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgeyBpbmRleCwgZGF0YTogc3RvcmVkRm9ybSB9ID0gdGhpcy5maW5kRm9ybUluU3RhY2sodG9rZW4pO1xuICAgIGlmIChpbmRleCA+PSAwICYmIHN0b3JlZEZvcm0pIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRGb3JtOiBGb3JtU3RhY2tJdGVtID0geyAuLi5zdG9yZWRGb3JtIH07XG4gICAgICB1cGRhdGVkRm9ybS5zdWJqZWN0ID0gZm9ybUluZm8/LnN1YmplY3QgPz8gc3RvcmVkRm9ybS5zdWJqZWN0O1xuICAgICAgdXBkYXRlZEZvcm0uc3RhdGUgPSBmb3JtSW5mbz8uc3RhdGUgPz8gc3RvcmVkRm9ybS5zdGF0ZTtcbiAgICAgIHVwZGF0ZWRGb3JtLmZpZWxkcyA9IHN0b3JlZEZvcm0/LmZpZWxkcyA/PyB7fTtcbiAgICAgIHVwZGF0ZWRGb3JtLmV4dHJhID0gc3RvcmVkRm9ybT8uZXh0cmEgPz8ge307XG4gICAgICBpZiAoZm9ybUluZm8uZmllbGRzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odXBkYXRlZEZvcm0uZmllbGRzISwgZm9ybUluZm8uZmllbGRzKTtcbiAgICAgIH1cbiAgICAgIGlmIChmb3JtSW5mby5leHRyYSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHVwZGF0ZWRGb3JtLmV4dHJhISwgZm9ybUluZm8uZXh0cmEpO1xuICAgICAgfVxuICAgICAgdGhpcy5wYWdlU3RhY2tbaW5kZXhdID0gdXBkYXRlZEZvcm07XG4gICAgICB0aGlzLnNhdmVTdGFjaygpO1xuICAgIH1cbiAgfVxuXG4gIHN0YWNrKG9yaWdpbjogUGFydGlhbDxGb3JtU3RhY2tJdGVtPiwgdGFyZ2V0OiBQYXJ0aWFsPEZvcm1TdGFja0l0ZW0+KTogc3RyaW5nIHtcbiAgICBjb25zdCB0b2tlbiA9IG5hbm9pZCg2KTtcbiAgICB0aGlzLnJlcGxhY2VJdGVtKHRhcmdldC5vcmlnaW5Ub2tlbiA/PyAnJywgb3JpZ2luKTtcbiAgICB0aGlzLnBhZ2VTdGFjay5wdXNoKHsgdG9rZW4sIC4uLnRhcmdldCB9IGFzIEZvcm1TdGFja0l0ZW0pO1xuICAgIHRoaXMuc2F2ZVN0YWNrKCk7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgdW5zdGFjayh0b2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiBGb3JtU3RhY2tJdGVtIHwgbnVsbCB7XG4gICAgbGV0IGluZGV4ID0gKHRva2VuKSA/IHRoaXMuZmluZEZvcm1JblN0YWNrKHRva2VuKS5pbmRleCA6IHRoaXMucGFnZVN0YWNrLmxlbmd0aCAtIDI7XG4gICAgbGV0IGZvcm1JbmZvOiBGb3JtU3RhY2tJdGVtIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIGZvcm1JbmZvID0gdGhpcy5wYWdlU3RhY2tbaW5kZXhdO1xuICAgICAgdGhpcy5wYWdlU3RhY2suc3BsaWNlKGluZGV4ICsgMSk7XG4gICAgICB0aGlzLnNhdmVTdGFjaygpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybUluZm87XG4gIH1cblxuICBnZXRGb3JtSW5mbyh0b2tlbjogc3RyaW5nKTogRm9ybVN0YWNrSXRlbSB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLmZpbmRGb3JtSW5TdGFjayh0b2tlbik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuOiBkYXRhPy50b2tlbiA/PyAnJyxcbiAgICAgIG5hbWU6IGRhdGE/Lm5hbWUgPz8gJycsXG4gICAgICBzdWJqZWN0OiBkYXRhPy5zdWJqZWN0LFxuICAgICAgc3RhdGU6IGRhdGE/LnN0YXRlLFxuICAgICAgb3JpZ2luVG9rZW46IGRhdGE/Lm9yaWdpblRva2VuLFxuICAgICAgZmllbGRzOiBkYXRhPy5maWVsZHMgPz8ge30sXG4gICAgICBleHRyYTogZGF0YT8uZXh0cmEgPz8ge31cbiAgICB9O1xuICB9XG5cbiAgb3BlbkZvcm0ob3JpZ2luOiBQYXJ0aWFsPEZvcm1TdGFja0l0ZW0+IHwgbnVsbCwgdGFyZ2V0OiBQYXJ0aWFsPEZvcm1TdGFja0l0ZW0+KTogdm9pZCB7XG4gICAgKCFvcmlnaW4pICYmIHRoaXMuY2xlYW5TdGFjaygpO1xuICAgIHRhcmdldC5vcmlnaW5Ub2tlbiA9IG9yaWdpbj8udG9rZW4gPz8gbnVsbDtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuc3RhY2sob3JpZ2luID8/IHt9LCB0YXJnZXQpO1xuICAgIHRoaXMuZ29Ub0Zvcm0odGFyZ2V0Lm5hbWUgPz8gJycsIHRva2VuLCB0YXJnZXQuc3ViamVjdCA/PyBudWxsKTtcbiAgfVxuXG4gIGJhY2tUbyh0YXJnZXRUb2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtSW5mbyA9IHRoaXMudW5zdGFjayh0YXJnZXRUb2tlbik7XG4gICAgZm9ybUluZm8gJiYgZm9ybUluZm8ubmFtZSAmJiB0aGlzLmdvVG9Gb3JtKGZvcm1JbmZvLm5hbWUsIGZvcm1JbmZvLnRva2VuLCBmb3JtSW5mby5zdWJqZWN0ID8/IG51bGwpO1xuICB9XG59XG4iXX0=