"use client"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { TaskCard } from "./TaskCard"; import { NewTaskDialog } from "./NewTaskDialog"; import { Plus, ListTodo } from "lucide-react"; import { TaskType } from "@prisma/client"; const SHOT_QUICK_TYPES: TaskType[] = ["TRACK", "ROTO", "KEY", "COMP", "FX"]; const ASSET_QUICK_TYPES: TaskType[] = ["MODEL", "TEXTURE", "RIG", "LOOKDEV"]; interface Artist { id: string; name: string | null; email: string; } interface Task { id: string; title: string; type: TaskType; status: any; priority: string; dueDate: Date | null; assignedArtist?: { id: string; name: string | null; email: string; image: string | null } | null; _count?: { versions: number }; versions?: { id: string; versionNumber: number; approvalStatus: string; createdAt: Date }[]; } interface TaskListProps { tasks: Task[]; projectId: string; shotId?: string; assetId?: string; artists: Artist[]; canManage?: boolean; onTaskCreated?: () => void; } export function TaskList({ tasks, projectId, shotId, assetId, artists, canManage = false, onTaskCreated }: TaskListProps) { const [showNew, setShowNew] = useState(false); const [prefillType, setPrefillType] = useState(); const quickTypes = shotId ? SHOT_QUICK_TYPES : assetId ? ASSET_QUICK_TYPES : []; const openQuick = (type: TaskType) => { setPrefillType(type); setShowNew(true); }; return (

Tasks

{canManage && ( )}
{/* Quick-add templates */} {canManage && quickTypes.length > 0 && (
{quickTypes.map((t) => { const label = { TRACK: "Track", ROTO: "Roto", KEY: "Key", COMP: "Comp", FX: "FX", ANIMATION: "Animation", GENERAL: "General", LIGHTING: "Lighting", RENDER: "Render", MODEL: "Model", TEXTURE: "Texture", RIG: "Rig", LOOKDEV: "Lookdev" }[t] ?? t; const alreadyExists = tasks.some((task) => task.type === t); return ( ); })}
)} {tasks.length === 0 ? (

No tasks yet

) : (
{tasks.map((task) => ( ))}
)} setShowNew(false)} onSuccess={onTaskCreated} />
); }