/* Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта Компонент панели: Раздел настройки */ //--------------------- //Подключение библиотек //--------------------- import React, { useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Box, IconButton, Icon, Dialog, DialogTitle, DialogContent, Button, Typography, List, ListItem, Select, FormControl, InputLabel, MenuItem, DialogActions } from "@mui/material"; //Интерфейсные элементы import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../../components/p8p_data_grid"; //Таблица данных import { P8P_DATA_GRID_CONFIG_PROPS } from "../../../config_wrapper"; //Подключение компонентов к настройкам приложения import { SectionTabPanel } from "./section_tab_panel"; //Компонент вкладки раздела import { confSctnMrkCellRender, confSctnMrkHeadCellRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов //--------- //Константы //--------- //Стили const STYLES = { GRID_SIZES: (height, pxOuterMenuH, pxPanelHeaderH, pxTabsH) => ({ padding: 0, minWidth: "98vw", minHeight: (height - pxOuterMenuH - pxPanelHeaderH - pxTabsH) * 0.93, maxWidth: "98vw", maxHeight: (height - pxOuterMenuH - pxPanelHeaderH - pxTabsH) * 0.93 }), TABLE_CONTAINER: { display: "flex", justifyContent: "center", alignItems: "center", paddingTop: 1, paddingBottom: 1 }, SECTION_ACTIONS: { display: "flex", justifyContent: "space-between", padding: "0px 5px" }, TABLE_SCROLL: { "&::-webkit-scrollbar": { width: "12px", height: "12px" }, "&::-webkit-scrollbar-track": { borderRadius: "88px", backgroundColor: "#EBEBEB" }, "&::-webkit-scrollbar-thumb": { borderRadius: "88px", backgroundColor: "#b4b4b4", backgroundClip: "padding-box", border: "3px solid #EBEBEB" }, "&::-webkit-scrollbar-thumb:hover": { backgroundColor: "#808080" } }, HELP_LIST_ITEM: { padding: "0px 0px 0px 5px", whiteSpace: "pre", fontSize: "0.95rem" }, HELP_LIST_ITEM_NAME: { fontWeight: "bold", fontSize: "inherit", minWidth: "45px" }, HELP_LIST_ITEM_DESC: { fontSize: "inherit" }, DIALOG_ACTIONS: { justifyContent: "end", paddingRight: "24px", paddingLeft: "24px" } }; //------------------------------------ //Вспомогательные функции и компоненты //------------------------------------ //Элемент списка расшифровки состава const HelpListItem = ({ name, desc }) => { return ( {name} {` - ${desc}`} ); }; //Контроль свойств - Элемент списка расшифровки состава HelpListItem.propTypes = { name: PropTypes.string.isRequired, desc: PropTypes.string.isRequired }; //Диалог дополнительной информации const HelpDialog = ({ handleOpenHelpChange }) => { //Генерация содержимого return ( Информация close Карточки показателей содержат сокращенную информацию о типе состава показателя. Список сокращений: ); }; //Контроль свойств - Диалог дополнительной информации HelpDialog.propTypes = { handleOpenHelpChange: PropTypes.func.isRequired }; //Диалог сортировки const SortDialog = ({ init, handleOpenSortChange, onOrderChange }) => { //Собственное состояние сортировки const [order, setOrder] = useState({ row: init.rowOrder ? init.rowOrder : 0, column: init.columnOrder ? init.columnOrder : 0 }); //Изменеие сортировки const handleOrderChange = e => setOrder(pv => ({ ...pv, [e.target.name]: e.target.value })); //Нажатие на кнопку Ok const handleOk = () => { onOrderChange({ rowOrder: order.row, columnOrder: order.column }); handleOpenSortChange(); }; //Кнопка "Очистить", значения по умолчанию const handleClear = () => { setOrder({ row: 0, column: 0 }); }; //Кнопка "Отмена" const handleCancel = () => { handleOpenSortChange(); }; //Генерация содержимого return ( Сортировка close Строки Графы ); }; //Контроль свойств - Диалог сортировки SortDialog.propTypes = { init: PropTypes.object.isRequired, handleOpenSortChange: PropTypes.func.isRequired, onOrderChange: PropTypes.func.isRequired }; //----------- //Тело модуля //----------- //Раздел настройки const SectionTab = ({ section, tabValue, index, order, onOrderChange, containerProps, handleMarkAdd, handleReload, handleMarkOpen, handleMarkCnOpen, handleMarkCnInsert, menuItems }) => { //Состояние - диалог информации const [openHelp, setOpenHelp] = useState(false); //Изменение состояния диалога информации const handleOpenHelpChange = () => { setOpenHelp(!openHelp); }; //Состояние - диалог сортировки const [openSort, setOpenSort] = useState(false); //Изменение состояния диалога сортировки const handleOpenSortChange = () => { setOpenSort(!openSort); }; //Генерация содержимого return ( <> handleMarkAdd(section.rn)}> add handleReload()}> refresh handleOpenSortChange()}> sort handleOpenHelpChange()}> help {section.dataLoaded && section.columnsDef.length > 3 ? ( confSctnMrkCellRender({ ...prms, sectionRn: section.rn, handleMarkAdd: handleMarkAdd, handleMarkOpen: handleMarkOpen, handleMarkCnOpen: handleMarkCnOpen, handleMarkCnInsert: handleMarkCnInsert, menuItems: menuItems }) } headCellRender={confSctnMrkHeadCellRender} /> ) : null} {openSort ? : null} {openHelp ? : null} ); }; //Контроль свойств - Раздел настройки SectionTab.propTypes = { section: PropTypes.object.isRequired, tabValue: PropTypes.number, index: PropTypes.number, order: PropTypes.object.isRequired, onOrderChange: PropTypes.func.isRequired, containerProps: PropTypes.object, handleMarkAdd: PropTypes.func, handleReload: PropTypes.func, handleMarkOpen: PropTypes.func, handleMarkCnOpen: PropTypes.func, handleMarkCnInsert: PropTypes.func, menuItems: PropTypes.array }; //---------------- //Интерфейс модуля //---------------- export { SectionTab };