import { type MouseEvent, useState } from 'react'; import { type RowPinningPosition } from '@tanstack/react-table'; import IconButton, { type IconButtonProps } from '@mui/material/IconButton'; import Tooltip from '@mui/material/Tooltip'; import { type MRT_Row, type MRT_RowData, type MRT_TableInstance, } from '../../types'; import { getCommonTooltipProps } from '../../utils/style.utils'; import { parseFromValuesOrFunc } from '../../utils/utils'; export interface MRT_RowPinButtonProps extends IconButtonProps { pinningPosition: RowPinningPosition; row: MRT_Row; table: MRT_TableInstance; } export const MRT_RowPinButton = ({ pinningPosition, row, table, ...rest }: MRT_RowPinButtonProps) => { const { options: { icons: { CloseIcon, PushPinIcon }, localization, rowPinningDisplayMode, }, } = table; const isPinned = row.getIsPinned(); const [tooltipOpened, setTooltipOpened] = useState(false); const handleTogglePin = (event: MouseEvent) => { setTooltipOpened(false); event.stopPropagation(); row.pin(isPinned ? false : pinningPosition); }; return ( setTooltipOpened(false)} onClick={handleTogglePin} onFocus={() => setTooltipOpened(true)} onMouseEnter={() => setTooltipOpened(true)} onMouseLeave={() => setTooltipOpened(false)} size="small" {...rest} sx={(theme) => ({ height: '24px', width: '24px', ...(parseFromValuesOrFunc(rest?.sx, theme) as any), })} > {isPinned ? ( ) : ( )} ); };