From 6178312fde58faa57dbea70bfa017ca4bc0795a2 Mon Sep 17 00:00:00 2001 From: Christoph Urlacher Date: Mon, 16 Dec 2024 16:46:26 +0100 Subject: [PATCH] Position the drawer below the navbar + allow toggling between them --- src/routes/+layout.svelte | 212 +++++++++++++++++++++----------------- 1 file changed, 116 insertions(+), 96 deletions(-) diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 072e336..101ef24 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -33,12 +33,36 @@ // Drawer config initializeStores(); const drawerStore: DrawerStore = getDrawerStore(); + let drawerOpen: boolean = false; + let drawerId: string = ""; + drawerStore.subscribe((settings: DrawerSettings) => { + drawerOpen = settings.open ?? false; + drawerId = settings.id ?? ""; + }); + + const toggle_drawer = (settings: DrawerSettings) => { + if (drawerOpen) { + if (drawerId === settings.id) { + // We clicked the same button to close the drawer + drawerStore.close(); + } else { + // We clicked another button to open another drawer + drawerStore.close(); + setTimeout(() => drawerStore.open(settings), 200); + } + } else { + drawerStore.open(settings); + } + }; + + const close_drawer = () => drawerStore.close(); const drawer_settings_base: DrawerSettings = { position: "top", height: "auto", - padding: "lg:px-96", + padding: "lg:px-96 pt-14", // pt-14 is 56px, so its missing 4px for the 60px navbar... bgDrawer: "bg-surface-100", + duration: 150, }; const menu_drawer = () => { @@ -46,7 +70,7 @@ id: "menu_drawer", ...drawer_settings_base, }; - drawerStore.open(drawerSettings); + toggle_drawer(drawerSettings); }; const data_drawer = () => { @@ -54,7 +78,7 @@ id: "data_drawer", ...drawer_settings_base, }; - drawerStore.open(drawerSettings); + toggle_drawer(drawerSettings); }; const login_drawer = () => { @@ -62,7 +86,7 @@ id: "login_drawer", ...drawer_settings_base, }; - drawerStore.open(drawerSettings); + toggle_drawer(drawerSettings); }; const profile_drawer = () => { @@ -70,11 +94,9 @@ id: "profile_drawer", ...drawer_settings_base, }; - drawerStore.open(drawerSettings); + toggle_drawer(drawerSettings); }; - const close_drawer = () => drawerStore.close(); - // Popups config storePopup.set({ computePosition, autoUpdate, offset, shift, flip, arrow }); @@ -93,11 +115,12 @@ - {#if $drawerStore.id === "menu_drawer"} - - - -
+ +
+ {#if $drawerStore.id === "menu_drawer"} + + + -
- {:else if $drawerStore.id === "data_drawer"} - - - -
- -
- {:else if $drawerStore.id === "login_drawer"} - - - -
+ {:else if $drawerStore.id === "login_drawer"} + + +

Enter Username and Password

- - + - - +
- + submit + >Register +
-
- {:else if $drawerStore.id === "profile_drawer" && data.user} - - - -
+ {:else if $drawerStore.id === "profile_drawer" && data.user} + + +

Edit Profile

@@ -187,72 +205,74 @@
-
- {/if} + {/if} +
-
+
{@render children()}