import { Box, Button, Divider, Menu } from "@mui/material"; import { useMemo, useState } from "react"; import DataTable_ShowHideColumnsMenuItems from "./ShowHideColumnsMenuItems"; const DataTable_ShowHideColumnsMenu = ({ anchorEl, setAnchorEl, table, ...rest }) => { const { getAllColumns, getAllLeafColumns, getCenterLeafColumns, getIsAllColumnsVisible, getIsSomeColumnsPinned, getIsSomeColumnsVisible, getLeftLeafColumns, getRightLeafColumns, getState, options: { enableColumnOrdering, enableColumnPinning, enableHiding, localization, mrtTheme: { menuBackgroundColor }, }, } = table; const { columnOrder, columnPinning, density } = getState(); const handleToggleAllColumns = (value) => { getAllLeafColumns() .filter((col) => col.columnDef.enableHiding !== false) .forEach((col) => col.toggleVisibility(value)); }; 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(), ]); const isNestedColumns = allColumns.some((col) => col.columnDef.columnDefType === "group"); const [hoveredColumn, setHoveredColumn] = useState(null); return ( setAnchorEl(null)} open={!!anchorEl} {...rest} > {enableHiding && ( )} {enableColumnOrdering && ( )} {enableColumnPinning && ( )} {enableHiding && ( )} {allColumns.map((column, index) => ( ))} ); }; export default DataTable_ShowHideColumnsMenu;