forked from CITKParus/P8-Panels
98 lines
3.6 KiB
JavaScript
98 lines
3.6 KiB
JavaScript
/*
|
||
Парус 8 - Панели мониторинга - УДП - Доски задач
|
||
Компонент панели: Диалог формы события
|
||
*/
|
||
|
||
//---------------------
|
||
//Подключение библиотек
|
||
//---------------------
|
||
|
||
import React, { useState } from "react"; //Классы React
|
||
import PropTypes from "prop-types"; //Контроль свойств компонента
|
||
import { Dialog, DialogContent, DialogActions, Button } from "@mui/material"; //Интерфейсные компоненты
|
||
import { useClientEvent } from "./hooks/task_dialog_hooks"; //Хук для события
|
||
import { APP_STYLES } from "../../../app.styles"; //Типовые стили
|
||
import { TaskForm } from "./components/task_form"; //Форма события
|
||
|
||
//---------
|
||
//Константы
|
||
//---------
|
||
|
||
//Стили
|
||
const STYLES = {
|
||
DIALOG_CONTENT: {
|
||
paddingBottom: "0px",
|
||
maxHeight: "740px",
|
||
minHeight: "740px",
|
||
...APP_STYLES.SCROLL
|
||
},
|
||
DIALOG_ACTIONS: { justifyContent: "end", paddingRight: "24px", paddingLeft: "24px" }
|
||
};
|
||
|
||
//-----------
|
||
//Тело модуля
|
||
//-----------
|
||
|
||
//Диалог с формой события
|
||
const TaskDialog = ({ taskRn, taskType, taskStatus, editable, onReload, onClose }) => {
|
||
//Собственное состояние
|
||
const [task, setTask, insertEvent, updateEvent, handleEventNextNumbGet] = useClientEvent(taskRn, taskType, taskStatus);
|
||
|
||
//Состояние заполненности всех обязательных свойств
|
||
const [dpReady, setDPReady] = useState(false);
|
||
|
||
//Изменение состояния заполненности всех обязательных свойств
|
||
const handleDPReady = v => setDPReady(v);
|
||
|
||
//Генерация содержимого
|
||
return (
|
||
<Dialog open onClose={onClose ? onClose : null} fullWidth>
|
||
<DialogContent sx={STYLES.DIALOG_CONTENT}>
|
||
<TaskForm
|
||
task={task}
|
||
taskType={taskType}
|
||
setTask={setTask}
|
||
editable={!taskRn || editable ? true : false}
|
||
onEventNextNumbGet={handleEventNextNumbGet}
|
||
onDPReady={handleDPReady}
|
||
/>
|
||
</DialogContent>
|
||
{onClose ? (
|
||
<DialogActions sx={STYLES.DIALOG_ACTIONS}>
|
||
{taskRn ? (
|
||
<Button onClick={() => updateEvent(onClose).then(onReload)} disabled={task.updateDisabled || !editable || !dpReady}>
|
||
Исправить
|
||
</Button>
|
||
) : (
|
||
<Button
|
||
onClick={() => {
|
||
insertEvent(onClose).then(onReload);
|
||
}}
|
||
disabled={task.insertDisabled || !dpReady}
|
||
>
|
||
Добавить
|
||
</Button>
|
||
)}
|
||
<Button onClick={onClose}>Закрыть</Button>
|
||
</DialogActions>
|
||
) : null}
|
||
</Dialog>
|
||
);
|
||
};
|
||
|
||
//Контроль свойств - Диалог с формой события
|
||
TaskDialog.propTypes = {
|
||
taskRn: PropTypes.number,
|
||
taskType: PropTypes.string.isRequired,
|
||
taskStatus: PropTypes.string,
|
||
editable: PropTypes.bool,
|
||
onReload: PropTypes.func.isRequired,
|
||
onClose: PropTypes.func.isRequired
|
||
};
|
||
|
||
//----------------
|
||
//Интерфейс модуля
|
||
//----------------
|
||
|
||
export { TaskDialog };
|