"use client"; import { useState } from "react"; import Link from "next/link"; import { useParams } from "next/navigation"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { Button, Card, CardContent, ConfirmDialog, Dialog, Input, PageHeader, Select, StatCard, Textarea } from "@/components/ds"; import { useTenantId } from "@/hooks/useTenantId"; import { workspaceApi } from "@/modules/workspace/services/workspace-api"; import { PRIORITY, PROJECT_STATUS, displayPerson, labelOf } from "@/modules/workspace/labels"; import { StatusChip } from "@/modules/workspace/components/StatusChip"; import { CommentThread } from "@/modules/workspace/components/CommentThread"; import { IdentityUserSelect } from "@/modules/workspace/components/IdentityUserSelect"; import { WorkspacePageError, WorkspacePageLoader } from "@/modules/workspace/pages/shared"; export const WorkspaceProjectDetail = function WorkspaceProjectDetailPage() { const params = useParams<{ id: string }>(); const { tenantId } = useTenantId(); const queryClient = useQueryClient(); const [editOpen, setEditOpen] = useState(false); const [archiveOpen, setArchiveOpen] = useState(false); const [form, setForm] = useState({ name: "", description: "", status: "planning", priority: "medium", team_id: "", owner_user_id: "", start_date: "", due_date: "", }); const project = useQuery({ queryKey: ["workspace", tenantId, "project", params.id], queryFn: () => workspaceApi.projects.get(tenantId!, params.id), enabled: !!tenantId && !!params.id, }); const teams = useQuery({ queryKey: ["workspace", tenantId, "teams", project.data?.work_hub_id], queryFn: () => workspaceApi.teams.list(tenantId!, String(project.data?.work_hub_id || "")), enabled: !!tenantId && !!project.data?.work_hub_id, }); const update = useMutation({ mutationFn: (body: Record) => workspaceApi.projects.update(tenantId!, params.id, body), onSuccess: () => { toast.success("پروژه به‌روز شد"); setEditOpen(false); void queryClient.invalidateQueries({ queryKey: ["workspace", tenantId, "project", params.id] }); }, onError: (err) => toast.error(err instanceof Error ? err.message : "به‌روزرسانی ناموفق بود"), }); if (!tenantId || project.isLoading) return ; if (project.error) return project.refetch()} />; const row = project.data!; const progress = row.progress || { total: 0, done: 0, percent: 0 }; return (
} />

وظایف

کانبان
{(row.tasks ?? []).length === 0 ? (

وظیفه‌ای ثبت نشده است.

) : ( (row.tasks ?? []).map((task) => (
{String(task.title || "وظیفه")}
)) )}

محتوا

استودیو
{(row.content ?? []).length === 0 ? (

محتوایی به این پروژه وصل نیست.

) : ( (row.content ?? []).map((item) => (
{String(item.title || "محتوا")}
)) )}
setEditOpen(false)} title="ویرایش پروژه" size="lg">
setForm({ ...form, name: event.target.value })} placeholder="نام پروژه" />