"use client"; import { useState } from "react"; import { Card, CardContent, Badge, Button, Textarea, Label } from "poyraz-ui/atoms"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, DialogFooter, Tabs, TabsContent, TabsList, TabsTrigger, toast, } from "poyraz-ui/molecules"; import { CheckCircle2, Clock, MessageSquare, Loader2, RefreshCw } from "lucide-react"; import { createRevisionRequest } from "./actions"; import { useTranslations } from "@/components/i18n/i18n-provider"; import { formatDate, formatDateTime } from "@/lib/i18n/format"; export type PortalProjectDetail = { id: string; name: string; description: string | null; status: "planning" | "active" | "paused" | "completed" | "cancelled"; progress: number; due_date: string | null; revision_quota: number; can_request_revision: boolean; }; export type PortalPlanningSection = { id: string; title: string; content: string | null; type: string; }; export type PortalTask = { id: string; title: string; status: "todo" | "in_progress" | "done"; date: string | null; }; export type PortalRevision = { id: string; description: string; source_locale: string | null; status: "pending" | "in_progress" | "completed" | "rejected"; created_at: string; }; type PortalProjectClientProps = { project: PortalProjectDetail; sections: PortalPlanningSection[]; tasks: PortalTask[]; revisions: PortalRevision[]; locale: string; }; export function PortalProjectClient({ project, sections, tasks, revisions, locale, }: PortalProjectClientProps) { const t = useTranslations(); const [isSubmitting, setIsSubmitting] = useState(false); const [openRevision, setOpenRevision] = useState(false); async function handleRevision(event: React.FormEvent) { event.preventDefault(); setIsSubmitting(true); const formData = new FormData(event.currentTarget); try { const response = await createRevisionRequest(project.id, formData); if (response.errorKey) throw new Error(response.errorKey); toast.success(t("portal.revision.success")); setOpenRevision(false); } catch (error: unknown) { toast.error(error instanceof Error ? t(error.message) : t("portal.revision.error")); } finally { setIsSubmitting(false); } } const pendingRevisions = revisions.filter( (revision) => revision.status === "pending" || revision.status === "in_progress", ).length; const hasRevisionQuota = project.can_request_revision; const number = new Intl.NumberFormat(locale); return (

{project.name}

{project.description ? (

{project.description}

) : null}
{projectStatusLabel(project.status, t)} {hasRevisionQuota ? (
{t("portal.revision.title")}
{pendingRevisions > 0 ? (
{t("portal.revision.pendingWarning", { count: pendingRevisions })}
) : null}