@ng-flexy/layout
Version:
Flexy components and tools to build Angular 8+ applications
65 lines • 9.29 kB
JavaScript
import { Inject, Injectable, Optional } from '@angular/core';
import { parseFormJson } from './layout-json-mapper.utils';
import { FLEXY_COMPONENTS_MAP } from '../layout-options.token';
import * as i0 from "@angular/core";
import * as i1 from "../layout-options.token";
export class FlexyLayoutJsonMapperService {
constructor(componentMap) {
this.componentMap = componentMap;
}
get supportedComponents() {
return Object.keys(this.componentMap);
}
parse(json) {
return this.map(parseFormJson(json));
}
assignMap(map) {
if (map) {
Object.assign(this.componentMap, map);
}
}
map(json, parentSchema = null) {
console.log({ xx: this.componentMap });
const schema = [];
if (json) {
json.forEach((jsonItem, index) => {
const schemaItem = this.mapItem(jsonItem, '' + index, parentSchema);
if (jsonItem.children) {
schemaItem.children = this.map(jsonItem.children);
}
schema.push(schemaItem);
});
}
return schema;
}
mapItem(jsonItem, id = '', parent = null) {
const schemaItem = {
attributes: jsonItem.attributes
};
if (jsonItem.component) {
const componentJsonItem = jsonItem;
if (this.componentMap && this.componentMap[componentJsonItem.component]) {
schemaItem.componentType = this.componentMap[componentJsonItem.component];
schemaItem.componentName = componentJsonItem.component;
schemaItem.componentId = componentJsonItem.id;
schemaItem.componentInputs = componentJsonItem.properties ? componentJsonItem.properties : {};
}
else {
console.error(`Component ${componentJsonItem.component} can't be mapped`);
}
}
schemaItem.id = (parent && parent.id ? parent.id + '/' : '') + '' + (id ? id : Date.now());
schemaItem.parent = parent;
return schemaItem;
}
}
FlexyLayoutJsonMapperService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FlexyLayoutJsonMapperService_Factory() { return new FlexyLayoutJsonMapperService(i0.ɵɵinject(i1.FLEXY_COMPONENTS_MAP, 8)); }, token: FlexyLayoutJsonMapperService, providedIn: "root" });
FlexyLayoutJsonMapperService.decorators = [
{ type: Injectable, args: [{
providedIn: "root"
},] }
];
FlexyLayoutJsonMapperService.ctorParameters = () => [
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [FLEXY_COMPONENTS_MAP,] }] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWpzb24tbWFwcGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sYXlvdXQvc3JjL2xpYi9zZXJ2aWNlcy9sYXlvdXQtanNvbi1tYXBwZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFRN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7QUFLL0QsTUFBTSxPQUFPLDRCQUE0QjtJQUt2QyxZQUE4RCxZQUFxQztRQUFyQyxpQkFBWSxHQUFaLFlBQVksQ0FBeUI7SUFDbkcsQ0FBQztJQUxELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUtELEtBQUssQ0FBQyxJQUFxQjtRQUN6QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUE0QjtRQUNwQyxJQUFJLEdBQUcsRUFBRTtZQUNQLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztTQUN2QztJQUNILENBQUM7SUFFRCxHQUFHLENBQUMsSUFBNkIsRUFBRSxlQUFrQyxJQUFJO1FBQ3ZFLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBQyxDQUFDLENBQUE7UUFDcEMsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQy9CLE1BQU0sVUFBVSxHQUFzQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUN2RixJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUU7b0JBQ3JCLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ25EO2dCQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxPQUFPLENBQUMsUUFBK0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQTRCLElBQUk7UUFDaEYsTUFBTSxVQUFVLEdBQXNCO1lBQ3BDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtTQUNoQyxDQUFDO1FBQ0YsSUFBSyxRQUEyQyxDQUFDLFNBQVMsRUFBRTtZQUMxRCxNQUFNLGlCQUFpQixHQUFHLFFBQTBDLENBQUM7WUFDckUsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ3RFLFVBQXlDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pHLFVBQXlDLENBQUMsYUFBYSxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQztnQkFDdEYsVUFBeUMsQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxDQUFDO2dCQUM3RSxVQUF5QyxDQUFDLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQy9IO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxpQkFBaUIsQ0FBQyxTQUFTLGtCQUFrQixDQUFDLENBQUM7YUFDM0U7U0FDRjtRQUVELFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzRixVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUUzQixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDOzs7O1lBekRGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OzRDQU1jLFFBQVEsWUFBSSxNQUFNLFNBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxleHlMYXlvdXRDb21wb25lbnRTY2hlbWEsIEZsZXh5TGF5b3V0U2NoZW1hIH0gZnJvbSAnLi4vbW9kZWwvbGF5b3V0LXNjaGVtYS5tb2RlbCc7XG5pbXBvcnQgeyBGbGV4eUxheW91dENvbXBvbmVudE1hcCB9IGZyb20gJy4uL21vZGVsL2NvbXBvbmVudC1tYXAubW9kZWwnO1xuaW1wb3J0IHtcbiAgRmxleHlMYXlvdXRDb21wb25lbnRKc29uU2NoZW1hLFxuICBGbGV4eUxheW91dEpzb24sXG4gIEZsZXh5TGF5b3V0SnNvblNjaGVtYVxufSBmcm9tICcuLi9tb2RlbC9sYXlvdXQtanNvbi1zY2hlbWEubW9kZWwnO1xuaW1wb3J0IHsgcGFyc2VGb3JtSnNvbiB9IGZyb20gJy4vbGF5b3V0LWpzb24tbWFwcGVyLnV0aWxzJztcbmltcG9ydCB7IEZMRVhZX0NPTVBPTkVOVFNfTUFQIH0gZnJvbSAnLi4vbGF5b3V0LW9wdGlvbnMudG9rZW4nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiXG59KVxuZXhwb3J0IGNsYXNzIEZsZXh5TGF5b3V0SnNvbk1hcHBlclNlcnZpY2Uge1xuICBnZXQgc3VwcG9ydGVkQ29tcG9uZW50cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29tcG9uZW50TWFwKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoRkxFWFlfQ09NUE9ORU5UU19NQVApIHByaXZhdGUgY29tcG9uZW50TWFwOiBGbGV4eUxheW91dENvbXBvbmVudE1hcCkge1xuICB9XG5cbiAgcGFyc2UoanNvbjogRmxleHlMYXlvdXRKc29uKTogRmxleHlMYXlvdXRTY2hlbWFbXSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKHBhcnNlRm9ybUpzb24oanNvbikpO1xuICB9XG5cbiAgYXNzaWduTWFwKG1hcDogRmxleHlMYXlvdXRDb21wb25lbnRNYXApIHtcbiAgICBpZiAobWFwKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tcG9uZW50TWFwLCBtYXApO1xuICAgIH1cbiAgfVxuXG4gIG1hcChqc29uOiBGbGV4eUxheW91dEpzb25TY2hlbWFbXSwgcGFyZW50U2NoZW1hOiBGbGV4eUxheW91dFNjaGVtYSA9IG51bGwpOiBGbGV4eUxheW91dFNjaGVtYVtdIHtcbiAgICBjb25zb2xlLmxvZyh7eHg6IHRoaXMuY29tcG9uZW50TWFwfSlcbiAgICBjb25zdCBzY2hlbWE6IEZsZXh5TGF5b3V0U2NoZW1hW10gPSBbXTtcbiAgICBpZiAoanNvbikge1xuICAgICAganNvbi5mb3JFYWNoKChqc29uSXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hSXRlbTogRmxleHlMYXlvdXRTY2hlbWEgPSB0aGlzLm1hcEl0ZW0oanNvbkl0ZW0sICcnICsgaW5kZXgsIHBhcmVudFNjaGVtYSk7XG4gICAgICAgIGlmIChqc29uSXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgIHNjaGVtYUl0ZW0uY2hpbGRyZW4gPSB0aGlzLm1hcChqc29uSXRlbS5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZW1hLnB1c2goc2NoZW1hSXRlbSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgbWFwSXRlbShqc29uSXRlbTogRmxleHlMYXlvdXRKc29uU2NoZW1hLCBpZCA9ICcnLCBwYXJlbnQ6IEZsZXh5TGF5b3V0U2NoZW1hID0gbnVsbCk6IEZsZXh5TGF5b3V0U2NoZW1hIHtcbiAgICBjb25zdCBzY2hlbWFJdGVtOiBGbGV4eUxheW91dFNjaGVtYSA9IHtcbiAgICAgIGF0dHJpYnV0ZXM6IGpzb25JdGVtLmF0dHJpYnV0ZXNcbiAgICB9O1xuICAgIGlmICgoanNvbkl0ZW0gYXMgRmxleHlMYXlvdXRDb21wb25lbnRKc29uU2NoZW1hKS5jb21wb25lbnQpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEpzb25JdGVtID0ganNvbkl0ZW0gYXMgRmxleHlMYXlvdXRDb21wb25lbnRKc29uU2NoZW1hO1xuICAgICAgaWYgKHRoaXMuY29tcG9uZW50TWFwICYmIHRoaXMuY29tcG9uZW50TWFwW2NvbXBvbmVudEpzb25JdGVtLmNvbXBvbmVudF0pIHtcbiAgICAgICAgKHNjaGVtYUl0ZW0gYXMgRmxleHlMYXlvdXRDb21wb25lbnRTY2hlbWEpLmNvbXBvbmVudFR5cGUgPSB0aGlzLmNvbXBvbmVudE1hcFtjb21wb25lbnRKc29uSXRlbS5jb21wb25lbnRdO1xuICAgICAgICAoc2NoZW1hSXRlbSBhcyBGbGV4eUxheW91dENvbXBvbmVudFNjaGVtYSkuY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudEpzb25JdGVtLmNvbXBvbmVudDtcbiAgICAgICAgKHNjaGVtYUl0ZW0gYXMgRmxleHlMYXlvdXRDb21wb25lbnRTY2hlbWEpLmNvbXBvbmVudElkID0gY29tcG9uZW50SnNvbkl0ZW0uaWQ7XG4gICAgICAgIChzY2hlbWFJdGVtIGFzIEZsZXh5TGF5b3V0Q29tcG9uZW50U2NoZW1hKS5jb21wb25lbnRJbnB1dHMgPSBjb21wb25lbnRKc29uSXRlbS5wcm9wZXJ0aWVzID8gY29tcG9uZW50SnNvbkl0ZW0ucHJvcGVydGllcyA6IHt9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQ29tcG9uZW50ICR7Y29tcG9uZW50SnNvbkl0ZW0uY29tcG9uZW50fSBjYW4ndCBiZSBtYXBwZWRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlbWFJdGVtLmlkID0gKHBhcmVudCAmJiBwYXJlbnQuaWQgPyBwYXJlbnQuaWQgKyAnLycgOiAnJykgKyAnJyArIChpZCA/IGlkIDogRGF0ZS5ub3coKSk7XG4gICAgc2NoZW1hSXRlbS5wYXJlbnQgPSBwYXJlbnQ7XG5cbiAgICByZXR1cm4gc2NoZW1hSXRlbTtcbiAgfVxufVxuIl19