Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions packages/code-studio/src/styleguide/MockIrisGridTreeModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
type PendingDataMap,
type UITreeRow,
type ColumnHeaderGroup,
type TextAlignment,
} from '@deephaven/iris-grid';
import type { dh as DhType } from '@deephaven/jsapi-types';
import { type Formatter } from '@deephaven/jsapi-utils';
Expand Down Expand Up @@ -237,6 +238,16 @@ class MockIrisGridTreeModel
// Ignore for mock
}

get customColumnAlignmentMap(): Map<string, TextAlignment> {
return new Map<string, TextAlignment>();
}

set customColumnAlignmentMap(
customColumnAlignmentMap: Map<string, TextAlignment>
) {
// Ignore for mock
}

displayString(value: unknown): string {
return `${value}`;
}
Expand Down
7 changes: 7 additions & 0 deletions packages/dashboard-core-plugins/src/panels/IrisGridPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ import {
type ColumnHeaderGroup,
type IrisGridContextMenuData,
type PartitionConfig,
type TextAlignment,
} from '@deephaven/iris-grid';
import {
type RowDataMap,
Expand Down Expand Up @@ -187,6 +188,7 @@ interface IrisGridPanelState {
advancedSettings: Map<AdvancedSettingsType, boolean>;
customColumns: readonly ColumnName[];
customColumnFormatMap: Map<string, FormattingRule>;
customColumnAlignmentMap: Map<string, TextAlignment>;
isFilterBarShown: boolean;
quickFilters: ReadonlyQuickFilterMap;
sorts: readonly dh.Sort[];
Expand Down Expand Up @@ -297,6 +299,7 @@ export class IrisGridPanel extends PureComponent<
advancedSettings: new Map(AdvancedSettings.DEFAULTS),
customColumns: [],
customColumnFormatMap: new Map(),
customColumnAlignmentMap: new Map(),
isFilterBarShown: false,
quickFilters: new Map(),
sorts: [],
Expand Down Expand Up @@ -1013,6 +1016,7 @@ export class IrisGridPanel extends PureComponent<
advancedFilters,
customColumns,
customColumnFormatMap,
customColumnAlignmentMap,
isFilterBarShown,
quickFilters,
reverse,
Expand Down Expand Up @@ -1047,6 +1051,7 @@ export class IrisGridPanel extends PureComponent<
conditionalFormats,
customColumns,
customColumnFormatMap,
customColumnAlignmentMap,
isFilterBarShown,
isSelectingPartition,
movedColumns,
Expand Down Expand Up @@ -1141,6 +1146,7 @@ export class IrisGridPanel extends PureComponent<
conditionalFormats,
customColumns,
customColumnFormatMap,
customColumnAlignmentMap,
error,
isDisconnected,
isFilterBarShown,
Expand Down Expand Up @@ -1222,6 +1228,7 @@ export class IrisGridPanel extends PureComponent<
copyCursor="copy"
customColumns={customColumns}
customColumnFormatMap={customColumnFormatMap}
customColumnAlignmentMap={customColumnAlignmentMap}
columnSelectionValidator={this.isColumnSelectionValid}
conditionalFormats={conditionalFormats}
inputFilters={this.getGridInputFilters(model.columns, inputFilters)}
Expand Down
1 change: 1 addition & 0 deletions packages/iris-grid/src/CommonTypes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export type RowIndex = ModelIndex;

export type { AdvancedFilterOptions };
export type ColumnName = string;
export type TextAlignment = 'left' | 'center' | 'right';
export type AdvancedFilterMap = Map<ModelIndex, AdvancedFilter>;
export type QuickFilterMap = Map<ModelIndex, QuickFilter>;
export type ReadonlyAdvancedFilterMap = ReadonlyMap<ModelIndex, AdvancedFilter>;
Expand Down
14 changes: 14 additions & 0 deletions packages/iris-grid/src/EmptyIrisGridModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';
import IrisGridModel from './IrisGridModel';
import type ColumnHeaderGroup from './ColumnHeaderGroup';
import {
type TextAlignment,
type PendingDataErrorMap,
type PendingDataMap,
type UITotalsTableConfig,
Expand All @@ -21,10 +22,13 @@ class EmptyIrisGridModel extends IrisGridModel {
super(dh);

this.modelFormatter = formatter;
this.modelCustomColumnAlignmentMap = new Map<string, TextAlignment>();
}

modelFormatter: Formatter;

modelCustomColumnAlignmentMap: Map<string, TextAlignment>;

get rowCount(): number {
return 0;
}
Expand Down Expand Up @@ -104,6 +108,16 @@ class EmptyIrisGridModel extends IrisGridModel {
this.modelFormatter = formatter;
}

get customColumnAlignmentMap(): Map<string, TextAlignment> {
return this.modelCustomColumnAlignmentMap;
}

set customColumnAlignmentMap(
customColumnAlignmentMap: Map<string, TextAlignment>
) {
this.modelCustomColumnAlignmentMap = customColumnAlignmentMap;
}

displayString(
value: unknown,
columnType: string,
Expand Down
32 changes: 32 additions & 0 deletions packages/iris-grid/src/IrisGrid.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ import {
type ReadonlyAdvancedFilterMap,
type ReadonlyAggregationMap,
type ReadonlyQuickFilterMap,
type TextAlignment,
type UITotalsTableConfig,
} from './CommonTypes';
import type ColumnHeaderGroup from './ColumnHeaderGroup';
Expand Down Expand Up @@ -284,6 +285,7 @@ export interface IrisGridProps {
applyInputFiltersOnInit: boolean;
conditionalFormats: readonly SidebarFormattingRule[];
customColumnFormatMap: Map<ColumnName, FormattingRule>;
customColumnAlignmentMap: Map<string, TextAlignment>;
movedColumns: readonly MoveOperation[];
movedRows: readonly MoveOperation[];
inputFilters: readonly InputFilter[];
Expand Down Expand Up @@ -408,6 +410,8 @@ export interface IrisGridState {
isMenuShown: boolean;
customColumnFormatMap: Map<ColumnName, FormattingRule>;

customColumnAlignmentMap: Map<string, TextAlignment>;

conditionalFormats: readonly SidebarFormattingRule[];
conditionalFormatEditIndex: number | null;
conditionalFormatPreview?: SidebarFormattingRule;
Expand Down Expand Up @@ -484,6 +488,7 @@ class IrisGrid extends Component<IrisGridProps, IrisGridState> {
alwaysFetchColumns: EMPTY_ARRAY,
conditionalFormats: EMPTY_ARRAY,
customColumnFormatMap: EMPTY_MAP,
customColumnAlignmentMap: EMPTY_MAP,
isFilterBarShown: false,
applyInputFiltersOnInit: false,
movedColumns: EMPTY_ARRAY,
Expand Down Expand Up @@ -591,6 +596,8 @@ class IrisGrid extends Component<IrisGridProps, IrisGridState> {
this.handleTooltipRef = this.handleTooltipRef.bind(this);
this.handleViewChanged = this.handleViewChanged.bind(this);
this.handleFormatSelection = this.handleFormatSelection.bind(this);
this.handleColumnAlignmentChange =
this.handleColumnAlignmentChange.bind(this);
this.handleConditionalFormatCreate =
this.handleConditionalFormatCreate.bind(this);
this.handleConditionalFormatEdit =
Expand Down Expand Up @@ -718,6 +725,7 @@ class IrisGrid extends Component<IrisGridProps, IrisGridState> {
aggregationSettings,
conditionalFormats,
customColumnFormatMap,
customColumnAlignmentMap,
isFilterBarShown,
isSelectingPartition,
partitions,
Expand Down Expand Up @@ -841,6 +849,7 @@ class IrisGrid extends Component<IrisGridProps, IrisGridState> {
formatter: new Formatter(dh),
isMenuShown: false,
customColumnFormatMap: new Map(customColumnFormatMap),
customColumnAlignmentMap: new Map(customColumnAlignmentMap),

conditionalFormats,
conditionalFormatEditIndex: null,
Expand Down Expand Up @@ -3125,6 +3134,26 @@ class IrisGrid extends Component<IrisGridProps, IrisGridState> {
this.updateFormatter({ customColumnFormatMap });
}

handleColumnAlignmentChange(
modelIndex: ModelIndex,
alignment: CanvasTextAlign | null
): void {
const { model } = this.props;
const column = model.columns[modelIndex];
const {
customColumnAlignmentMap: prevCustomColumnAlignmentMap = new Map(),
Comment thread
gzh2003 marked this conversation as resolved.
Outdated
} = this.state;
const customColumnAlignmentMap = new Map(prevCustomColumnAlignmentMap);

if (alignment != null) {
customColumnAlignmentMap.set(column.name, alignment);
} else {
customColumnAlignmentMap.delete(column.name);
}

this.setState({ customColumnAlignmentMap });
Comment thread
gzh2003 marked this conversation as resolved.
Outdated
}

handleMenu(e: React.MouseEvent<HTMLButtonElement>): void {
e.stopPropagation();
this.setState({ isMenuShown: true });
Expand Down Expand Up @@ -4385,6 +4414,8 @@ class IrisGrid extends Component<IrisGridProps, IrisGridState> {
conditionalFormatPreview,
conditionalFormatEditIndex,

customColumnAlignmentMap,

sorts,
reverse,
customColumns,
Expand Down Expand Up @@ -4971,6 +5002,7 @@ class IrisGrid extends Component<IrisGridProps, IrisGridState> {
right={right}
filter={filter}
formatter={formatter}
customColumnAlignmentMap={customColumnAlignmentMap}
sorts={sorts}
reverse={reverse}
movedColumns={movedColumns}
Expand Down
1 change: 1 addition & 0 deletions packages/iris-grid/src/IrisGridCacheUtils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ const irisGridState = {
showOnTop: false,
},
customColumnFormatMap: new Map(),
customColumnAlignmentMap: new Map(),
isFilterBarShown: false,
quickFilters: new Map(),
customColumns: [],
Expand Down
1 change: 1 addition & 0 deletions packages/iris-grid/src/IrisGridCacheUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ function areIrisGridStatesEqual(
'advancedFilters',
'aggregationSettings',
'customColumnFormatMap',
'customColumnAlignmentMap',
'isFilterBarShown',
'quickFilters',
'customColumns',
Expand Down
13 changes: 13 additions & 0 deletions packages/iris-grid/src/IrisGridModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import {
type UITotalsTableConfig,
type PendingDataMap,
type PendingDataErrorMap,
type TextAlignment,
} from './CommonTypes';
import type ColumnHeaderGroup from './ColumnHeaderGroup';

Expand Down Expand Up @@ -249,6 +250,18 @@ abstract class IrisGridModel<
*/
abstract set formatter(formatter: Formatter);

/**
* @returns The custom column alignment map
*/
abstract get customColumnAlignmentMap(): Map<string, TextAlignment>;
Comment thread
gzh2003 marked this conversation as resolved.
Outdated

/**
* @param customColumnAlignmentMap The custom column alignment map to set
*/
abstract set customColumnAlignmentMap(
customColumnAlignmentMap: Map<string, TextAlignment>
);

/**
* @param value The value to format
* @param columnType The column type to format
Expand Down
9 changes: 9 additions & 0 deletions packages/iris-grid/src/IrisGridModelUpdater.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
type ColumnName,
type UITotalsTableConfig,
type PendingDataMap,
type TextAlignment,
} from './CommonTypes';
import type IrisGridModel from './IrisGridModel';
import type ColumnHeaderGroup from './ColumnHeaderGroup';
Expand Down Expand Up @@ -39,6 +40,7 @@ interface IrisGridModelUpdaterProps {
formatColumns: readonly dh.CustomColumn[];
alwaysFetchColumns: readonly ColumnName[];
formatter: Formatter;
customColumnAlignmentMap: Map<string, TextAlignment>;
rollupConfig?: dh.RollupConfig | null;
totalsConfig?: UITotalsTableConfig | null;
selectDistinctColumns?: readonly ColumnName[];
Expand All @@ -59,6 +61,7 @@ function IrisGridModelUpdater({
right,
filter,
formatter,
customColumnAlignmentMap,
reverse = false,
sorts,
customColumns,
Expand Down Expand Up @@ -126,6 +129,12 @@ function IrisGridModelUpdater({
},
[model, formatter]
);
useOnChange(
function updateCustomColumnAlignmentMap() {
model.customColumnAlignmentMap = customColumnAlignmentMap;
},
[model, customColumnAlignmentMap]
);
useOnChange(
function updateCustomColumns() {
if (model.isCustomColumnsAvailable) {
Expand Down
12 changes: 11 additions & 1 deletion packages/iris-grid/src/IrisGridProxyModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import IrisGridTableModel from './IrisGridTableModel';
import IrisGridPartitionedTableModel from './IrisGridPartitionedTableModel';
import IrisGridTreeTableModel from './IrisGridTreeTableModel';
import IrisGridModel from './IrisGridModel';
import { type ColumnName } from './CommonTypes';
import { type TextAlignment, type ColumnName } from './CommonTypes';
import { isIrisGridTableModelTemplate } from './IrisGridTableModelTemplate';
import {
type PartitionConfig,
Expand Down Expand Up @@ -457,6 +457,16 @@ class IrisGridProxyModel extends IrisGridModel implements PartitionedGridModel {
this.originalModel.formatter = formatter;
}

get customColumnAlignmentMap(): Map<string, TextAlignment> {
return this.originalModel.customColumnAlignmentMap;
}

set customColumnAlignmentMap(
customColumnAlignmentMap: Map<string, TextAlignment>
) {
this.originalModel.customColumnAlignmentMap = customColumnAlignmentMap;
}

setViewport = (
top: number,
bottom: number,
Expand Down
Loading
Loading