///
import { SxProps } from '@mui/material/styles';
import { BoxProps } from '@mui/material/Box';
import { TableHeadProps } from '@mui/material/TableHead';
import { TableRowProps } from '@mui/material/TableRow';
import { DragControls } from 'framer-motion';
import { CustomColumnFilterProps } from '../components/VirtualTables';
import { ActionCellProps } from '../components/index.js';
import { Country } from './appConfig';
import { SortingOrder } from './sort';
export interface TableFilters {
order: string;
dateRange: [Date, Date];
defaultStatus: T;
filterStatus: T;
orderBy: string;
includeIds: boolean;
}
export interface TableStatus {
filterStatus: T;
totalCount?: number;
}
export type TableHeaderStatus = 'all' | 'initiated' | 'captured' | 'unCaptured' | 'inProgress' | 'abandoned' | 'cancelled' | 'reversed' | 'unsettled' | 'unauthorized' | 'completed' | 'authorized' | 'refunded' | 'paidOut' | 'pending' | 'cleared' | 'open' | 'revered' | 'unauthenticated' | 'authenticated' | 'issued' | 'drafted' | 'scheduled' | 'paid' | 'outstanding' | 'draft' | 'expired' | 'transacted' | 'settled' | 'unSettled' | 'summary' | 'chargeSettlements' | 'refundSettlements' | 'destinationSettlements' | 'chargebackSettlements' | 'used' | 'active' | 'expired' | 'consumed' | 'notActive' | 'signedUp' | 'checked' | 'outstanding' | (string & {}) | undefined;
export interface IColumnProps {
header?: string | (() => React.ReactNode);
render?: (props: IRenderAttr>) => React.ReactNode;
id: keyof R | string;
tableViewId?: string;
width?: React.CSSProperties['width'];
format?: (props: IFormatAttr) => string;
selector?: (props: ISelectorAttr) => string | Record | number;
align?: React.CSSProperties['textAlign'];
sortable?: boolean;
hidden?: boolean;
order?: number;
pinned?: 'start' | 'end';
pinnable?: boolean;
cellStyle?: SxProps;
headerStyle?: React.CSSProperties;
filter?: IColumnFilter;
isDefaultPinned?: boolean;
}
export interface TableFooterProps extends BoxProps {
totalCount?: number;
showBackDrop?: boolean;
showSeparator?: boolean;
sandboxMode?: boolean;
maximized?: boolean;
selectedCount?: number;
}
export interface TableChipProps {
onChipClick?: (rowIndex: number, columnIndex: number, event: React.MouseEvent, chipIndex: number, pinnedType?: 'start' | 'end') => void;
}
export interface SelectionProps {
onClick?: (event: React.MouseEvent, index: number) => void;
colIndex?: number;
rowIndex?: number;
selectedId?: string | null;
}
export interface IRenderAttr {
row: R;
column: C;
index: number;
value: any;
selectionProps?: SelectionProps;
}
export interface IFormatAttr {
value: string | Record | number;
row: R;
index: number;
}
export interface ISelectorAttr {
row: R;
index: number;
value: string | Record | number;
}
export interface IColumnFilterOption {
placeholder?: string;
apiKey: string;
defaultValue?: string;
icon?: React.ReactNode;
isSelected?: boolean;
options?: IColumnFilterOption[];
isDisabled?: boolean;
filterGroup?: string;
render?: () => React.ReactNode;
}
export type IColumnListFilterOption = Omit & {
value: string;
options?: IColumnListFilterOption[];
};
export interface IColumnFilterList {
type: 'list';
apiKey: string;
options?: IColumnListFilterOption[];
}
export interface IColumnFilterInputs {
type: 'inputs';
options?: IColumnFilterOption[];
countries?: Country[];
isCountriesLoading?: boolean;
}
export interface IColumnFilterCustom {
type: 'custom';
options: Array>;
render: (props: CustomColumnFilterProps) => JSX.Element;
}
export type AnimationType = false | 'pulse' | 'wave' | undefined;
export type TableMode = 'sheet' | 'text' | 'default';
export type TablePosition = 'pinnedStart' | 'pinnedEnd' | 'scrollable';
export interface ColumnSettings {
width: number;
}
export interface ColumnSettingsMap {
[columnId: string]: ColumnSettings;
}
export interface ServiceColumnsMap {
[serviceCode: string]: ColumnSettingsMap;
}
export interface SheetViewColumnsData {
[windowId: string]: ServiceColumnsMap;
}
export interface BulkSelectionProps {
selector: K;
ids: R[K][];
setIds: (ids: R[K][]) => void;
isDisabled?: (row: R) => boolean;
}
export interface IVirtualTable {
rows: R[];
columns: Array>;
selection?: BulkSelectionProps;
rowHeight?: number;
threshold?: number;
showHeader?: boolean;
headerProps?: TableHeadProps;
isLoading?: boolean;
isFetchingNextPage?: boolean;
defaultSkeleton?: boolean;
rowProps?: TableRowProps & {
onRowClick?: (row: R, index: number) => void;
};
footerProps?: TableFooterProps;
showFooter?: boolean;
error: Error | null;
columnsSorting?: Record;
onColumnSort?: (columnsSorting: Record) => void;
loadMoreItems?: () => Promise;
triggerDataRefetch: () => Promise;
scrollToIndex?: number;
areAllRowsLoaded?: boolean;
tableBodyStyles?: React.CSSProperties;
isTextShown?: boolean;
tableMode?: TableMode;
tableTitle?: string;
dimensions?: {
height: string | number;
width: string | number;
};
onStartDrag?: DragControls['start'];
isSheetView?: boolean;
isMinimized?: boolean;
footerComponent?: React.ReactNode;
customNoDataComponent?: React.ReactNode;
/** When true, column filters work with no rows; omit or false keeps legacy empty-table disabling. */
isFilterEnabled?: boolean;
}
export type ColumnFilterValues = Record;
export type IColumnFilter = ({
onConfirm?: (filterValues: ColumnFilterValues) => void;
onClear: (apiKeys: string[]) => void;
onClearFilterFields?: () => void;
data?: ColumnFilterValues;
isOnlyOneFilter?: boolean;
/** @deprecated Use `sx` to style the root wrapper instead. */
wrapperSx?: SxProps;
sx?: SxProps;
} & (IColumnFilterList | IColumnFilterInputs | IColumnFilterCustom));
type ActionCellActionProps = Exclude[number];
export interface TableNavigation {
label: string;
onClick: (e: React.MouseEvent) => void;
onRightClick: (e: React.MouseEvent) => void;
icon?: ActionCellActionProps['icon'];
isShown?: boolean;
}
export {};