refactor: Update FilterManager to improve query parameter handling and server selection logic, enhancing user experience with more precise state management.
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 2m0s

This commit is contained in:
2025-12-06 21:51:16 +07:00
parent 1566d3f998
commit 312c442d7c
+17 -12
View File
@@ -70,29 +70,34 @@ function FilterManager() {
const [sortBy, setSortBy] = useState('community'); // community | gateway | description const [sortBy, setSortBy] = useState('community'); // community | gateway | description
const [sortDir, setSortDir] = useState('asc'); // asc | desc const [sortDir, setSortDir] = useState('asc'); // asc | desc
// Префилл из query (?community=..., ?serverId=..., ?server=...) и автоселект сервера // Префилл из query (?community=..., ?serverId=..., ?server=...) без автоселекта по умолчанию
const prefillAppliedRef = useRef(false); const queryParamsRef = useRef({ community: null, serverId: null, serverName: null });
const serverPrefillDoneRef = useRef(false);
// Сохраняем query-параметры один раз и заполняем поиск
useEffect(() => { useEffect(() => {
if (prefillAppliedRef.current) return;
const params = new URLSearchParams(window.location.search); const params = new URLSearchParams(window.location.search);
const communityFromQuery = params.get('community'); const communityFromQuery = params.get('community');
const serverIdFromQuery = params.get('serverId'); const serverIdFromQuery = params.get('serverId');
const serverNameFromQuery = params.get('server'); const serverNameFromQuery = params.get('server');
queryParamsRef.current = { community: communityFromQuery, serverId: serverIdFromQuery, serverName: serverNameFromQuery };
if (communityFromQuery) { if (communityFromQuery) {
setFilterSearch(communityFromQuery); setFilterSearch(communityFromQuery);
} }
}, []);
if (servers.length > 0) { // Если в ссылке указан конкретный сервер — выбираем его после загрузки списка
let target = useEffect(() => {
(serverIdFromQuery && servers.find((s) => s.id === serverIdFromQuery)) || if (serverPrefillDoneRef.current) return;
(serverNameFromQuery && servers.find((s) => s.name === serverNameFromQuery)) || const { serverId, serverName } = queryParamsRef.current;
servers.find((s) => s.enabled) || if (!serverId && !serverName) return;
servers[0]; if (!servers.length) return;
const target =
(serverId && servers.find((s) => s.id === serverId)) ||
(serverName && servers.find((s) => s.name === serverName));
if (target) { if (target) {
setSelectedServer(target); setSelectedServer(target);
} serverPrefillDoneRef.current = true;
prefillAppliedRef.current = true;
} }
}, [servers]); }, [servers]);