import { KeyboardEvent } from 'react'; import { UpdateActions } from './enums'; import EventBus from './EventBus'; export declare type Omit = Pick>; export interface Column { /** The name of the column. By default it will be displayed in the header cell */ name: string; /** A unique key to distinguish each column */ key: string; /** Column width. If not specified, it will be determined automatically based on grid width and specified widths of other columns */ width?: number | string; /** Minimum column width in px. */ minWidth?: number; /** Maximum column width in px. */ maxWidth?: number; cellClass?: string | ((row: TRow) => string); headerCellClass?: string; summaryCellClass?: string | ((row: TSummaryRow) => string); /** Formatter to be used to render the cell content */ formatter?: React.ComponentType>; formatterOptions?: { focusable?: boolean; }; /** Formatter to be used to render the summary cell content */ summaryFormatter?: React.ComponentType>; /** Enables cell editing. If set and no editor property specified, then a textinput will be used as the cell editor */ editable?: boolean | ((row: TRow) => boolean); /** Determines whether column is frozen or not */ frozen?: boolean; /** Enable resizing of a column */ resizable?: boolean; /** Enable sorting of a column */ sortable?: boolean; /** Sets the column sort order to be descending instead of ascending the first time the column is sorted */ sortDescendingFirst?: boolean; unsafe_onCellInput?: (event: React.KeyboardEvent, row: TRow) => unknown; /** Editor to be rendered when cell of column is being edited. If set, then the column is automatically set to be editable */ editor?: React.ComponentType>; /** Header renderer for each header cell */ headerRenderer?: React.ComponentType>; /** Component to be used to filter the data of the column */ filterRenderer?: React.ComponentType>; } export interface CalculatedColumn extends Column { idx: number; width: number; left: number; formatter: React.ComponentType>; } export interface Position { idx: number; rowIdx: number; } export interface Editor { getInputNode: () => Element | Text | undefined | null; getValue: () => TValue; hasResults?: () => boolean; isSelectOpen?: () => boolean; validate?: (value: unknown) => boolean; readonly disableContainerStyles?: boolean; } export interface FormatterProps { rowIdx: number; column: CalculatedColumn; row: TRow; isCellSelected: boolean; isRowSelected: boolean; onRowSelectionChange: (checked: boolean, isShiftClick: boolean) => void; } export interface SummaryFormatterProps { column: CalculatedColumn; row: TSummaryRow; } export interface EditorProps { ref: React.Ref>; column: CalculatedColumn; value: TValue; row: TRow; height: number; onCommit: () => void; onCommitCancel: () => void; onOverrideKeyDown: (e: KeyboardEvent) => void; } export interface HeaderRendererProps { column: CalculatedColumn; allRowsSelected: boolean; onAllRowsSelectionChange: (checked: boolean) => void; } export interface SharedEditorContainerProps { editorPortalTarget: Element; firstEditorKeyPress: string | null; scrollLeft: number; scrollTop: number; rowHeight: number; onCommit: (e: CommitEvent) => void; onCommitCancel: () => void; } interface SelectedCellPropsBase { idx: number; onKeyDown: (event: React.KeyboardEvent) => void; } interface SelectedCellPropsEdit extends SelectedCellPropsBase { mode: 'EDIT'; editorContainerProps: SharedEditorContainerProps; } interface SelectedCellPropsSelect extends SelectedCellPropsBase { mode: 'SELECT'; dragHandleProps?: Pick, 'onMouseDown' | 'onDoubleClick'>; } export declare type SelectedCellProps = SelectedCellPropsEdit | SelectedCellPropsSelect; export interface CellRendererProps extends Omit, 'style' | 'children'> { rowIdx: number; column: CalculatedColumn; lastFrozenColumnIndex: number; row: TRow; isRowSelected: boolean; isCopied: boolean; isDraggedOver: boolean; eventBus: EventBus; selectedCellProps?: SelectedCellProps; onRowClick?: (rowIdx: number, row: TRow, column: CalculatedColumn) => void; } export interface RowRendererProps extends Omit, 'style' | 'children'> { viewportColumns: readonly CalculatedColumn[]; row: TRow; cellRenderer?: React.ComponentType>; rowIdx: number; lastFrozenColumnIndex: number; copiedCellIdx?: number; draggedOverCellIdx?: number; isRowSelected: boolean; eventBus: EventBus; top: number; selectedCellProps?: SelectedCellProps; onRowClick?: (rowIdx: number, row: TRow, column: CalculatedColumn) => void; rowClass?: (row: TRow) => string | undefined; setDraggedOverRowIdx?: (overRowIdx: number) => void; } export interface FilterRendererProps { column: CalculatedColumn; value: TFilterValue; onChange: (value: TFilterValue) => void; } export declare type Filters = Record; export interface CommitEvent { cellKey: string; rowIdx: number; updated: TUpdatedValue; } export interface RowsUpdateEvent { cellKey: string; fromRow: number; toRow: number; updated: TUpdatedValue; action: UpdateActions; fromCellKey?: string; } export interface CheckCellIsEditableEvent extends Position { row: TRow; column: CalculatedColumn; } export interface SelectRowEvent { rowIdx: number; checked: boolean; isShiftClick: boolean; } export {};