/* Парус 8 - Панели мониторинга - УДП - Доски задач Компонент панели: Форма события */ //--------------------- //Подключение библиотек //--------------------- import React, { useState, useEffect } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Box, Typography, Tabs, Tab, InputAdornment, IconButton, Icon } from "@mui/material"; //Интерфейсные компоненты import { TaskFormTabInfo } from "./task_form_tab_info"; //Вкладка основной информации import { TaskFormTabExecutor } from "./task_form_tab_executor"; //Вкладка информации об исполнителе import { TaskFormTabProps } from "./task_form_tab_props"; //Вкладка информации со свойствами import { useDocsProps } from "../hooks/task_dialog_hooks"; //Хук для получения свойств раздела "События" import { DP_TYPE_PREFIX } from "../layouts"; //Префикс типа данных свойства //--------- //Константы //--------- //Стили const STYLES = { CONTAINER: { margin: "5px 0px", textAlign: "center" } }; //------------------------------------ //Вспомогательные функции и компоненты //------------------------------------ //Свойства вкладки function a11yProps(index) { return { id: `simple-tab-${index}`, "aria-controls": `simple-tabpanel-${index}` }; } //Вкладка информации function CustomTabPanel(props) { const { children, value, index, ...other } = props; return ( ); } //Контроль свойств - Вкладка информации CustomTabPanel.propTypes = { children: PropTypes.node, index: PropTypes.number.isRequired, value: PropTypes.number.isRequired }; //Формирование кнопки для открытия раздела export const getInputProps = (onClick, disabled = false, icon = "list") => { return { endAdornment: ( {icon} ) }; }; //----------- //Тело модуля //----------- //Форма события const TaskForm = ({ task, taskType, setTask, editable, onEventNextNumbGet, onDPReady }) => { //Состояние вкладки const [tab, setTab] = useState(0); //Состояние допустимых дополнительных свойств const [docProps] = useDocsProps(taskType); //При изменении вкладки const handleTabChange = (e, newValue) => { setTab(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: "" } : {}) })); }; //При изменении свойства const handlePropEdit = e => { setTask(pv => ({ ...pv, docProps: { ...pv.docProps, [e.target.id]: e.target.value } })); }; //При заполнении всех обязательных свойств useEffect(() => { let i = 0; docProps.props.filter(dp => dp.require === true).map(prop => (!task.docProps[`${DP_TYPE_PREFIX[prop.format]}DP_${prop.rn}`] ? i++ : null)); docProps.loaded && i === 0 ? onDPReady(true) : onDPReady(false); }, [docProps, onDPReady, task.docProps]); //Генерация содержимого return ( {task.nrn ? "Исправление события" : "Добавление события"} {docProps.props.length > 0 ? : null} {docProps.props.length > 0 ? ( ) : null} ); }; //Контроль свойств - Форма события TaskForm.propTypes = { task: PropTypes.object.isRequired, taskType: PropTypes.string.isRequired, setTask: PropTypes.func.isRequired, editable: PropTypes.bool.isRequired, onEventNextNumbGet: PropTypes.func.isRequired, onDPReady: PropTypes.func.isRequired }; //---------------- //Интерфейс модуля //---------------- export { TaskForm };