UNPKG

@deephaven/js-plugin-ag-grid

Version:
75 lines 3.74 kB
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