rez-table-listing-mui
Version:
A rez table listing component built on TanStack Table
112 lines (99 loc) • 2.99 kB
text/typescript
import {
ColumnDef,
ColumnOrderState,
Header,
Row,
Table,
} from "@tanstack/react-table";
import {
CraftTableFeatureProps,
craftTableFilterSettingsOptionsProps,
CraftTableOptionsProps,
} from "./table-options";
import React from "react";
export interface CraftTablePaginationProps {
totalRows?: number;
rowsPerPageArray?: number[];
showPagination?: boolean;
paginationPosition?: "top" | "bottom";
paginationView?: "full" | "compact";
}
interface LoadingOptionsProps {
isLoading: boolean;
loaderText?: string;
loadingComponent?: React.ReactNode;
}
export interface TopbarOptionsProps {
tableStates: CraftTableOptionsProps;
leftSideComponent?: React.ReactNode;
rightSideComponent?: React.ReactNode;
showColumnToggle?: boolean;
showCompactTableToggle?: boolean;
showChangeLayoutToggle?: boolean;
viewMoreToggle?: boolean;
showSearch?: boolean;
showSortingToggle?: boolean;
showFilterToggle?: boolean;
searchValue?: string;
onSearchChange?: (val: string) => void;
onFilterButtonClick?: () => void;
}
export interface CustomRenderContext<T> {
value: unknown;
row: Row<T>;
table: Row<T>[];
}
export type CustomRenderFnMap<T> = {
[key: string]: (ctx: CustomRenderContext<T>) => React.ReactNode;
};
type CustomColumnMeta = {
type?: "custom";
propName?: string;
[key: string]: any;
};
type CustomColumnDef<T> = ColumnDef<T> & {
meta?: CustomColumnMeta;
};
interface CraftTableStyleProps {
wrapperStyle?: React.CSSProperties;
}
export interface FilterOptionsProps {
onClick?: () => void;
show?: boolean;
component: React.ReactNode;
}
export interface settingsOptionsProps {
showIcon?: boolean;
onClick?: () => void;
}
export interface CraftTableProps<T> {
data: T[];
columns: CustomColumnDef<T>[];
tableStates: CraftTableOptionsProps;
paginationOptions?: CraftTablePaginationProps;
featureOptions?: CraftTableFeatureProps;
nestedComponent?: React.ComponentType<{ row: Row<T> }>;
loadingOptions?: LoadingOptionsProps;
topbarOptions?: TopbarOptionsProps;
customRenderFn?: CustomRenderFnMap<T>;
shouldHideColumn?: (accessorKey?: string) => boolean;
styleOptions?: CraftTableStyleProps;
emptyListComponent?: React.ReactNode;
filterOptions?: FilterOptionsProps;
settingsOptions?: settingsOptionsProps;
craftTableFilterSettingsOptions?: craftTableFilterSettingsOptionsProps;
}
export interface CraftTableComponentProps<T> {
table: Table<T>;
featureOptions: CraftTableFeatureProps;
NestedComponent?: React.ComponentType<{ row: Row<T> }>;
columnOrder: ColumnOrderState;
setColumnOrder: React.Dispatch<React.SetStateAction<ColumnOrderState>>;
isCompactTable: boolean;
tableStates: CraftTableOptionsProps;
}
export interface TableHeaderProps<T> {
header: Header<T, unknown>;
featureOptions: CraftTableFeatureProps;
tableStates: CraftTableOptionsProps;
}