From af373312843a32d3d5f9c65a6729bee31e70de2b Mon Sep 17 00:00:00 2001 From: Denozordec Date: Fri, 10 Apr 2026 15:51:15 +0700 Subject: [PATCH] Enhance alias filter functionality and improve data handling in Svelte components - Updated the alias filter logic to prevent selected aliases from disappearing during partial or empty responses. - Refactored the alias filter change handling to a dedicated function for better readability and maintainability. - Removed redundant alias filter validation in the users page to streamline the alias selection process. --- web/src/routes/+page.svelte | 17 ++++++++++++----- web/src/routes/users/+page.svelte | 1 - 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/web/src/routes/+page.svelte b/web/src/routes/+page.svelte index 93b1cd6..94ccec2 100644 --- a/web/src/routes/+page.svelte +++ b/web/src/routes/+page.svelte @@ -138,10 +138,15 @@ summary = s.data; fleet = f.data ?? null; uniqueIps = u.data ?? null; - availableAliases = collectAliases( + const nextAliases = collectAliases( (fleet?.servers ?? []).map((x) => x.alias), (summary?.servers ?? []).map((x) => x.alias) ); + // Не сужаем список до текущего фильтра: иначе выбранный alias + // может исчезать из селекта при частичных/пустых ответах. + availableAliases = Array.from(new Set([...availableAliases, ...nextAliases])).sort((a, b) => + a.localeCompare(b) + ); lastSuccessAtMs = Date.now(); // Как бейдж «OK» в таблице: только health + system/info (без x.ok — в JSON поле ok опционально). @@ -230,6 +235,11 @@ await load(); } +async function handleAliasFilterChange(nextAlias: string) { + aliasFilter = nextAlias; + await applyAliasIfChanged(nextAlias); +} + let queryKey = $derived(page.url.searchParams.toString()); $effect(() => { queryKey; @@ -526,10 +536,7 @@ { - aliasFilter = next; - void applyAliasIfChanged(next); - }} + onValueChange={(next) => void handleAliasFilterChange(next)} /> void applyControls()} /> diff --git a/web/src/routes/users/+page.svelte b/web/src/routes/users/+page.svelte index cbc3738..c86bbde 100644 --- a/web/src/routes/users/+page.svelte +++ b/web/src/routes/users/+page.svelte @@ -172,7 +172,6 @@ .filter((a): a is string => typeof a === 'string' && a.length > 0) .sort((a, b) => a.localeCompare(b)); availableAliases = aliases; - if (aliasFilter !== 'all' && !aliases.includes(aliasFilter)) aliasFilter = 'all'; } catch { availableAliases = []; }