UNPKG

ontimize-web-ngx

Version:
117 lines 16.3 kB
import { Subject } from 'rxjs'; import { Util } from '../../../../util/util'; export class OTableGroupedRow { get visible() { return !this.parent || (this.parent.visible && this.parent.expanded); } constructor(arg) { this.level = 0; this.expanded = true; this.columnsData = {}; this.aggregateFunctionChange = new Subject(); if (Util.isDefined(arg)) { this.column = arg.column; this.keysAsString = arg.keysAsString; this.level = arg.level; this.parent = arg.parent; } } hasColumnData(columnAttr) { return Util.isDefined(this.columnsData[columnAttr]); } hasActiveAggregate(columnAttr) { return this.hasColumnData(columnAttr) && Util.isDefined(this.columnsData[columnAttr].activeAggregate); } getColumnGroupingComponent(columnAttr) { return this.hasColumnData(columnAttr) ? this.columnsData[columnAttr].component : null; } getColumnAggregateValue(columnAttr) { return this.columnsData[columnAttr].value; } setColumnAggregateValue(columnAttr, value) { this.columnsData[columnAttr].value = value; } expandSameLevel(defaultValue) { if (!this.hasColumnData(this.column)) { return defaultValue; } const groupingComponent = this.getColumnGroupingComponent(this.column); if (Util.isDefined(groupingComponent)) { return groupingComponent.expandGroupsSameLevel; } return defaultValue; } setColumnAggregateData(columnAttr, value) { if (this.hasColumnData(columnAttr)) { this.columnsData[columnAttr].data = value; } } getColumnAggregateData(columnAttr) { return this.hasColumnData(columnAttr) ? this.columnsData[columnAttr].data : []; } setColumnActiveAggregateFunction(columnAttr, aggregateFnName, emitEvent = true) { if (this.hasColumnData(columnAttr)) { this.columnsData[columnAttr].activeAggregate = aggregateFnName; } else { this.columnsData[columnAttr] = { component: null, activeAggregate: aggregateFnName, value: null, data: [] }; } if (emitEvent) { let changeAllGroupedRows = true; const groupingComponent = this.getColumnGroupingComponent(columnAttr); if (Util.isDefined(groupingComponent)) { changeAllGroupedRows = groupingComponent.changeAggregateSameLevel; } this.aggregateFunctionChange.next({ columnAttr: columnAttr, activeAggregate: aggregateFnName, changeAllGroupedRows: changeAllGroupedRows, row: this }); } } getColumnActiveAggregateTitle(columnAttr) { const conf = this.getActiveColumnAggregateConfiguration(columnAttr); if (conf.title) { return conf.title; } return `AGGREGATE_NAME.${conf.aggregateName || conf.aggregate}`; } initializeColumnAggregate(columnAttr, component) { if (!this.columnsData.hasOwnProperty(columnAttr)) { this.columnsData[columnAttr] = { component: null, activeAggregate: 'sum', value: null, data: [] }; } if (Util.isDefined(component)) { this.columnsData[columnAttr].component = component; this.columnsData[columnAttr].activeAggregate = component.aggregate; } } getActiveColumnAggregateConfiguration(columnAttr) { if (!this.hasColumnData(columnAttr)) { return { attr: columnAttr, aggregate: 'sum' }; } const activeAggregate = this.columnsData[columnAttr].activeAggregate; const groupingColumnComponent = this.columnsData[columnAttr].component; if (Util.isDefined(groupingColumnComponent) && groupingColumnComponent.aggregate === activeAggregate) { return groupingColumnComponent.getAggregateConfiguration(); } return { attr: columnAttr, aggregate: this.columnsData[columnAttr].activeAggregate }; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1yb3ctZ3JvdXAuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9leHRlbnNpb25zL3Jvdy9vLXRhYmxlLXJvdy1ncm91cC5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9CLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQW1CN0MsTUFBTSxPQUFPLGdCQUFnQjtJQVEzQixJQUFJLE9BQU87UUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUtELFlBQVksR0FBUztRQVhyQixVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBR1YsYUFBUSxHQUFHLElBQUksQ0FBQztRQUlSLGdCQUFXLEdBQTJDLEVBQUUsQ0FBQztRQUVqRSw0QkFBdUIsR0FBZ0MsSUFBSSxPQUFPLEVBQXNCLENBQUM7UUFHdkYsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7WUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsVUFBa0I7UUFDOUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFX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LEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDdkUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLElBQUksdUJBQXVCLENBQUMsU0FBUyxLQUFLLGVBQWUsRUFBRTtZQUNwRyxPQUFPLHVCQUF1QixDQUFDLHlCQUF5QixFQUFFLENBQUM7U0FDNUQ7UUFFRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLFVBQVU7WUFDaEIsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsZUFBZTtTQUN4RCxDQUFBO0lBQ0gsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBHcm91cGVkQ29sdW1uQWdncmVnYXRlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1jb2x1bW5zLWdyb3VwaW5nLWludGVyZmFjZSc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7XG4gIE9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbHVtbkNvbXBvbmVudFxufSBmcm9tICcuLi9oZWFkZXIvdGFibGUtY29sdW1ucy1ncm91cGluZy9jb2x1bW5zL28tdGFibGUtY29sdW1ucy1ncm91cGluZy1jb2x1bW4uY29tcG9uZW50JztcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRlQ2hhbmdlQXJnID0ge1xuICBjb2x1bW5BdHRyOiBzdHJpbmc7XG4gIGFjdGl2ZUFnZ3JlZ2F0ZTogc3RyaW5nO1xuICBjaGFuZ2VBbGxHcm91cGVkUm93czogYm9vbGVhbjtcbiAgcm93OiBPVGFibGVHcm91cGVkUm93O1xufVxuXG5leHBvcnQgdHlwZSBBZ2dyZWdhdGVDb2x1bW5EYXRhID0ge1xuICBjb21wb25lbnQ6IE9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbHVtbkNvbXBvbmVudDtcbiAgYWN0aXZlQWdncmVnYXRlOiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG4gIGRhdGE6IGFueVtdO1xufVxuXG5leHBvcnQgY2xhc3MgT1RhYmxlR3JvdXBlZFJvdyB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBncm91cERhdGE6IGFueVtdO1xuICBsZXZlbCA9IDA7XG4gIGtleXNBc1N0cmluZzogc3RyaW5nO1xuICBwYXJlbnQ6IE9UYWJsZUdyb3VwZWRSb3c7XG4gIGV4cGFuZGVkID0gdHJ1ZTtcbiAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnBhcmVudCB8fCAodGhpcy5wYXJlbnQudmlzaWJsZSAmJiB0aGlzLnBhcmVudC5leHBhbmRlZCk7XG4gIH1cbiAgcHJpdmF0ZSBjb2x1bW5zRGF0YTogeyBba2V5OiBzdHJpbmddOiBBZ2dyZWdhdGVDb2x1bW5EYXRhIH0gPSB7fTtcblxuICBhZ2dyZWdhdGVGdW5jdGlvbkNoYW5nZTogU3ViamVjdDxBZ2dyZWdhdGVDaGFuZ2VBcmc+ID0gbmV3IFN1YmplY3Q8QWdncmVnYXRlQ2hhbmdlQXJnPigpO1xuXG4gIGNvbnN0cnVjdG9yKGFyZz86IGFueSkge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChhcmcpKSB7XG4gICAgICB0aGlzLmNvbHVtbiA9IGFyZy5jb2x1bW47XG4gICAgICB0aGlzLmtleXNBc1N0cmluZyA9IGFyZy5rZXlzQXNTdHJpbmc7XG4gICAgICB0aGlzLmxldmVsID0gYXJnLmxldmVsO1xuICAgICAgdGhpcy5wYXJlbnQgPSBhcmcucGFyZW50O1xuICAgIH1cbiAgfVxuXG4gIGhhc0NvbHVtbkRhdGEoY29sdW1uQXR0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMuY29sdW1uc0RhdGFbY29sdW1uQXR0cl0pO1xuICB9XG5cbiAgaGFzQWN0aXZlQWdncmVnYXRlKGNvbHVtbkF0dHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0NvbHVtbkRhdGEoY29sdW1uQXR0cikgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5jb2x1bW5zRGF0YVtjb2x1bW5BdHRyXS5hY3RpdmVBZ2dyZWdhdGUpO1xuICB9XG5cbiAgZ2V0Q29sdW1uR3JvdXBpbmdDb21wb25lbnQoY29sdW1uQXR0cjogc3RyaW5nKTogT1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29sdW1uQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5oYXNDb2x1bW5EYXRhKGNvbHVtbkF0dHIpID8gdGhpcy5jb2x1bW5zRGF0YVtjb2x1bW5BdHRyXS5jb21wb25lbnQgOiBudWxsO1xuICB9XG5cbiAgZ2V0Q29sdW1uQWdncmVnYXRlVmFsdWUoY29sdW1uQXR0cjogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zRGF0YVtjb2x1bW5BdHRyXS52YWx1ZTtcbiAgfVxuXG4gIHNldENvbHVtbkFnZ3JlZ2F0ZVZhbHVlKGNvbHVtbkF0dHI6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuY29sdW1uc0RhdGFbY29sdW1uQXR0cl0udmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGV4cGFuZFNhbWVMZXZlbChkZWZhdWx0VmFsdWU6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaGFzQ29sdW1uRGF0YSh0aGlzLmNvbHVtbikpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IGdyb3VwaW5nQ29tcG9uZW50ID0gdGhpcy5nZXRDb2x1bW5Hcm91cGluZ0NvbXBvbmVudCh0aGlzLmNvbHVtbik7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGdyb3VwaW5nQ29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIGdyb3VwaW5nQ29tcG9uZW50LmV4cGFuZEdyb3Vwc1NhbWVMZXZlbDtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIHNldENvbHVtbkFnZ3JlZ2F0ZURhdGEoY29sdW1uQXR0cjogc3RyaW5nLCB2YWx1ZTogYW55W10pIHtcbiAgICBpZiAodGhpcy5oYXNDb2x1bW5EYXRhKGNvbHVtbkF0dHIpKSB7XG4gICAgICB0aGlzLmNvbHVtbnNEYXRhW2NvbHVtbkF0dHJdLmRhdGEgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbkF0dHI6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmhhc0NvbHVtbkRhdGEoY29sdW1uQXR0cikgPyB0aGlzLmNvbHVtbnNEYXRhW2NvbHVtbkF0dHJdLmRhdGEgOiBbXTtcbiAgfVxuXG4gIHNldENvbHVtbkFjdGl2ZUFnZ3JlZ2F0ZUZ1bmN0aW9uKGNvbHVtbkF0dHI6IHN0cmluZywgYWdncmVnYXRlRm5OYW1lOiBzdHJpbmcsIGVtaXRFdmVudDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5oYXNDb2x1bW5EYXRhKGNvbHVtbkF0dHIpKSB7XG4gICAgICB0aGlzLmNvbHVtbnNEYXRhW2NvbHVtbkF0dHJdLmFjdGl2ZUFnZ3JlZ2F0ZSA9IGFnZ3JlZ2F0ZUZuTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW5zRGF0YVtjb2x1bW5BdHRyXSA9IHtcbiAgICAgICAgY29tcG9uZW50OiBudWxsLFxuICAgICAgICBhY3RpdmVBZ2dyZWdhdGU6IGFnZ3JlZ2F0ZUZuTmFtZSxcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIGRhdGE6IFtdXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICBsZXQgY2hhbmdlQWxsR3JvdXBlZFJvd3MgPSB0cnVlO1xuICAgICAgY29uc3QgZ3JvdXBpbmdDb21wb25lbnQgPSB0aGlzLmdldENvbHVtbkdyb3VwaW5nQ29tcG9uZW50KGNvbHVtbkF0dHIpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGdyb3VwaW5nQ29tcG9uZW50KSkge1xuICAgICAgICBjaGFuZ2VBbGxHcm91cGVkUm93cyA9IGdyb3VwaW5nQ29tcG9uZW50LmNoYW5nZUFnZ3JlZ2F0ZVNhbWVMZXZlbDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hZ2dyZWdhdGVGdW5jdGlvbkNoYW5nZS5uZXh0KHtcbiAgICAgICAgY29sdW1uQXR0cjogY29sdW1uQXR0cixcbiAgICAgICAgYWN0aXZlQWdncmVnYXRlOiBhZ2dyZWdhdGVGbk5hbWUsXG4gICAgICAgIGNoYW5nZUFsbEdyb3VwZWRSb3dzOiBjaGFuZ2VBbGxHcm91cGVkUm93cyxcbiAgICAgICAgcm93OiB0aGlzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRDb2x1bW5BY3RpdmVBZ2dyZWdhdGVUaXRsZShjb2x1bW5BdHRyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb25mID0gdGhpcy5nZXRBY3RpdmVDb2x1bW5BZ2dyZWdhdGVDb25maWd1cmF0aW9uKGNvbHVtbkF0dHIpO1xuICAgIGlmIChjb25mLnRpdGxlKSB7XG4gICAgICByZXR1cm4gY29uZi50aXRsZTtcbiAgICB9XG4gICAgcmV0dXJuIGBBR0dSRUdBVEVfTkFNRS4ke2NvbmYuYWdncmVnYXRlTmFtZSB8fCBjb25mLmFnZ3JlZ2F0ZX1gO1xuICB9XG5cbiAgaW5pdGlhbGl6ZUNvbHVtbkFnZ3JlZ2F0ZShjb2x1bW5BdHRyOiBzdHJpbmcsIGNvbXBvbmVudDogT1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbnNEYXRhLmhhc093blByb3BlcnR5KGNvbHVtbkF0dHIpKSB7XG4gICAgICB0aGlzLmNvbHVtbnNEYXRhW2NvbHVtbkF0dHJdID0ge1xuICAgICAgICBjb21wb25lbnQ6IG51bGwsXG4gICAgICAgIGFjdGl2ZUFnZ3JlZ2F0ZTogJ3N1bScsXG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICBkYXRhOiBbXVxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbXBvbmVudCkpIHtcbiAgICAgIHRoaXMuY29sdW1uc0RhdGFbY29sdW1uQXR0cl0uY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgdGhpcy5jb2x1bW5zRGF0YVtjb2x1bW5BdHRyXS5hY3RpdmVBZ2dyZWdhdGUgPSBjb21wb25lbnQuYWdncmVnYXRlO1xuICAgIH1cbiAgfVxuXG4gIGdldEFjdGl2ZUNvbHVtbkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24oY29sdW1uQXR0cjogc3RyaW5nKTogR3JvdXBlZENvbHVtbkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24ge1xuICAgIGlmICghdGhpcy5oYXNDb2x1bW5EYXRhKGNvbHVtbkF0dHIpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhdHRyOiBjb2x1bW5BdHRyLFxuICAgICAgICBhZ2dyZWdhdGU6ICdzdW0nXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlQWdncmVnYXRlID0gdGhpcy5jb2x1bW5zRGF0YVtjb2x1bW5BdHRyXS5hY3RpdmVBZ2dyZWdhdGU7XG4gICAgY29uc3QgZ3JvdXBpbmdDb2x1bW5Db21wb25lbnQgPSB0aGlzLmNvbHVtbnNEYXRhW2NvbHVtbkF0dHJdLmNvbXBvbmVudDtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoZ3JvdXBpbmdDb2x1bW5Db21wb25lbnQpICYmIGdyb3VwaW5nQ29sdW1uQ29tcG9uZW50LmFnZ3JlZ2F0ZSA9PT0gYWN0aXZlQWdncmVnYXRlKSB7XG4gICAgICByZXR1cm4gZ3JvdXBpbmdDb2x1bW5Db21wb25lbnQuZ2V0QWdncmVnYXRlQ29uZmlndXJhdGlvbigpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhdHRyOiBjb2x1bW5BdHRyLFxuICAgICAgYWdncmVnYXRlOiB0aGlzLmNvbHVtbnNEYXRhW2NvbHVtbkF0dHJdLmFjdGl2ZUFnZ3JlZ2F0ZVxuICAgIH1cbiAgfVxuXG59XG4iXX0=