"use client"; import Link from "next/link"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { ChevronLeft, Plus, Calendar, MoreHorizontal, Video, Loader2, } from "lucide-react"; import { TProject } from "@/types/project"; import Image from "next/image"; import { DropdownMenu, DropdownMenuItem, DropdownMenuContent, DropdownMenuTrigger, DropdownMenuSeparator, } from "@/components/ui/dropdown-menu"; import { useProjectStore } from "@/stores/project-store"; import { useRouter } from "next/navigation"; import { DeleteProjectDialog } from "@/components/delete-project-dialog"; import { RenameProjectDialog } from "@/components/rename-project-dialog"; export default function ProjectsPage() { const { createNewProject, savedProjects, isLoading, isInitialized } = useProjectStore(); const router = useRouter(); const handleCreateProject = async () => { const projectId = await createNewProject("New Project"); console.log("projectId", projectId); router.push(`/editor/${projectId}`); }; return (
Back

Your Projects

{savedProjects.length}{" "} {savedProjects.length === 1 ? "project" : "projects"}

{isLoading || !isInitialized ? (
) : savedProjects.length === 0 ? ( ) : (
{savedProjects.map((project) => ( ))}
)}
); } function ProjectCard({ project }: { project: TProject }) { const [isDropdownOpen, setIsDropdownOpen] = useState(false); const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); const [isRenameDialogOpen, setIsRenameDialogOpen] = useState(false); const { deleteProject, renameProject, duplicateProject } = useProjectStore(); const formatDate = (date: Date): string => { return date.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", }); }; const handleDeleteProject = async () => { await deleteProject(project.id); setIsDropdownOpen(false); }; const handleRenameProject = async (newName: string) => { await renameProject(project.id, newName); setIsRenameDialogOpen(false); }; const handleDuplicateProject = async () => { setIsDropdownOpen(false); await duplicateProject(project.id); }; return ( <>
{/* Thumbnail preview or placeholder */}
{project.thumbnail ? ( Project thumbnail ) : (
)}

{project.name}

{ e.preventDefault(); e.stopPropagation(); }} > { e.preventDefault(); e.stopPropagation(); setIsDropdownOpen(false); setIsRenameDialogOpen(true); }} > Rename { e.preventDefault(); e.stopPropagation(); handleDuplicateProject(); }} > Duplicate { e.preventDefault(); e.stopPropagation(); setIsDropdownOpen(false); setIsDeleteDialogOpen(true); }} > Delete
Created {formatDate(project.createdAt)}
); } function CreateButton({ onClick }: { onClick?: () => void }) { return ( ); } function NoProjects({ onCreateProject }: { onCreateProject: () => void }) { return (

No projects yet

Start creating your first video project. Import media, edit, and export professional videos.

); }