import { Card, CardContent, Badge } from "poyraz-ui/atoms"; import { FolderKanban, CheckCircle2, Clock, BarChart } from "lucide-react"; import Link from "next/link"; import { StatCard } from "@/components/system/stat-card"; import { getSqliteConnection } from "@/server/db/client"; import { ContentTranslationService, getContentFallbackLocale } from "@/server/i18n/content"; import { formatDate } from "@/lib/i18n/format"; import { resolvePortalLocale } from "@/server/i18n/resolver"; import { createTranslator } from "@/server/i18n/translator"; import { requirePortalBackend } from "@/server/web/portal"; export default async function PortalDashboardPage() { const locale = await resolvePortalLocale(); const t = createTranslator(locale.locale, ["portal"]).t; const { actor, service } = await requirePortalBackend(); const content = new ContentTranslationService(getSqliteConnection().db); const localization = content.getPublicLocalizationContext(); const fallbackLocale = getContentFallbackLocale(locale.locale, localization); const projectRows = service.listProjects(actor); const projectTranslations = content.listBatch("project", projectRows.map((project) => project.id)); const projects = projectRows.map((project) => content.resolveEntity("project", project, { locale: locale.locale, fallbackLocale, defaultLocale: locale.defaultLocale, translations: projectTranslations.get(project.id) ?? [], })); const activeProjects = projects.filter((project) => project.status !== "completed" && project.status !== "cancelled"); const completedProjects = projects.filter((project) => project.status === "completed"); const avgProgress = projects.length ? Math.round(projects.reduce((sum, project) => sum + project.progress, 0) / projects.length) : 0; return (

{t("portal.dashboard.title")}

{t("portal.dashboard.allProjects")}

{projects.length === 0 ? (
{t("portal.projects.empty")}
) : projects.map((project) => (

{project.name}

{project.status === "completed" ? t("portal.status.project.completed") : project.status === "active" ? t("portal.status.project.active") : t("portal.status.project.waiting")} {project.dueDate && (
{t("portal.labels.delivery")}: {formatDate(project.dueDate, locale.locale)}
)}
{t("portal.labels.progress")} %{project.progress}
))}
); }