/* Парус 8 - Панели мониторинга - УДП - Доски задач Компонент панели: Диалог формы события */ //--------------------- //Подключение библиотек //--------------------- import React, { useState, useCallback, useContext } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Dialog, DialogContent, DialogActions, Button } from "@mui/material"; //Интерфейсные компоненты import { useClientEvent } from "./hooks/task_dialog_hooks"; //Хук для события import { TaskForm } from "./components/task_form"; //Форма события import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции import { COMMON_STYLES } from "./styles"; //Общие стили //--------- //Константы //--------- //Стили const STYLES = { DIALOG_CONTENT: { paddingBottom: "0px", maxHeight: "740px", minHeight: "740px", ...COMMON_STYLES.SCROLL } }; //----------- //Тело модуля //----------- //Диалог формы события const TaskDialog = ({ taskRn, taskType, taskStatus, editable, onTasksReload, onClose }) => { //Собственное состояние const [task, setTask] = useClientEvent(taskRn, taskType, taskStatus); //Состояние заполненности всех обязательных свойств const [dpReady, setDPReady] = useState(false); //Подключение к контексту взаимодействия с сервером const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); //При изменении заполненности всех обязательных свойств const handleDPReady = useCallback(v => setDPReady(v), []); //При изменении информации о задаче const handleTaskChange = useCallback( newTaskValues => { setTask(pv => ({ ...pv, ...newTaskValues })); }, [setTask] ); //При добавлении события const handleInsertTask = async callBack => { await executeStored({ stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_INSERT", args: { SCRN: task.sCrn, SPREF: task.sPrefix, SNUMB: task.sNumber, STYPE: task.sType, SSTATUS: task.sStatus, SPLAN_DATE: task.dPlanDate, SINIT_PERSON: task.sInitClnperson, SCLIENT_CLIENT: task.sClntClients, SCLIENT_PERSON: task.sClntClnperson, SDESCRIPTION: task.sDescription, SREASON: task.sInitReason, CPROPS: { VALUE: object2Base64XML( [ Object.fromEntries( Object.entries(task.docProps) // eslint-disable-next-line no-unused-vars .filter(([_, v]) => v != (null || "")) ) ], { arrayNodeName: "props" } ), SDATA_TYPE: SERV_DATA_TYPE_CLOB } } }); callBack(); }; //При исправлении события const handleUpdateEvent = async callBack => { await executeStored({ stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_UPDATE", args: { NCLNEVENTS: task.nRn, SCLIENT_CLIENT: task.sClntClients, SCLIENT_PERSON: task.sClntClnperson, SDESCRIPTION: task.sDescription, CPROPS: { // eslint-disable-next-line no-unused-vars VALUE: object2Base64XML([Object.fromEntries(Object.entries(task.docProps).filter(([_, v]) => v != (null || "")))], { arrayNodeName: "props" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB } } }); callBack(); }; //При считывании следующего номера события const handleEventNextNumbGet = useCallback(async () => { //Считываем данные const data = await executeStored({ stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_NEXTNUMB_GET", args: { SPREFIX: task.sPrefix } }); //Если данные есть if (data) { //Устанавливаем номер setTask(pv => ({ ...pv, sNumber: data.SEVENT_NUMB })); } }, [executeStored, setTask, task.sPrefix]); //Генерация содержимого return ( {onClose ? ( {taskRn ? ( ) : ( )} ) : null} ); }; //Контроль свойств - Диалог формы события TaskDialog.propTypes = { taskRn: PropTypes.number, taskType: PropTypes.string.isRequired, taskStatus: PropTypes.string, editable: PropTypes.bool, onTasksReload: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired }; //---------------- //Интерфейс модуля //---------------- export { TaskDialog };