Skip to content

Commit

Permalink
feat: Allow custom renderer to be passed into IrisGrid (#2061)
Browse files Browse the repository at this point in the history
- For adding your own grid/cell renderer
  • Loading branch information
mofojed committed Jun 10, 2024
1 parent ec11736 commit 41233b5
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
3 changes: 2 additions & 1 deletion packages/grid/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ export * from './mouse-handlers';
export * from './errors';
export * from './EventHandlerResult';
export * from './ThemeContext';
export type { default as CellRenderer, CellRenderType } from './CellRenderer';
export { default as CellRenderer } from './CellRenderer';
export type { CellRenderType } from './CellRenderer';
export { default as TextCellRenderer } from './TextCellRenderer';
export { default as DataBarCellRenderer } from './DataBarCellRenderer';
export * from './TokenBoxCellRenderer';
Expand Down
16 changes: 13 additions & 3 deletions packages/iris-grid/src/IrisGrid.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,9 @@ export interface IrisGridProps {
// Optional key and mouse handlers
keyHandlers: readonly KeyHandler[];
mouseHandlers: readonly GridMouseHandler[];

// Pass in a custom renderer to the grid for advanced use cases
renderer?: IrisGridRenderer;
}

export interface IrisGridState {
Expand Down Expand Up @@ -628,7 +631,6 @@ class IrisGrid extends Component<IrisGridProps, IrisGridState> {
this.showNullStrings = true;

// When the loading scrim started/when it should extend to the end of the screen.
this.renderer = new IrisGridRenderer();
this.tableSaver = null;
this.crossColumnRef = React.createRef();
this.isAnimating = false;
Expand Down Expand Up @@ -1021,8 +1023,6 @@ class IrisGrid extends Component<IrisGridProps, IrisGridState> {

loadingTimer?: ReturnType<typeof setTimeout>;

renderer: IrisGridRenderer;

tableSaver: TableSaver | null;

crossColumnRef: React.RefObject<CrossColumnSearch>;
Expand Down Expand Up @@ -1430,6 +1430,16 @@ class IrisGrid extends Component<IrisGridProps, IrisGridState> {
): readonly GridMouseHandler[] => [...mouseHandlers, ...this.mouseHandlers]
);

getCachedRenderer = memoize(
(rendererProp?: IrisGridRenderer) => rendererProp ?? new IrisGridRenderer(),
{ max: 1 }
);

get renderer(): IrisGridRenderer {
const { renderer } = this.props;
return this.getCachedRenderer(renderer);
}

getMouseHandlers(): readonly GridMouseHandler[] {
const { mouseHandlers } = this.props;
return this.getCachedMouseHandlers(mouseHandlers);
Expand Down

0 comments on commit 41233b5

Please sign in to comment.