Skip to content

Commit 17eeaf6

Browse files
committed
Refactors faceted filter apply logic
Removes the apply button from the faceted filter actions and instead applies the filter when the popover closes. This change simplifies the user experience by automatically applying the filter when the user closes the popover, rather than requiring an additional click.
1 parent 7875bb0 commit 17eeaf6

File tree

8 files changed

+62
-68
lines changed

8 files changed

+62
-68
lines changed

src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/faceted-filter/faceted-filter-actions.svelte

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,18 @@
22
import * as Command from '$comp/ui/command';
33
44
interface Props {
5-
apply: () => void;
65
clear: () => void;
76
close: () => void;
87
remove: () => void;
9-
showApply: boolean;
108
showClear: boolean;
119
}
1210
13-
let { apply, clear, close, remove, showApply, showClear }: Props = $props();
11+
let { clear, close, remove, showClear }: Props = $props();
1412
</script>
1513

1614
<Command.Root>
1715
<Command.List>
1816
<Command.Separator />
19-
{#if showApply}
20-
<Command.Item class="text-primary justify-center text-center font-bold" onSelect={apply}>Apply filter</Command.Item>
21-
<Command.Separator />
22-
{/if}
2317
{#if showClear}
2418
<Command.Item class="justify-center text-center" onSelect={clear}>Clear filter</Command.Item>
2519
{/if}

src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/faceted-filter/faceted-filter-boolean.svelte

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,26 @@
2121
updatedValue = value;
2222
});
2323
24-
function onApplyFilter() {
24+
function onClose() {
2525
if (updatedValue !== value) {
2626
changed(updatedValue);
2727
}
2828
2929
open = false;
3030
}
3131
32+
function onOpenChange(isOpen: boolean) {
33+
if (!isOpen) {
34+
onClose();
35+
}
36+
}
37+
3238
export function onClearFilter() {
3339
updatedValue = undefined;
3440
}
3541
</script>
3642

37-
<Popover.Root bind:open>
43+
<Popover.Root bind:open {onOpenChange}>
3844
<Popover.Trigger>
3945
<Button class="gap-x-1 px-3" size="lg" variant="outline">
4046
{title}
@@ -50,13 +56,6 @@
5056
<div class="flex items-center border-b">
5157
<Input bind:value={updatedValue} placeholder={title} type="boolean" />
5258
</div>
53-
<FacetedFilter.Actions
54-
apply={onApplyFilter}
55-
clear={onClearFilter}
56-
close={() => (open = false)}
57-
{remove}
58-
showApply={updatedValue !== value}
59-
showClear={updatedValue !== undefined}
60-
></FacetedFilter.Actions>
59+
<FacetedFilter.Actions clear={onClearFilter} close={onClose} {remove} showClear={updatedValue !== undefined} />
6160
</Popover.Content>
6261
</Popover.Root>

src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/faceted-filter/faceted-filter-builder.svelte

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,15 @@
9191
function onClose() {
9292
open = false;
9393
}
94+
95+
function onOpenChange(isOpen: boolean) {
96+
if (!isOpen) {
97+
onClose();
98+
}
99+
}
94100
</script>
95101

96-
<Popover.Root bind:open>
102+
<Popover.Root bind:open {onOpenChange}>
97103
<Popover.Trigger>
98104
<Button class="gap-x-1 px-3" size="lg" variant="outline">
99105
<Circle class="mr-2 size-4" /> Filter

src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/faceted-filter/faceted-filter-drop-down.svelte

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,20 @@
3232
updatedValue = value;
3333
});
3434
35-
function onApplyFilter() {
35+
function onClose() {
3636
if (updatedValue !== value) {
3737
changed(updatedValue);
3838
}
3939
4040
open = false;
4141
}
4242
43+
function onOpenChange(isOpen: boolean) {
44+
if (!isOpen) {
45+
onClose();
46+
}
47+
}
48+
4349
export function onValueSelected(currentValue: string) {
4450
if (updatedValue === currentValue) {
4551
updatedValue = undefined;
@@ -70,7 +76,7 @@
7076
}
7177
</script>
7278

73-
<Popover.Root bind:open>
79+
<Popover.Root bind:open {onOpenChange}>
7480
<Popover.Trigger>
7581
<Button class="gap-x-1 px-3" size="lg" variant="outline">
7682
{title}
@@ -114,13 +120,6 @@
114120
</Command.Group>{/if}
115121
</Command.List>
116122
</Command.Root>
117-
<FacetedFilter.Actions
118-
apply={onApplyFilter}
119-
clear={onClearFilter}
120-
close={() => (open = false)}
121-
{remove}
122-
showApply={updatedValue !== value}
123-
showClear={!!updatedValue?.trim()}
124-
></FacetedFilter.Actions>
123+
<FacetedFilter.Actions clear={onClearFilter} close={onClose} {remove} showClear={!!updatedValue?.trim()} />
125124
</Popover.Content>
126125
</Popover.Root>

src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/faceted-filter/faceted-filter-keyword.svelte

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,26 @@
2121
updatedValue = value;
2222
});
2323
24-
function onApplyFilter() {
24+
function onClose() {
2525
if (updatedValue !== value) {
2626
changed(updatedValue);
2727
}
2828
2929
open = false;
3030
}
3131
32+
function onOpenChange(isOpen: boolean) {
33+
if (!isOpen) {
34+
onClose();
35+
}
36+
}
37+
3238
export function onClearFilter() {
3339
updatedValue = undefined;
3440
}
3541
</script>
3642

37-
<Popover.Root bind:open>
43+
<Popover.Root bind:open {onOpenChange}>
3844
<Popover.Trigger>
3945
<Button class="gap-x-1 px-3" size="lg" variant="outline">
4046
{title}
@@ -50,13 +56,6 @@
5056
<div class="flex items-center border-b">
5157
<Input bind:value={updatedValue} placeholder={title} type="text" />
5258
</div>
53-
<FacetedFilter.Actions
54-
apply={onApplyFilter}
55-
clear={onClearFilter}
56-
close={() => (open = false)}
57-
{remove}
58-
showApply={updatedValue !== value}
59-
showClear={!!updatedValue?.trim()}
60-
></FacetedFilter.Actions>
59+
<FacetedFilter.Actions clear={onClearFilter} close={onClose} {remove} showClear={!!updatedValue?.trim()} />
6160
</Popover.Content>
6261
</Popover.Root>

src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/faceted-filter/faceted-filter-multi-select.svelte

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,20 @@
3939
4040
const hasChanged = $derived(updatedValues.length !== values.length || updatedValues.some((value) => !values.includes(value)));
4141
42-
function onApplyFilter() {
42+
function onClose() {
4343
if (hasChanged) {
4444
changed(updatedValues);
4545
}
4646
4747
open = false;
4848
}
4949
50+
function onOpenChange(isOpen: boolean) {
51+
if (!isOpen) {
52+
onClose();
53+
}
54+
}
55+
5056
export function onValueSelected(currentValue: string) {
5157
updatedValues = updatedValues.includes(currentValue) ? updatedValues.filter((v) => v !== currentValue) : [...updatedValues, currentValue];
5258
}
@@ -69,7 +75,7 @@
6975
}
7076
</script>
7177

72-
<Popover.Root bind:open>
78+
<Popover.Root bind:open {onOpenChange}>
7379
<Popover.Trigger>
7480
<Button class="gap-x-1 px-3" size="lg" variant="outline">
7581
{title}
@@ -118,13 +124,6 @@
118124
{/if}
119125
</Command.List>
120126
</Command.Root>
121-
<FacetedFilter.Actions
122-
apply={onApplyFilter}
123-
clear={onClearFilter}
124-
close={() => (open = false)}
125-
{remove}
126-
showApply={hasChanged}
127-
showClear={updatedValues.length > 0}
128-
></FacetedFilter.Actions>
127+
<FacetedFilter.Actions clear={onClearFilter} close={onClose} {remove} showClear={updatedValues.length > 0} />
129128
</Popover.Content>
130129
</Popover.Root>

src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/faceted-filter/faceted-filter-number.svelte

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,26 @@
2121
updatedValue = value;
2222
});
2323
24-
function onApplyFilter() {
24+
function onClose() {
2525
if (updatedValue !== value) {
2626
changed(updatedValue);
2727
}
2828
2929
open = false;
3030
}
3131
32+
function onOpenChange(isOpen: boolean) {
33+
if (!isOpen) {
34+
onClose();
35+
}
36+
}
37+
3238
export function onClearFilter() {
3339
updatedValue = undefined;
3440
}
3541
</script>
3642

37-
<Popover.Root bind:open>
43+
<Popover.Root bind:open {onOpenChange}>
3844
<Popover.Trigger>
3945
<Button class="gap-x-1 px-3" size="lg" variant="outline">
4046
{title}
@@ -50,13 +56,6 @@
5056
<div class="flex items-center border-b">
5157
<Input bind:value={updatedValue} placeholder={title} type="number" />
5258
</div>
53-
<FacetedFilter.Actions
54-
apply={onApplyFilter}
55-
clear={onClearFilter}
56-
close={() => (open = false)}
57-
{remove}
58-
showApply={updatedValue !== value}
59-
showClear={updatedValue !== undefined}
60-
></FacetedFilter.Actions>
59+
<FacetedFilter.Actions clear={onClearFilter} close={onClose} {remove} showClear={updatedValue !== undefined} />
6160
</Popover.Content>
6261
</Popover.Root>

src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/faceted-filter/faceted-filter-string.svelte

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,26 @@
2121
updatedValue = value;
2222
});
2323
24-
function onApplyFilter() {
24+
function onClose() {
2525
if (updatedValue !== value) {
2626
changed(updatedValue);
2727
}
2828
2929
open = false;
3030
}
3131
32+
function onOpenChange(isOpen: boolean) {
33+
if (!isOpen) {
34+
onClose();
35+
}
36+
}
37+
3238
export function onClearFilter() {
3339
updatedValue = undefined;
3440
}
3541
</script>
3642

37-
<Popover.Root bind:open>
43+
<Popover.Root bind:open {onOpenChange}>
3844
<Popover.Trigger>
3945
<Button class="gap-x-1 px-3" size="lg" variant="outline">
4046
{title}
@@ -50,13 +56,6 @@
5056
<div class="flex items-center border-b">
5157
<Input bind:value={updatedValue} placeholder={title} type="text" />
5258
</div>
53-
<FacetedFilter.Actions
54-
apply={onApplyFilter}
55-
clear={onClearFilter}
56-
close={() => (open = false)}
57-
{remove}
58-
showApply={updatedValue !== value}
59-
showClear={!!updatedValue?.trim()}
60-
></FacetedFilter.Actions>
59+
<FacetedFilter.Actions clear={onClearFilter} close={onClose} {remove} showClear={!!updatedValue?.trim()} />
6160
</Popover.Content>
6261
</Popover.Root>

0 commit comments

Comments
 (0)