import { ActionIcon, Menu, Tooltip } from '@mantine/core'; import { type MRT_Header, type MRT_TableInstance } from '../types'; import {Icon} from "@iconify/react"; interface Props = {}> { header: MRT_Header; table: MRT_TableInstance; } export const MRT_ColumnActionMenu = = {}>({ header, table, }: Props) => { const { getState, toggleAllColumnsVisible, setColumnOrder, options: { columnFilterDisplayMode, enableColumnFilters, enableColumnResizing, enableGrouping, enableHiding, enablePinning, enableSorting, enableSortingRemoval, localization, mantineColumnActionsButtonProps, renderColumnActionsMenuItems, }, refs: { filterInputRefs }, setColumnSizingInfo, setShowColumnFilters, } = table; const { column } = header; const { columnDef } = column; const { columnSizing, columnVisibility } = getState(); const mTableHeadCellColumnActionsButtonProps = mantineColumnActionsButtonProps instanceof Function ? mantineColumnActionsButtonProps({ column, table }) : mantineColumnActionsButtonProps; const mcTableHeadCellColumnActionsButtonProps = columnDef.mantineColumnActionsButtonProps instanceof Function ? columnDef.mantineColumnActionsButtonProps({ column, table, }) : columnDef.mantineColumnActionsButtonProps; const actionIconProps = { ...mTableHeadCellColumnActionsButtonProps, ...mcTableHeadCellColumnActionsButtonProps, }; const handleClearSort = () => { column.clearSorting(); }; const handleSortAsc = () => { column.toggleSorting(false); }; const handleSortDesc = () => { column.toggleSorting(true); }; const handleResetColumnSize = () => { setColumnSizingInfo((old) => ({ ...old, isResizingColumn: false })); column.resetSize(); }; const handleHideColumn = () => { column.toggleVisibility(false); }; const handlePinColumn = (pinDirection: 'left' | 'right' | false) => { column.pin(pinDirection); }; const handleGroupByColumn = () => { column.toggleGrouping(); setColumnOrder((old: any) => ['mrt-row-expand', ...old]); }; const handleClearFilter = () => { column.setFilterValue(''); }; const handleFilterByColumn = () => { setShowColumnFilters(true); setTimeout(() => filterInputRefs.current[`${column.id}-0`]?.focus(), 100); }; const handleShowAllColumns = () => { toggleAllColumnsVisible(true); }; const internalColumnMenuItems = ( <> {enableSorting && column.getCanSort() && ( <> {enableSortingRemoval !== false && ( } onClick={handleClearSort} > {localization.clearSort} )} } onClick={handleSortAsc} > {localization.sortByColumnAsc?.replace( '{column}', String(columnDef.header), )} } disabled={column.getIsSorted() === 'desc'} onClick={handleSortDesc} > {localization.sortByColumnDesc?.replace( '{column}', String(columnDef.header), )} {(enableColumnFilters || enableGrouping || enableHiding) && ( )} )} {enableColumnFilters && columnFilterDisplayMode !== 'popover' && column.getCanFilter() && ( <> } onClick={handleClearFilter} > {localization.clearFilter} } onClick={handleFilterByColumn}> {localization.filterByColumn?.replace( '{column}', String(columnDef.header), )} {(enableGrouping || enableHiding) && } )} {enableGrouping && column.getCanGroup() && ( <> } onClick={handleGroupByColumn}> {localization[ column.getIsGrouped() ? 'ungroupByColumn' : 'groupByColumn' ]?.replace('{column}', String(columnDef.header))} {enablePinning && } )} {enablePinning && column.getCanPin() && ( <> } onClick={() => handlePinColumn('left')} > {localization.pinToLeft} } onClick={() => handlePinColumn('right')} > {localization.pinToRight} } onClick={() => handlePinColumn(false)} > {localization.unpin} {enableHiding && } )} {enableColumnResizing && column.getCanResize() && ( } key={0} onClick={handleResetColumnSize} > {localization.resetColumnSize} )} {enableHiding && ( <> } key={0} onClick={handleHideColumn} > {localization.hideColumn?.replace( '{column}', String(columnDef.header), )} !visible) .length } icon={} key={1} onClick={handleShowAllColumns} > {localization.showAllColumns?.replace( '{column}', String(columnDef.header), )} )} ); return ( ({ opacity: 0.5, transition: 'opacity 100ms', '&:hover': { opacity: 1, }, ...(actionIconProps?.sx instanceof Function ? actionIconProps.sx(theme) : (actionIconProps?.sx as any)), })} > {columnDef.renderColumnActionsMenuItems?.({ column, table, internalColumnMenuItems, }) ?? renderColumnActionsMenuItems?.({ column, table, internalColumnMenuItems, }) ?? internalColumnMenuItems} ); };