@ng-dynamic-forms/core
Version:
A rapid form development library for Angular
100 lines • 15 kB
JavaScript
import { Injectable, QueryList } from "@angular/core";
import { DynamicFormArrayGroupModel } from "../model/form-array/dynamic-form-array.model";
import { DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT } from "../directive/dynamic-template.directive";
import { isObject, isString } from "../utils/core.utils";
import * as i0 from "@angular/core";
export class DynamicFormLayoutService {
findById(id, formLayout) {
if (isObject(formLayout)) {
for (const key of Object.keys(formLayout)) {
if (key === id) {
return formLayout[key];
}
}
}
return null;
}
findByModel(model, formLayout) {
let controlLayout = null;
if (isObject(formLayout)) {
for (const key of Object.keys(formLayout)) {
key.split(",").forEach(substring => {
const selector = substring.trim();
if (selector === model.id || selector === model.type) {
controlLayout = formLayout[key];
}
});
}
}
return controlLayout;
}
filterTemplatesByModel(model, templates) {
const filterCallback = (template) => {
return template.modelId === model.id || template.modelType === model.type;
};
if (templates instanceof QueryList) {
return templates.filter(filterCallback);
}
else if (Array.isArray(templates)) {
return templates.filter(filterCallback);
}
return [];
}
getAlignedTemplate(model, templates, alignment) {
return this.filterTemplatesByModel(model, templates)
.find(template => template.as === null && template.align === alignment);
}
/*
getIndexedTemplates(model: DynamicFormControlModel, templates: DynamicFormControlTemplates): DynamicTemplateDirective[] | undefined {
return this.filterTemplatesByModel(model, templates).filter(template => template.as === null);
}
*/
getStartTemplate(model, templates) {
return this.getAlignedTemplate(model, templates, DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT.Start);
}
getEndTemplate(model, templates) {
return this.getAlignedTemplate(model, templates, DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT.End);
}
getClass(layout, context, place) {
if (isObject(layout) && layout.hasOwnProperty(context)) {
const config = layout[context];
if (config.hasOwnProperty(place)) {
return config[place];
}
}
return "";
}
getHostClass(layout) {
const keys = ["element", "grid"];
let cls = "";
if (isObject(layout)) {
keys.forEach(key => {
if (isObject(layout[key]) && isString(layout[key]?.host)) {
cls = cls + ` ${layout[key]?.host}`;
}
});
}
return cls;
}
getElementId(model) {
let id = model.id;
let parent = model.parent;
while (parent !== null) {
if (parent instanceof DynamicFormArrayGroupModel) {
id = `${parent.context.id}-${parent.index}-${model.id}`;
break;
}
parent = parent.parent;
}
return id;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: DynamicFormLayoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: DynamicFormLayoutService, providedIn: "root" }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: DynamicFormLayoutService, decorators: [{
type: Injectable,
args: [{
providedIn: "root"
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLWxheW91dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZHluYW1pYy1mb3Jtcy9jb3JlL3NyYy9saWIvc2VydmljZS9keW5hbWljLWZvcm0tbGF5b3V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFRdEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDMUYsT0FBTyxFQUE0QixvQ0FBb0MsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3pILE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBU3pELE1BQU0sT0FBTyx3QkFBd0I7SUFFakMsUUFBUSxDQUFDLEVBQVUsRUFBRSxVQUFvQztRQUNyRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN0QixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3ZDLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBRTtvQkFDWixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDMUI7YUFDSjtTQUNKO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUE4QixFQUFFLFVBQWdEO1FBQ3hGLElBQUksYUFBYSxHQUFvQyxJQUFJLENBQUM7UUFFMUQsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDdEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUN2QyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDL0Is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QUFDLEtBQThCO1FBQ3ZDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEIsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUUxQixPQUFPLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDcEIsSUFBSSxNQUFNLFlBQVksMEJBQTBCLEVBQUU7Z0JBQzlDLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN4RCxNQUFNO2FBQ1Q7WUFFRCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUMxQjtRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQzs4R0E3R1Esd0JBQXdCO2tIQUF4Qix3QkFBd0IsY0FGckIsTUFBTTs7MkZBRVQsd0JBQXdCO2tCQUhwQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFF1ZXJ5TGlzdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICAgIER5bmFtaWNGb3JtQ29udHJvbExheW91dCxcbiAgICBEeW5hbWljRm9ybUNvbnRyb2xMYXlvdXRDb25maWcsXG4gICAgRHluYW1pY0Zvcm1Db250cm9sTGF5b3V0Q29udGV4dCxcbiAgICBEeW5hbWljRm9ybUNvbnRyb2xMYXlvdXRQbGFjZVxufSBmcm9tIFwiLi4vbW9kZWwvbWlzYy9keW5hbWljLWZvcm0tY29udHJvbC1sYXlvdXQubW9kZWxcIjtcbmltcG9ydCB7IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsIH0gZnJvbSBcIi4uL21vZGVsL2R5bmFtaWMtZm9ybS1jb250cm9sLm1vZGVsXCI7XG5pbXBvcnQgeyBEeW5hbWljRm9ybUFycmF5R3JvdXBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbC9mb3JtLWFycmF5L2R5bmFtaWMtZm9ybS1hcnJheS5tb2RlbFwiO1xuaW1wb3J0IHsgRHluYW1pY1RlbXBsYXRlRGlyZWN0aXZlLCBEWU5BTUlDX1RFTVBMQVRFX0RJUkVDVElWRV9BTElHTk1FTlQgfSBmcm9tIFwiLi4vZGlyZWN0aXZlL2R5bmFtaWMtdGVtcGxhdGUuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbHMvY29yZS51dGlsc1wiO1xuXG5leHBvcnQgdHlwZSBEeW5hbWljRm9ybUxheW91dCA9IHsgW2lkOiBzdHJpbmddOiBEeW5hbWljRm9ybUNvbnRyb2xMYXlvdXQgfTtcblxuZXhwb3J0IHR5cGUgRHluYW1pY0Zvcm1Db250cm9sVGVtcGxhdGVzID0gUXVlcnlMaXN0PER5bmFtaWNUZW1wbGF0ZURpcmVjdGl2ZT4gfCBEeW5hbWljVGVtcGxhdGVEaXJlY3RpdmVbXSB8IHVuZGVmaW5lZDtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNGb3JtTGF5b3V0U2VydmljZSB7XG5cbiAgICBmaW5kQnlJZChpZDogc3RyaW5nLCBmb3JtTGF5b3V0OiBEeW5hbWljRm9ybUxheW91dCB8IG51bGwpOiBEeW5hbWljRm9ybUNvbnRyb2xMYXlvdXQgfCBudWxsIHtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGZvcm1MYXlvdXQpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmb3JtTGF5b3V0KSkge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JtTGF5b3V0W2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZmluZEJ5TW9kZWwobW9kZWw6IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsLCBmb3JtTGF5b3V0OiBEeW5hbWljRm9ybUxheW91dCB8IG51bGwgfCB1bmRlZmluZWQpOiBEeW5hbWljRm9ybUNvbnRyb2xMYXlvdXQgfCBudWxsIHtcbiAgICAgICAgbGV0IGNvbnRyb2xMYXlvdXQ6IER5bmFtaWNGb3JtQ29udHJvbExheW91dCB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIGlmIChpc09iamVjdChmb3JtTGF5b3V0KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZm9ybUxheW91dCkpIHtcbiAgICAgICAgICAgICAgICBrZXkuc3BsaXQoXCIsXCIpLmZvckVhY2goc3Vic3RyaW5nID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBzdWJzdHJpbmcudHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RvciA9PT0gbW9kZWwuaWQgfHwgc2VsZWN0b3IgPT09IG1vZGVsLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xMYXlvdXQgPSBmb3JtTGF5b3V0W2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250cm9sTGF5b3V0O1xuICAgIH1cblxuICAgIGZpbHRlclRlbXBsYXRlc0J5TW9kZWwobW9kZWw6IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsLCB0ZW1wbGF0ZXM6IER5bmFtaWNGb3JtQ29udHJvbFRlbXBsYXRlcyk6IER5bmFtaWNUZW1wbGF0ZURpcmVjdGl2ZVtdIHtcbiAgICAgICAgY29uc3QgZmlsdGVyQ2FsbGJhY2s6ICh0ZW1wbGF0ZTogRHluYW1pY1RlbXBsYXRlRGlyZWN0aXZlKSA9PiBib29sZWFuID0gKHRlbXBsYXRlOiBEeW5hbWljVGVtcGxhdGVEaXJlY3RpdmUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5tb2RlbElkID09PSBtb2RlbC5pZCB8fCB0ZW1wbGF0ZS5tb2RlbFR5cGUgPT09IG1vZGVsLnR5cGU7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRlbXBsYXRlcyBpbnN0YW5jZW9mIFF1ZXJ5TGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5maWx0ZXIoZmlsdGVyQ2FsbGJhY2spO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0ZW1wbGF0ZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGVtcGxhdGVzLmZpbHRlcihmaWx0ZXJDYWxsYmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgZ2V0QWxpZ25lZFRlbXBsYXRlKG1vZGVsOiBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbCwgdGVtcGxhdGVzOiBEeW5hbWljRm9ybUNvbnRyb2xUZW1wbGF0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogRFlOQU1JQ19URU1QTEFURV9ESVJFQ1RJVkVfQUxJR05NRU5UKTogRHluYW1pY1RlbXBsYXRlRGlyZWN0aXZlIHwgdW5kZWZpbmVkIHtcblxuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJUZW1wbGF0ZXNCeU1vZGVsKG1vZGVsLCB0ZW1wbGF0ZXMpXG4gICAgICAgICAgICAuZmluZCh0ZW1wbGF0ZSA9PiB0ZW1wbGF0ZS5hcyA9PT0gbnVsbCAmJiB0ZW1wbGF0ZS5hbGlnbiA9PT0gYWxpZ25tZW50KTtcbiAgICB9XG5cbiAgICAvKlxuICAgIGdldEluZGV4ZWRUZW1wbGF0ZXMobW9kZWw6IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsLCB0ZW1wbGF0ZXM6IER5bmFtaWNGb3JtQ29udHJvbFRlbXBsYXRlcyk6IER5bmFtaWNUZW1wbGF0ZURpcmVjdGl2ZVtdIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyVGVtcGxhdGVzQnlNb2RlbChtb2RlbCwgdGVtcGxhdGVzKS5maWx0ZXIodGVtcGxhdGUgPT4gdGVtcGxhdGUuYXMgPT09IG51bGwpO1xuICAgIH1cbiAgICAqL1xuICAgIGdldFN0YXJ0VGVtcGxhdGUobW9kZWw6IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsLCB0ZW1wbGF0ZXM6IER5bmFtaWNGb3JtQ29udHJvbFRlbXBsYXRlcyk6IER5bmFtaWNUZW1wbGF0ZURpcmVjdGl2ZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFsaWduZWRUZW1wbGF0ZShtb2RlbCwgdGVtcGxhdGVzLCBEWU5BTUlDX1RFTVBMQVRFX0RJUkVDVElWRV9BTElHTk1FTlQuU3RhcnQpO1xuICAgIH1cblxuICAgIGdldEVuZFRlbXBsYXRlKG1vZGVsOiBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbCwgdGVtcGxhdGVzOiBEeW5hbWljRm9ybUNvbnRyb2xUZW1wbGF0ZXMpOiBEeW5hbWljVGVtcGxhdGVEaXJlY3RpdmUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGlnbmVkVGVtcGxhdGUobW9kZWwsIHRlbXBsYXRlcywgRFlOQU1JQ19URU1QTEFURV9ESVJFQ1RJVkVfQUxJR05NRU5ULkVuZCk7XG4gICAgfVxuXG4gICAgZ2V0Q2xhc3MobGF5b3V0OiBEeW5hbWljRm9ybUNvbnRyb2xMYXlvdXQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0OiBEeW5hbWljRm9ybUNvbnRyb2xMYXlvdXRDb250ZXh0LFxuICAgICAgICAgICAgIHBsYWNlOiBEeW5hbWljRm9ybUNvbnRyb2xMYXlvdXRQbGFjZSk6IHN0cmluZyB7XG5cbiAgICAgICAgaWYgKGlzT2JqZWN0KGxheW91dCkgJiYgbGF5b3V0Lmhhc093blByb3BlcnR5KGNvbnRleHQpKSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBsYXlvdXRbY29udGV4dF0gYXMgRHluYW1pY0Zvcm1Db250cm9sTGF5b3V0Q29uZmlnO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5oYXNPd25Qcm9wZXJ0eShwbGFjZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnW3BsYWNlXSBhcyBzdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBnZXRIb3N0Q2xhc3MobGF5b3V0OiBEeW5hbWljRm9ybUNvbnRyb2xMYXlvdXQgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qga2V5czogKGtleW9mIER5bmFtaWNGb3JtQ29udHJvbExheW91dClbXSA9IFtcImVsZW1lbnRcIiwgXCJncmlkXCJdO1xuICAgICAgICBsZXQgY2xzID0gXCJcIjtcblxuICAgICAgICBpZiAoaXNPYmplY3QobGF5b3V0KSkge1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGxheW91dFtrZXldKSAmJiBpc1N0cmluZyhsYXlvdXRba2V5XT8uaG9zdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xzID0gY2xzICsgYCAke2xheW91dFtrZXldPy5ob3N0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xzO1xuICAgIH1cblxuICAgIGdldEVsZW1lbnRJZChtb2RlbDogRHluYW1pY0Zvcm1Db250cm9sTW9kZWwpOiBzdHJpbmcge1xuICAgICAgICBsZXQgaWQgPSBtb2RlbC5pZDtcbiAgICAgICAgbGV0IHBhcmVudCA9IG1vZGVsLnBhcmVudDtcblxuICAgICAgICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgRHluYW1pY0Zvcm1BcnJheUdyb3VwTW9kZWwpIHtcbiAgICAgICAgICAgICAgICBpZCA9IGAke3BhcmVudC5jb250ZXh0LmlkfS0ke3BhcmVudC5pbmRleH0tJHttb2RlbC5pZH1gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbn1cbiJdfQ==