/* Парус 8 - Панели мониторинга - Редактор панелей Корневой компонент */ //--------------------- //Подключение библиотек //--------------------- import React, { useState, useContext, useEffect } from "react"; //Классы React import { Box, Icon, Fab } from "@mui/material"; //Интерфейсные элементы import { ApplicationСtx } from "../../context/application"; //Контекст приложения import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений import { PanelsManager } from "./components/panels_manager/panels_manager"; //Менеджер панелей import { usePanel } from "./components/components_hooks"; //Вспомогательные хуки import { NavigationCtx } from "../../context/navigation"; //Контекст навигации import { PanelEditor } from "./panel_editor"; //Редактор панели //--------- //Константы //--------- //Заголовок панели по умолчанию const APP_BAR_TITLE_DEFAULT = "Редактор панелей"; //Стили const STYLES = { BOX_PLAY_MODE: { position: "absolute", top: 12, right: 15, zIndex: 2000, display: "flex", height: "42px", width: "145px", justifyContent: "flex-end", gap: "10px" } }; //----------- //Тело модуля //----------- //Корневой компонент редактора панелей const PanelsEditor = () => { //Собственное состояние - иниализация панели const [init, setInit] = useState(true); //Собственное состояние - иниализируемая панель const [panel, panelName, editMode, isEditAvaliable, isPanelChanged, loadPanel, selectPanel, closePanel, changeEditMode, setPanelChanged] = usePanel(); //Отображения менеджера панелей const [openPanelsManager, setOpenPanelsManager] = useState(false); //Отображение параметров панели const [openPanelVariables, setOpenPanelVariables] = useState(false); //Подключение к контексту навигации const { getNavigationSearch } = useContext(NavigationCtx); //Подключение к контексту сообщений const { showMsgWarn } = useContext(MessagingСtx); //Подключение к контексту приложения const { setAppBarTitle } = useContext(ApplicationСtx); //При выборе панели const handlePanelSelect = panel => { //Если панель выбрана и есть изменения if (panel && isPanelChanged) showMsgWarn( `Панель содержит несохраненные изменения. Закрыть панель без изменений?`, () => { selectPanel(panel.rn, panel.name, panel.modify === 1 ? true : false); setOpenPanelsManager(false); }, () => setOpenPanelsManager(false) ); else { selectPanel(panel.rn, panel.name, panel.modify === 1 ? true : false); setOpenPanelsManager(false); } }; //Закрытие панели const handlePanelClose = () => { //Если панель выбрана и есть изменения if (panel && isPanelChanged) showMsgWarn(`Панель содержит несохраненные изменения. Закрыть панель без изменений?`, () => { closePanel(); setOpenPanelsManager(true); }); else { closePanel(); setOpenPanelsManager(true); } }; //Открытие менеджера панелей const handleOpenPanelsManager = () => setOpenPanelsManager(true); //Закрытие менеджера панелей const handleCancelPanelsManager = () => setOpenPanelsManager(false); //Открытие/закрытие параметров панели const handleToggleOpenPanelVariables = () => setOpenPanelVariables(!openPanelVariables); //Включение/выключение режима редактирования const handleToggleEditMode = () => { //Включаем/отключаем панель changeEditMode(!editMode); //Изначально отключаем отображение параметров панели setOpenPanelVariables(false); }; //Дополнительные кнопки режима использования панели const runTimeButtons = !editMode && ( {isEditAvaliable ? ( edit ) : null} file_open mediation ); //При открытии панели useEffect(() => { //Считаем параметры открытия панели const panelPrms = getNavigationSearch(); //Если указан рег. номер панели - устанавливаем изначальный рег. номер панели if (panelPrms.SCODE) loadPanel(panelPrms.SCODE); //Если рег. номера панели нет - открываем менеджер панелей else handleOpenPanelsManager(); //Указываем, что инициализация пройдена setInit(false); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); //При изменении мнемокода панели useEffect(() => { //Устанавливаем заголовок в шапке приложения setAppBarTitle(panelName ? `Панель [${panelName}]` : APP_BAR_TITLE_DEFAULT); }, [panelName, setAppBarTitle]); //Генерация содержимого return ( <> {!init ? ( <> {runTimeButtons} {openPanelsManager && ( )} {panel && ( )} ) : null} ); }; //---------------- //Интерфейс модуля //---------------- export { PanelsEditor };