From 834eeb7fc8acffa9b3a7674e32fd41320b51f3c8 Mon Sep 17 00:00:00 2001 From: Denis Shatskiy Date: Mon, 7 Jul 2025 13:56:04 +0700 Subject: [PATCH] Enhance domain management: Add editing and bulk update features for domain types --- frontend/src/App.jsx | 93 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 4 deletions(-) diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 35b04ca..4ca5db5 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -12,6 +12,10 @@ function App() { const [error, setError] = useState('') const [success, setSuccess] = useState('') const [searchTerm, setSearchTerm] = useState('') + const [editingIndex, setEditingIndex] = useState(null) + const [editingValue, setEditingValue] = useState('') + const [bulkFrom, setBulkFrom] = useState('SharkFIN') + const [bulkTo, setBulkTo] = useState('SharkAM') useEffect(() => { fetchDomains() @@ -37,6 +41,22 @@ function App() { setNewDomain({ domain: '', type: 'SharkFIN' }) } + const handleEdit = (index) => { + setEditingIndex(index) + setEditingValue(domains[index].type) + } + + const handleSaveEdit = (index) => { + const updatedDomains = [...domains] + updatedDomains[index].type = editingValue + setDomains(updatedDomains) + setEditingIndex(null) + } + + const handleCancelEdit = () => { + setEditingIndex(null) + } + const handleDeleteDomain = (index) => { setDomains(domains.filter((_, i) => i !== index)) } @@ -52,6 +72,21 @@ function App() { } } + const handleBulkUpdate = () => { + if (!bulkFrom || !bulkTo) { + setError('Оба поля для массового обновления должны быть заполнены.') + return + } + const confirm = window.confirm(`Вы уверены, что хотите заменить все шлюзы "${bulkFrom}" на "${bulkTo}"? Это действие необратимо.`) + if (confirm) { + const updatedDomains = domains.map(d => + d.type === bulkFrom ? { ...d, type: bulkTo } : d + ) + setDomains(updatedDomains) + setSuccess(`Шлюзы "${bulkFrom}" были успешно заменены на "${bulkTo}". Не забудьте сохранить изменения.`) + } + } + const filteredDomains = domains.filter(d => d.domain.toLowerCase().includes(searchTerm.toLowerCase()) ) @@ -108,6 +143,29 @@ function App() { + + Массовое обновление шлюзов + + + + + Заменить с + setBulkFrom(e.target.value)} /> + + + + + Заменить на + setBulkTo(e.target.value)} /> + + + + + + + + +
@@ -139,11 +197,38 @@ function App() { {index + 1} {d.domain} - {d.type} + + {editingIndex === index ? ( + setEditingValue(e.target.value)} + autoFocus + /> + ) : ( + d.type + )} + - + {editingIndex === index ? ( + <> + + + + ) : ( + <> + + + + )} ))}