UNPKG

copper-ui

Version:

Modern React UI components library with TypeScript support, built on top of Ant Design

86 lines 3.77 kB
import { ReactNode } from '../../../../node_modules/.pnpm/react@19.1.1/node_modules/react'; import { TTableState } from '../lib/hooks/use-table-states'; import { TTableColumn, TTableColumnOrGroup } from './col.types'; import { TExpandableConfig } from './expand.types'; import { TTableQuickFilter, TTableQuickFiltersConfig } from './filter.types'; export type TTableItem = Record<string, unknown>; type HasColumnGroup<T extends readonly TTableColumnOrGroup<any>[]> = Extract<T[number], { columns: unknown; }> extends never ? false : true; type TRowPinning = { top: string[]; bottom: string[]; }; type TColumnPinning<TItem extends TTableItem, T extends readonly TTableColumnOrGroup<any>[]> = HasColumnGroup<T> extends true ? never : { left: TTableColumn<TItem>["definition"]["id"][]; right: TTableColumn<TItem>["definition"]["id"][]; }; export type TTableProps<TItem extends TTableItem, T extends readonly TTableColumnOrGroup<TItem>[], Q extends TTableQuickFilter[]> = { columns: T; data: TItem[]; isLoading?: boolean; isNoData?: boolean; quickFilters?: TTableQuickFiltersConfig; /** Массив действий справа в toolbar (кнопки, элементы управления) */ toolbarExtra?: ReactNode[]; /** * Column pinning configuration. * ⚠️ NOT COMPATIBLE with multi-level headers (grouped columns). * See: https://github.com/TanStack/table/issues/5397 */ columnPinning?: TColumnPinning<TItem, T>; /** Row identifier for expandable - required when using expandable */ getRowId?: (row: TItem, index: number) => string; /** Expandable rows configuration */ expandable?: TExpandableConfig<TItem>; /** Row pinning — аналог columnPinning для строк */ rowPinning?: TRowPinning; /** Controlled column visibility state */ columnVisibility?: Record<string, boolean>; /** Callback for column visibility changes */ onColumnVisibilityChange?: (visibility: Record<string, boolean>) => void; } & TTableState<TItem, T, Q> & TTableDrillingProps<TItem>; export type TTableContainerProps<TItem extends TTableItem> = { columns: readonly TTableColumnOrGroup<TItem>[]; data: TItem[]; isLoading?: boolean; isNoData: boolean; totalPages: number; nextPage?: () => void; pagination: { pageIndex: number; pageSize: number; }; setPagination: (data: { pageIndex: number; pageSize: number; }) => void; columnPinning?: { left: TTableColumn<TItem>["definition"]["id"][]; right: TTableColumn<TItem>["definition"]["id"][]; }; /** Row identifier for expandable - required when using expandable */ getRowId?: (row: TItem, index: number) => string; /** Expandable rows configuration */ expandable?: TExpandableConfig<TItem>; /** Row pinning — аналог columnPinning для строк */ rowPinning?: TRowPinning; /** Controlled column visibility state */ columnVisibility?: Record<string, boolean>; /** Callback for column visibility changes */ onColumnVisibilityChange?: (visibility: Record<string, boolean>) => void; } & TTableDrillingProps<TItem>; export type TTableEmptyState = { description?: string | ReactNode; custom?: ReactNode; }; export type TTableDrillingProps<TItem extends TTableItem = TTableItem> = { isFirstSummaryRow?: boolean; emptyState?: TTableEmptyState; minHeight?: string; maxHeight?: string; /** CSS-классы для условной подсветки строк. Применяются к каждому <td> строки. */ rowClassName?: (record: TItem, index: number) => string | undefined; }; export {}; //# sourceMappingURL=table.types.d.ts.map