@adaptabletools/adaptable
Version:
Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
226 lines (225 loc) • 9.34 kB
JavaScript
import { SortOrder } from '../../AdaptableState/Common/Enums';
import * as InternalRedux from '../../Redux/ActionsReducers/InternalRedux';
import ArrayExtensions from '../../Utilities/Extensions/ArrayExtensions';
import { convertAdaptableStyleToCSS } from '../../Utilities/Helpers/StyleHelper';
import UIHelper from '../../View/UIHelper';
import { ApiBase } from '../Implementation/ApiBase';
export class GridInternalApi extends ApiBase {
/**
* Gets all distinct display values in the Column for given ColumnId
* @param columnId Column to check
*/
getDistinctDisplayValuesForColumnOld(columnId) {
const abColumn = this.getColumnApi().getColumnWithColumnId(columnId);
if (abColumn == undefined) {
return [];
}
const returnValues = this._adaptable.getDistinctGridCellsForColumn(abColumn);
return this.sortDistinctValues(returnValues, abColumn).map((cv) => {
return cv.normalisedValue;
});
}
/**
* Gets all distinct Filter values for the Column with the given ColumnId
* used for Floating Filter and Column Header filter
* either returns a list of values or al ist a list of values with count
*
* This is a general method, and it is used in:
* - Column Filters
* - Query Builder
* - Permitted Values
*
* @param columnId Column to check
*/
async getDistinctFilterDisplayValuesForColumn(options) {
const abColumn = this.getColumnApi().getColumnWithColumnId(options.columnId);
if (abColumn == undefined) {
return [];
}
let gridCells = await this._adaptable.getDistinctFilterValuesForColumn({
column: abColumn,
get currentSearchValue() {
return options.currentSearchValue;
},
});
gridCells = gridCells || [];
const valueOptions = gridCells.map((cv) => {
return {
label: cv.displayValue,
value: cv.normalisedValue,
};
});
return valueOptions;
}
async getDistinctValuesForColumn(columnId) {
const abColumn = this.getColumnApi().getColumnWithColumnId(columnId);
if (!abColumn) {
return undefined;
}
const gridCells = await this._adaptable.getDistinctValuesForColumn(abColumn);
return gridCells;
}
async getDistinctDisplayValuesForColumn(columnId) {
const distinctValues = await this.getDistinctValuesForColumn(columnId);
return distinctValues.map((gc) => {
return gc.displayValue;
});
}
async getDistinctEditDisplayValuesForColumn(options) {
const abColumn = this.getColumnApi().getColumnWithColumnId(options.columnId);
if (!abColumn) {
return undefined;
}
let gridCells = await this._adaptable.getDistinctEditValuesForColumn({
column: abColumn,
gridCell: options.gridCell,
get currentSearchValue() {
return options.currentSearchValue;
},
});
gridCells = gridCells || [];
return gridCells.map((gc) => {
return {
label: gc.displayValue,
value: gc.normalisedValue,
};
});
}
/**
* Gets all distinct raw values in Column. Values are sorted.
* @param columnId Column to check
*/
getDistinctRawValuesForColumn(columnId) {
const abColumn = this.getColumnApi().getColumnWithColumnId(columnId);
if (abColumn == undefined) {
return [];
}
return this.sortDistinctValues(this.getUnsortedDistinctRawValuesForColumn(columnId), abColumn).map((cv) => {
return cv.rawValue;
});
}
/**
* Gets all distinct raw values in Column. Values are un-sorted.
* @param columnId Column to check
*/
getUnsortedDistinctRawValuesForColumn(columnId) {
const abColumn = this.getColumnApi().getColumnWithColumnId(columnId);
if (abColumn == undefined) {
return [];
}
return this._adaptable.getDistinctGridCellsForColumn(abColumn);
}
sortDistinctValues(returnValues, column) {
// this does NOT into account Custom Sort - far too hard for now...
let sortOrder = undefined;
let columnSort = this.getGridApi().getColumnSortForColumn(column.columnId);
if (columnSort && columnSort.SortOrder) {
sortOrder =
columnSort.SortOrder === 'Asc'
? SortOrder.Asc
: columnSort.SortOrder === 'Desc'
? SortOrder.Desc
: undefined;
}
if (sortOrder) {
if (this.getColumnApi().hasNumberDataType(column?.columnId)) {
returnValues = ArrayExtensions.sortCellValueArrayNumeric(returnValues, sortOrder);
}
else if (this.getColumnApi().hasDateDataType(column?.columnId)) {
returnValues = ArrayExtensions.sortCellValueArrayDates(returnValues, sortOrder);
}
else {
returnValues = ArrayExtensions.sortCellValueArray(returnValues, sortOrder);
}
}
return returnValues;
}
setColumns(columns) {
this.dispatchAction(InternalRedux.SetColumns(columns));
}
setSelectedCells(selectedCellInfo) {
this.dispatchAction(InternalRedux.SetSelectedCells(selectedCellInfo));
}
setSelectedRows(selectedRowInfo) {
this.dispatchAction(InternalRedux.SetSelectedRows(selectedRowInfo));
}
buildStandaloneColumnHeader(column) {
return this._adaptable.agGridMenuAdapter.buildStandaloneColumnHeader(column);
}
getRowHighlightStyle(params) {
const primaryKeyValue = this.getGridApi().getPrimaryKeyValueForRowNode(params.node);
const highlightRow = this.getAdaptableInternalApi()
.getInternalState()
.RowHighlightInfo?.find((highlightRow) => {
return highlightRow.primaryKeyValue === primaryKeyValue;
});
if (highlightRow) {
return convertAdaptableStyleToCSS(highlightRow.highlightStyle);
}
}
getAlertRowStyle(params) {
const alert = this.getAlertApi().internalApi.getAdaptableAlertWithHighlightRow(params.node);
const highlightRow = alert?.alertDefinition?.AlertProperties?.HighlightRow;
if (highlightRow) {
return typeof highlightRow === 'object'
? convertAdaptableStyleToCSS(highlightRow)
: {
backgroundColor: UIHelper.getColorByMessageType(alert.alertDefinition.MessageType),
};
}
return null;
}
getAlertRowClass(params) {
const alert = this.getAlertApi().internalApi.getAdaptableAlertWithHighlightRow(params.node);
const highlightRow = alert?.alertDefinition?.AlertProperties?.HighlightRow;
return typeof highlightRow === 'object' && highlightRow?.ClassName
? highlightRow?.ClassName
: null;
}
getRowHighlightClass(params) {
const primaryKeyValue = this.getGridApi().getPrimaryKeyValueForRowNode(params.node);
const highlightRow = this.getAdaptableInternalApi()
.getInternalState()
.RowHighlightInfo?.find((highlightRow) => {
return highlightRow.primaryKeyValue === primaryKeyValue;
});
return typeof highlightRow?.highlightStyle === 'object'
? highlightRow.highlightStyle.ClassName
: null;
}
deriveSpecialColumnSettingsFromAgGridDefaultColDef() {
const defaultColumnDefinition = this._adaptable.agGridAdapter.getDefaultColumnDefinition();
return {
Filterable: defaultColumnDefinition.filter,
Resizable: defaultColumnDefinition.resizable,
Groupable: defaultColumnDefinition.enableRowGroup,
Sortable: defaultColumnDefinition.sortable,
Pivotable: defaultColumnDefinition.enablePivot,
Aggregatable: defaultColumnDefinition.enableValue,
SuppressMenu: defaultColumnDefinition.suppressHeaderMenuButton,
SuppressMovable: defaultColumnDefinition.suppressMovable,
HeaderToolTip: defaultColumnDefinition.headerTooltip,
Width: defaultColumnDefinition.width,
};
}
hasCellEditableAccordingToEditOptions() {
return typeof this.getEditOptions()?.isCellEditable === 'function';
}
/**
* Returns UNDEFINED if no EditOptions.isCellEditable is provided, otherwise returns the result of the function
*
* DO NOT USE THIS METHOD DIRECTLY - use `GridApi.isCellEditable` instead
*/
isCellEditableAccordingToEditOptions(gridCell, defaultColDefinitionEditableValue) {
const cellEditable = this.getEditOptions()?.isCellEditable;
if (cellEditable) {
const cellEditableContext = {
...this.getAdaptableInternalApi().buildBaseContext(),
gridCell,
defaultColDefEditableValue: defaultColDefinitionEditableValue,
};
return cellEditable(cellEditableContext);
}
return undefined;
}
}