import { type MouseEvent, useState } from 'react'; import IconButton, { type IconButtonProps } from '@mui/material/IconButton'; import Tooltip from '@mui/material/Tooltip'; import { MRT_EditActionButtons } from './MRT_EditActionButtons'; import { type MRT_Cell, type MRT_Row, type MRT_RowData, type MRT_TableInstance, } from '../../types'; import { getCommonTooltipProps } from '../../utils/style.utils'; import { parseFromValuesOrFunc } from '../../utils/utils'; import { MRT_RowActionMenu } from '../menus/MRT_RowActionMenu'; const commonIconButtonStyles = { '&:hover': { opacity: 1, }, height: '2rem', ml: '10px', opacity: 0.5, transition: 'opacity 150ms', width: '2rem', }; export interface MRT_ToggleRowActionMenuButtonProps extends IconButtonProps { cell: MRT_Cell; row: MRT_Row; staticRowIndex?: number; table: MRT_TableInstance; } export const MRT_ToggleRowActionMenuButton = ({ cell, row, staticRowIndex, table, ...rest }: MRT_ToggleRowActionMenuButtonProps) => { const { getState, options: { createDisplayMode, editDisplayMode, enableEditing, icons: { EditIcon, MoreHorizIcon }, localization, renderRowActionMenuItems, renderRowActions, }, setEditingRow, } = table; const { creatingRow, editingRow } = getState(); const isCreating = creatingRow?.id === row.id; const isEditing = editingRow?.id === row.id; const showEditActionButtons = (isCreating && createDisplayMode === 'row') || (isEditing && editDisplayMode === 'row'); const [anchorEl, setAnchorEl] = useState(null); const handleOpenRowActionMenu = (event: MouseEvent) => { event.stopPropagation(); event.preventDefault(); setAnchorEl(event.currentTarget); }; const handleStartEditMode = (event: MouseEvent) => { event.stopPropagation(); setEditingRow({ ...row }); setAnchorEl(null); }; return ( <> {renderRowActions && !showEditActionButtons ? ( renderRowActions({ cell, row, staticRowIndex, table }) ) : showEditActionButtons ? ( ) : !renderRowActionMenuItems && parseFromValuesOrFunc(enableEditing, row) && ['modal', 'row'].includes(editDisplayMode!) ? ( ) : renderRowActionMenuItems?.({ row, staticRowIndex, table, } as any)?.length ? ( <> ) : null} ); };