UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

174 lines 20 kB
import { __decorate, __extends, __metadata } from "tslib"; import { Component, ChangeDetectionStrategy, forwardRef, Input } from '@angular/core'; import { IgxColumnComponent } from './column.component'; import { IgxColumnGroupComponent } from './column-group.component'; var IgxColumnLayoutComponent = /** @class */ (function (_super) { __extends(IgxColumnLayoutComponent, _super); function IgxColumnLayoutComponent() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.childrenVisibleIndexes = []; return _this; } IgxColumnLayoutComponent_1 = IgxColumnLayoutComponent; Object.defineProperty(IgxColumnLayoutComponent.prototype, "width", { /** * Gets the width of the column layout. * ```typescript * let columnGroupWidth = this.columnGroup.width; * ``` * @memberof IgxColumnGroupComponent */ get: function () { var width = this.getFilledChildColumnSizes(this.children).reduce(function (acc, val) { return acc + parseInt(val, 10); }, 0); return width; }, set: function (val) { }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnLayoutComponent.prototype, "columnLayout", { get: function () { return true; }, enumerable: true, configurable: true }); /** * @hidden */ IgxColumnLayoutComponent.prototype.getCalcWidth = function () { var borderWidth = 0; if (this.headerGroup && this.headerGroup.hasLastPinnedChildColumn) { var headerStyles = this.grid.document.defaultView.getComputedStyle(this.headerGroup.element.nativeElement.children[0]); borderWidth = parseInt(headerStyles.borderRightWidth, 10); } return _super.prototype.getCalcWidth.call(this) + borderWidth; }; Object.defineProperty(IgxColumnLayoutComponent.prototype, "visibleIndex", { /** * Gets the column visible index. * If the column is not visible, returns `-1`. * ```typescript * let visibleColumnIndex = this.column.visibleIndex; * ``` * @memberof IgxColumnComponent */ get: function () { if (!isNaN(this._vIndex)) { return this._vIndex; } var unpinnedColumns = this.grid.unpinnedColumns.filter(function (c) { return c.columnLayout && !c.hidden; }); var pinnedColumns = this.grid.pinnedColumns.filter(function (c) { return c.columnLayout && !c.hidden; }); var vIndex = -1; if (!this.pinned) { var indexInCollection = unpinnedColumns.indexOf(this); vIndex = indexInCollection === -1 ? -1 : pinnedColumns.length + indexInCollection; } else { vIndex = pinnedColumns.indexOf(this); } this._vIndex = vIndex; return vIndex; }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnLayoutComponent.prototype, "hidden", { /* * Gets whether the column layout is hidden. * ```typescript * let isHidden = this.columnGroup.hidden; * ``` * @memberof IgxColumnGroupComponent */ get: function () { return this._hidden; }, /** * Sets the column layout hidden property. * ```typescript * <igx-column-layout [hidden] = "true"></igx-column-> * ``` * @memberof IgxColumnGroupComponent */ set: function (value) { this._hidden = value; this.children.forEach(function (child) { return child.hidden = value; }); if (this.grid && this.grid.columns && this.grid.columns.length > 0) { // reset indexes in case columns are hidden/shown runtime this.grid.columns.filter(function (x) { return x.columnGroup; }).forEach(function (x) { return x.populateVisibleIndexes(); }); } }, enumerable: true, configurable: true }); /** *@hidden */ IgxColumnLayoutComponent.prototype.ngAfterContentInit = function () { var _this = this; _super.prototype.ngAfterContentInit.call(this); if (!this.hidden) { this.hidden = this.allChildren.some(function (x) { return x.hidden; }); } else { this.children.forEach(function (child) { return child.hidden = _this.hidden; }); } this.children.forEach(function (child) { child.movable = false; }); }; Object.defineProperty(IgxColumnLayoutComponent.prototype, "hasLastPinnedChildColumn", { /* * Gets whether the group contains the last pinned child column of the column layout. * ```typescript * let columsHasLastPinned = this.columnLayout.hasLastPinnedChildColumn; * ``` * @memberof IgxColumnLayoutComponent */ get: function () { return this.children.some(function (child) { return child.isLastPinned; }); }, enumerable: true, configurable: true }); /** *@hidden */ IgxColumnLayoutComponent.prototype.populateVisibleIndexes = function () { var _this = this; this.childrenVisibleIndexes = []; var grid = this.gridAPI.grid; var columns = grid && grid.pinnedColumns && grid.unpinnedColumns ? grid.pinnedColumns.concat(grid.unpinnedColumns) : []; var orderedCols = columns .filter(function (x) { return !x.columnGroup && !x.hidden; }) .sort(function (a, b) { return a.rowStart - b.rowStart || columns.indexOf(a.parent) - columns.indexOf(b.parent) || a.colStart - b.colStart; }); this.children.forEach(function (child) { var rs = child.rowStart || 1; var vIndex = 0; // filter out all cols with larger rowStart var cols = orderedCols.filter(function (c) { return !c.columnGroup && (c.rowStart || 1) <= rs; }); vIndex = cols.indexOf(child); _this.childrenVisibleIndexes.push({ column: child, index: vIndex }); }); }; var IgxColumnLayoutComponent_1; __decorate([ Input(), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean]) ], IgxColumnLayoutComponent.prototype, "hidden", null); IgxColumnLayoutComponent = IgxColumnLayoutComponent_1 = __decorate([ Component({ changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: IgxColumnComponent, useExisting: forwardRef(function () { return IgxColumnLayoutComponent_1; }) }], selector: 'igx-column-layout', template: "" }) ], IgxColumnLayoutComponent); return IgxColumnLayoutComponent; }(IgxColumnGroupComponent)); export { IgxColumnLayoutComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2NvbHVtbnMvY29sdW1uLWxheW91dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLFVBQVUsRUFDVixLQUFLLEVBQ1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFTbkU7SUFBOEMsNENBQXVCO0lBQXJFO1FBQUEscUVBd0lDO1FBdklVLDRCQUFzQixHQUFHLEVBQUUsQ0FBQzs7SUF1SXZDLENBQUM7aUNBeElZLHdCQUF3QjtJQVNqQyxzQkFBSSwyQ0FBSztRQVBUOzs7Ozs7V0FNRzthQUNIO1lBQ0ksSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQyxHQUFHLEVBQUUsR0FBRyxJQUFLLE9BQUEsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQXZCLENBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0csT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQzthQUVELFVBQVUsR0FBUSxJQUFJLENBQUM7OztPQUZ0QjtJQUlELHNCQUFJLGtEQUFZO2FBQWhCO1lBQ0ksT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQzs7O09BQUE7SUFFRDs7T0FFRztJQUNJLCtDQUFZLEdBQW5CO1FBQ0ksSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRXBCLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFO1lBQy9ELElBQU0s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T0FDVyx3QkFBd0IsQ0F3SXBDO0lBQUQsK0JBQUM7Q0FBQSxBQXhJRCxDQUE4Qyx1QkFBdUIsR0F3SXBFO1NBeElZLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uLWdyb3VwLmNvbXBvbmVudCc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJZ3hDb2x1bW5Db21wb25lbnQsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElneENvbHVtbkxheW91dENvbXBvbmVudCkgfV0sXG4gICAgc2VsZWN0b3I6ICdpZ3gtY29sdW1uLWxheW91dCcsXG4gICAgdGVtcGxhdGU6IGBgXG59KVxuZXhwb3J0IGNsYXNzIElneENvbHVtbkxheW91dENvbXBvbmVudCBleHRlbmRzIElneENvbHVtbkdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgcHVibGljIGNoaWxkcmVuVmlzaWJsZUluZGV4ZXMgPSBbXTtcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGxheW91dC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkdyb3VwV2lkdGggPSB0aGlzLmNvbHVtbkdyb3VwLndpZHRoO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIGdldCB3aWR0aCgpOiBhbnkge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0RmlsbGVkQ2hpbGRDb2x1bW5TaXplcyh0aGlzLmNoaWxkcmVuKS5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyBwYXJzZUludCh2YWwsIDEwKSwgMCk7XG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG5cbiAgICBzZXQgd2lkdGgodmFsOiBhbnkpIHsgfVxuXG4gICAgZ2V0IGNvbHVtbkxheW91dCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDYWxjV2lkdGgoKTogYW55IHtcbiAgICAgICAgbGV0IGJvcmRlcldpZHRoID0gMDtcblxuICAgICAgICBpZiAodGhpcy5oZWFkZXJHcm91cCAmJiB0aGlzLmhlYWRlckdyb3VwLmhhc0xhc3RQaW5uZWRDaGlsZENvbHVtbikge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVyU3R5bGVzID0gdGhpcy5ncmlkLmRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcy5oZWFkZXJHcm91cC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0pO1xuICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBwYXJzZUludChoZWFkZXJTdHlsZXMuYm9yZGVyUmlnaHRXaWR0aCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldENhbGNXaWR0aCgpICsgYm9yZGVyV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sdW1uIHZpc2libGUgaW5kZXguXG4gICAgICogSWYgdGhlIGNvbHVtbiBpcyBub3QgdmlzaWJsZSwgcmV0dXJucyBgLTFgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdmlzaWJsZUNvbHVtbkluZGV4ID0gIHRoaXMuY29sdW1uLnZpc2libGVJbmRleDtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IHZpc2libGVJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoIWlzTmFOKHRoaXMuX3ZJbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92SW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bnBpbm5lZENvbHVtbnMgPSB0aGlzLmdyaWQudW5waW5uZWRDb2x1bW5zLmZpbHRlcihjID0+IGMuY29sdW1uTGF5b3V0ICYmICFjLmhpZGRlbik7XG4gICAgICAgIGNvbnN0IHBpbm5lZENvbHVtbnMgPSB0aGlzLmdyaWQucGlubmVkQ29sdW1ucy5maWx0ZXIoYyA9PiBjLmNvbHVtbkxheW91dCAmJiAhYy5oaWRkZW4pO1xuICAgICAgICBsZXQgdkluZGV4ID0gLTE7XG5cbiAgICAgICAgaWYgKCF0aGlzLnBpbm5lZCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhJbkNvbGxlY3Rpb24gPSB1bnBpbm5lZENvbHVtbnMuaW5kZXhPZih0aGlzKTtcbiAgICAgICAgICAgIHZJbmRleCA9IGluZGV4SW5Db2xsZWN0aW9uID09PSAtMSA/IC0xIDogcGlubmVkQ29sdW1ucy5sZW5ndGggKyBpbmRleEluQ29sbGVjdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZJbmRleCA9IHBpbm5lZENvbHVtbnMuaW5kZXhPZih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92SW5kZXggPSB2SW5kZXg7XG4gICAgICAgIHJldHVybiB2SW5kZXg7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGNvbHVtbiBsYXlvdXQgaXMgaGlkZGVuLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNIaWRkZW4gPSB0aGlzLmNvbHVtbkdyb3VwLmhpZGRlbjtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBoaWRkZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRkZW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sdW1uIGxheW91dCBoaWRkZW4gcHJvcGVydHkuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIDxpZ3gtY29sdW1uLWxheW91dCBbaGlkZGVuXSA9IFwidHJ1ZVwiPjwvaWd4LWNvbHVtbi0+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgc2V0IGhpZGRlbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9oaWRkZW4gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLmhpZGRlbiA9IHZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZCAmJiB0aGlzLmdyaWQuY29sdW1ucyAmJiB0aGlzLmdyaWQuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyByZXNldCBpbmRleGVzIGluIGNhc2UgY29sdW1ucyBhcmUgaGlkZGVuL3Nob3duIHJ1bnRpbWVcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5zLmZpbHRlcih4ID0+IHguY29sdW1uR3JvdXApLmZvckVhY2goeCA9PiB4LnBvcHVsYXRlVmlzaWJsZUluZGV4ZXMoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCk7XG4gICAgICAgIGlmICghdGhpcy5oaWRkZW4pIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZGVuID0gdGhpcy5hbGxDaGlsZHJlbi5zb21lKHggPT4geC5oaWRkZW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLmhpZGRlbiA9IHRoaXMuaGlkZGVuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBjaGlsZC5tb3ZhYmxlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBncm91cCBjb250YWlucyB0aGUgbGFzdCBwaW5uZWQgY2hpbGQgY29sdW1uIG9mIHRoZSBjb2x1bW4gbGF5b3V0LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY29sdW1zSGFzTGFzdFBpbm5lZCA9IHRoaXMuY29sdW1uTGF5b3V0Lmhhc0xhc3RQaW5uZWRDaGlsZENvbHVtbjtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uTGF5b3V0Q29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGhhc0xhc3RQaW5uZWRDaGlsZENvbHVtbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uc29tZShjaGlsZCA9PiBjaGlsZC5pc0xhc3RQaW5uZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICovXG4gICAgcHVibGljIHBvcHVsYXRlVmlzaWJsZUluZGV4ZXMoKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5WaXNpYmxlSW5kZXhlcyA9IFtdO1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkQVBJLmdyaWQ7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBncmlkICYmIGdyaWQucGlubmVkQ29sdW1ucyAmJiBncmlkLnVucGlubmVkQ29sdW1ucyA/IGdyaWQucGlubmVkQ29sdW1ucy5jb25jYXQoZ3JpZC51bnBpbm5lZENvbHVtbnMpIDogW107XG4gICAgICAgIGNvbnN0IG9yZGVyZWRDb2xzID0gY29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcih4ID0+ICF4LmNvbHVtbkdyb3VwICYmICF4LmhpZGRlbilcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnJvd1N0YXJ0IC0gYi5yb3dTdGFydCB8fCBjb2x1bW5zLmluZGV4T2YoYS5wYXJlbnQpIC0gY29sdW1ucy5pbmRleE9mKGIucGFyZW50KSB8fCBhLmNvbFN0YXJ0IC0gYi5jb2xTdGFydCk7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBycyA9IGNoaWxkLnJvd1N0YXJ0IHx8IDE7XG4gICAgICAgICAgICBsZXQgdkluZGV4ID0gMDtcbiAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgYWxsIGNvbHMgd2l0aCBsYXJnZXIgcm93U3RhcnRcbiAgICAgICAgICAgIGNvbnN0IGNvbHMgPSBvcmRlcmVkQ29scy5maWx0ZXIoYyA9PlxuICAgICAgICAgICAgICAgICFjLmNvbHVtbkdyb3VwICYmIChjLnJvd1N0YXJ0IHx8IDEpIDw9IHJzKTtcbiAgICAgICAgICAgIHZJbmRleCA9IGNvbHMuaW5kZXhPZihjaGlsZCk7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuVmlzaWJsZUluZGV4ZXMucHVzaCh7IGNvbHVtbjogY2hpbGQsIGluZGV4OiB2SW5kZXggfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==