/* Парус 8 - Панели мониторинга - УДП - Доски задач Компонент панели: Диалог формы события */ //--------------------- //Подключение библиотек //--------------------- import React, { useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Box, Typography, TextField, Dialog, DialogContent, DialogActions, Button, Tabs, Tab, InputAdornment, IconButton, Icon } from "@mui/material"; //Интерфейсные компоненты import { useClientEvent } from "../hooks"; //Вспомогательные хуки import { APP_STYLES } from "../../../../app.styles"; //Типовые стили //--------- //Константы //--------- //Стили const STYLES = { CONTAINER: { margin: "5px 0px", textAlign: "center" }, DIALOG_CONTENT: { paddingBottom: "0px", maxHeight: "740px", minHeight: "740px", ...APP_STYLES.SCROLL }, DIALOG_ACTIONS: { justifyContent: "end", paddingRight: "24px", paddingLeft: "24px" }, BOX_WITH_LEGEND: { border: "1px solid #939393" }, BOX_SINGLE_COLUMN: { display: "flex", flexDirection: "column", gap: "10px" }, BOX_FEW_COLUMNS: { display: "flex", flexWrap: "wrap", justifyContent: "space-between" }, BOX_LEFT_ALIGN: { display: "flex", justifyContent: "flex-start" }, LEGEND: { textAlign: "left" }, TEXT_FIELD: (widthVal, greyDisabled = false) => ({ margin: "4px", ...(widthVal ? { width: widthVal } : {}), ...(greyDisabled ? { "& .MuiInputBase-input.Mui-disabled": { WebkitTextFillColor: "rgba(0, 0, 0, 0.87)" }, "& .MuiInputLabel-root.Mui-disabled": { WebkitTextFillColor: "rgba(0, 0, 0, 0.6)" } } : {}) }) }; //------------------------------------ //Вспомогательные функции и компоненты //------------------------------------ //Свойства вкладки function a11yProps(index) { return { id: `simple-tab-${index}`, "aria-controls": `simple-tabpanel-${index}` }; } //Формирование кнопки для открытия раздела const getInputProps = (onClick, disabled = false, icon = "list") => { return { endAdornment: ( {icon} ) }; }; //Вкладка информации function CustomTabPanel(props) { const { children, value, index, ...other } = props; return ( ); } //Контроль свойств - Вкладка информации CustomTabPanel.propTypes = { children: PropTypes.node, index: PropTypes.number.isRequired, value: PropTypes.number.isRequired }; //Вкладка основной информации const MainEventInfoTab = ({ task, editable, handleFieldEdit, handleClientClientsOpen, handleClientPersonOpen, handleCrnOpen, handleEventNextNumbGet }) => { return ( Событие Клиент handleClientPersonOpen(0), !task.stype)} > ); }; //Контроль свойств - Вкладка основной информации MainEventInfoTab.propTypes = { task: PropTypes.object.isRequired, editable: PropTypes.bool, handleFieldEdit: PropTypes.func.isRequired, handleClientClientsOpen: PropTypes.func.isRequired, handleClientPersonOpen: PropTypes.func.isRequired, handleCrnOpen: PropTypes.func.isRequired, handleEventNextNumbGet: PropTypes.func.isRequired }; //Вкладка информации об исполнителе const ExecutorEventInfoTab = ({ task, handleFieldEdit, handleClientPersonOpen }) => { return ( Планирование Инициатор handleClientPersonOpen(1), task.isUpdate)} > Направить ); }; //Контроль свойств - Вкладка информации об исполнителе ExecutorEventInfoTab.propTypes = { task: PropTypes.object.isRequired, handleFieldEdit: PropTypes.func.isRequired, handleClientPersonOpen: PropTypes.func.isRequired }; //----------- //Тело модуля //----------- //Форма события const TaskForm = ({ task, setTask, editable, handleClientClientsOpen, handleClientPersonOpen, handleCrnOpen, handleEventNextNumbGet }) => { //Состояние вкладки const [value, setValue] = useState(0); //При изменении вкладки const handleChange = (event, newValue) => { setValue(newValue); }; //При изменении поля const handleFieldEdit = e => { setTask(pv => ({ ...pv, [e.target.id]: e.target.value, //Связанные значения, если меняется одно, то необходимо обнулить другое ...(e.target.id === "sclnt_clnperson" ? { sclnt_clnclients: "" } : {}), ...(e.target.id === "sclnt_clnclients" ? { sclnt_clnperson: "" } : {}) })); }; //Генерация содержимого return ( {task.nrn ? "Исправление события" : "Добавление события"} ); }; //Контроль свойств - Форма события TaskForm.propTypes = { task: PropTypes.object.isRequired, setTask: PropTypes.func.isRequired, editable: PropTypes.bool, handleClientClientsOpen: PropTypes.func.isRequired, handleClientPersonOpen: PropTypes.func.isRequired, handleCrnOpen: PropTypes.func.isRequired, handleEventNextNumbGet: PropTypes.func.isRequired }; //Диалог с формой события const TaskFormDialog = ({ taskRn, taskType, taskStatus, editable, onClose }) => { //Собственное состояние const [task, setTask, insertEvent, updateEvent, handleClientClientsOpen, handleClientPersonOpen, handleCrnOpen, handleEventNextNumbGet] = useClientEvent(taskRn, taskType, taskStatus); return ( {onClose ? ( {taskRn ? ( ) : ( )} ) : null} ); }; //Контроль свойств - Диалог с формой события TaskFormDialog.propTypes = { taskRn: PropTypes.number, taskType: PropTypes.string, taskStatus: PropTypes.string, editable: PropTypes.bool, onClose: PropTypes.func.isRequired }; //---------------- //Интерфейс модуля //---------------- export { TaskFormDialog };