/* Парус 8 - Панели мониторинга - Таблица Компонент: Меню столбца */ //--------------------- //Подключение библиотек //--------------------- import React, { useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { IconButton, Icon, Menu, MenuItem, Divider, Typography } from "@mui/material"; //Интерфейсные компоненты import { P8P_TABLE_COLUMN_MENU_ACTIONS } from "./p8p_table_constants"; //Действия меню столбца import { P8P_TYPOGRAPHY_VARIANT } from "../../theme/p8p_typography"; //Варианты шрифтов import { P8P_ICON_VARIANT } from "../../theme/variants/p8p_icon_variants"; //Варианты иконок //----------- //Тело модуля //----------- //Меню столбца const P8PTableColumnMenu = ({ columnDef, orderAscItemCaption, orderDescItemCaption, filterItemCaption, onItemClick }) => { //Собственное состояние const [anchorEl, setAnchorEl] = useState(null); //Флаг отображения const open = Boolean(anchorEl); //По нажатию на открытие меню const handleMenuButtonClick = event => { setAnchorEl(event.currentTarget); }; //По нажатию на пункт меню const handleMenuItemClick = (event, index, action, columnName) => { if (onItemClick) onItemClick(action, columnName); setAnchorEl(null); }; //При закрытии меню const handleMenuClose = () => { setAnchorEl(null); }; //Формирование списка элементов меню в зависимости от описания колонки таблицы const menuItems = []; if (columnDef.order === true) { menuItems.push( handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_ASC, columnDef.name)} > arrow_upward {orderAscItemCaption} ); menuItems.push( handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.ORDER_DESC, columnDef.name)} > arrow_downward {orderDescItemCaption} ); } if (columnDef.filter === true) { if (menuItems.length > 0) menuItems.push(); menuItems.push( handleMenuItemClick(event, index, P8P_TABLE_COLUMN_MENU_ACTIONS.FILTER, columnDef.name)} > filter_alt {filterItemCaption} ); } //Генерация содержимого return menuItems.length > 0 ? ( <> more_vert {menuItems} ) : null; }; //Контроль свойств - Меню столбца P8PTableColumnMenu.propTypes = { columnDef: PropTypes.object.isRequired, orderAscItemCaption: PropTypes.string.isRequired, orderDescItemCaption: PropTypes.string.isRequired, filterItemCaption: PropTypes.string.isRequired, onItemClick: PropTypes.func }; //---------------- //Интерфейс модуля //---------------- export { P8PTableColumnMenu };