@formql/core
Version:
FormQL - A framework for building dynamic forms
128 lines • 16.3 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Directive, ElementRef, Input, ViewContainerRef, TemplateRef, Renderer2, Output, EventEmitter } from '@angular/core';
var LayoutDirective = /** @class */ (function () {
function LayoutDirective(view, el, renderer, template) {
this.view = view;
this.el = el;
this.renderer = renderer;
this.template = template;
this.resetItems = new EventEmitter();
}
Object.defineProperty(LayoutDirective.prototype, "formqlGdConfigOf", {
set: function (config) {
var _this = this;
this.view.clear();
this.setParentAttributes(config);
var list = this.getGridStyleList(config);
if (list) {
this.resetItems.emit(true);
list.forEach(function (item, index) {
_this.view.createEmbeddedView(_this.template, {
$implicit: item,
index: index
});
});
}
},
enumerable: true,
configurable: true
});
/**
* Get a list with the grid styling
*
* @param style: style configuration
*/
LayoutDirective.prototype.getGridStyleList = function (config) {
if (config) {
var divList = [];
var rowsDefArr = config.gridTemplateAreas.split('" "');
var style = {};
if (config.gridTemplateColumns) {
style['grid-template-columns'] = config.gridTemplateColumns;
style['-ms-grid-columns'] = style['grid-template-columns'];
}
if (config.gridTemplateRows) {
style['grid-template-rows'] = config.gridTemplateRows;
style['-ms-grid-rows'] = style['grid-template-rows'];
}
var idList = [];
for (var i = 0; i < rowsDefArr.length; i++) {
var rowArr = rowsDefArr[i].split(' ');
var _loop_1 = function (y) {
var cell = rowArr[y].replace(/\"/g, '');
var existingCell = divList.find(function (x) { return x.id === cell; });
if (!existingCell) {
idList.push(cell);
divList.push({
id: cell,
style: { 'grid-area': cell,
'-ms-grid-row': i + 1,
'-ms-grid-row-span': 1,
'-ms-grid-column': y + 1,
'-ms-grid-column-span': 1
}
});
}
else
existingCell.style['-ms-grid-row'] - 1 === i ?
existingCell.style['-ms-grid-column-span']++ :
existingCell.style['-ms-grid-row-span']++;
};
for (var y = 0; y < rowArr.length; y++) {
_loop_1(y);
}
}
return divList;
}
return null;
};
/**
* Set the appropiate css grid attributes for the parent object
*
* @param style
*/
LayoutDirective.prototype.setParentAttributes = function (config) {
var parentElement = this.el.nativeElement.parentElement;
if (!parentElement)
parentElement = this.el.nativeElement.parentNode;
var styleAttrValue = '';
if (config.gridTemplateAreas)
styleAttrValue += "grid-template-areas:" + config.gridTemplateAreas + ";";
if (config.gridTemplateColumns) {
styleAttrValue += "grid-template-columns:" + config.gridTemplateColumns + ";";
styleAttrValue += "-ms-grid-columns:" + config.gridTemplateColumns + ";";
}
if (config.gridTemplateRows) {
styleAttrValue += "grid-template-rows:" + config.gridTemplateRows + ";";
styleAttrValue += "-ms-grid-rows:" + config.gridTemplateRows + ";";
}
if (config.style) {
var array = Object.keys(config.style);
for (var i = 0; i < array.length; i++)
styleAttrValue += array[i] + ':' + config.style[array[i]] + ';';
}
if (styleAttrValue)
this.renderer.setAttribute(parentElement, 'style', styleAttrValue);
};
__decorate([
Output(),
__metadata("design:type", EventEmitter)
], LayoutDirective.prototype, "resetItems", void 0);
__decorate([
Input(),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], LayoutDirective.prototype, "formqlGdConfigOf", null);
LayoutDirective = __decorate([
Directive({
selector: '[formqlGdConfig][formqlGdConfigOf]'
}),
__metadata("design:paramtypes", [ViewContainerRef,
ElementRef,
Renderer2,
TemplateRef])
], LayoutDirective);
return LayoutDirective;
}());
export { LayoutDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bmb3JtcWwvY29yZS8iLCJzb3VyY2VzIjpbImRpcmVjdGl2ZXMvbGF5b3V0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU03SDtJQUNJLHlCQUFvQixJQUFzQixFQUM5QixFQUFjLEVBQ2QsUUFBbUIsRUFDbkIsUUFBMEI7UUFIbEIsU0FBSSxHQUFKLElBQUksQ0FBa0I7UUFDOUIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7UUFFNUIsZUFBVSxHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRnZCLENBQUM7SUFLM0Msc0JBQUksNkNBQWdCO2FBQXBCLFVBQXFCLE1BQWlCO1lBRHRDLGlCQWdCQztZQWRHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWpDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzQyxJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFDLElBQUksRUFBRSxLQUFLO29CQUNyQixLQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUksQ0FBQyxRQUFRLEVBQUU7d0JBQ3hDLFNBQVMsRUFBRSxJQUFJO3dCQUNmLEtBQUssT0FBQTtxQkFDUixDQUFDLENBQUM7Z0JBQ1AsQ0FB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Q0FBQSxBQTVHRCxJQTRHQztTQTVHWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgVmlld0NvbnRhaW5lclJlZiwgVGVtcGxhdGVSZWYsIFJlbmRlcmVyMiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgR3JpZFN0eWxlIH0gZnJvbSAnLi4vbW9kZWxzL3N0eWxlLm1vZGVsJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbZm9ybXFsR2RDb25maWddW2Zvcm1xbEdkQ29uZmlnT2ZdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTGF5b3V0RGlyZWN0aXZlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdmlldzogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICBwcml2YXRlIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7IH1cclxuXHJcbiAgICBAT3V0cHV0KCkgcmVzZXRJdGVtczogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgZm9ybXFsR2RDb25maWdPZihjb25maWc6IEdyaWRTdHlsZSkge1xyXG4gICAgICAgIHRoaXMudmlldy5jbGVhcigpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFBhcmVudEF0dHJpYnV0ZXMoY29uZmlnKTtcclxuXHJcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0R3JpZFN0eWxlTGlzdChjb25maWcpO1xyXG4gICAgICAgIGlmIChsaXN0KSB7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0SXRlbXMuZW1pdCh0cnVlKTtcclxuICAgICAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnZpZXcuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUsIHtcclxuICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICBpbmRleFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGEgbGlzdCB3aXRoIHRoZSBncmlkIHN0eWxpbmdcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc3R5bGU6IHN0eWxlIGNvbmZpZ3VyYXRpb25cclxuICAgICAqL1xyXG4gICAgZ2V0R3JpZFN0eWxlTGlzdChjb25maWc6IEdyaWRTdHlsZSkge1xyXG4gICAgICAgIGlmIChjb25maWcpIHtcclxuICAgICAgICAgICAgY29uc3QgZGl2TGlzdCA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCByb3dzRGVmQXJyID0gY29uZmlnLmdyaWRUZW1wbGF0ZUFyZWFzLnNwbGl0KCdcIiBcIicpO1xyXG4gICAgICAgICAgICBjb25zdCBzdHlsZSA9IHt9O1xyXG4gICAgICAgICAgICBpZiAoY29uZmlnLmdyaWRUZW1wbGF0ZUNvbHVtbnMpIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlWydncmlkLXRlbXBsYXRlLWNvbHVtbnMnXSA9IGNvbmZpZy5ncmlkVGVtcGxhdGVDb2x1bW5zO1xyXG4gICAgICAgICAgICAgICAgc3R5bGVbJy1tcy1ncmlkLWNvbHVtbnMnXSA9IHN0eWxlWydncmlkLXRlbXBsYXRlLWNvbHVtbnMnXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY29uZmlnLmdyaWRUZW1wbGF0ZVJvd3MpIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlWydncmlkLXRlbXBsYXRlLXJvd3MnXSA9IGNvbmZpZy5ncmlkVGVtcGxhdGVSb3dzO1xyXG4gICAgICAgICAgICAgICAgc3R5bGVbJy1tcy1ncmlkLXJvd3MnXSA9IHN0eWxlWydncmlkLXRlbXBsYXRlLXJvd3MnXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBpZExpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93c0RlZkFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm93QXJyID0gcm93c0RlZkFycltpXS5zcGxpdCgnICcpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCByb3dBcnIubGVuZ3RoOyB5KyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93QXJyW3ldLnJlcGxhY2UoL1xcXCIvZywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQ2VsbCA9IGRpdkxpc3QuZmluZCh4ID0+IHguaWQgPT09IGNlbGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdDZWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkTGlzdC5wdXNoKGNlbGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXZMaXN0LnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGNlbGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6ICB7ICdncmlkLWFyZWEnOiBjZWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1zLWdyaWQtcm93JzogaSArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbXMtZ3JpZC1yb3ctc3Bhbic6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbXMtZ3JpZC1jb2x1bW4nOiB5ICsgMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1tcy1ncmlkLWNvbHVtbi1zcGFuJzogMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2VsbC5zdHlsZVsnLW1zLWdyaWQtcm93J10gLSAxID09PSBpID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0NlbGwuc3R5bGVbJy1tcy1ncmlkLWNvbHVtbi1zcGFuJ10rKyA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdDZWxsLnN0eWxlWyctbXMtZ3JpZC1yb3ctc3BhbiddKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGRpdkxpc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBhcHByb3BpYXRlIGNzcyBncmlkIGF0dHJpYnV0ZXMgZm9yIHRoZSBwYXJlbnQgb2JqZWN0XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN0eWxlXHJcbiAgICAgKi9cclxuICAgIHNldFBhcmVudEF0dHJpYnV0ZXMoY29uZmlnOiBHcmlkU3R5bGUpIHtcclxuICAgICAgICBsZXQgcGFyZW50RWxlbWVudCA9IDxIVE1MRWxlbWVudD50aGlzLmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcclxuICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQpXHJcbiAgICAgICAgICAgIHBhcmVudEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+dGhpcy5lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU7XHJcblxyXG4gICAgICAgIGxldCBzdHlsZUF0dHJWYWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmIChjb25maWcuZ3JpZFRlbXBsYXRlQXJlYXMpXHJcbiAgICAgICAgICAgIHN0eWxlQXR0clZhbHVlICs9IGBncmlkLXRlbXBsYXRlLWFyZWFzOiR7Y29uZmlnLmdyaWRUZW1wbGF0ZUFyZWFzfTtgO1xyXG5cclxuICAgICAgICBpZiAoY29uZmlnLmdyaWRUZW1wbGF0ZUNvbHVtbnMpIHtcclxuICAgICAgICAgICAgc3R5bGVBdHRyVmFsdWUgKz0gYGdyaWQtdGVtcGxhdGUtY29sdW1uczoke2NvbmZpZy5ncmlkVGVtcGxhdGVDb2x1bW5zfTtgO1xyXG4gICAgICAgICAgICBzdHlsZUF0dHJWYWx1ZSArPSBgLW1zLWdyaWQtY29sdW1uczoke2NvbmZpZy5ncmlkVGVtcGxhdGVDb2x1bW5zfTtgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5ncmlkVGVtcGxhdGVSb3dzKSB7XHJcbiAgICAgICAgICAgIHN0eWxlQXR0clZhbHVlICs9IGBncmlkLXRlbXBsYXRlLXJvd3M6JHtjb25maWcuZ3JpZFRlbXBsYXRlUm93c307YDtcclxuICAgICAgICAgICAgc3R5bGVBdHRyVmFsdWUgKz0gYC1tcy1ncmlkLXJvd3M6JHtjb25maWcuZ3JpZFRlbXBsYXRlUm93c307YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb25maWcuc3R5bGUpIHtcclxuICAgICAgICAgICAgY29uc3QgYXJyYXkgPSBPYmplY3Qua2V5cyhjb25maWcuc3R5bGUpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgc3R5bGVBdHRyVmFsdWUgKz0gYXJyYXlbaV0gKyAnOicgKyBjb25maWcuc3R5bGVbYXJyYXlbaV1dICsgJzsnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0eWxlQXR0clZhbHVlKVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShwYXJlbnRFbGVtZW50LCAnc3R5bGUnLCBzdHlsZUF0dHJWYWx1ZSk7XHJcblxyXG4gICAgfVxyXG59XHJcbiJdfQ==