UNPKG

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