Skip to content

Commit f49afbc

Browse files
committed
Added settings and project list to the sidebar.
1 parent 1ff0db8 commit f49afbc

File tree

1 file changed

+43
-1
lines changed
  • src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts

1 file changed

+43
-1
lines changed

src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/sidebar.svelte

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
import type { ComponentProps, Snippet } from 'svelte';
33
44
import { page } from '$app/state';
5+
import * as Collapsible from '$comp/ui/collapsible';
56
import * as Sidebar from '$comp/ui/sidebar';
67
import { useSidebar } from '$comp/ui/sidebar';
8+
import ChevronRight from '@lucide/svelte/icons/chevron-right';
9+
import Settings from '@lucide/svelte/icons/settings-2';
710
811
import type { NavigationItem } from '../../../routes.svelte';
912
@@ -14,7 +17,9 @@
1417
};
1518
1619
let { footer, header, routes, ...props }: Props = $props();
17-
const dashboardRoutes = routes.filter((route) => route.group === 'Dashboards');
20+
const dashboardRoutes = $derived(routes.filter((route) => route.group === 'Dashboards'));
21+
const settingsRoutes = $derived(routes.filter((route) => route.group === 'Settings'));
22+
const settingsIsActive = $derived(settingsRoutes.some((route) => route.href === page.url.pathname));
1823
1924
const sidebar = useSidebar();
2025
@@ -49,6 +54,43 @@
4954
{/each}
5055
</Sidebar.Menu>
5156
</Sidebar.Group>
57+
58+
{#if settingsRoutes.length > 0}
59+
<Sidebar.Group>
60+
<Sidebar.Menu>
61+
<Collapsible.Root open={settingsIsActive} class="group/collapsible">
62+
{#snippet child({ props })}
63+
<Sidebar.MenuItem {...props}>
64+
<Collapsible.Trigger>
65+
{#snippet child({ props })}
66+
<Sidebar.MenuButton {...props}>
67+
<Settings />
68+
<span>Settings</span>
69+
<ChevronRight class="ml-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90" />
70+
</Sidebar.MenuButton>
71+
{/snippet}
72+
</Collapsible.Trigger>
73+
<Collapsible.Content>
74+
<Sidebar.MenuSub>
75+
{#each settingsRoutes as subItem (subItem.href)}
76+
<Sidebar.MenuSubItem>
77+
<Sidebar.MenuSubButton isActive={subItem.href === page.url.pathname}>
78+
{#snippet child({ props })}
79+
<a href={subItem.href} title={subItem.title} onclick={onMenuClick} {...props}>
80+
<span>{subItem.title}</span>
81+
</a>
82+
{/snippet}
83+
</Sidebar.MenuSubButton>
84+
</Sidebar.MenuSubItem>
85+
{/each}
86+
</Sidebar.MenuSub>
87+
</Collapsible.Content>
88+
</Sidebar.MenuItem>
89+
{/snippet}
90+
</Collapsible.Root>
91+
</Sidebar.Menu>
92+
</Sidebar.Group>
93+
{/if}
5294
</Sidebar.Content>
5395
<Sidebar.Rail />
5496
<Sidebar.Footer>

0 commit comments

Comments
 (0)