// components/SettingsModal.jsx import React, { useState, useEffect } from 'react'; import { Dialog, DialogTitle, DialogContent, DialogActions, Button, Tabs, Tab, Box, Typography, IconButton, styled, CircularProgress, Slide, Snackbar, Alert } from '@mui/material'; import CloseIcon from '@mui/icons-material/Close'; import SaveIcon from '@mui/icons-material/Save'; import MetricRangeEditor from './SettingsComponents/MetricRangeEditor'; import UserManagement from './SettingsComponents/UserManagement'; import MenuEditor from './SettingsComponents/MenuEditor' const Transition = React.forwardRef(function Transition(props, ref) { return ; }); const StyledDialog = styled(Dialog)(({ theme }) => ({ '& .MuiDialog-paper': { minWidth: 600, maxHeight: '80vh', backgroundColor: theme.palette.background.paper, }, })); const TabPanel = (props) => { const { children, value, index, ...other } = props; return ( ); }; const SettingsModal = ({ open, onClose, onMenuUpdate }) => { const [tabValue, setTabValue] = useState(0); const [isSaving, setIsSaving] = useState(false); const [showSuccess, setShowSuccess] = useState(false); const [hasChanges, setHasChanges] = useState(false); const [showConfirmClose, setShowConfirmClose] = useState(false); const [metricEditorState, setMetricEditorState] = useState({ hasChanges: false, save: () => { } }); const [menuEditorState, setMenuEditorState] = useState({ hasChanges: false, save: () => Promise.resolve(true) }); const handleTabChange = (event, newValue) => { if (hasChanges) { setShowConfirmClose(true); } else { setTabValue(newValue); } }; const handleMenuEditorChange = ({ hasChanges, saveChanges }) => { setMenuEditorState({ hasChanges, save: saveChanges }); setHasChanges(hasChanges); }; const handleSave = async () => { setIsSaving(true); try { let success = true; if (tabValue === 0 && menuEditorState.hasChanges) { success = await menuEditorState.save(); } if (tabValue === 1 && metricEditorState.hasChanges) { success = success && await metricEditorState.save(); } if (success) { setShowSuccess(true); setHasChanges(false); if (onMenuUpdate) { onMenuUpdate(); } } } finally { setIsSaving(false); } }; const handleMetricEditorChange = ({ hasChanges, saveChanges }) => { setMetricEditorState({ hasChanges, save: saveChanges }); setHasChanges(hasChanges); }; const handleClose = () => { if (hasChanges) { setShowConfirmClose(true); } else { onClose(); } }; const handleConfirmClose = (shouldClose) => { setShowConfirmClose(false); if (shouldClose) { onClose(); } }; const handleSettingChange = () => { setHasChanges(true); }; return ( <> Настройки theme.palette.grey[500], }} > {/* Добавить новые вкладки здесь */} {/* Добавляйте новые TabPanel для новых вкладок */} {/* Уведомление об успешном сохранении */} setShowSuccess(false)} anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }} > setShowSuccess(false)} severity="success" sx={{ width: '100%' }}> Настройки успешно сохранены! {/* Диалог подтверждения закрытия */} handleConfirmClose(false)} aria-labelledby="alert-dialog-title" aria-describedby="alert-dialog-description" > Есть несохраненные изменения Вы уверены, что хотите закрыть без сохранения изменений? ); }; export default SettingsModal;