/* Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта Компонент панели: Раздел настройки */ //--------------------- //Подключение библиотек //--------------------- import React, { useState, useContext, useEffect } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Box } from "@mui/material"; //Интерфейсные элементы import { BackEndСtx } from "../../../context/backend"; //Контекст взаимодействия с сервером import { useConfSectionMarks } from "../hooks"; //Кастомные хуки import { ActionMessage } from "./action_message"; //Сообщение с действиями import { Marks } from "./marks"; //Показатели раздела //--------- //Константы //--------- //Стили const STYLES = { CONTAINER: { width: "100%", height: "100%" }, BOX_MARKS: { position: "relative", display: "flex", height: "100%", width: "100%" } }; //----------- //Тело модуля //----------- //Раздел настройки const Section = ({ section = null }) => { //Состояние сортировки строк и граф const [order, setOrder] = useState({ rowOrder: 0, columnOrder: 0 }); //Состояние - флаг "сокрытия" (на самом деле - отмонтирования) компонента с показателями const [hideMarksThenLoading, setHideMarksThenLoading] = useState(false); //Данные раздела (показатели) const [marks, refreshMarks, marksLoading, marksInit] = useConfSectionMarks(section, order.rowOrder, order.columnOrder); //Подключение к контексту взаимодействия с сервером const { executeStored } = useContext(BackEndСtx); //Добавление показателя const insertMark = async ({ code, name, row, rowCode, rowVersion, column, columnCode, columnVersion }, cb) => { try { await executeStored({ stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_INSERT", args: { NPRN: section, SCODE: code, SNAME: name, NRRPROW: row, SRRPROW: rowCode, SRRPVERSION_ROW: rowVersion, NRRPCOLUMN: column, SRRPCOLUMN: columnCode, SRRPVERSION_COLUMN: columnVersion }, loader: false }); cb && cb(true); refreshMarks(); } catch { cb && cb(false); } }; //Исправление показателя const updateMark = async ({ rn, code, name, rowCode, rowVersion, columnCode, columnVersion }, cb) => { try { await executeStored({ stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_UPDATE", args: { NRN: rn, SCODE: code, SNAME: name, SRRPROW: rowCode, SRRPVERSION_ROW: rowVersion, SRRPCOLUMN: columnCode, SRRPVERSION_COLUMN: columnVersion }, loader: false }); cb && cb(true); refreshMarks(); } catch { cb && cb(false); } }; //Удаление показателя const deleteMark = async mark => { await executeStored({ stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_DELETE", args: { NRN: mark }, loader: false }); refreshMarks(); }; //Изменение сортировки const changeOrder = order => setOrder(order); //Сброс ранее выставленного флага "сокрытия" (отмонтирования) компонента с показателями (так он не "мигает", когда происходит не смена раздела, в работа внутри него с показателями) useEffect(() => { if (hideMarksThenLoading) setHideMarksThenLoading(false); }, [hideMarksThenLoading]); //При смене раздела - выставим флаг "спрятать" (отмонтировать) компонент с показателями (так он корректно полностью обновляется) useEffect(() => { if (section) setHideMarksThenLoading(true); }, [section]); //Формирование представления return ( {section ? ( {((hideMarksThenLoading && !marksLoading) || !hideMarksThenLoading) && ( )} ) : ( )} ); }; //Контроль свойств - Раздел настройки Section.propTypes = { section: PropTypes.number }; //---------------- //Интерфейс модуля //---------------- export { Section };