Skip to content

Commit 6e1d3d3

Browse files
committed
Added close to filters, only apply change on apply, open filters on add.
1 parent 8c97da5 commit 6e1d3d3

23 files changed

+233
-129
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@
1919
<Command.Item class="justify-center text-center" onSelect={() => dispatch('clear')}>Clear filter</Command.Item>
2020
{/if}
2121
<Command.Item class="justify-center text-center" onSelect={() => dispatch('remove')}>Remove filter</Command.Item>
22+
<Command.Item class="justify-center text-center" onSelect={() => dispatch('close')}>Close</Command.Item>
2223
</Command.List>
2324
</Command.Root>

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,16 @@
2323
});
2424
2525
function onFacetSelected(facet: FacetedFilter) {
26+
$facets.forEach((f) => f.open.set(false));
27+
2628
if (visible.includes(facet.filter.key)) {
2729
toast.error(`Only one ${facet.title} filter can be applied at a time.`);
2830
} else {
2931
visible = [...visible, facet.filter.key];
3032
}
33+
34+
open = false;
35+
facet.open.set(true);
3136
}
3237
3338
function onChanged({ detail }: CustomEvent<IFilter>) {
@@ -57,6 +62,10 @@
5762
$facets.forEach((facet) => facet.filter.reset());
5863
dispatch('remove');
5964
}
65+
66+
function onClose() {
67+
open = false;
68+
}
6069
</script>
6170

