From 90fb24ece6ea43c674dcae015cf2e1987c5bc343 Mon Sep 17 00:00:00 2001 From: Darshan Date: Sat, 29 Nov 2025 19:05:56 +0530 Subject: [PATCH] fix: pagination. --- .../organization-[organization]/+page.svelte | 90 +++++++++++-------- 1 file changed, 52 insertions(+), 38 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/+page.svelte b/src/routes/(console)/organization-[organization]/+page.svelte index 7e20073bc..4794d8659 100644 --- a/src/routes/(console)/organization-[organization]/+page.svelte +++ b/src/routes/(console)/organization-[organization]/+page.svelte @@ -35,21 +35,47 @@ IconReact, IconUnity } from '@appwrite.io/pink-icons-svelte'; + import type { PageProps } from './$types'; import { getPlatformInfo } from '$lib/helpers/platform'; import CreateProjectCloud from './createProjectCloud.svelte'; import { currentPlan, regions as regionsStore } from '$lib/stores/organization'; import SelectProjectCloud from '$lib/components/billing/alerts/selectProjectCloud.svelte'; import ArchiveProject from '$lib/components/archiveProject.svelte'; - export let data; + let { data }: PageProps = $props(); - let showCreate = false; - let addOrganization = false; - let showSelectProject = false; - let showCreateProjectCloud = false; - let freePlanAlertDismissed = false; + let showCreate = $state(false); + let addOrganization = $state(false); + let showSelectProject = $state(false); + let showCreateProjectCloud = $state(false); + let freePlanAlertDismissed = $state(false); - let searchQuery: SearchQuery; + let searchQuery: SearchQuery | null = $state(null); + + const projectCreationDisabled = $derived.by(() => { + return ( + (isCloud && + getServiceLimit('projects', null, data.currentPlan) <= data.projects.total) || + (isCloud && $readOnly && !GRACE_PERIOD_OVERRIDE) || + !$canWriteProjects + ); + }); + + const reachedProjectLimit = $derived.by(() => { + return ( + isCloud && getServiceLimit('projects', null, data.currentPlan) <= data.projects.total + ); + }); + + const projectsLimit = $derived.by(() => { + return getServiceLimit('projects', null, data.currentPlan); + }); + + const projectsToArchive = $derived.by(() => { + return isCloud + ? data.projects.projects.filter((project) => project.status === 'archived') + : []; + }); function filterPlatforms(platforms: { name: string; icon: string }[]) { return platforms.filter( @@ -82,28 +108,6 @@ } } - $: projectCreationDisabled = - (isCloud && getServiceLimit('projects', null, data.currentPlan) <= data.projects.total) || - (isCloud && $readOnly && !GRACE_PERIOD_OVERRIDE) || - !$canWriteProjects; - - $: reachedProjectLimit = - isCloud && getServiceLimit('projects', null, data.currentPlan) <= data.projects.total; - $: projectsLimit = getServiceLimit('projects', null, data.currentPlan); - - $: $registerCommands([ - { - label: 'Create project', - callback: () => { - showCreate = true; - }, - keys: ['c'], - disabled: projectCreationDisabled, - group: 'projects', - icon: IconPlus - } - ]); - function dismissFreePlanAlert() { freePlanAlertDismissed = true; const notificationId = `freePlanAlert_${data.organization.$id}`; @@ -132,14 +136,24 @@ return project.status === 'archived'; } - $: projectsToArchive = isCloud - ? data.projects.projects.filter((project) => project.status === 'archived') - : []; - - $: activeProjects = data.projects.projects.filter((project) => project.status !== 'archived'); function clearSearch() { searchQuery?.clearInput(); } + + $effect(() => { + $registerCommands([ + { + label: 'Create project', + callback: () => { + showCreate = true; + }, + keys: ['c'], + disabled: projectCreationDisabled, + group: 'projects', + icon: IconPlus + } + ]); + }); {/if} - {#if activeProjects.length > 0} + {#if data.projects.total > 0} - {#each activeProjects as project} + {#each data.projects.projects as project} {@const platforms = filterPlatforms( project.platforms.map((platform) => getPlatformInfo(platform.type)) )} @@ -309,7 +323,7 @@ name="Projects" limit={data.limit} offset={data.offset} - total={activeProjects.length} /> + total={data.projects.total} />