/* Парус 8 - Панели мониторинга Компонент: Диалог */ //--------------------- //Подключение библиотек //--------------------- import React, { useEffect, useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Dialog, DialogTitle, DialogContent, DialogActions, Button } from "@mui/material"; //Интерфейсные компоненты import { BUTTONS } from "../../app.text"; //Общие текстовые ресурсы import { P8P_INPUT, P8PInput } from "./p8p_input"; //Поле ввода //----------- //Тело модуля //----------- //Диалог const P8PDialog = ({ title, inputs = [], children, onOk, onCancel, onClose }) => { //Состояние диалога const [state, setState] = useState({}); //При изменении элемента ввода const handleInputChange = (name, value) => setState(pv => ({ ...pv, [name]: value })); //При нажатии на "ОК" диалога const handleOk = () => onOk && onOk(state); //При нажатии на "Отмена" диалога const handleCancel = () => onCancel && onCancel(); //При нажатии на "Закрыть" диалога const handleClose = () => (onClose ? onClose() : onCancel ? onCancel() : null); //При подключении к старнице useEffect(() => { setState(inputs.reduce((res, input) => ({ ...res, [input.name]: input.value == undefined ? null : input.value }), {})); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); //Формирование представления return ( {title} {inputs.map((input, i) => ( ))} {children} {onOk && } {onCancel && } {onClose && } ); }; //Контроль свойств - Диалог P8PDialog.propTypes = { title: PropTypes.string.isRequired, inputs: PropTypes.arrayOf(PropTypes.shape(P8P_INPUT)), children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]), onOk: PropTypes.func, onCancel: PropTypes.func, onClose: PropTypes.func }; //---------------- //Интерфейс модуля //---------------- export { P8PDialog };