diff --git a/src/app/dashboard/[teamSlug]/templates/(tabs)/list/page.tsx b/src/app/dashboard/[teamSlug]/templates/(tabs)/list/page.tsx index 76f6b25ad..ae2a9e652 100644 --- a/src/app/dashboard/[teamSlug]/templates/(tabs)/list/page.tsx +++ b/src/app/dashboard/[teamSlug]/templates/(tabs)/list/page.tsx @@ -1,11 +1,30 @@ import { Suspense } from 'react' import LoadingLayout from '@/features/dashboard/loading-layout' +import { + TEMPLATES_DEFAULT_SORT, + TEMPLATES_PAGE_SIZE, +} from '@/features/dashboard/templates/list/constants' import TemplatesTable from '@/features/dashboard/templates/list/table' +import { HydrateClient, prefetch, trpc } from '@/trpc/server' + +export default async function TemplatesListPage({ + params, +}: PageProps<'/dashboard/[teamSlug]/templates/list'>) { + const { teamSlug } = await params + + prefetch( + trpc.templates.getTemplates.infiniteQueryOptions({ + teamSlug, + limit: TEMPLATES_PAGE_SIZE, + sort: TEMPLATES_DEFAULT_SORT, + }) + ) -export default function TemplatesListPage() { return ( - }> - - + + }> + + + ) } diff --git a/src/core/modules/templates/models.ts b/src/core/modules/templates/models.ts index aa08bebab..72f46e3e2 100644 --- a/src/core/modules/templates/models.ts +++ b/src/core/modules/templates/models.ts @@ -23,3 +23,30 @@ export type DefaultTemplate = Template & { isDefault: true defaultDescription?: string } + +export type TemplatesSort = + | 'name_asc' + | 'name_desc' + | 'cpu_count_asc' + | 'cpu_count_desc' + | 'memory_mb_asc' + | 'memory_mb_desc' + | 'created_at_asc' + | 'created_at_desc' + | 'updated_at_asc' + | 'updated_at_desc' + +export interface ListTeamTemplatesOptions { + cursor?: string + limit?: number + cpuCount?: number + memoryMB?: number + public?: boolean + search?: string + sort?: TemplatesSort +} + +export interface ListTeamTemplatesResult { + data: Array