90 lines
3.5 KiB
JavaScript
90 lines
3.5 KiB
JavaScript
/*
|
||
Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта
|
||
Компонент панели: Закладка раздела
|
||
*/
|
||
|
||
//---------------------
|
||
//Подключение библиотек
|
||
//---------------------
|
||
|
||
import React, { useState } from "react"; //Классы React
|
||
import PropTypes from "prop-types"; //Контроль свойств компонента
|
||
import { Tab, IconButton, Icon, Stack } from "@mui/material"; //Интерфейсные компоненты
|
||
import { STYLES as COMMON_STYLES } from "../common"; //Общие стили и константы
|
||
|
||
//---------
|
||
//Константы
|
||
//---------
|
||
|
||
//Стили
|
||
const STYLES = {
|
||
SECTION_TAB: { minWidth: "150px" },
|
||
SECTION_TAB_LABEL: { width: "100%", height: "100%" },
|
||
SECTION_TAB_TOOLBAR_STACK: { ...COMMON_STYLES.TOOLBAR, height: "100%", width: "100%" }
|
||
};
|
||
|
||
//-----------
|
||
//Тело модуля
|
||
//-----------
|
||
|
||
//Закладка раздела
|
||
const SectionTab = ({ value = false, section, sectionDesc, onSectionEdit, onSectionDelete, ...other }) => {
|
||
//Флаг нахождения указателя мыши в закладке
|
||
const [hoveredSection, setHoveredSection] = useState(false);
|
||
|
||
//При попадании мыши на закладку раздела
|
||
const handleSectionTabMouseIn = () => setHoveredSection(true);
|
||
|
||
//При выходе мыши из закладки раздела
|
||
const handleSectionTabMouseOut = () => setHoveredSection(false);
|
||
|
||
//При редактировании раздела настройки
|
||
const handleSectionEdit = () => onSectionEdit && onSectionEdit(sectionDesc.NRN);
|
||
|
||
//При удалении раздела настройки
|
||
const handleSectionDelete = () => onSectionDelete && onSectionDelete(sectionDesc.NRN);
|
||
|
||
//Формирование представления
|
||
return (
|
||
<Tab
|
||
component={"div"}
|
||
wrapped
|
||
value={value}
|
||
onMouseEnter={handleSectionTabMouseIn}
|
||
onMouseLeave={handleSectionTabMouseOut}
|
||
sx={STYLES.SECTION_TAB}
|
||
label={
|
||
<Stack direction={"row"} alignItems={"center"} textAlign={"left"} sx={STYLES.SECTION_TAB_LABEL} title={sectionDesc.SNAME}>
|
||
{`${sectionDesc.SCODE} - ${sectionDesc.SNAME_SHORT}`}
|
||
{section === sectionDesc.NRN && hoveredSection && (
|
||
<Stack direction={"row"} alignItems={"center"} justifyContent={"right"} sx={STYLES.SECTION_TAB_TOOLBAR_STACK} p={1}>
|
||
<IconButton onClick={handleSectionEdit} title={"Редактировать раздел"}>
|
||
<Icon>edit</Icon>
|
||
</IconButton>
|
||
<IconButton disabled={sectionDesc.NDELETE_ALLOW === 0} onClick={handleSectionDelete} title={"Удалить раздел"}>
|
||
<Icon>delete</Icon>
|
||
</IconButton>
|
||
</Stack>
|
||
)}
|
||
</Stack>
|
||
}
|
||
{...other}
|
||
/>
|
||
);
|
||
};
|
||
|
||
//Контроль свойств - Закладка раздела
|
||
SectionTab.propTypes = {
|
||
value: PropTypes.any,
|
||
section: PropTypes.number,
|
||
sectionDesc: PropTypes.object.isRequired,
|
||
onSectionEdit: PropTypes.func,
|
||
onSectionDelete: PropTypes.func
|
||
};
|
||
|
||
//----------------
|
||
//Интерфейс модуля
|
||
//----------------
|
||
|
||
export { SectionTab };
|