// 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 (
{value === index && (
{children}
)}
);
};
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 для новых вкладок */}
: }
>
{isSaving ? 'Сохранение...' : 'Сохранить'}
{/* Уведомление об успешном сохранении */}
setShowSuccess(false)}
anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
>
setShowSuccess(false)} severity="success" sx={{ width: '100%' }}>
Настройки успешно сохранены!
{/* Диалог подтверждения закрытия */}
>
);
};
export default SettingsModal;