@deephaven/js-plugin-ag-grid
Version:
Deephaven AG Grid plugin
75 lines • 3.74 kB
JavaScript
import { TableUtils } from '@deephaven/jsapi-utils';
import AgGridFormatter from './AgGridFormatter';
export const TREE_NODE_KEY = '__dhTreeNodeKey__';
/**
* Converts a Deephaven column to an AG Grid ColDef with appropriate properties.
*
* @param column Deephaven column to map
* @param templateColDef Template ColDef to use as a base
* @returns The equivalent AG Grid ColDef
*/
export function convertColumnToColDef(column, templateColDef) {
const dataType = TableUtils.getNormalizedType(column.type);
switch (dataType) {
case TableUtils.dataType.BOOLEAN:
return Object.assign(Object.assign({}, templateColDef), { cellDataType: dataType, filter: true,
// Disable checkmarks: https://github.com/ag-grid/ag-grid/issues/9315
cellRenderer: null });
case TableUtils.dataType.CHAR:
return Object.assign(Object.assign({}, templateColDef), { cellDataType: dataType, filter: 'agNumberColumnFilter', filterParams: {
allowedCharPattern: 'a-zA-Z',
buttons: ['reset', 'apply'],
numberParser: (text) => text != null && text.length === 1 ? text.charCodeAt(0) : null,
numberFormatter: (value) => value != null ? String.fromCharCode(value) : null,
} });
case TableUtils.dataType.DATETIME:
return Object.assign(Object.assign({}, templateColDef), { cellDataType: dataType, filter: 'agDateColumnFilter', cellStyle: params => AgGridFormatter.styleForDateCell(params) });
case TableUtils.dataType.DECIMAL:
return Object.assign(Object.assign({}, templateColDef), { cellDataType: dataType, filter: 'agNumberColumnFilter', cellStyle: params => AgGridFormatter.styleForNumberCell(params) });
case TableUtils.dataType.INT:
return Object.assign(Object.assign({}, templateColDef), { cellDataType: dataType, filter: 'agNumberColumnFilter', cellStyle: params => AgGridFormatter.styleForNumberCell(params) });
case TableUtils.dataType.STRING:
return Object.assign(Object.assign({}, templateColDef), { cellDataType: dataType, filter: true });
case TableUtils.dataType.UNKNOWN:
return Object.assign(Object.assign({}, templateColDef), { cellDataType: TableUtils.dataType.STRING, filter: false });
}
}
export function getColumnDefs(table) {
var _a;
const groupedColSet = new Set((TableUtils.isTreeTable(table) ? table.groupedColumns : []).map(c => c.name));
const newDefs = (_a = table === null || table === void 0 ? void 0 : table.columns.map(c => {
const templateColDef = groupedColSet.has(c.name)
? {
field: c.name,
rowGroup: true,
}
: {
field: c.name,
// TODO: Actually use the table/column information to determine whether we can group/aggregate by it
enableRowGroup: true,
enableValue: true,
};
return convertColumnToColDef(c, templateColDef);
})) !== null && _a !== void 0 ? _a : [];
return newDefs;
}
function isTreeRow(row) {
return 'hasChildren' in row && 'isExpanded' in row && 'depth' in row;
}
export function extractViewportRow(row, columns) {
const data = {};
for (let c = 0; c < columns.length; c += 1) {
const column = columns[c];
data[column.name] = row.get(column);
}
if (isTreeRow(row)) {
data[TREE_NODE_KEY] = {
hasChildren: row.hasChildren,
isExpanded: row.isExpanded,
depth: row.depth,
index: row.index.asNumber(),
};
}
return data;
}
//# sourceMappingURL=AgGridTableUtils.js.map