From 82fb2404a2503588b7fa54e271c727e40c56d15a Mon Sep 17 00:00:00 2001 From: shats Date: Wed, 27 Aug 2025 15:16:11 +0700 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B8=D0=BD=D0=B8=D1=86=D0=B8=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8E=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83?= =?UTF-8?q?=D0=B7=D0=BA=D0=B8=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20?= =?UTF-8?q?=D0=B2=20=D0=BC=D0=B5=D0=BD=D0=B5=D0=B4=D0=B6=D0=B5=D1=80=D1=8B?= =?UTF-8?q?=20ASNs,=20Domains=20=D0=B8=20IPRanges,=20=D1=83=D0=BB=D1=83?= =?UTF-8?q?=D1=87=D1=88=D0=B8=D1=82=D1=8C=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D1=83=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=81=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=D0=BC=20=D1=82=D0=B0=D0=B9=D0=BC?= =?UTF-8?q?=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/ASNsNewManager.jsx | 7 +++---- frontend/src/DomainsNewManager.jsx | 7 +++---- frontend/src/IPRangesManager.jsx | 7 +++---- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/frontend/src/ASNsNewManager.jsx b/frontend/src/ASNsNewManager.jsx index eba577c..b17aebf 100644 --- a/frontend/src/ASNsNewManager.jsx +++ b/frontend/src/ASNsNewManager.jsx @@ -40,6 +40,7 @@ function ASNsNewManager() { const [success, setSuccess] = useState(''); const [searchTerm, setSearchTerm] = useState(''); const searchTimer = useRef(null); + const didInit = useRef(false); const [editingAsn, setEditingAsn] = useState(null); const [editingValue, setEditingValue] = useState(''); const [loading, setLoading] = useState(false); @@ -95,7 +96,6 @@ function ASNsNewManager() { }; acquire(); const interval = setInterval(acquire, 60_000); - fetchItems(); // Load WS URL once (async () => { try { const r = await api.get('/ws/url'); setWsUrl(String(r.data?.url || '')); } catch {} @@ -131,10 +131,9 @@ function ASNsNewManager() { }; useEffect(() => { + if (!didInit.current) { didInit.current = true; fetchItems(); return; } if (searchTimer.current) clearTimeout(searchTimer.current); - searchTimer.current = setTimeout(() => { - fetchItems(); - }, 350); + searchTimer.current = setTimeout(() => { fetchItems(); }, 350); return () => { if (searchTimer.current) clearTimeout(searchTimer.current); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [currentPage, searchTerm, filterCommunity]); diff --git a/frontend/src/DomainsNewManager.jsx b/frontend/src/DomainsNewManager.jsx index 4b971c9..fba01bf 100644 --- a/frontend/src/DomainsNewManager.jsx +++ b/frontend/src/DomainsNewManager.jsx @@ -40,6 +40,7 @@ function DomainsNewManager() { const [success, setSuccess] = useState(''); const [searchTerm, setSearchTerm] = useState(''); const searchTimer = useRef(null); + const didInit = useRef(false); const [editingDomain, setEditingDomain] = useState(null); const [editingValue, setEditingValue] = useState(''); const [loading, setLoading] = useState(false); @@ -100,7 +101,6 @@ function DomainsNewManager() { }; acquire(); const interval = setInterval(acquire, 60_000); - fetchItems(); (async () => { try { const r = await api.get('/ws/url'); setWsUrl(String(r.data?.url || '')); } catch {} })(); return () => { clearInterval(interval); @@ -133,10 +133,9 @@ function DomainsNewManager() { // Подгрузка при изменении страницы/поиска/фильтра useEffect(() => { + if (!didInit.current) { didInit.current = true; fetchItems(); return; } if (searchTimer.current) clearTimeout(searchTimer.current); - searchTimer.current = setTimeout(() => { - fetchItems(); - }, 350); + searchTimer.current = setTimeout(() => { fetchItems(); }, 350); return () => { if (searchTimer.current) clearTimeout(searchTimer.current); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [currentPage, searchTerm, filterCommunity]); diff --git a/frontend/src/IPRangesManager.jsx b/frontend/src/IPRangesManager.jsx index 18595fb..c6690c8 100644 --- a/frontend/src/IPRangesManager.jsx +++ b/frontend/src/IPRangesManager.jsx @@ -40,6 +40,7 @@ function IPRangesManager() { const [success, setSuccess] = useState(''); const [searchTerm, setSearchTerm] = useState(''); const searchTimer = useRef(null); + const didInit = useRef(false); const [editingIp, setEditingIp] = useState(null); const [editingValue, setEditingValue] = useState(''); const [loading, setLoading] = useState(false); @@ -111,7 +112,6 @@ function IPRangesManager() { }; acquire(); const interval = setInterval(acquire, 60_000); - fetchItems(); (async () => { try { const r = await api.get('/ws/url'); setWsUrl(String(r.data?.url || '')); } catch {} })(); return () => { clearInterval(interval); @@ -143,10 +143,9 @@ function IPRangesManager() { }; useEffect(() => { + if (!didInit.current) { didInit.current = true; fetchItems(); return; } if (searchTimer.current) clearTimeout(searchTimer.current); - searchTimer.current = setTimeout(() => { - fetchItems(); - }, 350); + searchTimer.current = setTimeout(() => { fetchItems(); }, 350); return () => { if (searchTimer.current) clearTimeout(searchTimer.current); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [currentPage, searchTerm, filterCommunity]);