import * as React from "react";
export as namespace FixedDataTable;
export interface RowProps {
/** the row index */
rowIndex: number;
/** supplied from the Table or rowHeightGetter */
height: number;
/** supplied from the Table */
width: number;
}
export interface ColumnReorderEndEvent {
/** the column before the new location of this one */
columnBefore?: string | undefined;
/** the column after the new location of this one */
columnAfter?: string | undefined;
/** the column key that was just reordered */
reorderColumn: string;
}
export type ElementOrFunc
= string | React.ReactElement | ((props: P) => string | React.ReactElement);
export type TableRowEventHandler = (event: React.SyntheticEvent
, rowIndex: number) => void;
/**
* Data grid component with fixed or scrollable header and columns.
*
* The layout of the data table is as follows:
*
* ```
* +---------------------------------------------------+
* | Fixed Column Group | Scrollable Column Group |
* | Header | Header |
* | | |
* +---------------------------------------------------+
* | | |
* | Fixed Header Columns | Scrollable Header Columns |
* | | |
* +-----------------------+---------------------------+
* | | |
* | Fixed Body Columns | Scrollable Body Columns |
* | | |
* +-----------------------+---------------------------+
* | | |
* | Fixed Footer Columns | Scrollable Footer Columns |
* | | |
* +-----------------------+---------------------------+
* ```
*
* - Fixed Column Group Header: These are the headers for a group
* of columns if included in the table that do not scroll
* vertically or horizontally.
*
* - Scrollable Column Group Header: The header for a group of columns
* that do not move while scrolling vertically, but move horizontally
* with the horizontal scrolling.
*
* - Fixed Header Columns: The header columns that do not move while scrolling
* vertically or horizontally.
*
* - Scrollable Header Columns: The header columns that do not move
* while scrolling vertically, but move horizontally with the horizontal
* scrolling.
*
* - Fixed Body Columns: The body columns that do not move while scrolling
* horizontally, but move vertically with the vertical scrolling.
*
* - Scrollable Body Columns: The body columns that move while scrolling
* vertically or horizontally.
*/
export interface TableProps extends React.ClassAttributes {
children?: React.ReactNode;
/**
* Pixel width of table. If all columns do not fit,
* a horizontal scrollbar will appear.
*/
width: number;
/**
* Pixel height of table. If all rows do not fit,
* a vertical scrollbar will appear.
*
* Either `height` or `maxHeight` must be specified.
*/
height?: number | undefined;
/**
* Class name to be passed into parent container
*/
className?: string | undefined;
/**
* Maximum pixel height of table. If all rows do not fit,
* a vertical scrollbar will appear.
*
* Either `height` or `maxHeight` must be specified.
*/
maxHeight?: number | undefined;
/**
* Pixel height of table's owner, this is used in a managed scrolling
* situation when you want to slide the table up from below the fold
* without having to constantly update the height on every scroll tick.
* Instead, vary this property on scroll. By using `ownerHeight`, we
* over-render the table while making sure the footer and horizontal
* scrollbar of the table are visible when the current space for the table
* in view is smaller than the final, over-flowing height of table. It
* allows us to avoid resizing and reflowing table when it is moving in the
* view.
*
* This is used if `ownerHeight < height` (or `maxHeight`).
*/
ownerHeight?: number | undefined;
overflowX?: "hidden" | "auto" | undefined;
overflowY?: "hidden" | "auto" | undefined;
/**
* Boolean flag indicating of touch scrolling should be enabled
* This feature is current in beta and may have bugs
*/
touchScrollEnabled?: boolean | undefined;
/** Boolean flags to control if scrolling with keys is enabled */
keyboardScrollEnabled?: boolean | undefined;
/** Boolean flags to control if scrolling with keys is enabled */
keyboardPageEnabled?: boolean | undefined;
/** Hide the scrollbar but still enable scroll functionality */
showScrollbarX?: boolean | undefined;
/** Hide the scrollbar but still enable scroll functionality */
showScrollbarY?: boolean | undefined;
/**
* Callback when horizontally scrolling the grid.
*
* Return false to stop propagation.
*/
onHorizontalScroll?: ((scrollPos: number) => boolean) | undefined;
/**
* Callback when vertically scrolling the grid.
*
* Return false to stop propagation.
*/
onVerticalScroll?: ((scrollPos: number) => boolean) | undefined;
/**
* Number of rows in the table.
*/
rowsCount: number;
/**
* Pixel height of rows unless `rowHeightGetter` is specified and returns
* different value.
*/
rowHeight: number;
/**
* If specified, `rowHeightGetter(index)` is called for each row and the
* returned value overrides `rowHeight` for particular row.
*/
rowHeightGetter?: ((index: number) => number) | undefined;
/**
* Pixel height of sub-row unless `subRowHeightGetter` is specified and returns
* different value. Defaults to 0 and no sub-row being displayed.
*/
subRowHeight?: number | undefined;
/**
* If specified, `subRowHeightGetter(index)` is called for each row and the
* returned value overrides `subRowHeight` for particular row.
*/
subRowHeightGetter?: ((index: number) => number) | undefined;
/**
* The row expanded for table row.
* This can either be a React element, or a function that generates
* a React Element. By default, the React element passed in can expect to
* receive the following props:
*
* ```
* props: {
* rowIndex; number // (the row index)
* height: number // (supplied from the Table or rowHeightGetter)
* width: number // (supplied from the Table)
* }
* ```
*
* Because you are passing in your own React element, you can feel free to
* pass in whatever props you may want or need.
*
* If you pass in a function, you will receive the same props object as the
* first argument.
*/
rowExpanded?: ElementOrFunc | undefined;
/**
* To get any additional CSS classes that should be added to a row,
* `rowClassNameGetter(index)` is called.
*/
rowClassNameGetter?: ((index: number) => string) | undefined;
/**
* If specified, `rowKeyGetter(index)` is called for each row and the
* returned value overrides `key` for the particular row.
*/
rowKeyGetter?: ((index: number) => string) | undefined;
/**
* Pixel height of the column group header.
*/
groupHeaderHeight?: number | undefined;
/**
* Pixel height of header.
*/
headerHeight: number;
/**
* Pixel height of fixedDataTableCellGroupLayout/cellGroupWrapper.
* Default is headerHeight and groupHeaderHeight.
*
* This can be used with CSS to make a header cell span both the group & normal header row.
* Setting this to a value larger than height will cause the content to
* overflow the height. This is useful when adding a 2nd table as the group
* header and vertically merging the 2 headers when a column is not part
* of a group. Here are the necessary CSS changes:
*
* Both headers:
* - cellGroupWrapper needs overflow-x: hidden and pointer-events: none
* - cellGroup needs pointer-events: auto to reenable them on child els
* Group header:
* - Layout/main needs overflow: visible and a higher z-index
* - CellLayout/main needs overflow-y: visible
* - cellGroup needs overflow: visible
*/
cellGroupWrapperHeight?: number | undefined;
/**
* Pixel height of footer.
*/
footerHeight?: number | undefined;
/**
* Value of horizontal scroll.
*/
scrollLeft?: number | undefined;
/**
* Index of column to scroll to.
*/
scrollToColumn?: number | undefined;
/**
* Value of vertical scroll.
*/
scrollTop?: number | undefined;
/**
* Index of row to scroll to.
*/
scrollToRow?: number | undefined;
/**
* Callback that is called when scrolling starts with current horizontal
* and vertical scroll values, as well as the first and last row index.
*/
onScrollStart?: ((x: number, y: number, firstRowIndex: number, lastRowIndex: number) => void) | undefined;
/**
* Callback that is called when scrolling ends or stops with new horizontal
* and vertical scroll values, as well as the first and last row index.
*/
onScrollEnd?: ((x: number, y: number, firstRowIndex: number, lastRowIndex: number) => void) | undefined;
/**
* If enabled scroll events will not be propagated outside of the table.
*/
stopScrollPropagation?: boolean | undefined;
/**
* Callback that is called when `rowHeightGetter` returns a different height
* for a row than the `rowHeight` prop. This is necessary because initially
* table estimates heights of some parts of the content.
*/
onContentHeightChange?: ((newHeight: number) => void) | undefined;
/**
* Callback that is called when a row is clicked.
*/
onRowClick?: TableRowEventHandler | undefined;
/**
* Callback that is called when a contextual-menu event happens on a row.
*/
onRowContextMenu?: TableRowEventHandler | undefined;
/**
* Callback that is called when a row is double clicked.
*/
onRowDoubleClick?: TableRowEventHandler | undefined;
/**
* Callback that is called when a mouse-down event happens on a row.
*/
onRowMouseDown?: TableRowEventHandler | undefined;
/**
* Callback that is called when a mouse-up event happens on a row.
*/
onRowMouseUp?: TableRowEventHandler | undefined;
/**
* Callback that is called when a mouse-enter event happens on a row.
*/
onRowMouseEnter?: TableRowEventHandler | undefined;
/**
* Callback that is called when a mouse-leave event happens on a row.
*/
onRowMouseLeave?: TableRowEventHandler | undefined;
/**
* Callback that is called when a touch-start event happens on a row.
*/
onRowTouchStart?: TableRowEventHandler | undefined;
/**
* Callback that is called when a touch-end event happens on a row.
*/
onRowTouchEnd?: TableRowEventHandler | undefined;
/**
* Callback that is called when a touch-move event happens on a row.
*/
onRowTouchMove?: TableRowEventHandler | undefined;
/**
* Callback that is called when resizer has been released
* and column needs to be updated.
*
* Required if the isResizable property is true on any column.
*
* ```
* function(
* newColumnWidth: number,
* columnKey: string,
* )
* ```
*/
onColumnResizeEndCallback?: ((newColumnWidth: number, columnKey: string) => void) | undefined;
/**
* Callback that is called when reordering has been completed
* and columns need to be updated.
*
* ```
* function(
* event {
* columnBefore: string|undefined, // the column before the new location of this one
* columnAfter: string|undefined, // the column after the new location of this one
* reorderColumn: string, // the column key that was just reordered
* }
* )
* ```
*/
onColumnReorderEndCallback?: ((event: ColumnReorderEndEvent) => void) | undefined;
/**
* Whether a column is currently being resized.
*/
isColumnResizing?: boolean | undefined;
/**
* Whether columns are currently being reordered.
*/
isColumnReordering?: boolean | undefined;
/**
* The number of rows outside the viewport to prerender. Defaults to roughly
* half of the number of visible rows.
*/
bufferRowCount?: number | undefined;
}
export class Table extends React.Component {
}
export interface ColumnHeaderProps {
columnKey?: string | undefined;
/** supplied from the Table or rowHeightGetter */
height: number;
/** supplied from the Column */
width: number;
}
export interface ColumnCellProps extends ColumnHeaderProps {
/** the row index of the cell */
rowIndex: number;
}
/**
* Component that defines the attributes of table column.
*/
export interface ColumnProps extends React.ClassAttributes {
/**
* The horizontal alignment of the table cell content.
*/
align?: "left" | "center" | "right" | undefined;
/**
* Controls if the column is fixed when scrolling in the X axis.
*
* defaultValue: false
*/
fixed?: boolean | undefined;
/**
* Controls if the column is fixed to the right side of the table
* when scrolling in the X axis.
*
* defaultValue: false
*/
fixedRight?: boolean | undefined;
/**
* The header cell for this column.
* This can either be a string a React element, or a function that generates
* a React Element. Passing in a string will render a default header cell
* with that string. By default, the React element passed in can expect to
* receive the following props:
*
* ```
* props: {
* columnKey: string // (of the column, if given)
* height: number // (supplied from the Table or rowHeightGetter)
* width: number // (supplied from the Column)
* }
* ```
*
* Because you are passing in your own React element, you can feel free to
* pass in whatever props you may want or need.
*
* If you pass in a function, you will receive the same props object as the
* first argument.
*/
header?: ElementOrFunc | undefined;
/**
* This is the body cell that will be cloned for this column.
* This can either be a string a React element, or a function that generates
* a React Element. Passing in a string will render a default header cell
* with that string. By default, the React element passed in can expect to
* receive the following props:
*
* ```
* props: {
* rowIndex; number // (the row index of the cell)
* columnKey: string // (of the column, if given)
* height: number // (supplied from the Table or rowHeightGetter)
* width: number // (supplied from the Column)
* }
* ```
*
* Because you are passing in your own React element, you can feel free to
* pass in whatever props you may want or need.
*
* If you pass in a function, you will receive the same props object as the
* first argument.
*/
cell?: ElementOrFunc | undefined;
/**
* This is the footer cell for this column.
* This can either be a string a React element, or a function that generates
* a React Element. Passing in a string will render a default header cell
* with that string. By default, the React element passed in can expect to
* receive the following props:
*
* ```
* props: {
* columnKey: string // (of the column, if given)
* height: number // (supplied from the Table or rowHeightGetter)
* width: number // (supplied from the Column)
* }
* ```
*
* Because you are passing in your own React element, you can feel free to
* pass in whatever props you may want or need.
*
* If you pass in a function, you will receive the same props object as the
* first argument.
*/
footer?: ElementOrFunc | undefined;
/**
* This is used to uniquely identify the column, and is not required unless
* you a resizing columns. This will be the key given in the
* `onColumnResizeEndCallback` on the Table.
*/
columnKey?: string | number | undefined;
/**
* The pixel width of the column.
*/
width: number;
/**
* If this is a resizable column this is its minimum pixel width.
*/
minWidth?: number | undefined;
/**
* If this is a resizable column this is its maximum pixel width.
*/
maxWidth?: number | undefined;
/**
* The grow factor relative to other columns. Same as the flex-grow API
* from http://www.w3.org/TR/css3-flexbox/. Basically, take any available
* extra width and distribute it proportionally according to all columns'
* flexGrow values. Defaults to zero (no-flexing).
*/
flexGrow?: number | undefined;
/**
* Whether the column can be resized with the
* FixedDataTableColumnResizeHandle. Please note that if a column
* has a flex grow, once you resize the column this will be set to 0.
*
* This property only provides the UI for the column resizing. If this
* is set to true, you will need to set the onColumnResizeEndCallback table
* property and render your columns appropriately.
*/
isResizable?: boolean | undefined;
/**
* Whether the column can be dragged to reorder.
*/
isReorderable?: boolean | undefined;
/**
* Whether cells in this column can be removed from document when outside
* of viewport as a result of horizontal scrolling.
* Setting this property to true allows the table to not render cells in
* particular column that are outside of viewport for visible rows. This
* allows to create table with many columns and not have vertical scrolling
* performance drop.
* Setting the property to false will keep previous behaviour and keep
* cell rendered if the row it belongs to is visible.
*
* defaultValue: false
*/
allowCellsRecycling?: boolean | undefined;
/**
* Flag to enable performance check when rendering. Stops the component from
* rendering if none of it's passed in props have changed
*/
pureRendering?: boolean | undefined;
/**
* Extra class for cells in column
*/
cellClassName?: string | undefined;
}
export class Column extends React.Component {
}
export interface ColumnGroupHeaderProps {
/* supplied from the groupHeaderHeight */
height: number;
/* supplied from the Column */
width: number;
}
/**
* Component that defines the attributes of a table column group.
*/
export interface ColumnGroupProps extends React.ClassAttributes {
children?: React.ReactNode;
/**
* The horizontal alignment of the table cell content.
*/
align?: "left" | "center" | "right" | undefined;
/**
* Controls if the column group is fixed when scrolling in the X axis.
*
* defaultValue: false
*/
fixed?: boolean | undefined;
/**
* This is the header cell for this column group.
* This can either be a string or a React element. Passing in a string
* will render a default footer cell with that string. By default, the React
* element passed in can expect to receive the following props:
*
* ```
* props: {
* height: number // (supplied from the groupHeaderHeight)
* width: number // (supplied from the Column)
* }
* ```
*
* Because you are passing in your own React element, you can feel free to
* pass in whatever props you may want or need.
*
* You can also pass in a function that returns a react elemnt, with the
* props object above passed in as the first parameter.
*/
header?: string | React.ReactElement | ((props: ColumnGroupHeaderProps) => string | React.ReactElement) | undefined;
/**
* Extra class for cells in column
*/
cellClassName?: string | undefined;
}
export class ColumnGroup extends React.Component {
}
/**
* Component that handles default cell layout and styling.
*
* All props unless specified below will be set onto the top level `div`
* rendered by the cell.
*
* Example usage via from a `Column`:
* ```
* const MyColumn = (
* (
*
* Cell number: {rowIndex}
* |
* )}
* width={100}
* />
* );
* ```
*/
export interface CellProps extends React.HTMLAttributes {
/**
* Outer height of the cell.
*/
height?: number | undefined;
/**
* Outer width of the cell.
*/
width?: number | undefined;
/**
* Optional prop that if specified on the `Column` will be passed to the
* cell. It can be used to uniquely identify which column is the cell is in.
*/
columnKey?: string | number | undefined;
/**
* Optional prop that represents the rows index in the table.
* For the 'cell' prop of a Column, this parameter will exist for any
* cell in a row with a positive index.
*
* Below that entry point the user is welcome to consume or
* pass the prop through at their discretion.
*/
rowIndex?: number | undefined;
}
export class Cell extends React.Component {
}
export namespace Plugins {
interface ResizeCellProps extends React.HTMLAttributes {
/**
* Optional prop that if specified on the `Column` will be passed to the
* cell. It can be used to uniquely identify which column is the cell is in.
*/
columnKey?: string | number;
/**
* The minimum width of the column.
*/
minWidth?: number;
/**
* The maximum width of the column.
*/
maxWidth?: number;
/**
* Outer width of the cell.
*/
width?: number;
/**
* Whether touch is enabled or not.
*/
touchEnabled?: boolean;
/**
* True if FDT has right to left orientation
*/
isRTL?: boolean;
/**
* Callback function which is called when reordering ends
*
* ```
* function(newWidth: number, columnKey: string)
* ```
*/
onColumnResizeEnd: (newWidth: number, columnKey: string) => void;
/**
* Outer height of the cell.
*/
height?: number;
}
class ResizeCell extends React.Component {
}
interface ReorderCellProps extends React.HTMLAttributes {
/**
* Outer height of the cell.
*/
height?: number;
/**
* Outer width of the cell.
*/
width?: number;
/**
* Optional prop that if specified on the `Column` will be passed to the
* cell. It can be used to uniquely identify which column is the cell is in.
*/
columnKey?: string | number;
/**
* Optional prop that represents the rows index in the table.
* For the 'cell' prop of a Column, this parameter will exist for any
* cell in a row with a positive index.
*
* Below that entry point the user is welcome to consume or
* pass the prop through at their discretion.
*/
rowIndex?: number;
/**
* The left offset in pixels of the cell.
* Space between cell's left edge and left edge of table
*/
left?: number;
/**
* Whether touch is enabled or not.
*/
touchEnabled?: boolean;
/**
* The minimum width of the column.
*/
minWidth?: number;
/**
* The maximum width of the column.
*/
maxWidth?: number;
/**
* Callback function which is called when reordering starts
* ```
* function(columnKey: string)
* ```
*/
onColumnReorderStart?: (columnKey: string) => void;
/**
* Callback function which is called when reordering ends
* ```
* function({columnBefore: string, columnAfter: string, reorderColumn: string})
* ```
*/
onColumnReorderEnd: (event: { columnBefore: string; columnAfter: string; reorderColumn: string }) => void;
}
class ReorderCell extends React.Component {
}
}
|