UNPKG

@adaptabletools/adaptable

Version:

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

309 lines (308 loc) 13 kB
import { ApiBase } from '../Implementation/ApiBase'; import ArrayExtensions from '../../Utilities/Extensions/ArrayExtensions'; import { expandGradientCellRanges, gradientStyleRangeLookupValueType } from '../../Utilities/Helpers/StyledColumns/GradientStyleHelper'; const DYNAMIC_RANGE_ENDPOINTS = [ 'Col-Min', 'Col-Max', 'Col-Avg', 'Col-Median', ]; const isDynamicRangeEndpoint = (value) => typeof value === 'string' && DYNAMIC_RANGE_ENDPOINTS.includes(value); export class StyledColumnInternalApi extends ApiBase { createSparkline(options) { if (!this.getStyledColumnApi().canDisplaySparklines()) { this.logWarn('Cannot render Sparkline: AG Grid Sparklines are not enabled. Register the AG Grid Sparklines module (e.g. `AllEnterpriseModule.with(AgChartsEnterpriseModule)`) to use Sparklines.'); return null; } const createSparklineFactory = this._adaptable.agGridAdapter.DANGER_getCreateSparkline(); if (!createSparklineFactory) { this.logWarn('Cannot render Sparkline: unable to obtain the AG Grid Sparkline rendering factory.'); return null; } return createSparklineFactory(options); } getMinValueForNumericColumn(column) { if (!column || column.dataType !== 'number') { return undefined; } return this._adaptable.getMinMaxCachedValueForColumn(column, 'min'); } getMaxValueForNumericColumn(column) { if (!column || column.dataType !== 'number') { return undefined; } return this._adaptable.getMinMaxCachedValueForColumn(column, 'max'); } getAvgValueForNumericColumn(column) { if (!column || column.dataType !== 'number') { return undefined; } return this._adaptable.getMinMaxCachedValueForColumn(column, 'avg'); } getMedianValueForNumericColumn(column) { if (!column || column.dataType !== 'number') { return undefined; } return this._adaptable.getMinMaxCachedValueForColumn(column, 'median'); } getNumericStyleMinValue(styledColumn, column, rowNode, cellValue) { const columnComparison = styledColumn.GradientStyle?.ColumnComparison ?? styledColumn.PercentBarStyle?.ColumnComparison ?? styledColumn.BulletChartStyle?.ColumnComparison; if (columnComparison) { if (!isNaN(Number(columnComparison.MinValue))) { return Number(columnComparison.MinValue); } else { let columnId = columnComparison.MinValue; if (!this.getColumnApi().isColumnInGrid(columnId)) { return 0; } else { return this.getGridApi().getRawValueFromRowNode(rowNode, columnId); } } } if (styledColumn.GradientStyle) { const gs = styledColumn.GradientStyle; const ranges = expandGradientCellRanges(gs); const lookupType = gradientStyleRangeLookupValueType(gs); const range = this.findRangeForColumn(ranges, column, lookupType, cellValue); return this.getCellColorRangeMinValue(range, column, lookupType); } if (styledColumn.PercentBarStyle) { const ranges = styledColumn.PercentBarStyle?.CellRanges; if (ranges) { return this.getCellColorRangeMinValue(ranges[0], column, styledColumn.PercentBarStyle.RangeValueType); } } if (styledColumn.BulletChartStyle) { const ranges = styledColumn.BulletChartStyle?.CellRanges; if (ranges && ranges.length > 0) { return this.getCellColorRangeMinValue(ranges[0], column, styledColumn.BulletChartStyle.RangeValueType); } return this.getMinValueForNumericColumn(column); } } findRangeForColumn(cellRanges, column, rangeValueType, cellValue) { if (!cellRanges || cellRanges.length === 0) { return null; } for (let i = 0; i < cellRanges.length; i++) { const cellRange = cellRanges[i]; const minRange = this.getCellColorRangeMinValue(cellRange, column, rangeValueType); const maxRange = this.getCellColorRangeMaxValue(cellRange, column, rangeValueType); if (cellValue >= minRange && cellValue <= maxRange) { return cellRange; } } return null; } getNumericStyleMaxValue(styledColumn, column, rowNode, cellValue) { const columnComparison = styledColumn.GradientStyle?.ColumnComparison ?? styledColumn.PercentBarStyle?.ColumnComparison ?? styledColumn.BulletChartStyle?.ColumnComparison; if (columnComparison) { if (!isNaN(Number(columnComparison.MaxValue))) { return Number(columnComparison.MaxValue); } else { let columnId = columnComparison.MaxValue; if (!this.getColumnApi().isColumnInGrid(columnId)) { return 0; } else { return this.getGridApi().getRawValueFromRowNode(rowNode, columnId); } } } if (styledColumn.GradientStyle) { const gs = styledColumn.GradientStyle; const ranges = expandGradientCellRanges(gs); const lookupType = gradientStyleRangeLookupValueType(gs); let range = this.findRangeForColumn(ranges, column, lookupType, cellValue); return this.getCellColorRangeMaxValue(range, column, lookupType); } if (styledColumn.PercentBarStyle) { const ranges = styledColumn.PercentBarStyle?.CellRanges; if (ranges) { return this.getCellColorRangeMaxValue(ranges[ranges.length - 1], column, styledColumn.PercentBarStyle.RangeValueType); } } if (styledColumn.BulletChartStyle) { const ranges = styledColumn.BulletChartStyle?.CellRanges; if (ranges && ranges.length > 0) { return this.getCellColorRangeMaxValue(ranges[ranges.length - 1], column, styledColumn.BulletChartStyle.RangeValueType); } return this.getMaxValueForNumericColumn(column); } } getCellColorRangeMinValue(range, column, rangeValueType) { if (!range) { return undefined; } if (range.Min == undefined) { return undefined; } let minValue; if (typeof range.Min === 'number' && rangeValueType === 'Percentage') { const minColumnValue = this.getMinValueForNumericColumn(column); const maxColumnValue = this.getMaxValueForNumericColumn(column); minValue = minColumnValue + (range.Min / 100) * (maxColumnValue - minColumnValue); } else if (range.Min === 'Col-Min') { minValue = this.getMinValueForNumericColumn(column); } else if (range.Min === 'Col-Max') { minValue = this.getMaxValueForNumericColumn(column); } else if (range.Min === 'Col-Avg') { minValue = this.getAvgValueForNumericColumn(column); } else if (range.Min === 'Col-Median') { minValue = this.getMedianValueForNumericColumn(column); } else { minValue = range.Min; } return minValue; } getCellColorRangeMaxValue(range, column, rangeValueType) { if (!range) { return undefined; } if (range.Max == undefined) { return undefined; } let maxValue; if (typeof range.Max === 'number' && rangeValueType === 'Percentage') { const minColumnValue = this.getMinValueForNumericColumn(column); const maxColumnValue = this.getMaxValueForNumericColumn(column); maxValue = minColumnValue + (range.Max / 100) * (maxColumnValue - minColumnValue); } else if (range.Max === 'Col-Max') { maxValue = this.getMaxValueForNumericColumn(column); } else if (range.Max === 'Col-Min') { maxValue = this.getMinValueForNumericColumn(column); } else if (range.Max === 'Col-Avg') { maxValue = this.getAvgValueForNumericColumn(column); } else if (range.Max === 'Col-Median') { maxValue = this.getMedianValueForNumericColumn(column); } else { maxValue = range.Max; } return maxValue; } getColumnComparisonForStyledColumn(styledColumn) { if (styledColumn.GradientStyle?.ColumnComparison) { return styledColumn.GradientStyle.ColumnComparison; } if (styledColumn.PercentBarStyle?.ColumnComparison) { return styledColumn.PercentBarStyle.ColumnComparison; } if (styledColumn.BulletChartStyle?.ColumnComparison) { return styledColumn.BulletChartStyle.ColumnComparison; } return undefined; } getColumnIdsFromColumnComparison(columnComparison) { let returnValues = []; if (typeof columnComparison.MinValue === 'string') { let minIds = this.getDependentColumnIds(columnComparison.MinValue); if (ArrayExtensions.IsNotNullOrEmpty(minIds)) { returnValues.push(...minIds); } } if (typeof columnComparison.MaxValue === 'string') { let maxIds = this.getDependentColumnIds(columnComparison.MaxValue); if (ArrayExtensions.IsNotNullOrEmpty(maxIds)) { returnValues.push(...maxIds); } } return returnValues; } getDependentColumnIds(columnId) { if (this.getColumnApi().isCalculatedColumn(columnId)) { return this.getCalculatedColumnApi().internalApi.getReferencedColumnIdsForCalculatedColumnId(columnId); } else { return [columnId]; } } hasStyledColumnRelativeCellRange(styledColumn) { let cellColorRange = null; let rangeValueType = 'Number'; if (styledColumn.GradientStyle) { if (styledColumn.GradientStyle.ZeroCentred) { cellColorRange = expandGradientCellRanges(styledColumn.GradientStyle); } else if (styledColumn.GradientStyle?.CellRanges) { cellColorRange = styledColumn.GradientStyle.CellRanges; } if (styledColumn.GradientStyle?.RangeValueType) { rangeValueType = styledColumn.GradientStyle.RangeValueType; } } if (styledColumn.PercentBarStyle) { if (styledColumn.PercentBarStyle?.CellRanges) { cellColorRange = styledColumn.PercentBarStyle.CellRanges; } if (styledColumn.PercentBarStyle?.RangeValueType) { rangeValueType = styledColumn.PercentBarStyle.RangeValueType; } } if (styledColumn.BulletChartStyle) { if (styledColumn.BulletChartStyle?.CellRanges) { cellColorRange = styledColumn.BulletChartStyle.CellRanges; } if (styledColumn.BulletChartStyle?.RangeValueType) { rangeValueType = styledColumn.BulletChartStyle.RangeValueType; } } return ((rangeValueType === 'Percentage' || cellColorRange?.some((cellColorRange) => { return (isDynamicRangeEndpoint(cellColorRange.Min) || isDynamicRangeEndpoint(cellColorRange.Max)); })) ?? false); } getApplicableBadge(badgeStyle, context) { if (!badgeStyle.Badges.length) { return null; } const badgesWithoutAll = []; const badgesWithAll = []; for (let badge of badgeStyle.Badges) { if (!badge.Predicate) { badgesWithAll.push(badge); } else { badgesWithoutAll.push(badge); } } for (let badge of badgesWithoutAll) { if (this.getPredicateApi().handlePredicate(badge.Predicate, context, false)) { return badge; } } const [firstBadgeWithAll] = badgesWithAll; return firstBadgeWithAll ?? null; } getBadgePredicateDefsForColumn(columnId) { const column = this.getColumnApi().getColumnWithColumnId(columnId); if (!column) { return undefined; } const scope = { ColumnIds: [column.columnId], }; return this.getPredicateApi() .internalApi.getBadgeStylePredicateDefs(scope) .filter((predicate) => this.getColumnScopeApi().isColumnInScope(column, predicate.columnScope)); } }