UNPKG

@formql/core

Version:

FormQL - A framework for building dynamic forms

128 lines 16.3 kB
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==