fixed-react-data-grid-custom
Version:
Excel-like grid component built with React, with editors, keyboard navigation, copy & paste, and the like
60 lines (59 loc) • 3.26 kB
TypeScript
import React from 'react';
import { CalculatedColumn, Position, ScrollPosition, SubRowDetails, RowRenderer, RowRendererProps } from './common/types';
import { ViewportProps, ViewportState } from './Viewport';
declare type SharedViewportProps<R> = Pick<ViewportProps<R>, 'rowKey' | 'totalWidth' | 'rowGetter' | 'rowsCount' | 'selectedRows' | 'rowRenderer' | 'cellMetaData' | 'rowHeight' | 'scrollToRowIndex' | 'contextMenu' | 'rowSelection' | 'getSubRowDetails' | 'rowGroupRenderer' | 'enableCellSelect' | 'enableCellAutoFocus' | 'cellNavigationMode' | 'eventBus' | 'RowsContainer' | 'editorPortalTarget' | 'interactionMasksMetaData'>;
declare type SharedViewportState = Pick<ViewportState, 'rowOverscanStartIdx' | 'rowOverscanEndIdx' | 'rowVisibleStartIdx' | 'rowVisibleEndIdx' | 'colVisibleStartIdx' | 'colVisibleEndIdx' | 'colOverscanStartIdx' | 'colOverscanEndIdx' | 'lastFrozenColumnIndex' | 'height' | 'isScrolling'>;
export interface CanvasProps<R> extends SharedViewportProps<R>, SharedViewportState {
columns: CalculatedColumn<R>[];
width: number;
totalColumnWidth: number;
onScroll(position: ScrollPosition): void;
}
declare type RendererProps<R> = Pick<CanvasProps<R>, 'rowVisibleStartIdx' | 'rowVisibleEndIdx' | 'columns' | 'cellMetaData' | 'colVisibleStartIdx' | 'colVisibleEndIdx' | 'colOverscanEndIdx' | 'colOverscanStartIdx' | 'lastFrozenColumnIndex' | 'isScrolling'> & {
ref(row: (RowRenderer<R> & React.Component<RowRendererProps<R>>) | null): void;
key: number;
idx: number;
row: R;
subRowDetails?: SubRowDetails;
height: number;
isSelected: boolean;
scrollLeft: number;
};
export default class Canvas<R> extends React.PureComponent<CanvasProps<R>> {
static displayName: string;
private readonly canvas;
private readonly interactionMasks;
private readonly rows;
private unsubscribeScrollToColumn;
private _scroll;
componentDidMount(): void;
componentWillUnmount(): void;
componentDidUpdate(prevProps: CanvasProps<R>): void;
handleScroll: (e: React.UIEvent<HTMLDivElement>) => void;
onHitBottomCanvas: () => void;
onHitTopCanvas: () => void;
handleHitColummBoundary: ({ idx }: Position) => void;
scrollToRow(scrollToRowIndex: number): void;
scrollToColumn: (idx: number) => void;
getRows(rowOverscanStartIdx: number, rowOverscanEndIdx: number): {
row: R;
subRowDetails: SubRowDetails<unknown> | undefined;
}[];
getScroll(): {
scrollTop: number;
scrollLeft: number;
};
getClientScrollTopOffset(node: HTMLDivElement): number;
isRowSelected(idx: number, row: R): boolean;
setScrollLeft(scrollLeft: number): void;
getRowByRef: (i: number) => (RowRenderer<R> & React.Component<RowRendererProps<R>, {}, any>) | undefined;
getRowTop: (rowIdx: number) => number;
getRowHeight: (rowIdx: number) => number;
getRowColumns: (rowIdx: number) => CalculatedColumn<R, unknown, keyof R>[];
renderCustomRowRenderer(props: RendererProps<R>): JSX.Element;
renderGroupRow(props: RendererProps<R>): JSX.Element;
renderRow(props: RendererProps<R>): JSX.Element;
renderPlaceholder(key: string, height: number): JSX.Element;
render(): JSX.Element;
}
export {};