import {useMemo, useState} from 'react'; import {Button, Divider, Flex, Menu} from '@mantine/core'; import {MRT_ShowHideColumnsMenuItems} from './MRT_ShowHideColumnsMenuItems'; import {getDefaultColumnOrderIds} from '../column.utils'; import {type MRT_Column, type MRT_TableInstance} from '../types'; interface Props = {}> { isSubMenu?: boolean; table: MRT_TableInstance; } export const MRT_ShowHideColumnsMenu = < TData extends Record = {}, >({ isSubMenu, table, }: Props) => { const { getAllColumns, getAllLeafColumns, getCenterLeafColumns, getIsAllColumnsVisible, getIsSomeColumnsPinned, getIsSomeColumnsVisible, getLeftLeafColumns, getRightLeafColumns, getState, toggleAllColumnsVisible, options: { enableColumnOrdering, enableHiding, enablePinning, localization, }, } = table; const {columnOrder, columnPinning} = getState(); const hideAllColumns = () => { getAllLeafColumns() .filter((col) => col.columnDef.enableHiding !== false) .forEach((col) => col.toggleVisibility(false)); }; const allColumns = useMemo(() => { const columns = getAllColumns(); if ( columnOrder.length > 0 && !columns.some((col) => col.columnDef.columnDefType === 'group') ) { return [ ...getLeftLeafColumns(), ...Array.from(new Set(columnOrder)).map((colId) => getCenterLeafColumns().find((col) => col?.id === colId), ), ...getRightLeafColumns(), ].filter(Boolean); } return columns; }, [ columnOrder, columnPinning, getAllColumns(), getCenterLeafColumns(), getLeftLeafColumns(), getRightLeafColumns(), ]) as MRT_Column[]; const [hoveredColumn, setHoveredColumn] = useState | null>( null, ); return ( {!isSubMenu && enableHiding && ( )} {!isSubMenu && enableColumnOrdering && ( )} {!isSubMenu && enablePinning && ( )} {enableHiding && ( )} {allColumns.map((column, index) => ( ))} ); };