@cmk/fe_utils
Version:
frontend utility library
73 lines (71 loc) • 3.21 kB
TypeScript
import { BoxProps } from '@mui/material';
import { ReactNode } from 'react';
export type GenericFilterValueType = string | number | boolean | null;
export type GenericFilterType = {
filterKey: string;
value: GenericFilterValueType;
};
export type FilterType = {
value: string;
filterKey: string;
};
export type GenericOptionsType = {
value: string | number | boolean;
label: string;
} | string[];
export interface SelectHeaderCellProps {
isRowSelect?: boolean;
}
export interface UnfilteredHeaderCellProps<TableDataType = Record<string, unknown>, FooterDataType = Record<string, unknown>> {
isRowSelect?: boolean;
header: ReactNode;
headerToolTip?: string;
sortKey?: string;
renderCell: string | ((item: TableDataType, cIdx: number, rIdx: number) => ReactNode);
renderFooterCell?: string | ((footerData: FooterDataType, idx: number) => ReactNode);
}
export interface FilteredTableHeaderCellProps<TableDataType = Record<string, unknown>, FooterDataType = Record<string, unknown>, OptType extends GenericOptionsType = GenericOptionsType> extends UnfilteredHeaderCellProps<TableDataType, FooterDataType> {
additionalFilterKeys?: string[];
filterKey?: string;
filterOptions?: OptType[];
getFilterValue?: ((item: OptType) => string) | string | undefined;
getIcon?: (item: OptType) => ReactNode;
getItemLabel?: ((item: OptType) => string) | string | undefined;
isFilterLocked?: boolean;
renderFilterKey?: (key: string, value: unknown) => string;
selectedFilters?: string[];
style?: BoxProps['sx'];
}
export type TableColumnType<TableDataType = Record<string, unknown>, OptType extends GenericOptionsType = GenericOptionsType, FooterDataType = Record<string, unknown>> = FilteredTableHeaderCellProps<TableDataType, FooterDataType, OptType>;
export type TableProps<TableDataType = Record<string, unknown>, OptType extends GenericOptionsType = GenericOptionsType, FooterDataType = Record<string, unknown>> = {
loading?: boolean;
data: TableDataType[];
columns: TableColumnType<TableDataType, OptType, FooterDataType>[];
selectedRows?: (string | number)[];
loadingRows?: number;
headerBackground?: string;
footerBackground?: BoxProps['bgcolor'];
noResultsLabel?: string;
clearFilersOnNoResultLabel?: string;
disableSelection?: boolean;
disableNoResults?: boolean;
disableTableHeader?: boolean;
disableClearFiltersOnNoResults?: boolean;
filters?: FilterType[];
footerData?: Record<string, unknown>;
getTrLeftBorderColor?: string | ((item: TableDataType, idx: number) => string);
getTrProps?: (item: Record<string, unknown>, idx: number) => Record<string, unknown>;
getSelectedRow?: string | ((item: TableDataType, idx: number) => string);
onUnselectAllFilters?: () => void;
onReorder?: (itemFrom: unknown, itemTo: unknown) => void;
onSelectRow?: (item: TableDataType, idx: number) => void;
onSelectAllFilters?: () => void;
onSetFilters?: (allValues: {
value: string;
filterKey: string;
}[]) => void;
reorderRowId?: string;
sx?: BoxProps['sx'];
rootInjection?: ReactNode;
disableSelectAll?: boolean;
};