@progress/kendo-angular-grid
Version:
Kendo UI Grid for Angular - high performance data grid with paging, filtering, virtualization, CRUD, and more.
90 lines (89 loc) • 3.55 kB
JavaScript
/**-----------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the project root for more information
*-------------------------------------------------------------------------------------------*/
import { Injectable, EventEmitter } from "@angular/core";
import { ColumnsContainer } from "../columns/columns-container";
import { expandColumns } from "../columns/column-common";
import { orderBy } from '@progress/kendo-data-query';
import * as i0 from "@angular/core";
const NO_STICKY = { left: '0px', right: '0px' };
/**
* @hidden
*/
export class ColumnInfoService {
visibilityChange = new EventEmitter();
lockedChange = new EventEmitter();
stickyChange = new EventEmitter();
columnRangeChange = new EventEmitter();
columnsContainer = new ColumnsContainer(() => []);
list;
stickyColumns;
get lockedLeafColumns() {
return this.columnsContainer.lockedLeafColumns;
}
get nonLockedLeafColumns() {
return this.columnsContainer.nonLockedLeafColumns;
}
get isLocked() {
return this.lockedLeafColumns.length > 0;
}
get totalLevels() {
return this.columnsContainer.totalLevels;
}
get hiddenColumns() {
if (!this.list) {
return [];
}
return this.list().filter(column => !column.isVisible);
}
get leafNamedColumns() {
const columns = expandColumns(this.list().filterSort(column => !column.isColumnGroup))
.filter(column => column.matchesMedia && column.displayTitle);
return orderBy(columns, [{ field: 'locked', dir: 'desc' }]);
}
get unlockedRootCount() {
return this.list().rootColumns().filter(column => !column.locked && column.isVisible).length;
}
stickyColumnsStyles(column) {
this.stickyColumns = this.list().rootColumns().filter(column => column.sticky && !column.locked && column.isVisible);
if (this.stickyColumns.length === 0) {
return NO_STICKY;
}
const result = this.stickyColumns.reduce((acc, curr) => {
if (curr.leafIndex < column.leafIndex) {
acc.left += curr.width;
}
else if (curr.leafIndex > column.leafIndex) {
acc.right += curr.width;
}
return acc;
}, { left: 0, right: 0 });
return {
left: `${result.left}px`,
right: `${result.right}px`
};
}
init(columns, list) {
this.columnsContainer = columns;
this.list = list;
this.stickyColumns = null;
}
changeVisibility(columns) {
this.stickyColumns = null;
this.visibilityChange.emit(columns);
}
changeLocked(columns) {
this.stickyColumns = null;
this.lockedChange.emit(columns);
}
changeStuck(columns) {
this.stickyColumns = null;
this.stickyChange.emit(columns);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnInfoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnInfoService });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnInfoService, decorators: [{
type: Injectable
}] });