grid-table
Version:
Custom react table based on typescript, grid and flex
128 lines (127 loc) • 4.38 kB
TypeScript
import { ButtonHTMLAttributes, HTMLAttributes, MouseEvent, CSSProperties, Dispatch, SetStateAction, ReactNode, ReactElement, FC } from 'react';
import { Body, Head, Row, HoverButton } from './index';
export interface ExtraTableProps<T> {
className?: string;
style?: CSSProperties;
template?: TableTemplateType;
spinner?: () => ReactElement | null;
toUpdate?: ToUpdate;
}
export interface TableProps<T> extends ExtraTableProps<T> {
columns: ColumnProps<T>[];
data: T[];
children?: ReactNode;
}
export interface TableState<T> extends Omit<TableProps<T>, 'data' | 'columns'> {
data?: T[];
columns?: ColumnProps<T>[];
}
export interface TableFuncType<T> extends FC<TableProps<T>>, TableComponentProps {
}
export interface TableComponentProps {
Body?: typeof Body;
Head?: typeof Head;
}
export interface HoverButtonProps<T> extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onClick'>, Partial<Omit<RenderRowProps<T>, 'index'>> {
recordCallback?: RecordFilter<T>;
dataButton?: RecordFilter<T>;
onClick?: HoverOnclickEvent;
rowIndex?: number;
renderedData?: T[];
}
export declare type TableTemplateType = 'list' | 'table';
export declare type PositionType = 'start' | 'end' | 'center';
export interface HeaderProps<T> extends HTMLAttributes<HTMLDivElement> {
position?: PositionType;
wrapperStyle?: CSSProperties;
}
export interface BodyProps<T> extends HTMLAttributes<HTMLDivElement> {
children?: ReactNode;
toUpdate?: ToUpdate;
className?: string;
}
export interface SpinnerWrapperProps extends HTMLAttributes<HTMLDivElement> {
children?: ReactNode;
}
export interface HeadWrapperProps extends HTMLAttributes<HTMLDivElement> {
children?: ReactNode;
}
export interface RowWrapperProps<T> extends Omit<RowProps<T>, 'hoverButton'> {
children?: ReactNode;
record: T;
index: number;
}
export interface BodyFuncType<T> extends FC<BodyProps<T>>, BodyComponentProps {
}
export interface BodyComponentProps {
Row?: typeof Row;
}
export declare type RecordFilter<T> = (props: Partial<RenderRowProps<T>>) => React.ReactNode | void;
export interface ColumnProps<T> {
title?: React.ReactNode;
key?: React.Key;
dataIndex?: string;
toRender?({ ...props }: RenderRowProps<T>): React.ReactElement<T>;
}
export interface ColumnType<T> extends HTMLAttributes<HTMLSpanElement> {
column: ColumnProps<T>;
record: T;
children?: ReactNode;
rowIndex: number;
}
export interface ColumnFuncType<T> extends FC<ColumnType<T>>, ColumnComponentProps {
}
export interface ColumnComponentProps {
}
export interface RowProps<T> extends Omit<HTMLAttributes<HTMLDivElement>, 'onClick'> {
onClick?: RowOnclickEvent;
toUpdate?: ToUpdate;
hoverButton?: HoverButtonProps<T> | null;
}
export declare type PaginationSizeType = 'small' | 'middle' | 'large';
export declare type PaginationShortPosType = 'lt' | 'lb' | 'rt' | 'rb' | 'mt' | 'mb';
export declare type PaginationFullPosType = 'left-top' | 'left-bottom' | 'right-top' | 'right-bottom' | 'middle-top' | 'middle-bottom';
export interface PaginationProps extends HTMLAttributes<HTMLDivElement> {
position?: PositionType;
pageSize?: number;
size?: PaginationSizeType;
disabled?: boolean;
}
export interface PageProps {
data?: any[];
number?: number;
}
export interface PaginationState extends PaginationProps {
pages?: PageProps[];
curPage?: PageProps;
prevPage?: PageProps;
total?: number;
}
export interface RowFuncType<T> extends FC<RowProps<T>>, RowComponentProps {
}
export interface RowComponentProps {
HoverButton?: typeof HoverButton;
}
export interface ExternalTProps {
id?: string;
index?: number;
}
export interface RenderRowProps<T> {
record: T;
index?: number;
classsName?: string;
renderedData?: T[];
toUpdate?: ToUpdate;
}
export declare type HoverOnclickEvent = ({ ...props }: {
event?: MouseEvent<any>;
record?: ExternalTProps;
renderedData?: any[];
}) => void;
export declare type RowOnclickEvent = ({ ...props }: {
event?: MouseEvent<any>;
record?: ExternalTProps;
}) => void;
export declare type ToUpdate = Dispatch<SetStateAction<any>>;
export declare type isType<T> = T | undefined;
export declare type ComponentReturnType = ReactElement | Array<ReactElement> | string | number | boolean | null;