diff --git a/src/routes/(console)/organization-[organization]/+page.svelte b/src/routes/(console)/organization-[organization]/+page.svelte index 4794d86590..bc989c5486 100644 --- a/src/routes/(console)/organization-[organization]/+page.svelte +++ b/src/routes/(console)/organization-[organization]/+page.svelte @@ -72,11 +72,13 @@ }); const projectsToArchive = $derived.by(() => { - return isCloud - ? data.projects.projects.filter((project) => project.status === 'archived') - : []; + return isCloud && data.archivedProjectsPage ? data.archivedProjectsPage : []; }); + const activeProjects = $derived(data.projects.projects); + + const activeProjectsCount = $derived(data.projects.total); + function filterPlatforms(platforms: { name: string; icon: string }[]) { return platforms.filter( (value, index, self) => index === self.findIndex((t) => t.name === value.name) @@ -235,13 +237,13 @@ {/if} - {#if data.projects.total > 0} + {#if activeProjectsCount > 0} - {#each data.projects.projects as project} + {#each activeProjects as project} {@const platforms = filterPlatforms( project.platforms.map((platform) => getPlatformInfo(platform.type)) )} @@ -323,7 +325,7 @@ name="Projects" limit={data.limit} offset={data.offset} - total={data.projects.total} /> + total={activeProjectsCount} /> const offset = pageToOffset(page, limit); const search = getSearch(url); - const projects = await sdk.forConsole.projects.list({ - queries: [ - Query.offset(offset), - Query.equal('teamId', params.organization), - Query.limit(limit), - Query.orderDesc(''), - Query.select(['$id', 'name', 'platforms', 'region', ...(isCloud ? ['status'] : [])]) - ], - search: search || undefined - }); - - // set `default` if no region! - for (const project of projects.projects) { - project.region ??= 'default'; - } + if (isCloud) { + const [activeProjects, archivedProjects, activeTotal, archivedTotal] = await Promise.all([ + sdk.forConsole.projects.list({ + queries: [ + Query.offset(offset), + Query.equal('teamId', params.organization), + Query.or([Query.equal('status', 'active'), Query.isNull('status')]), + Query.limit(limit), + Query.orderDesc('') + ], + search: search || undefined + }), + sdk.forConsole.projects.list({ + queries: [ + Query.equal('teamId', params.organization), + Query.equal('status', 'archived'), + Query.limit(1000) + ], + search: search || undefined + }), + sdk.forConsole.projects.list({ + queries: [ + Query.equal('teamId', params.organization), + Query.or([Query.equal('status', 'active'), Query.isNull('status')]) + ], + search: search || undefined + }), + sdk.forConsole.projects.list({ + queries: [ + Query.equal('teamId', params.organization), + Query.equal('status', 'archived') + ], + search: search || undefined + }) + ]); + + for (const project of activeProjects.projects) { + project.region ??= 'default'; + } + for (const project of archivedProjects.projects) { + project.region ??= 'default'; + } + + return { + offset, + limit, + projects: { + ...activeProjects, + projects: activeProjects.projects, + total: activeTotal.total + }, + activeProjectsPage: activeProjects.projects, + archivedProjectsPage: archivedProjects.projects, + activeTotalOverall: activeTotal.total, + archivedTotalOverall: archivedTotal.total, + search + }; + } else { + const projects = await sdk.forConsole.projects.list({ + queries: [ + Query.offset(offset), + Query.equal('teamId', params.organization), + Query.limit(limit), + Query.orderDesc('') + ], + search: search || undefined + }); - return { - offset, - limit, - projects, - search - }; + // set `default` if no region! + for (const project of projects.projects) { + project.region ??= 'default'; + } + + return { + offset, + limit, + projects, + search + }; + } };