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