import Link from 'next/link'; interface SitePage { id: string; title: string; slug: string; is_published: boolean; is_homepage: boolean; updated_at: string | null; } import { Plus, Globe, FileText, Settings, ExternalLink } from 'lucide-react'; import { getTranslations } from 'next-intl/server'; import { formatDate } from '@kit/shared/dates'; import { createSiteBuilderApi } from '@kit/site-builder/api'; import { getSupabaseServerClient } from '@kit/supabase/server-client'; import { Badge } from '@kit/ui/badge'; import { Button } from '@kit/ui/button'; import { Card, CardContent } from '@kit/ui/card'; import { cn } from '@kit/ui/utils'; import { AccountNotFound } from '~/components/account-not-found'; import { CmsPageShell } from '~/components/cms-page-shell'; import { EmptyState } from '~/components/empty-state'; import { PublishToggleButton } from './publish-toggle-button'; interface Props { params: Promise<{ account: string }>; } export default async function SiteBuilderDashboard({ params }: Props) { const { account } = await params; const client = getSupabaseServerClient(); const t = await getTranslations('siteBuilder'); const { data: acct } = await client .from('accounts') .select('id') .eq('slug', account) .single(); if (!acct) return ; const api = createSiteBuilderApi(client); const [pages, settings, posts] = await Promise.all([ api.listPages(acct.id), api.getSiteSettings(acct.id), api.listPosts(acct.id), ]); const isOnline = Boolean(settings?.is_public); const publishedCount = (pages as SitePage[]).filter( (p) => p.is_published, ).length; return (
{isOnline && ( )}

{t('site.stats.pages')}

{pages.length}

{t('site.stats.published')}

{publishedCount}

{t('site.stats.status')}

{isOnline ? t('pages.online') : t('pages.offline')}

{pages.length === 0 ? ( } title={t('pages.noPagesYet')} description={t('pages.noPageDesc')} actionLabel={t('pages.firstPage')} actionHref={`/home/${account}/site-builder/new`} /> ) : (
{(pages as SitePage[]).map((page) => ( ))}
{t('pages.colTitle')} {t('pages.colUrl')} {t('pages.colStatus')} {t('pages.colHomepage')} {t('pages.colUpdated')} {t('pages.colActions')}
{page.title} /{page.slug} {page.is_published ? t('pages.statusPublished') : t('pages.statusDraft')} {page.is_homepage ? ( {t('pages.homepageLabel')} ) : ( '—' )} {formatDate(page.updated_at)}
)}
); }