@progress/kendo-angular-grid
Version:
Kendo UI Grid for Angular - high performance data grid with paging, filtering, virtualization, CRUD, and more.
74 lines (73 loc) • 2.56 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 { isSpanColumnComponent } from "./span-column.component";
import { isNullOrEmptyString, isTruthy } from "../utils";
import { orderBy } from '@progress/kendo-data-query';
/**
* @hidden
*/
export const expandColumns = (columns) => (columns.reduce((acc, column) => acc.concat(isSpanColumnComponent(column) ? column.childrenArray : [column]), []));
/**
* @hidden
*/
export const expandColumnsWithSpan = (columns) => (columns.reduce((acc, column) => acc.concat(isSpanColumnComponent(column) ?
[column].concat(column.childrenArray) :
[column]), []));
/**
* @hidden
*/
export const columnsToRender = (columns) => (expandColumns(columns).filter(x => x.isVisible));
const sumProp = (prop) => (array) => (array || []).reduce((prev, curr) => prev + (curr[prop] || 0), 0);
/**
* @hidden
*/
export const sumColumnWidths = sumProp('width');
/**
* @hidden
*/
export const columnsSpan = sumProp('colspan');
const validField = new RegExp(`^[$A-Z\_a-z][$A-Z\_a-z0-9\\.]*$`);
/**
* @hidden
*/
export const isValidFieldName = (fieldName) => !isNullOrEmptyString(fieldName) && validField.test(fieldName) &&
fieldName[0] !== "." && fieldName[fieldName.length - 1] !== ".";
/**
* @hidden
*/
export const children = column => column.children.filter(child => child !== column);
/**
* @hidden
*/
export const leafColumns = columns => {
return columns.reduce((acc, column) => {
if (column.isColumnGroup) {
acc = acc.concat(leafColumns(children(column)));
}
else if (column.isSpanColumn) {
acc = acc.concat(column.childrenArray);
}
else {
acc.push(column);
}
return acc;
}, []).filter(x => x.isVisible);
};
/**
* @hidden
*/
export const someLeafColumn = (callback, ...columns) => leafColumns(columns).some(callback);
/**
* @hidden
*/
export const resizableColumns = columns => columns.filter(column => isTruthy(column.resizable) && column.isVisible);
/**
* @hidden
*/
export const sortColumns = (columns) => orderBy(columns, [{ field: 'orderIndex', dir: 'asc' }]);
/**
* @hidden
*/
export const isInSpanColumn = (column) => isTruthy(column.parent) && isSpanColumnComponent(column.parent);