@adaptabletools/adaptable
Version:
Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
309 lines (308 loc) • 13 kB
JavaScript
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));
}
}