UNPKG

@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
/**----------------------------------------------------------------------------------------- * 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 }] });