/// 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 {};