Enhance alias filter select component and integrate value change handling
Publish telemt-api gateway Docker image / test (push) Successful in 25s
Publish telemt-api gateway Docker image / build-and-push (push) Successful in 2m20s

- Added an `onValueChange` callback to the alias filter select component for improved event handling.
- Updated the component's logic to normalize the selected value and trigger the callback on changes.
- Implemented the alias filter change handling in the IPs and users pages to apply changes effectively.
This commit is contained in:
Denozordec
2026-04-10 14:57:35 +07:00
parent 9db5a1e97c
commit 7ae3c5a806
3 changed files with 34 additions and 4 deletions
@@ -5,12 +5,14 @@
availableAliases = [], availableAliases = [],
value = $bindable("all"), value = $bindable("all"),
label = "Alias", label = "Alias",
allLabel = "All nodes" allLabel = "All nodes",
onValueChange
}: { }: {
availableAliases: string[]; availableAliases: string[];
value?: string; value?: string;
label?: string; label?: string;
allLabel?: string; allLabel?: string;
onValueChange?: (next: string) => void;
} = $props(); } = $props();
$effect(() => { $effect(() => {
@@ -25,7 +27,15 @@
<label class="text-xs text-muted-foreground"> <label class="text-xs text-muted-foreground">
{label} {label}
<Select.Root type="single" bind:value> <Select.Root
type="single"
bind:value
onValueChange={(next) => {
const normalized = Array.isArray(next) ? String(next[0] ?? "all") : String(next ?? "all");
value = normalized;
onValueChange?.(normalized);
}}
>
<Select.Trigger class="mt-1 w-[220px]"> <Select.Trigger class="mt-1 w-[220px]">
{selectedLabel} {selectedLabel}
</Select.Trigger> </Select.Trigger>
+11 -1
View File
@@ -454,6 +454,12 @@ $effect(() => {
await load(); await load();
} }
async function handleAliasFilterChange(nextAlias: string) {
if (nextAlias === aliasFilter) return;
aliasFilter = nextAlias;
await applyAliasIfChanged(nextAlias);
}
let queryKey = $derived(page.url.searchParams.toString()); let queryKey = $derived(page.url.searchParams.toString());
$effect(() => { $effect(() => {
queryKey; queryKey;
@@ -535,7 +541,11 @@ $effect(() => {
</div> </div>
<div class="mb-4 flex flex-wrap items-end gap-2"> <div class="mb-4 flex flex-wrap items-end gap-2">
<AliasFilterSelect availableAliases={availableAliases} bind:value={aliasFilter} /> <AliasFilterSelect
availableAliases={availableAliases}
bind:value={aliasFilter}
onValueChange={(next) => void handleAliasFilterChange(next)}
/>
<FleetRefreshInput bind:value={refreshInput} onValueChange={() => void applyControls()} /> <FleetRefreshInput bind:value={refreshInput} onValueChange={() => void applyControls()} />
</div> </div>
+11 -1
View File
@@ -134,6 +134,12 @@
await load(); await load();
} }
async function handleAliasFilterChange(nextAlias: string) {
if (nextAlias === aliasFilter) return;
aliasFilter = nextAlias;
await applyAliasIfChanged(nextAlias);
}
let queryKey = $derived(page.url.searchParams.toString()); let queryKey = $derived(page.url.searchParams.toString());
$effect(() => { $effect(() => {
queryKey; queryKey;
@@ -381,7 +387,11 @@ let sumActiveIps = $derived.by(() =>
</div> </div>
<div class="mb-4 flex flex-wrap items-end gap-2"> <div class="mb-4 flex flex-wrap items-end gap-2">
<AliasFilterSelect availableAliases={availableAliases} bind:value={aliasFilter} /> <AliasFilterSelect
availableAliases={availableAliases}
bind:value={aliasFilter}
onValueChange={(next) => void handleAliasFilterChange(next)}
/>
<FleetRefreshInput bind:value={refreshInput} onValueChange={() => void applyControls()} /> <FleetRefreshInput bind:value={refreshInput} onValueChange={() => void applyControls()} />
</div> </div>