From 312c442d7c9325fcead6ae4f3968138ba9870d3b Mon Sep 17 00:00:00 2001 From: shats Date: Sat, 6 Dec 2025 21:51:16 +0700 Subject: [PATCH] refactor: Update FilterManager to improve query parameter handling and server selection logic, enhancing user experience with more precise state management. --- frontend/src/FilterManager.jsx | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/frontend/src/FilterManager.jsx b/frontend/src/FilterManager.jsx index ccfe8da..9bf9c18 100644 --- a/frontend/src/FilterManager.jsx +++ b/frontend/src/FilterManager.jsx @@ -70,29 +70,34 @@ function FilterManager() { const [sortBy, setSortBy] = useState('community'); // community | gateway | description const [sortDir, setSortDir] = useState('asc'); // asc | desc - // Префилл из query (?community=..., ?serverId=..., ?server=...) и автоселект сервера - const prefillAppliedRef = useRef(false); + // Префилл из query (?community=..., ?serverId=..., ?server=...) без автоселекта по умолчанию + const queryParamsRef = useRef({ community: null, serverId: null, serverName: null }); + const serverPrefillDoneRef = useRef(false); + + // Сохраняем query-параметры один раз и заполняем поиск useEffect(() => { - if (prefillAppliedRef.current) return; const params = new URLSearchParams(window.location.search); const communityFromQuery = params.get('community'); const serverIdFromQuery = params.get('serverId'); const serverNameFromQuery = params.get('server'); - + queryParamsRef.current = { community: communityFromQuery, serverId: serverIdFromQuery, serverName: serverNameFromQuery }; if (communityFromQuery) { setFilterSearch(communityFromQuery); } + }, []); - if (servers.length > 0) { - let target = - (serverIdFromQuery && servers.find((s) => s.id === serverIdFromQuery)) || - (serverNameFromQuery && servers.find((s) => s.name === serverNameFromQuery)) || - servers.find((s) => s.enabled) || - servers[0]; - if (target) { - setSelectedServer(target); - } - prefillAppliedRef.current = true; + // Если в ссылке указан конкретный сервер — выбираем его после загрузки списка + useEffect(() => { + if (serverPrefillDoneRef.current) return; + const { serverId, serverName } = queryParamsRef.current; + if (!serverId && !serverName) return; + if (!servers.length) return; + const target = + (serverId && servers.find((s) => s.id === serverId)) || + (serverName && servers.find((s) => s.name === serverName)); + if (target) { + setSelectedServer(target); + serverPrefillDoneRef.current = true; } }, [servers]);