copper-ui
Version:
Modern React UI components library with TypeScript support, built on top of Ant Design
86 lines • 3.77 kB
TypeScript
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