Skip to content

Commit 8841368

Browse files
committed
next: improved column selection user interface
1 parent 4e22483 commit 8841368

File tree

1 file changed

+22
-27
lines changed

1 file changed

+22
-27
lines changed

src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/data-table/data-table-column-header.svelte

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,56 +11,51 @@
1111
import { cn } from '$lib/utils';
1212
import IconArrowDownward from '~icons/mdi/arrow-downward';
1313
import IconArrowUpward from '~icons/mdi/arrow-upward';
14+
import IconEyeOff from '~icons/mdi/eye-off-outline';
1415
import IconUnfoldMore from '~icons/mdi/unfold-more-horizontal';
1516
16-
type Props = HTMLAttributes<Element> & {
17+
type Props = HTMLAttributes<HTMLDivElement> & {
1718
column: Column<TData, unknown>;
1819
};
1920
20-
let { children, class: className, column }: Props = $props();
21-
22-
function handleAscSort(e: Event) {
23-
if (column.getIsSorted() === 'asc') {
24-
return;
25-
}
26-
27-
column.getToggleSortingHandler()?.(e);
28-
}
29-
30-
function handleDescSort(e: Event) {
31-
if (column.getIsSorted() === 'desc') {
32-
return;
33-
}
34-
35-
column.getToggleSortingHandler()?.(e);
36-
}
21+
let { children, class: className, column, ...restProps }: Props = $props();
3722
</script>
3823

3924
{#if column.getCanSort()}
40-
<div class={cn('flex items-center', className)}>
25+
<div class={cn('flex items-center', className)} {...restProps}>
4126
<DropdownMenu.Root>
4227
<DropdownMenu.Trigger>
43-
{#snippet children()}
44-
<Button class="-ml-3 h-8 data-[state=open]:bg-accent" variant="ghost">
28+
{#snippet child({ props })}
29+
<Button class="-ml-3 h-8 data-[state=open]:bg-accent" variant="ghost" {...props}>
4530
{#if children}
4631
{@render children()}
4732
{/if}
4833
{#if column.getIsSorted() === 'desc'}
49-
<IconArrowDownward class="ml-2 h-4 w-4" />
34+
<IconArrowDownward />
5035
{:else if column.getIsSorted() === 'asc'}
51-
<IconArrowUpward class="ml-2 h-4 w-4" />
36+
<IconArrowUpward />
5237
{:else}
53-
<IconUnfoldMore class="ml-2 h-4 w-4" />
38+
<IconUnfoldMore />
5439
{/if}
5540
</Button>
5641
{/snippet}
5742
</DropdownMenu.Trigger>
5843
<DropdownMenu.Content align="start">
59-
<DropdownMenu.Item onclick={handleAscSort}>Asc</DropdownMenu.Item>
60-
<DropdownMenu.Item onclick={handleDescSort}>Desc</DropdownMenu.Item>
44+
<DropdownMenu.Item onclick={() => column.toggleSorting(false)}
45+
><IconArrowUpward class="mr-2 size-3.5 text-muted-foreground/70" />Asc</DropdownMenu.Item
46+
>
47+
<DropdownMenu.Item onclick={() => column.toggleSorting(true)}
48+
><IconArrowDownward class="mr-2 size-3.5 text-muted-foreground/70" />Desc</DropdownMenu.Item
49+
>
50+
<DropdownMenu.Separator />
51+
<DropdownMenu.Item onclick={() => column.toggleVisibility(false)}
52+
><IconEyeOff class="mr-2 size-3.5 text-muted-foreground/70" />Hide</DropdownMenu.Item
53+
>
6154
</DropdownMenu.Content>
6255
</DropdownMenu.Root>
6356
</div>
6457
{:else if children}
65-
{@render children()}
58+
<div class={className} {...restProps}>
59+
{@render children()}
60+
</div>
6661
{/if}

0 commit comments

Comments
 (0)