6271
<Popover.Root bind:open>
@@ -75,17 +84,22 @@
7584
<Command.Item value={facet.filter.key} onSelect={() => onFacetSelected(facet)}>{facet.title}</Command.Item>
7685
{/each}
7786
</Command.Group>
87+
</Command.List>
88+
</Command.Root>
89+
<Command.Root>
90+
<Command.List>
91+
<Command.Separator />
7892
{#if visible.length > 0}
79-
<Command.Separator />
8093
<Command.Item class="justify-center text-center" onSelect={onRemoveAll}>Clear filters</Command.Item>
8194
{/if}
95+
<Command.Item class="justify-center text-center" onSelect={onClose}>Close</Command.Item>
8296
</Command.List>
8397
</Command.Root>
8498
</Popover.Content>
8599
</Popover.Root>
86100

87101
{#each $facets as facet (facet.filter.key)}
88102
{#if visible.includes(facet.filter.key)}
89-
<svelte:component this={facet.component} filter={facet.filter} title={facet.title} on:changed={onChanged} on:remove={onRemove} />
103+
<svelte:component this={facet.component} filter={facet.filter} title={facet.title} open={facet.open} on:changed={onChanged} on:remove={onRemove} />
90104
{/if}
91105
{/each}

src/Exceptionless.Web/ClientApp/src/lib/components/faceted-filter/index.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
import type { IFilter } from '$comp/filters/filters';
21
import type { ComponentType } from 'svelte';
2+
import type { Writable } from 'svelte/store';
3+
4+
import type { IFilter } from '$comp/filters/filters';
35

46
import Root from './faceted-filter-builder.svelte';
57
import Actions from './faceted-filter-actions.svelte';
@@ -8,7 +10,7 @@ import BadgeLoading from './faceted-filter-badge-loading.svelte';
810
import BadgeValue from './faceted-filter-badge-value.svelte';
911
import BadgeValues from './faceted-filter-badge-values.svelte';
1012

11-
export type FacetedFilter = { title: string; component: ComponentType; filter: IFilter };
13+
export type FacetedFilter = { title: string; component: ComponentType; filter: IFilter; open: Writable<boolean> };
1214

1315
export {
1416
Root,

src/Exceptionless.Web/ClientApp/src/lib/components/filters/facets/BooleanFacetedFilter.svelte

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
<script lang="ts">
22
import { createEventDispatcher } from 'svelte';
3+
import type { Writable } from 'svelte/store';
34
45
import { BooleanFilter } from '$comp/filters/filters';
56
import BooleanFacetedFilter from './base/BooleanFacetedFilter.svelte';
67
78
const dispatch = createEventDispatcher();
89
export let filter: BooleanFilter;
910
export let title: string;
11+
export let open: Writable<boolean>;
1012
1113
function onChanged() {
1214
dispatch('changed', filter);
@@ -17,4 +19,4 @@
1719
}
1820
</script>
1921

20-
<BooleanFacetedFilter {title} bind:value={filter.value} on:changed={onChanged} on:remove={onRemove}></BooleanFacetedFilter>
22+
<BooleanFacetedFilter {open} {title} bind:value={filter.value} on:changed={onChanged} on:remove={onRemove}></BooleanFacetedFilter>

src/Exceptionless.Web/ClientApp/src/lib/components/filters/facets/DateFacetedFilter.svelte

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
<script lang="ts">
22
import { createEventDispatcher } from 'svelte';
3+
import type { Writable } from 'svelte/store';
34
45
import { DateFilter } from '$comp/filters/filters';
56
import DropDownFacetedFilter from './base/DropDownFacetedFilter.svelte';
67
78
const dispatch = createEventDispatcher();
89
export let filter: DateFilter;
910
export let title: string = 'Date Range';
11+
export let open: Writable<boolean>;
1012
1113
const options = [
1214
{ value: 'last hour', label: 'Last Hour' },
@@ -44,4 +46,4 @@
4446
}
4547
</script>
4648

47-
<DropDownFacetedFilter {title} bind:value {options} on:changed={onChanged} on:remove={onRemove}></DropDownFacetedFilter>
49+
<DropDownFacetedFilter {open} {title} bind:value {options} on:changed={onChanged} on:remove={onRemove}></DropDownFacetedFilter>

src/Exceptionless.Web/ClientApp/src/lib/components/filters/facets/KeywordFacetedFilter.svelte

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
<script lang="ts">
22
import { createEventDispatcher } from 'svelte';
3+
import type { Writable } from 'svelte/store';
34
45
import { KeywordFilter } from '$comp/filters/filters';
56
import KeywordFacetedFilter from './base/KeywordFacetedFilter.svelte';
67
78
const dispatch = createEventDispatcher();
89
export let filter: KeywordFilter;
910
export let title: string = 'Keyword';
11+
export let open: Writable<boolean>;
1012
1113
function onChanged() {
1214
dispatch('changed', filter);
@@ -17,4 +19,4 @@
1719
}
1820
</script>
1921

20-
<KeywordFacetedFilter {title} bind:value={filter.value} on:changed={onChanged} on:remove={onRemove}></KeywordFacetedFilter>
22+
<KeywordFacetedFilter {open} {title} bind:value={filter.value} on:changed={onChanged} on:remove={onRemove}></KeywordFacetedFilter>

src/Exceptionless.Web/ClientApp/src/lib/components/filters/facets/NumberFacetedFilter.svelte

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
<script lang="ts">
22
import { createEventDispatcher } from 'svelte';
3+
import type { Writable } from 'svelte/store';
34
45
import { NumberFilter } from '$comp/filters/filters';
56
import NumberFacetedFilter from './base/NumberFacetedFilter.svelte';
67
78
const dispatch = createEventDispatcher();
89
export let filter: NumberFilter;
910
export let title: string;
11+
export let open: Writable<boolean>;
1012
1113
function onChanged() {
1214
dispatch('changed', filter);
@@ -17,4 +19,4 @@
1719
}
1820
</script>
1921

20-
<NumberFacetedFilter {title} bind:value={filter.value} on:changed={onChanged} on:remove={onRemove}></NumberFacetedFilter>
22+
<NumberFacetedFilter {open} {title} bind:value={filter.value} on:changed={onChanged} on:remove={onRemove}></NumberFacetedFilter>

src/Exceptionless.Web/ClientApp/src/lib/components/filters/facets/OrganizationFacetedFilter.svelte

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script lang="ts">
22
import { createEventDispatcher } from 'svelte';
3-
import { derived } from 'svelte/store';
3+
import { derived, type Writable } from 'svelte/store';
44
55
import { getOrganizationQuery } from '$api/organizationsApi';
66
import { OrganizationFilter } from '$comp/filters/filters';
@@ -9,6 +9,7 @@
99
const dispatch = createEventDispatcher();
1010
export let filter: OrganizationFilter;
1111
export let title: string = 'Status';
12+
export let open: Writable<boolean>;
1213
1314
const response = getOrganizationQuery();
1415
const options = derived(response, ($response) => {
@@ -41,5 +42,13 @@
4142
}
4243
</script>
4344

44-
<DropDownFacetedFilter {title} bind:value={filter.value} options={$options} loading={$response.isLoading} on:changed={onChanged} on:remove={onRemove}
45+
<DropDownFacetedFilter
46+
{open}
47+
{title}
48+
bind:value={filter.value}
49+
options={$options}
50+
loading={$response.isLoading}
51+
noOptionsText="No organizations found."
52+
on:changed={onChanged}
53+
on:remove={onRemove}
4554
></DropDownFacetedFilter>

src/Exceptionless.Web/ClientApp/src/lib/components/filters/facets/ProjectFacetedFilter.svelte

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script lang="ts">
22
import { createEventDispatcher } from 'svelte';
3-
import { derived, writable } from 'svelte/store';
3+
import { derived, writable, type Writable } from 'svelte/store';
44
55
import { getProjectsByOrganizationIdQuery } from '$api/projectsApi';
66
import { ProjectFilter } from '$comp/filters/filters';
@@ -9,6 +9,7 @@
99
const dispatch = createEventDispatcher();
1010
export let filter: ProjectFilter;
1111
export let title: string = 'Status';
12+
export let open: Writable<boolean>;
1213
1314
const organizationId = writable<string | null>(filter.organization ?? null);
1415
$: organizationId.set(filter.organization ?? null);
@@ -44,5 +45,13 @@
4445
}
4546
</script>
4647

47-
<MultiselectFacetedFilter {title} bind:values={filter.value} options={$options} loading={$response.isLoading} on:changed={onChanged} on:remove={onRemove}
48+
<MultiselectFacetedFilter
49+
{open}
50+
{title}
51+
bind:values={filter.value}
52+
options={$options}
53+
loading={$response.isLoading}
54+
noOptionsText="No projects found."
55+
on:changed={onChanged}
56+
on:remove={onRemove}
4857
></MultiselectFacetedFilter>

src/Exceptionless.Web/ClientApp/src/lib/components/filters/facets/ReferenceFacetedFilter.svelte

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
<script lang="ts">
22
import { createEventDispatcher } from 'svelte';
3+
import type { Writable } from 'svelte/store';
34
45
import { ReferenceFilter } from '$comp/filters/filters';
56
import StringFacetedFilter from './base/StringFacetedFilter.svelte';
67
78
const dispatch = createEventDispatcher();
89
export let filter: ReferenceFilter;
910
export let title: string = 'Reference';
11+
export let open: Writable<boolean>;
1012
1113
function onChanged() {
1214
dispatch('changed', filter);
@@ -17,4 +19,4 @@
1719
}
1820
</script>
1921

20-
<StringFacetedFilter {title} bind:value={filter.value} on:changed={onChanged} on:remove={onRemove}></StringFacetedFilter>
22+
<StringFacetedFilter {open} {title} bind:value={filter.value} on:changed={onChanged} on:remove={onRemove}></StringFacetedFilter>

0 commit comments

Comments
 (0)