UNPKG

@progress/kendo-angular-grid

Version:

Kendo UI Grid for Angular - high performance data grid with paging, filtering, virtualization, CRUD, and more.

95 lines (94 loc) 2.87 kB
/**----------------------------------------------------------------------------------------- * Copyright © 2025 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the project root for more information *-------------------------------------------------------------------------------------------*/ import { QueryList } from '@angular/core'; import { sortColumns } from './column-common'; const forEachColumn = (list, callback) => { list.forEach((column) => { callback(column); if (column.isColumnGroup && column.hasChildren) { forEachColumn(column.childrenArray, callback); } }); }; const forEachLevel = (list, callback) => { sortColumns(list) .forEach((column) => { callback(column); if (column.isColumnGroup && column.hasChildren) { forEachLevel(column.childrenArray, callback); } }); }; const filterHierarchy = (list, predicate) => { const result = []; sortColumns(list) .forEach((column) => { if (predicate(column)) { if (column.isColumnGroup) { const children = filterHierarchy(column.childrenArray, predicate); if (children.length) { result.push(column, ...children); } } else if (!column.isSpanColumn || filterHierarchy(column.childrenArray, predicate).length) { result.push(column); } } }); return result.sort((a, b) => Number(b.locked) - Number(a.locked)); }; /** * @hidden */ export class ColumnList { columns; static empty() { return new ColumnList(new QueryList()); } constructor(columns) { this.columns = columns; } forEach(callback) { forEachColumn(this.columns, callback); } filter(callback) { const result = []; forEachColumn(this.columns, (column) => { if (callback(column)) { result.push(column); } }); return result; } filterHierarchy(predicate) { return filterHierarchy(this.columns.toArray(), predicate); } filterSort(callback) { const result = []; forEachLevel(this.columns.toArray(), (column) => { if (callback(column)) { result.push(column); } }); return result; } toArray() { const result = []; forEachColumn(this.columns, (column) => { result.push(column); }); return result; } rootColumns() { return this.columns.toArray(); } totalColumnLevels() { let totalLevels = 0; this.forEach(column => { totalLevels = Math.max(column.level, totalLevels); }); return totalLevels; } }