import { type MouseEvent, useState } from 'react'; import IconButton, { type IconButtonProps } from '@mui/material/IconButton'; import Tooltip from '@mui/material/Tooltip'; import { type MRT_Header, type MRT_RowData, type MRT_TableInstance, } from '../../types'; import { getCommonTooltipProps } from '../../utils/style.utils'; import { parseFromValuesOrFunc } from '../../utils/utils'; import { MRT_ColumnActionMenu } from '../menus/MRT_ColumnActionMenu'; export interface MRT_TableHeadCellColumnActionsButtonProps< TData extends MRT_RowData, > extends IconButtonProps { header: MRT_Header; table: MRT_TableInstance; } export const MRT_TableHeadCellColumnActionsButton = < TData extends MRT_RowData, >({ header, table, ...rest }: MRT_TableHeadCellColumnActionsButtonProps) => { const { options: { icons: { MoreVertIcon }, localization, muiColumnActionsButtonProps, }, } = table; const { column } = header; const { columnDef } = column; const [anchorEl, setAnchorEl] = useState(null); const handleClick = (event: MouseEvent) => { event.stopPropagation(); event.preventDefault(); setAnchorEl(event.currentTarget); }; const iconButtonProps = { ...parseFromValuesOrFunc(muiColumnActionsButtonProps, { column, table, }), ...parseFromValuesOrFunc(columnDef.muiColumnActionsButtonProps, { column, table, }), ...rest, }; return ( <> ({ '&:hover': { opacity: 1, }, height: '2rem', m: '-8px -4px', opacity: 0.3, transition: 'all 150ms', width: '2rem', ...(parseFromValuesOrFunc(iconButtonProps?.sx, theme) as any), })} title={undefined} > {iconButtonProps?.children ?? ( )} {anchorEl && ( )} ); };