'use client' import Image from 'next/image' import { useRouter } from 'next/navigation' import { useEffect, useState } from 'react' import { useAuth } from '../lib/auth/hooks' import type { LocalProject } from '../lib/local-storage/project-store' import { createLocalProject, getLocalProjects } from '../lib/local-storage/project-store' import { getPublicProjects, getUserProjects } from '../lib/projects/actions' import type { Project } from '../lib/projects/types' import { CreateProjectButton } from './create-project-button' import { HubFooter } from './hub-footer' import { NewProjectDialog } from './new-project-dialog' import { ProfileDropdown } from './profile-dropdown' import { ProjectGrid } from './project-grid' import { SignInDialog } from './sign-in-dialog' export default function CommunityHub() { const { isAuthenticated, isLoading: authLoading, user } = useAuth() const router = useRouter() const [isSignInDialogOpen, setIsSignInDialogOpen] = useState(false) const [isNewProjectDialogOpen, setIsNewProjectDialogOpen] = useState(false) const [localProjectToSave, setLocalProjectToSave] = useState(null) const [publicProjects, setPublicProjects] = useState([]) const [userProjects, setUserProjects] = useState([]) const [localProjects, setLocalProjects] = useState([]) const [loading, setLoading] = useState(true) useEffect(() => { async function loadProjects() { setLoading(true) // Load public projects (always) const publicResult = await getPublicProjects() if (publicResult.success) { setPublicProjects(publicResult.data || []) } // Load user projects if authenticated if (isAuthenticated) { const userResult = await getUserProjects() if (userResult.success) { setUserProjects(userResult.data || []) } } // Always load local projects setLocalProjects(getLocalProjects()) setLoading(false) } if (!authLoading) { loadProjects() } }, [isAuthenticated, authLoading]) const handleCreateProject = async () => { if (!isAuthenticated) { // Create local project for guest const project = createLocalProject('Untitled Project') router.push(`/editor/${project.id}`) } else { // Open project creation dialog for authenticated users setIsNewProjectDialogOpen(true) } } const handleProjectCreated = async (projectId: string) => { // If this was a local project being saved, delete it from localStorage if (localProjectToSave) { const { deleteLocalProject } = await import('../lib/local-storage/project-store') deleteLocalProject(localProjectToSave.id) setLocalProjects(getLocalProjects()) setLocalProjectToSave(null) } // Reload projects and navigate to the new project const result = await getUserProjects() if (result.success) { setUserProjects(result.data || []) } router.push(`/editor/${projectId}`) } const handleSaveLocalToCloud = (localProject: LocalProject) => { setLocalProjectToSave(localProject) setIsNewProjectDialogOpen(true) } const handleProjectClick = (projectId: string) => { router.push(`/editor/${projectId}`) } const handleViewProject = (projectId: string) => { router.push(`/viewer/${projectId}`) } if (authLoading || loading) { return (

Loading...

) } return (
{/* Header */}
Pascal

Hub

{!isAuthenticated ? ( ) : ( )}
{/* User's Projects Section */} {isAuthenticated && (

My Projects

{userProjects.length === 0 && localProjects.length === 0 ? (

You don't have any projects yet.

) : ( { if (!authLoading) { getUserProjects().then((result) => { if (result.success) { setUserProjects(result.data || []) } }) } }} /> )}
)} {/* Local Projects Section (Guest Users) */} {!isAuthenticated && localProjects.length > 0 && (

My Local Projects

)} {/* Create First Project CTA */} {!isAuthenticated && localProjects.length === 0 && (

Get Started

Create your first project to start designing

)} {/* Public Projects Section */}

Community Projects

{publicProjects.length > 0 ? ( ) : (
No public projects yet
)}
) }