From 238b05c5377680c7526fa30476d240f69a39ba3c Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 27 May 2025 17:11:25 +0200 Subject: [PATCH] Refactor project type handling in sidebar and shell - Limit fetching only 5 projects for the navigation - Replace custom NavbarProject type with Models.Project - Remove redundant project filtering in shell component - Pass selectedProject directly from page data - Add proper TypeScript types for layout data --- src/lib/components/sidebar.svelte | 6 +++--- src/lib/layout/shell.svelte | 9 +++------ src/routes/(console)/+layout.svelte | 8 +++++--- src/routes/(console)/+layout.ts | 6 +++--- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/lib/components/sidebar.svelte b/src/lib/components/sidebar.svelte index 99bd5db85..31cba6724 100644 --- a/src/lib/components/sidebar.svelte +++ b/src/lib/components/sidebar.svelte @@ -39,11 +39,11 @@ import { Click, trackEvent } from '$lib/actions/analytics'; import type { HTMLAttributes } from 'svelte/elements'; - import type { NavbarProject } from '$lib/components/navbar.svelte'; + import type { Models } from '@appwrite.io/console'; type $$Props = HTMLAttributes & { state?: 'closed' | 'open' | 'icons'; - project: NavbarProject | undefined; + project: Models.Project | undefined; avatar: string; progressCard?: { title: string; @@ -84,7 +84,7 @@
diff --git a/src/lib/layout/shell.svelte b/src/lib/layout/shell.svelte index 871f2d525..e5062eddc 100644 --- a/src/lib/layout/shell.svelte +++ b/src/lib/layout/shell.svelte @@ -11,21 +11,20 @@ import { sdk } from '$lib/stores/sdk'; import { user } from '$lib/stores/user'; import { tierToPlan } from '$lib/stores/billing'; - import { type Models } from '@appwrite.io/console'; import { isCloud } from '$lib/system'; import SideNavigation from '$lib/layout/navigation.svelte'; import { hasOnboardingDismissed } from '$lib/helpers/onboarding'; import { isSidebarOpen } from '$lib/stores/sidebar'; import { BillingPlan } from '$lib/constants'; import { page } from '$app/stores'; + import type { Models } from '@appwrite.io/console'; export let showSideNavigation = false; export let showHeader = true; export let showFooter = true; export let loadedProjects: Array = []; - export let projects: Array = []; + export let selectedProject: Models.Project | null = null; - $: selectedProject = loadedProjects.find((project) => project.isSelected); let yOnMenuOpen: number; let showContentTransition = false; let timeoutId: ReturnType; @@ -120,11 +119,9 @@ const progressCard = function getProgressCard() { if (selectedProject && !hasOnboardingDismissed(selectedProject.$id)) { - const currentProject = projects.find((project) => project.$id === selectedProject.$id); - return { title: 'Get started', - percentage: currentProject && currentProject.platforms.length ? 100 : 33 + percentage: selectedProject && selectedProject.platforms.length ? 100 : 33 }; } diff --git a/src/routes/(console)/+layout.svelte b/src/routes/(console)/+layout.svelte index 2a101bc25..337526292 100644 --- a/src/routes/(console)/+layout.svelte +++ b/src/routes/(console)/+layout.svelte @@ -52,6 +52,7 @@ IconSparkles, IconSwitchHorizontal } from '@appwrite.io/pink-icons-svelte'; + import type { LayoutData } from './$types'; function kebabToSentenceCase(str: string) { return str @@ -62,7 +63,8 @@ const isAssistantEnabled = $consoleVariables?._APP_ASSISTANT_ENABLED === true; - export let data; + export let data: LayoutData; + $: loadedProjects = data.projects.map((project) => { return { name: project?.name, @@ -340,8 +342,8 @@ !page.url.pathname.includes('/console/onboarding')} showHeader={!page.url.pathname.includes('/console/onboarding')} showFooter={!page.url.pathname.includes('/console/onboarding')} - bind:loadedProjects - bind:projects={data.projects}> + {loadedProjects} + selectedProject={page.data?.project}>