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 = []; }