From 9a109a0bf256d13a9a544b324a1cc3f20ed3ffd9 Mon Sep 17 00:00:00 2001 From: Denis Shatskiy Date: Thu, 10 Jul 2025 10:02:01 +0700 Subject: [PATCH] feat: Refactor App and ServerManager components to improve navigation and modal handling --- frontend/src/App.jsx | 69 ++++++++---------- frontend/src/ServerManager.jsx | 128 ++++++++++++++++++++++----------- 2 files changed, 116 insertions(+), 81 deletions(-) diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 85dfcd0..67715a5 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -64,51 +64,44 @@ function MainLayout() {
{/* Верхнее меню Tabler Admin */}
-
+
S3 Lists Manager +
-
-
- -
-
- - - } /> - - } /> - } /> - } /> - {/* Можно добавить другие разделы по необходимости */} - -
-
+ + + } /> + + } /> + } /> + } /> +
); diff --git a/frontend/src/ServerManager.jsx b/frontend/src/ServerManager.jsx index 820c89a..f6f62b6 100644 --- a/frontend/src/ServerManager.jsx +++ b/frontend/src/ServerManager.jsx @@ -492,24 +492,12 @@ function ServerManager() { {/* Delete Modal */} {showDeleteModal && ( -
-
-
-
-
Подтверждение удаления
- -
-
-

Вы уверены, что хотите удалить сервер {serverToDelete?.ip}?

-

Это действие нельзя отменить.

-
-
- - -
-
-
-
+ setShowDeleteModal(false)} + /> )} {/* Edit Server Modal */} @@ -527,6 +515,13 @@ function ServerManager() { // Модальное окно для редактирования сервера с backdrop и анимацией function EditServerModal({ show, server, onChange, onSave, onClose }) { const modalRef = useRef(null); + // Локальное состояние для формы + const [localServer, setLocalServer] = useState(server || {}); + + // Синхронизируем локальное состояние с пропсами + useEffect(() => { + setLocalServer(server || {}); + }, [server]); useEffect(() => { if (window.Tabler && window.Tabler.Modal && modalRef.current) { @@ -545,6 +540,12 @@ function EditServerModal({ show, server, onChange, onSave, onClose }) { } }, [show, onClose]); + const handleChange = (field, value) => { + const updated = { ...localServer, [field]: value }; + setLocalServer(updated); + onChange && onChange(updated); + }; + return (
@@ -554,34 +555,75 @@ function EditServerModal({ show, server, onChange, onSave, onClose }) {
- {server && ( -
{ e.preventDefault(); onSave(); }}> -
- - onChange({ ...server, ip: e.target.value })} /> -
-
- - onChange({ ...server, dns: e.target.value })} /> -
-
- - onChange({ ...server, country: e.target.value })} /> -
-
- - onChange({ ...server, provider: e.target.value })} /> -
-
- - onChange({ ...server, tunnel: e.target.value })} /> -
-
- )} +
{ e.preventDefault(); onSave && onSave(localServer); }}> +
+ + handleChange('ip', e.target.value)} /> +
+
+ + handleChange('dns', e.target.value)} /> +
+
+ + handleChange('country', e.target.value)} /> +
+
+ + handleChange('provider', e.target.value)} /> +
+
+ + handleChange('tunnel', e.target.value)} /> +
+
- + +
+
+ + + ); +} + +function DeleteServerModal({ show, server, onDelete, onClose }) { + const modalRef = useRef(null); + + useEffect(() => { + if (window.Tabler && window.Tabler.Modal && modalRef.current) { + const modalInstance = window.Tabler.Modal.getOrCreateInstance(modalRef.current); + if (show) { + modalInstance.show(); + } else { + modalInstance.hide(); + } + const handler = () => onClose && onClose(); + modalRef.current.addEventListener('hide.bs.modal', handler); + return () => { + modalRef.current.removeEventListener('hide.bs.modal', handler); + }; + } + }, [show, onClose]); + + return ( +
+
+
+
+
+ +
Подтверждение удаления
+ +
+
+

Вы уверены, что хотите удалить сервер {server?.ip}?

+

Это действие нельзя отменить.

+
+
+ +