UNPKG

@lightweightform/theme-common

Version:

Common utilities for Lightweightform themes

128 lines 13.6 kB
import { __decorate } from "tslib"; import { Directive } from '@angular/core'; import { makeObservable } from 'mobx'; import { computed, observable } from 'mobx-angular'; import { TableColumnDirective } from './table-column.directive'; import * as i0 from "@angular/core"; /** * Class that represents a container of columns: super class of both the table * header and of the column (which may have sub-columns as children). */ // tslint:disable-next-line: directive-class-suffix export class TableColumnContainer { constructor(parentTableColumnContainer, elementRef) { Object.defineProperty(this, "parentTableColumnContainer", { enumerable: true, configurable: true, writable: true, value: parentTableColumnContainer }); Object.defineProperty(this, "elementRef", { enumerable: true, configurable: true, writable: true, value: elementRef }); Object.defineProperty(this, "_childrenColumns", { enumerable: true, configurable: true, writable: true, value: observable.array() }); makeObservable(this); } /** * List of column controllers that are direct children of this table column * container. * @returns List of column children. */ get childrenColumns() { return this._childrenColumns.slice(); } /** * Height of a column container (height of the tree represented by the column * container as root, and its columns as children). * @returns Height of the column container. */ get height() { return (this._childrenColumns.reduce((height, column) => Math.max(height, column.height), 0) + 1); } /** * Width of a column container (width of the tree represented by the column * container as root, and its columns as children). * @returns Width of the column container. */ get width() { // Use the `colspan` of a leaf column as its width return this instanceof TableColumnDirective && this.childrenColumns.length === 0 ? this.colspan != null ? +this.colspan : 1 : this._childrenColumns.reduce((sum, column) => sum + column.width, 0); } ngOnInit() { // Register column in parent column container in same order as declared if (this.parentTableColumnContainer) { const childrenColumns = this.parentTableColumnContainer._childrenColumns; // Find the index of the column which has an index in the parent container // greater than this column and insert this column before it; if no such // column is found, insert this column at the end const indexInParentEl = this.columnIndexInParentEl(); let insertionIndex = -1; for (let i = 0, l = childrenColumns.length; i < l; ++i) { if (this.columnIndexInParentEl(childrenColumns[i]) > indexInParentEl) { insertionIndex = i; break; } } if (insertionIndex === -1) { childrenColumns.push(this); } else { childrenColumns.splice(insertionIndex, 0, this); } } } ngOnDestroy() { // Unregister column if (this.parentTableColumnContainer) { this.parentTableColumnContainer._childrenColumns.splice(this.parentTableColumnContainer._childrenColumns.indexOf(this), 1); } } /** * Index of the column's element in the parent container's element. Used to * make sure that we're inserting columns in the order declared in the HTML * file (needed when conditionally rendering columns). * @param column Column for which to get index. * @returns Index of column in parent container's element. */ columnIndexInParentEl(column = this) { return Array.from(column.parentTableColumnContainer.elementRef.nativeElement.children).indexOf(column.elementRef.nativeElement); } } Object.defineProperty(TableColumnContainer, "\u0275fac", { enumerable: true, configurable: true, writable: true, value: i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TableColumnContainer, deps: [{ token: TableColumnContainer }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }) }); Object.defineProperty(TableColumnContainer, "\u0275dir", { enumerable: true, configurable: true, writable: true, value: i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: TableColumnContainer, ngImport: i0 }) }); __decorate([ computed ], TableColumnContainer.prototype, "childrenColumns", null); __decorate([ computed ], TableColumnContainer.prototype, "height", null); __decorate([ computed ], TableColumnContainer.prototype, "width", null); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TableColumnContainer, decorators: [{ type: Directive }], ctorParameters: function () { return [{ type: TableColumnContainer }, { type: i0.ElementRef }]; }, propDecorators: { childrenColumns: [], height: [], width: [] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLWNvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3RhYmxlLWhlYWRlci90YWJsZS1jb2x1bW4tY29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFpQyxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXBELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQUVoRTs7O0dBR0c7QUFFSCxtREFBbUQ7QUFDbkQsTUFBTSxPQUFnQixvQkFBb0I7SUFHeEMsWUFDWSwwQkFBdUQsRUFDdkQsVUFBc0I7Ozs7O21CQUR0Qjs7Ozs7O21CQUNBOztRQUpaOzs7O21CQUFtRCxVQUFVLENBQUMsS0FBSyxFQUFFO1dBQUM7UUFNcEUsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBRUgsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7OztPQUlHO0lBRUgsSUFBYyxNQUFNO1FBQ2xCLE9BQU8sQ0FDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUMxQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDbkQsQ0FBQyxDQUNGLEdBQUcsQ0FBQyxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUVILElBQWMsS0FBSztRQUNqQixrREFBa0Q7UUFDbEQsT0FBTyxJQUFJLFlBQVksb0JBQW9CO1lBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSTtnQkFDcEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU87Z0JBQ2YsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSxRQUFRO1FBQ2IsdUVBQXVFO1FBQ3ZFLElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFO1lBQ25DLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxnQkFBZ0IsQ0FBQztZQUV6RSwwRUFBMEU7WUFDMUUsd0VBQXdFO1lBQ3hFLGlEQUFpRDtZQUNqRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNyRCxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUN0RCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLEVBQUU7b0JBQ3BFLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQ25CLE1BQU07aUJBQ1A7YUFDRjtZQUNELElBQUksY0FBYyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN6QixlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCO2lCQUFNO2dCQUNMLGVBQWUsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNqRDtTQUNGO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsb0JBQW9CO1FBQ3BCLElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFO1lBQ25DLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQ3JELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQzlELENBQUMsQ0FDRixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0sscUJBQXFCLENBQUMsU0FBK0IsSUFBSTtRQUMvRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQ2YsTUFBTSxDQUFDLDBCQUE0QixDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUN0RSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Ozs7OztpR0FoR21CLG9CQUFvQixrQkFJQSxvQkFBb0I7Ozs7OztxRkFKeEMsb0JBQW9COztBQWdCeEM7SUFEQyxRQUFROzJEQUdSO0FBUUQ7SUFEQyxRQUFRO2tEQVFSO0FBUUQ7SUFEQyxRQUFRO2lEQVNSOzRGQWpEbUIsb0JBQW9CO2tCQUZ6QyxTQUFTOzBEQU1nQyxvQkFBb0IsbURBWWpELGVBQWUsTUFVWixNQUFNLE1BZU4sS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1ha2VPYnNlcnZhYmxlIH0gZnJvbSAnbW9ieCc7XG5pbXBvcnQgeyBjb21wdXRlZCwgb2JzZXJ2YWJsZSB9IGZyb20gJ21vYngtYW5ndWxhcic7XG5cbmltcG9ydCB7IFRhYmxlQ29sdW1uRGlyZWN0aXZlIH0gZnJvbSAnLi90YWJsZS1jb2x1bW4uZGlyZWN0aXZlJztcblxuLyoqXG4gKiBDbGFzcyB0aGF0IHJlcHJlc2VudHMgYSBjb250YWluZXIgb2YgY29sdW1uczogc3VwZXIgY2xhc3Mgb2YgYm90aCB0aGUgdGFibGVcbiAqIGhlYWRlciBhbmQgb2YgdGhlIGNvbHVtbiAod2hpY2ggbWF5IGhhdmUgc3ViLWNvbHVtbnMgYXMgY2hpbGRyZW4pLlxuICovXG5ARGlyZWN0aXZlKClcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRhYmxlQ29sdW1uQ29udGFpbmVyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9jaGlsZHJlbkNvbHVtbnM6IFRhYmxlQ29sdW1uQ29udGFpbmVyW10gPSBvYnNlcnZhYmxlLmFycmF5KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHBhcmVudFRhYmxlQ29sdW1uQ29udGFpbmVyOiBUYWJsZUNvbHVtbkNvbnRhaW5lciB8IG51bGwsXG4gICAgcHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgbWFrZU9ic2VydmFibGUodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBvZiBjb2x1bW4gY29udHJvbGxlcnMgdGhhdCBhcmUgZGlyZWN0IGNoaWxkcmVuIG9mIHRoaXMgdGFibGUgY29sdW1uXG4gICAqIGNvbnRhaW5lci5cbiAgICogQHJldHVybnMgTGlzdCBvZiBjb2x1bW4gY2hpbGRyZW4uXG4gICAqL1xuICBAY29tcHV0ZWRcbiAgcHVibGljIGdldCBjaGlsZHJlbkNvbHVtbnMoKTogVGFibGVDb2x1bW5Db250YWluZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuQ29sdW1ucy5zbGljZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlaWdodCBvZiBhIGNvbHVtbiBjb250YWluZXIgKGhlaWdodCBvZiB0aGUgdHJlZSByZXByZXNlbnRlZCBieSB0aGUgY29sdW1uXG4gICAqIGNvbnRhaW5lciBhcyByb290LCBhbmQgaXRzIGNvbHVtbnMgYXMgY2hpbGRyZW4pLlxuICAgKiBAcmV0dXJucyBIZWlnaHQgb2YgdGhlIGNvbHVtbiBjb250YWluZXIuXG4gICAqL1xuICBAY29tcHV0ZWRcbiAgcHJvdGVjdGVkIGdldCBoZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fY2hpbGRyZW5Db2x1bW5zLnJlZHVjZShcbiAgICAgICAgKGhlaWdodCwgY29sdW1uKSA9PiBNYXRoLm1heChoZWlnaHQsIGNvbHVtbi5oZWlnaHQpLFxuICAgICAgICAwXG4gICAgICApICsgMVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV2lkdGggb2YgYSBjb2x1bW4gY29udGFpbmVyICh3aWR0aCBvZiB0aGUgdHJlZSByZXByZXNlbnRlZCBieSB0aGUgY29sdW1uXG4gICAqIGNvbnRhaW5lciBhcyByb290LCBhbmQgaXRzIGNvbHVtbnMgYXMgY2hpbGRyZW4pLlxuICAgKiBAcmV0dXJucyBXaWR0aCBvZiB0aGUgY29sdW1uIGNvbnRhaW5lci5cbiAgICovXG4gIEBjb21wdXRlZFxuICBwcm90ZWN0ZWQgZ2V0IHdpZHRoKCk6IG51bWJlciB7XG4gICAgLy8gVXNlIHRoZSBgY29sc3BhbmAgb2YgYSBsZWFmIGNvbHVtbiBhcyBpdHMgd2lkdGhcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFRhYmxlQ29sdW1uRGlyZWN0aXZlICYmXG4gICAgICB0aGlzLmNoaWxkcmVuQ29sdW1ucy5sZW5ndGggPT09IDBcbiAgICAgID8gdGhpcy5jb2xzcGFuICE9IG51bGxcbiAgICAgICAgPyArdGhpcy5jb2xzcGFuXG4gICAgICAgIDogMVxuICAgICAgOiB0aGlzLl9jaGlsZHJlbkNvbHVtbnMucmVkdWNlKChzdW0sIGNvbHVtbikgPT4gc3VtICsgY29sdW1uLndpZHRoLCAwKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBSZWdpc3RlciBjb2x1bW4gaW4gcGFyZW50IGNvbHVtbiBjb250YWluZXIgaW4gc2FtZSBvcmRlciBhcyBkZWNsYXJlZFxuICAgIGlmICh0aGlzLnBhcmVudFRhYmxlQ29sdW1uQ29udGFpbmVyKSB7XG4gICAgICBjb25zdCBjaGlsZHJlbkNvbHVtbnMgPSB0aGlzLnBhcmVudFRhYmxlQ29sdW1uQ29udGFpbmVyLl9jaGlsZHJlbkNvbHVtbnM7XG5cbiAgICAgIC8vIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBjb2x1bW4gd2hpY2ggaGFzIGFuIGluZGV4IGluIHRoZSBwYXJlbnQgY29udGFpbmVyXG4gICAgICAvLyBncmVhdGVyIHRoYW4gdGhpcyBjb2x1bW4gYW5kIGluc2VydCB0aGlzIGNvbHVtbiBiZWZvcmUgaXQ7IGlmIG5vIHN1Y2hcbiAgICAgIC8vIGNvbHVtbiBpcyBmb3VuZCwgaW5zZXJ0IHRoaXMgY29sdW1uIGF0IHRoZSBlbmRcbiAgICAgIGNvbnN0IGluZGV4SW5QYXJlbnRFbCA9IHRoaXMuY29sdW1uSW5kZXhJblBhcmVudEVsKCk7XG4gICAgICBsZXQgaW5zZXJ0aW9uSW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGRyZW5Db2x1bW5zLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5JbmRleEluUGFyZW50RWwoY2hpbGRyZW5Db2x1bW5zW2ldKSA+IGluZGV4SW5QYXJlbnRFbCkge1xuICAgICAgICAgIGluc2VydGlvbkluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGluc2VydGlvbkluZGV4ID09PSAtMSkge1xuICAgICAgICBjaGlsZHJlbkNvbHVtbnMucHVzaCh0aGlzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVuQ29sdW1ucy5zcGxpY2UoaW5zZXJ0aW9uSW5kZXgsIDAsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBVbnJlZ2lzdGVyIGNvbHVtblxuICAgIGlmICh0aGlzLnBhcmVudFRhYmxlQ29sdW1uQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLnBhcmVudFRhYmxlQ29sdW1uQ29udGFpbmVyLl9jaGlsZHJlbkNvbHVtbnMuc3BsaWNlKFxuICAgICAgICB0aGlzLnBhcmVudFRhYmxlQ29sdW1uQ29udGFpbmVyLl9jaGlsZHJlbkNvbHVtbnMuaW5kZXhPZih0aGlzKSxcbiAgICAgICAgMVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5kZXggb2YgdGhlIGNvbHVtbidzIGVsZW1lbnQgaW4gdGhlIHBhcmVudCBjb250YWluZXIncyBlbGVtZW50LiBVc2VkIHRvXG4gICAqIG1ha2Ugc3VyZSB0aGF0IHdlJ3JlIGluc2VydGluZyBjb2x1bW5zIGluIHRoZSBvcmRlciBkZWNsYXJlZCBpbiB0aGUgSFRNTFxuICAgKiBmaWxlIChuZWVkZWQgd2hlbiBjb25kaXRpb25hbGx5IHJlbmRlcmluZyBjb2x1bW5zKS5cbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW4gZm9yIHdoaWNoIHRvIGdldCBpbmRleC5cbiAgICogQHJldHVybnMgSW5kZXggb2YgY29sdW1uIGluIHBhcmVudCBjb250YWluZXIncyBlbGVtZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBjb2x1bW5JbmRleEluUGFyZW50RWwoY29sdW1uOiBUYWJsZUNvbHVtbkNvbnRhaW5lciA9IHRoaXMpOiBudW1iZXIge1xuICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgY29sdW1uLnBhcmVudFRhYmxlQ29sdW1uQ29udGFpbmVyISEuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuXG4gICAgKS5pbmRleE9mKGNvbHVtbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG59XG4iXX0=