UNPKG

@coconut-software/ui

Version:

React components for faster and easier web development.

96 lines (95 loc) 3.28 kB
import type { Dispatch, MutableRefObject, ReactElement, ReactNode } from 'react'; import type SvgIcon from '../SvgIcon/SvgIcon'; import { Directions } from '../utilities/directions'; import type { Actions } from './Actions'; export interface GroupedTableColumns { selected: TableColumn[]; unselected: TableColumn[]; } export type Limit = 25 | 50 | 100; export type FilterOptions = { columnKey: string; value: string; checked: boolean; }; export type SortOptions = { direction: Directions.Ascending | Directions.Descending; key: keyof TableRow; }; export type ClickRowActionEventHandler = (row: TableRow) => void; type FilterEventHandler = ({ columnKey, value, checked }: FilterOptions) => void; type SelectEventHandler = (rows: TableRow[]) => void; type SortEventHandler = ({ direction, key }: SortOptions) => void; export interface TableColumn { filter?: { label: string; value: string; checked: boolean; }[]; key: string; selected: boolean; sort?: Directions.Ascending | Directions.Descending; sortable?: boolean; value: ReactNode; } interface TableProps { children?: ReactElement | ReactElement[]; columns: TableColumn[]; dense?: boolean; isScrolling?: boolean; limit?: Limit; loading?: boolean; onFilterChange?: FilterEventHandler; onSort?: SortEventHandler; onSelect?: SelectEventHandler; rowActions?: { enabled?: (row: TableRow) => boolean; label: ReactNode; handler: ClickRowActionEventHandler; startAdornment?: typeof SvgIcon; }[]; rows: TableRow[]; selectable?: boolean; selectionsRef?: MutableRefObject<string[]>; storageKey?: string; total?: number; } export interface TableRow { [key: string]: string | ReactNode; id: string; selected?: boolean; } interface TableState { columns: GroupedTableColumns; dense: boolean; isScrolling?: boolean; limit: Limit; loading: boolean; onFilterChange?: FilterEventHandler; onSelect?: SelectEventHandler; onSort?: SortEventHandler; page: number; rowActions?: { enabled?: (row: TableRow) => boolean; label: ReactNode; handler: ClickRowActionEventHandler; startAdornment?: typeof SvgIcon; }[]; rows: TableRow[]; selectionsRef?: MutableRefObject<string[]>; selectable: boolean; total: number; } type UseTableValues = [TableState, Dispatch<Actions>]; export declare const useTable: () => UseTableValues; declare function Table({ children, columns: initialColumns, dense, isScrolling, limit, loading, onFilterChange, onSelect, onSort, rowActions, rows, selectable, selectionsRef, storageKey, total, }: TableProps): JSX.Element; declare namespace Table { var BulkActions: typeof import("./BulkActions").default; var GlobalActions: typeof import("./GlobalActions").default; var Header: typeof import("./Header").default; var Pagination: typeof import("./Pagination").default; var Search: typeof import("./Search").default; var Title: typeof import("./Title").default; var Toolbar: typeof import("./Toolbar").default; } export default Table;