UNPKG

@adaptabletools/adaptable-cjs

Version:

Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

304 lines (303 loc) 14.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ColumnInternalApi = exports.getAutoRowGroupColumnIdFor = void 0; const tslib_1 = require("tslib"); const ApiBase_1 = require("../Implementation/ApiBase"); const GeneralConstants_1 = require("../../Utilities/Constants/GeneralConstants"); const uniq_1 = tslib_1.__importDefault(require("lodash/uniq")); const StringExtensions_1 = tslib_1.__importDefault(require("../../Utilities/Extensions/StringExtensions")); const ColumnApiImpl_1 = require("../Implementation/ColumnApiImpl"); const destructurePivotColumnId_1 = require("../../layout-manager/src/destructurePivotColumnId"); const isPivotColumnTotal_1 = require("../../layout-manager/src/isPivotColumnTotal"); const isPivotAggTotalColumn_1 = require("../../layout-manager/src/isPivotAggTotalColumn"); const AdaptableColumn_1 = require("../../AdaptableState/Common/AdaptableColumn"); function getAutoRowGroupColumnIdFor(columnId) { return `${GeneralConstants_1.AG_GRID_GROUPED_COLUMN}-${columnId}`; } exports.getAutoRowGroupColumnIdFor = getAutoRowGroupColumnIdFor; class ColumnInternalApi extends ApiBase_1.ApiBase { /** * Retrieves 'ColumnType' property for a given Column * isCumulativeAggregate(input: string): boolean { * return !!this.getNodesFromExpression(input, 'CUMUL')?.length; * } * @param columnId Column to use */ getAgGridColumnType(columnId) { return this._adaptable.getAgGridColumnType(columnId); } getAllAgGridColumnTypes() { let colTypes = []; this.getColumnApi() .getColumns() .forEach((c) => { const agGridColType = this.getAgGridColumnType(c.columnId); if (Array.isArray(agGridColType)) { colTypes.push(...agGridColType); } else { colTypes.push(agGridColType); } }); return (0, uniq_1.default)(colTypes).filter((c) => StringExtensions_1.default.IsNotNullOrEmptyOrWhiteSpace(c)); } /** * Retrieves a list providing the Friendly Name / Caption for all columns */ getAllColumnFriendlyNames() { return this.getColumnApi() .getColumns() .map((c) => { return c.friendlyName; }); } getAutoRowGroupColumnIdFor(columnId) { return getAutoRowGroupColumnIdFor(columnId); } /** * Retrieves AG Grid's field property for the column * @param columnId columnId to look up */ getAgGridColumnFieldForAdaptableColumn(columnId) { const agGridColumn = this.getAgGridColumnForAdaptableColumn(columnId); return agGridColumn.getColDef().field || ''; } /** * Retrieves AG Grid's column for an Adaptable column * @param columnId columnId to look up */ getAgGridColumnForAdaptableColumn(columnId) { return this._adaptable.getAgGridColumnForColumnId(columnId); } getActiveColumnComparator(columnId, customSort, customSortComparer) { if ((!customSort || customSort?.IsSuspended) && !customSortComparer) { // defaults to AG-Grid column definition comparator if no CustomSort is defined&active const colDefComparator = this._adaptable.agGridColumnAdapter.getUserColDefProperty(columnId, 'comparator'); return colDefComparator; } // CustomSort Comparer function takes precedence over CustomSort SortedValues const comparerFunction = customSortComparer ? customSortComparer.comparer : this.getCustomSortApi().internalApi.getDefaultCustomSortComparer(customSort.ColumnId, customSort.SortedValues); return comparerFunction; } isSpecialColumn(columnId, column = null) { if (column) { return column.isCalculatedColumn || column.isFreeTextColumn || column.isActionColumn; } else return (this.getColumnApi().isCalculatedColumn(columnId) || this.getColumnApi().isFreeTextColumn(columnId) || this.getColumnApi().isActionColumn(columnId) || this.getColumnApi().isFdc3Column(columnId)); } getColumnHeaderName(params) { // this is the same object, but casting it makes it easier to work with const isColumn = !params.columnGroup; const columnParams = params; const isColumnGroup = !!params.columnGroup; const columnGroupParams = params; const defaultHeaderName = params.colDef?.headerName ?? (isColumn ? StringExtensions_1.default.CamelCaseToHumanText(columnParams.colDef?.field) : '') ?? ''; // for now we override ONLY the header names if (params.location !== 'header') { return defaultHeaderName; } // 1. Layout specific header has the highest priority const layoutSpecificCustomHeader = this.getLayoutApi().getCurrentLayout().ColumnHeaders?.[isColumn ? columnParams.column.getColId() : columnGroupParams.columnGroup.getGroupId()]; if (layoutSpecificCustomHeader) { return layoutSpecificCustomHeader; } // 2. check for custom ColumnOptions.columnHeader if (typeof this.getColumnOptions().columnHeader === 'function') { const columnHeaderContext = this.buildColumnHeaderContext(params, defaultHeaderName); if (columnHeaderContext === 'skip') { return defaultHeaderName; } const customHeader = this.getColumnOptions().columnHeader(columnHeaderContext); return customHeader; } // 3. fallback to default header name return defaultHeaderName; } buildColumnHeaderContext(params, defaultHeaderName) { const currentLayoutType = this.getLayoutApi().isCurrentLayoutPivot() ? 'pivot' : 'table'; const currentLayout = this.getLayoutApi().getCurrentLayout(); const baseContext = { ...this.getAdaptableApi().internalApi.buildBaseContext(), defaultHeaderName, currentLayout, currentLayoutName: currentLayout.Name, currentLayoutType: currentLayoutType, }; // makes it easier to work with const currentTableLayout = currentLayout; const currentPivotLayout = currentLayout; if (params.column?.getColId() === GeneralConstants_1.AG_GRID_GROUPED_COLUMN) { const columnType = 'autoGroupColumn'; return { ...baseContext, columnType, columnId: params.column.getColId(), groupedColumnIds: currentLayoutType === 'table' ? currentTableLayout.RowGroupedColumns ?? [] : currentPivotLayout.PivotGroupedColumns ?? [], }; } if (params.column?.getColId().startsWith(`${GeneralConstants_1.AG_GRID_GROUPED_COLUMN}-`)) { const columnType = 'rowGroupColumn'; const columnId = params.column.getColId(); // remove `${AG_GRID_GROUPED_COLUMN}-` from beginning of columnId const groupColumnId = columnId.substring(`${GeneralConstants_1.AG_GRID_GROUPED_COLUMN}-`.length); return { ...baseContext, columnType, columnId, groupColumnId, }; } if (baseContext.currentLayoutType === 'table') { if (params.columnGroup) { const columnType = 'tableColumnGroup'; if (!params.colDef?.children) { // AG Grid created virtual column groups for all columns // we want to skip those return 'skip'; } return { ...baseContext, columnType, groupId: params.columnGroup?.getGroupId(), childrenColumnIds: params.columnGroup ?.getChildren() .map((col) => { if (col.isColumn) { return col.getColId(); } }) .filter(Boolean), state: params.columnGroup?.isExpandable() && !params.columnGroup?.isExpanded() ? 'collapsed' : 'expanded', }; } if (params.column) { const columnType = 'tableColumn'; return { ...baseContext, columnType, columnId: params.column?.getColId(), aggregation: params.column.getAggFunc(), }; } } if (baseContext.currentLayoutType === 'pivot') { if (params.columnGroup) { if (!params.colDef?.pivotKeys) { // we might have user defined colGroups, but we are not interested in them in pivot mode return 'skip'; } const columnType = 'pivotColumnGroup'; return { ...baseContext, columnType, groupId: params.columnGroup?.getGroupId(), pivotKeys: params.colDef.pivotKeys, state: params.columnGroup?.isExpandable() && !params.columnGroup?.isExpanded() ? 'collapsed' : 'expanded', }; } if (params.column) { let columnId = params.column.getColId(); if ((0, ColumnApiImpl_1.isPivotGrandTotal)(columnId)) { const columnType = 'pivotGrandTotal'; const pivotValueCol = params.colDef.pivotValueColumn; const aggregatedColumnId = pivotValueCol?.getColId(); const currentLayoutAggCols = currentPivotLayout.PivotAggregationColumns?.map((col) => col.ColumnId); if (!currentLayoutAggCols?.includes(aggregatedColumnId)) { // this column is not an aggregation column return 'skip'; } return { ...baseContext, columnType, aggregatedColumnId, aggregation: pivotValueCol.getAggFunc(), }; } if ((0, isPivotColumnTotal_1.isPivotColumnTotal)(params.colDef?.colId)) { const columnType = 'pivotColumnTotal'; const pivotColInfo = (0, destructurePivotColumnId_1.destructurePivotColumnId)(params.colDef, { pivotColIds: currentPivotLayout.PivotColumns, aggColIds: currentPivotLayout.PivotAggregationColumns.map((col) => col.ColumnId), }, (message) => this.logWarn(message)); if (pivotColInfo === '!unknown!') { return 'skip'; } const pivotKey = pivotColInfo.pivotKeys[pivotColInfo.pivotKeys.length - 1]; return { ...baseContext, columnType, pivotKey, pivotColumnId: pivotColInfo.pivotColumnId, aggregation: params.colDef?.pivotValueColumn?.getAggFunc(), }; } if ((0, isPivotAggTotalColumn_1.isPivotAggTotalColumn)(params.colDef)) { const columnType = 'pivotAggregationTotal'; const pivotValueCol = params.colDef.pivotValueColumn; const pivotColInfo = (0, destructurePivotColumnId_1.destructurePivotColumnId)(params.colDef, { pivotColIds: currentPivotLayout.PivotColumns, aggColIds: currentPivotLayout.PivotAggregationColumns.map((col) => col.ColumnId), }, (message) => this.logWarn(message)); if (pivotColInfo === '!unknown!') { return 'skip'; } const pivotKey = pivotColInfo.pivotKeys[pivotColInfo.pivotKeys.length - 1]; return { ...baseContext, columnType, aggregatedColumnId: pivotValueCol?.getColId(), aggregation: pivotValueCol.getAggFunc(), pivotColumnId: pivotColInfo.pivotColumnId, pivotKey, }; } if ((0, ColumnApiImpl_1.isPivotResultColumn)(columnId)) { const columnType = 'pivotResultColumn'; const pivotValueCol = params.colDef.pivotValueColumn; const aggregatedColumnId = pivotValueCol?.getColId(); const currentLayoutAggCols = currentPivotLayout.PivotAggregationColumns?.map((col) => col.ColumnId); if (!currentLayoutAggCols?.includes(aggregatedColumnId)) { // this column is not an aggregation column return 'skip'; } return { ...baseContext, columnType, columnId, pivotKeys: params.colDef.pivotKeys, aggregatedColumnId, aggregation: pivotValueCol.getAggFunc(), }; } } } // if nothing matched, we skip this column[group] return 'skip'; } hasArrayDataType(column) { return ['textArray', 'numberArray', 'tupleArray', 'objectArray'].includes(column.dataType); } getQueryableColumnsForUIEditor() { return this.getColumnApi() .getQueryableColumns() .filter((column) => !column.isGeneratedPivotResultColumn && !column.isGeneratedRowGroupColumn); } isAlwaysHiddenColumn(columnIdentifier) { return this.getColumnApi().hasColumnType(columnIdentifier, AdaptableColumn_1.HIDDEN_COLUMN_TYPE); } } exports.ColumnInternalApi = ColumnInternalApi;