From 540bbbdad7e3feb0e2b3ee0dbdf4f6e8f4ef9e61 Mon Sep 17 00:00:00 2001
From: wukko <me@wukko.me>
Date: Wed, 20 Nov 2024 14:14:37 +0600
Subject: [PATCH] web/SidebarTab: pass icon prop instead of using slot

---
 web/src/components/sidebar/Sidebar.svelte    | 28 ++++++--------------
 web/src/components/sidebar/SidebarTab.svelte | 19 +++++++------
 2 files changed, 19 insertions(+), 28 deletions(-)

diff --git a/web/src/components/sidebar/Sidebar.svelte b/web/src/components/sidebar/Sidebar.svelte
index ca3a963e..39407a19 100644
--- a/web/src/components/sidebar/Sidebar.svelte
+++ b/web/src/components/sidebar/Sidebar.svelte
@@ -19,8 +19,8 @@
     let aboutLink = defaultNavPage("about");
 
     $: screenWidth,
-       settingsLink = defaultNavPage("settings"),
-       aboutLink = defaultNavPage("about");
+        (settingsLink = defaultNavPage("settings")),
+        (aboutLink = defaultNavPage("about"));
 </script>
 
 <svelte:window bind:innerWidth={screenWidth} />
@@ -29,26 +29,14 @@
     <CobaltLogo />
     <div id="sidebar-tabs" role="tablist">
         <div id="sidebar-actions" class="sidebar-inner-container">
-            <SidebarTab tabName="save" tabLink="/">
-                <IconDownload />
-            </SidebarTab>
-            <SidebarTab tabName="remux" tabLink="/remux" beta>
-                <IconRepeat />
-            </SidebarTab>
+            <SidebarTab name="save" path="/" icon={IconDownload} />
+            <SidebarTab name="remux" path="/remux" icon={IconRepeat} beta />
         </div>
         <div id="sidebar-info" class="sidebar-inner-container">
-            <SidebarTab tabName="settings" tabLink={settingsLink}>
-                <IconSettings />
-            </SidebarTab>
-            <SidebarTab tabName="donate" tabLink="/donate">
-                <IconHeart />
-            </SidebarTab>
-            <SidebarTab tabName="updates" tabLink="/updates">
-                <IconComet />
-            </SidebarTab>
-            <SidebarTab tabName="about" tabLink={aboutLink}>
-                <IconInfoCircle />
-            </SidebarTab>
+            <SidebarTab name="settings" path={settingsLink} icon={IconSettings} />
+            <SidebarTab name="donate" path="/donate" icon={IconHeart} />
+            <SidebarTab name="updates" path="/updates" icon={IconComet} />
+            <SidebarTab name="about" path={aboutLink} icon={IconInfoCircle} />
         </div>
     </div>
 </nav>
diff --git a/web/src/components/sidebar/SidebarTab.svelte b/web/src/components/sidebar/SidebarTab.svelte
index 9f3b51ef..2330039f 100644
--- a/web/src/components/sidebar/SidebarTab.svelte
+++ b/web/src/components/sidebar/SidebarTab.svelte
@@ -3,8 +3,10 @@
 
     import { t } from "$lib/i18n/translations";
 
-    export let tabName: string;
-    export let tabLink: string;
+    export let name: string;
+    export let path: string;
+    export let icon: ConstructorOfATypedSvelteComponent;
+
     export let beta = false;
 
     const firstTabPage = ["save", "remux", "settings"];
@@ -12,14 +14,14 @@
     let tab: HTMLElement;
 
     $: currentTab = $page.url.pathname.split("/")[1];
-    $: baseTabPath = tabLink.split("/")[1];
+    $: baseTabPath = path.split("/")[1];
 
     $: isTabActive = currentTab === baseTabPath;
 
     const showTab = (e: HTMLElement) => {
         if (e) {
             e.scrollIntoView({
-                inline: firstTabPage.includes(tabName) ? "end" : "start",
+                inline: firstTabPage.includes(name) ? "end" : "start",
                 block: "nearest",
                 behavior: "smooth",
             });
@@ -32,10 +34,10 @@
 </script>
 
 <a
-    id="sidebar-tab-{tabName}"
+    id="sidebar-tab-{name}"
     class="sidebar-tab"
     class:active={isTabActive}
-    href={tabLink}
+    href={path}
     bind:this={tab}
     on:focus={() => showTab(tab)}
     role="tab"
@@ -44,8 +46,9 @@
     {#if beta}
         <div class="beta-sign" aria-label={$t("general.beta")}>β</div>
     {/if}
-    <slot></slot>
-    {$t(`tabs.${tabName}`)}
+
+    <svelte:component this={icon} />
+    {$t(`tabs.${name}`)}
 </a>
 
 <style>