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
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 2m0s
This commit is contained in:
@@ -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]);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user