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.
This commit is contained in:
@@ -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 @@
|
||||
<AliasFilterSelect
|
||||
availableAliases={availableAliases}
|
||||
bind:value={aliasFilter}
|
||||
onValueChange={(next) => {
|
||||
aliasFilter = next;
|
||||
void applyAliasIfChanged(next);
|
||||
}}
|
||||
onValueChange={(next) => void handleAliasFilterChange(next)}
|
||||
/>
|
||||
<FleetRefreshInput bind:value={refreshInput} onValueChange={() => void applyControls()} />
|
||||
</div>
|
||||
|
||||
@@ -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 = [];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user