UNPKG

@wix/design-system

Version:

@wix/design-system

214 lines (204 loc) 9.36 kB
import * as React from 'react'; import { DataTableColumn, DataTableProps, DataTableResizeProps, RowDataDefaultType, DragStartEvent, DragEndEvent, } from './DataTable'; import EmptyState from '../EmptyState'; export interface TableProps< RowData = RowDataDefaultType, > extends UsedDataTableProps<RowData> { /** Applies a data-hook HTML attribute to be used in the tests */ dataHook?: string; /** Defines a callback function which is called when selection happens. <br /> * There are 3 types of selections: * * `ALL` - bulk selection checkbox has been triggered to select all items * * `SINGLE_TOGGLE` - a checkbox to select one item from the list has been triggered. The change object will also include an `id` prop with the unique item identifier and a `value` prop with the new boolean selection state of the item. * * `NONE` - bulk selection has been triggered to unselect all items. * */ onSelectionChanged?: OnSelectionChangedFn; /** Called when item selection triggered but not changed yet. */ onSelectionStarted?(): void; /** Displays selection checkbox as a first column in each row. To hide the selection checkbox from a specific row, set its `row.unselectable` value to true in the data array. * @default false */ showSelection?: boolean; /** When true and showSelection is enabled, displays row numbers in the selection column. * The checkbox appears on hover or when the row is selected. * @default false */ showRowNumbers?: boolean; /** Hides bulk selection checkbox in the table titlebar * @default false */ hideBulkSelectionCheckbox?: boolean; /** A ref to the bulk selection checkbox in the table titlebar */ bulkSelectionCheckboxRef?: React.Ref<HTMLInputElement>; /** Defines an array of selected rows */ selectedIds?: string[] | number[]; /** Specifies whether table row selection is restricted at a given moment. Can be defined as: * * `bool` disables selection for all table rows * * `function` that will be called for each row to check whether to disable selection or not depending on specified condition */ selectionDisabled?: boolean | SelectionDisabledFn<RowData>; /** Controls bulk selection checkbox behaviour in indeterminate state. By default, first click on indeterminate state selects all items in the table. If set to `true`, first click will deselect all items instead. * @default false */ deselectRowsByDefault?: boolean; /** * When false then Table would not create a `<div/>` wrapper around it's children. * Useful when using `<Table/>` to wrap a `<Page/>` component, in that case we use the `<Table/>` only as a context provider and it does not render anything to the DOM by itself. * @default true */ withWrapper?: boolean; controlled?: boolean; viewportRef?: React.RefObject<HTMLElement | null | undefined>; /** * Defines a callback function which is called on column title click */ onSortClick?(colData: TableColumn, colNum: number): void; /** Specifies the total number of selectable items in the table (including items not loaded yet). * When ‘Select all’ is triggered in infinite scroll tables, newly loaded items will be selected automatically. In this case, `SelectionContext` holds not-selected items rather than the selected ones. * SelectionContext.infiniteBulkSelected is true and SelectionContext.selectedCount is the value of totalSelectableCount minus the count of unselected items. */ totalSelectableCount?: number; /** Configures table columns. Required properties for each column:<br /> * * `title`: specifies a text string or an element to display in the table titlebar * * `render`: defines a function which will be called to display this row value for this column<br> * * Optional properties for each column: * * `onCellClick`: defines a callback function which is called each time a cell in this column is clicked. Signature: `onCellClick(column, rowData, rowNum, event)` * * `sortable`: specifies whether field is sortable. If true clicking the header will call `onSortClick`. * * `sortDescending`: specifies what sort icon to display in the column header. `true` shows an up arrow, `false` shows a down arrow, `undefined' shows no icon. * * `infoTooltipProps`: controls info [tooltip](/?path=/story/components-overlays--tooltip) appearance in titlebar. Note: `dataHook`, `moveBy` and `children` will not be passed to tooltip. * * `style`: applies a custom CSS class to the component’s root element * * `align`: controls the alignment of the column content * * `width`: sets the width of a column. No value means column will try to contain its children, if possible. * * `important`: increases text size of this column data across all rows, sets font color to D10 * * `stickyActionCell`: specifies whether `<TableActionCell/>` controls are fixed to the right side of the table * * `resizeProps`: configures column resize behavior. When provided with an `id`, enables resizing for this column. Use `disabled: true` to show a disabled handle, or `disabled: true, hideDisabledResizeHandle: true` to hide the handle completely. * */ columns: TableColumn<RowData>[]; dragAndDrop?: any; onDragEnd?(event: DragEndEvent): unknown; onDragStart?(event: DragStartEvent): unknown; onDragCancel?(event: DragEndEvent): unknown; isDragAndDropDisabled?: boolean; /** Accept any wrapper component as a child element. It must eventually include <Table.Content/>. */ children?: React.ReactNode; } export interface SelectionContext { isSelected(id: string): boolean; selectedCount: number; getSelectedIds(): string[]; getNotSelectedIds(): string[]; infiniteBulkSelected: boolean; bulkSelectionState: 'ALL' | 'NONE' | 'SOME'; toggleSelectionById(): void; /** Controls bulk selection checkbox behaviour in indeterminate state. By default, first click on indeterminate state selects all items in the table. If set to `true`, first click will deselect all items instead. * @default false */ deselectRowsByDefault: boolean; toggleAll(deselectRowsByDefault?: boolean): void; selectAll(): void; deselectAll(): void; setSelectedIds(ids: string[]): void; /** Specifies whether table row selection is restricted at a given moment. Can be defined as: * * `bool` disables selection for all table rows * * `function` that will be called for each row to check whether to disable selection or not depending on specified condition */ selectionDisabled: boolean | (() => boolean); } declare const ToolbarContainer: React.FC<{ /** Accept any wrapper component as a child element. It must eventually include <Table.Content/>. */ children: (selectionContext: SelectionContext) => React.ReactNode; }>; declare const SubToolbar: React.FunctionComponent< React.PropsWithChildren<{ dataHook?: string }> >; declare const Titlebar: React.FC<{ dataHook?: string }>; declare const Content: React.FC<{ titleBarVisible?: boolean; titleBarDisplay?: boolean; /** Applies a data-hook HTML attribute to be used in the tests */ dataHook?: string; }>; declare const BulkSelectionCheckbox: React.FC< React.PropsWithChildren<{ dataHook: string }> >; export type TableColumn<RowDataType = RowDataDefaultType> = DataTableColumn<RowDataType>; export type OnSelectionChangedFn = ( /** Defines an array of selected rows */ selectedIds: TableProps['selectedIds'] | null, change: | { type: 'SINGLE_TOGGLE'; /** Assigns an unique identifier for the table */ id: string; value: boolean; origin: string; } | { type: 'ALL' | 'NONE'; origin: string; }, ) => void; export type SelectionDisabledFn<RowData = RowDataDefaultType> = ( rowData: RowData, ) => void; export type UsedDataTableProps<RowData = RowDataDefaultType> = Pick< DataTableProps<RowData>, | 'allowMultiDetailsExpansion' | 'dynamicRowClass' | 'isRowHighlight' | 'isRowActive' | 'hasMore' | 'initialLoad' | 'id' | 'infiniteScroll' | 'itemsPerPage' | 'loader' | 'loadMore' | 'onRowClick' | 'onMouseEnterRow' | 'onMouseLeaveRow' | 'useWindow' | 'scrollElement' | 'rowVerticalPadding' | 'rowDetails' | 'removeRowDetailsPadding' | 'rowDataHook' | 'rowClass' | 'headerRowClass' | 'headerClass' | 'showHeaderWhenEmpty' | 'showLastRowDivider' | 'virtualized' | 'virtualizedTableHeight' | 'virtualizedLineHeight' | 'virtualizedListRef' | 'width' | 'skin' | 'data' | 'horizontalScroll' | 'stickyColumns' | 'isRowDisabled' | 'infiniteScrollRef' | 'isApplyColumnWidthStyle' | 'resizable' | 'resizeProps' >; export default class Table< RowData = RowDataDefaultType, > extends React.Component<TableProps<RowData>> { static ToolbarContainer: typeof ToolbarContainer; static Titlebar: typeof Titlebar; static SubToolbar: typeof SubToolbar; static Content: typeof Content; static EmptyState: typeof EmptyState; static BulkSelectionCheckbox: typeof BulkSelectionCheckbox; static dataTableRowVirtualStyle?: import('@stylable/runtime').RuntimeStylesheet; static dataTableRowStyle: import('@stylable/runtime').RuntimeStylesheet; setSelectedIds: (selectedIds: TableProps['selectedIds']) => void; }