import { type DragEvent, type RefObject } from 'react'; import { type IconButtonProps } from '@mui/material/IconButton'; import { type MRT_Row, type MRT_RowData, type MRT_TableInstance, } from '../../types'; import { parseFromValuesOrFunc } from '../../utils/utils'; import { MRT_GrabHandleButton } from '../buttons/MRT_GrabHandleButton'; export interface MRT_TableBodyRowGrabHandleProps extends IconButtonProps { row: MRT_Row; rowRef: RefObject; table: MRT_TableInstance; } export const MRT_TableBodyRowGrabHandle = ({ row, rowRef, table, ...rest }: MRT_TableBodyRowGrabHandleProps) => { const { options: { muiRowDragHandleProps }, } = table; const iconButtonProps = { ...parseFromValuesOrFunc(muiRowDragHandleProps, { row, table, }), ...rest, }; const handleDragStart = (event: DragEvent) => { iconButtonProps?.onDragStart?.(event); try { event.dataTransfer.setDragImage(rowRef.current as HTMLElement, 0, 0); } catch (e) { console.error(e); } table.setDraggingRow(row as any); }; const handleDragEnd = (event: DragEvent) => { iconButtonProps?.onDragEnd?.(event); table.setDraggingRow(null); table.setHoveredRow(null); }; return ( ); };