Enhance alias filter select component and integrate value change handling
- 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:
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user