@cmk/fe_utils
Version:
frontend utility library
108 lines (97 loc) • 3.15 kB
text/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
}