'use client' import Image from 'next/image' import { useRouter } from 'next/navigation' import { useEffect, useState } from 'react' import { useAuth } from '../lib/auth/hooks' 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 } = useAuth() const router = useRouter() const [isSignInDialogOpen, setIsSignInDialogOpen] = useState(false) const [isNewProjectDialogOpen, setIsNewProjectDialogOpen] = useState(false) const [publicProjects, setPublicProjects] = useState([]) const [userProjects, setUserProjects] = useState([]) const [loading, setLoading] = useState(true) useEffect(() => { async function loadProjects() { setLoading(true) const publicResult = await getPublicProjects() if (publicResult.success) { setPublicProjects(publicResult.data || []) } if (isAuthenticated) { const userResult = await getUserProjects() if (userResult.success) { setUserProjects(userResult.data || []) } } setLoading(false) } if (!authLoading) { loadProjects() } }, [isAuthenticated, authLoading]) const handleProjectCreated = (projectId: string) => { router.push(`/editor/${projectId}`) } const handleProjectClick = (projectId: string) => { router.push(`/editor/${projectId}`) } const handleViewProject = (projectId: string) => { router.push(`/viewer/${projectId}`) } if (authLoading || loading) { return (

Loading...

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

Pascal Editor

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

My Projects

setIsNewProjectDialogOpen(true)} />
{userProjects.length === 0 ? (

You don't have any projects yet.

) : ( { if (!authLoading) { getUserProjects().then((result) => { if (result.success) { setUserProjects(result.data || []) } }) } }} /> )}
)} {/* Sign-in CTA for unauthenticated users */} {!isAuthenticated && (

Build with Pascal

Create and share 3D architectural projects. Sign in to get started.

)} {/* Public Projects Section */}

Community Projects

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