UNPKG

@formql/core

Version:

FormQL - A framework for building dynamic forms

119 lines 15.6 kB
import { __decorate, __metadata } from "tslib"; import { Directive, ElementRef, Input, ViewContainerRef, TemplateRef, Renderer2, Output, EventEmitter } from '@angular/core'; let LayoutDirective = class LayoutDirective { constructor(view, el, renderer, template) { this.view = view; this.el = el; this.renderer = renderer; this.template = template; this.resetItems = new EventEmitter(); } set formqlGdConfigOf(config) { this.view.clear(); this.setParentAttributes(config); const list = this.getGridStyleList(config); if (list) { this.resetItems.emit(true); list.forEach((item, index) => { this.view.createEmbeddedView(this.template, { $implicit: item, index }); }); } } /** * Get a list with the grid styling * * @param style: style configuration */ getGridStyleList(config) { if (config) { const divList = []; const rowsDefArr = config.gridTemplateAreas.split('" "'); const 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']; } const idList = []; for (let i = 0; i < rowsDefArr.length; i++) { const rowArr = rowsDefArr[i].split(' '); for (let y = 0; y < rowArr.length; y++) { const cell = rowArr[y].replace(/\"/g, ''); const existingCell = divList.find(x => 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']++; } } return divList; } return null; } /** * Set the appropiate css grid attributes for the parent object * * @param style */ setParentAttributes(config) { let parentElement = this.el.nativeElement.parentElement; if (!parentElement) parentElement = this.el.nativeElement.parentNode; let 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) { const array = Object.keys(config.style); for (let 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); export { LayoutDirective }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bmb3JtcWwvY29yZS8iLCJzb3VyY2VzIjpbImRpcmVjdGl2ZXMvbGF5b3V0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU03SCxJQUFhLGVBQWUsR0FBNUIsTUFBYSxlQUFlO0lBQ3hCLFlBQW9CLElBQXNCLEVBQzlCLEVBQWMsRUFDZCxRQUFtQixFQUNuQixRQUEwQjtRQUhsQixTQUFJLEdBQUosSUFBSSxDQUFrQjtRQUM5QixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUU1QixlQUFVLEdBQTBCLElBQUksWUFBWSxFQUFFLENBQUM7SUFGdkIsQ0FBQztJQUszQyxJQUFJLGdCQUFnQixDQUFDLE1BQWlCO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDeEMsU0FBUyxFQUFFLElBQUk7b0JBQ2YsS0FBSztpQkFDUixDQUFDLENBQUM7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Y3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBWaWV3Q29udGFpbmVyUmVmLCBUZW1wbGF0ZVJlZiwgUmVuZGVyZXIyLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBHcmlkU3R5bGUgfSBmcm9tICcuLi9tb2RlbHMvc3R5bGUubW9kZWwnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tmb3JtcWxHZENvbmZpZ11bZm9ybXFsR2RDb25maWdPZl0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMYXlvdXREaXJlY3RpdmUge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB2aWV3OiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgIHByaXZhdGUgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHsgfVxyXG5cclxuICAgIEBPdXRwdXQoKSByZXNldEl0ZW1zOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCBmb3JtcWxHZENvbmZpZ09mKGNvbmZpZzogR3JpZFN0eWxlKSB7XHJcbiAgICAgICAgdGhpcy52aWV3LmNsZWFyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0UGFyZW50QXR0cmlidXRlcyhjb25maWcpO1xyXG5cclxuICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5nZXRHcmlkU3R5bGVMaXN0KGNvbmZpZyk7XHJcbiAgICAgICAgaWYgKGxpc3QpIHtcclxuICAgICAgICAgIHRoaXMucmVzZXRJdGVtcy5lbWl0KHRydWUpO1xyXG4gICAgICAgICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudmlldy5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSwge1xyXG4gICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIGluZGV4XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYSBsaXN0IHdpdGggdGhlIGdyaWQgc3R5bGluZ1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdHlsZTogc3R5bGUgY29uZmlndXJhdGlvblxyXG4gICAgICovXHJcbiAgICBnZXRHcmlkU3R5bGVMaXN0KGNvbmZpZzogR3JpZFN0eWxlKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZykge1xyXG4gICAgICAgICAgICBjb25zdCBkaXZMaXN0ID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHJvd3NEZWZBcnIgPSBjb25maWcuZ3JpZFRlbXBsYXRlQXJlYXMuc3BsaXQoJ1wiIFwiJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlID0ge307XHJcbiAgICAgICAgICAgIGlmIChjb25maWcuZ3JpZFRlbXBsYXRlQ29sdW1ucykge1xyXG4gICAgICAgICAgICAgICAgc3R5bGVbJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyddID0gY29uZmlnLmdyaWRUZW1wbGF0ZUNvbHVtbnM7XHJcbiAgICAgICAgICAgICAgICBzdHlsZVsnLW1zLWdyaWQtY29sdW1ucyddID0gc3R5bGVbJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyddO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb25maWcuZ3JpZFRlbXBsYXRlUm93cykge1xyXG4gICAgICAgICAgICAgICAgc3R5bGVbJ2dyaWQtdGVtcGxhdGUtcm93cyddID0gY29uZmlnLmdyaWRUZW1wbGF0ZVJvd3M7XHJcbiAgICAgICAgICAgICAgICBzdHlsZVsnLW1zLWdyaWQtcm93cyddID0gc3R5bGVbJ2dyaWQtdGVtcGxhdGUtcm93cyddO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGlkTGlzdCA9IFtdO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzRGVmQXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3dBcnIgPSByb3dzRGVmQXJyW2ldLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHJvd0Fyci5sZW5ndGg7IHkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3dBcnJbeV0ucmVwbGFjZSgvXFxcIi9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdDZWxsID0gZGl2TGlzdC5maW5kKHggPT4geC5pZCA9PT0gY2VsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ0NlbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRMaXN0LnB1c2goY2VsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpdkxpc3QucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogY2VsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogIHsgJ2dyaWQtYXJlYSc6IGNlbGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbXMtZ3JpZC1yb3cnOiBpICsgMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1tcy1ncmlkLXJvdy1zcGFuJzogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1tcy1ncmlkLWNvbHVtbic6IHkgKyAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1zLWdyaWQtY29sdW1uLXNwYW4nOiAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdDZWxsLnN0eWxlWyctbXMtZ3JpZC1yb3cnXSAtIDEgPT09IGkgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2VsbC5zdHlsZVsnLW1zLWdyaWQtY29sdW1uLXNwYW4nXSsrIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0NlbGwuc3R5bGVbJy1tcy1ncmlkLXJvdy1zcGFuJ10rKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZGl2TGlzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGFwcHJvcGlhdGUgY3NzIGdyaWQgYXR0cmlidXRlcyBmb3IgdGhlIHBhcmVudCBvYmplY3RcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc3R5bGVcclxuICAgICAqL1xyXG4gICAgc2V0UGFyZW50QXR0cmlidXRlcyhjb25maWc6IEdyaWRTdHlsZSkge1xyXG4gICAgICAgIGxldCBwYXJlbnRFbGVtZW50ID0gPEhUTUxFbGVtZW50PnRoaXMuZWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgIGlmICghcGFyZW50RWxlbWVudClcclxuICAgICAgICAgICAgcGFyZW50RWxlbWVudCA9IDxIVE1MRWxlbWVudD50aGlzLmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZTtcclxuXHJcbiAgICAgICAgbGV0IHN0eWxlQXR0clZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5ncmlkVGVtcGxhdGVBcmVhcylcclxuICAgICAgICAgICAgc3R5bGVBdHRyVmFsdWUgKz0gYGdyaWQtdGVtcGxhdGUtYXJlYXM6JHtjb25maWcuZ3JpZFRlbXBsYXRlQXJlYXN9O2A7XHJcblxyXG4gICAgICAgIGlmIChjb25maWcuZ3JpZFRlbXBsYXRlQ29sdW1ucykge1xyXG4gICAgICAgICAgICBzdHlsZUF0dHJWYWx1ZSArPSBgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiR7Y29uZmlnLmdyaWRUZW1wbGF0ZUNvbHVtbnN9O2A7XHJcbiAgICAgICAgICAgIHN0eWxlQXR0clZhbHVlICs9IGAtbXMtZ3JpZC1jb2x1bW5zOiR7Y29uZmlnLmdyaWRUZW1wbGF0ZUNvbHVtbnN9O2A7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29uZmlnLmdyaWRUZW1wbGF0ZVJvd3MpIHtcclxuICAgICAgICAgICAgc3R5bGVBdHRyVmFsdWUgKz0gYGdyaWQtdGVtcGxhdGUtcm93czoke2NvbmZpZy5ncmlkVGVtcGxhdGVSb3dzfTtgO1xyXG4gICAgICAgICAgICBzdHlsZUF0dHJWYWx1ZSArPSBgLW1zLWdyaWQtcm93czoke2NvbmZpZy5ncmlkVGVtcGxhdGVSb3dzfTtgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5zdHlsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBhcnJheSA9IE9iamVjdC5rZXlzKGNvbmZpZy5zdHlsZSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICBzdHlsZUF0dHJWYWx1ZSArPSBhcnJheVtpXSArICc6JyArIGNvbmZpZy5zdHlsZVthcnJheVtpXV0gKyAnOyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3R5bGVBdHRyVmFsdWUpXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHBhcmVudEVsZW1lbnQsICdzdHlsZScsIHN0eWxlQXR0clZhbHVlKTtcclxuXHJcbiAgICB9XHJcbn1cclxuIl19