'use client' import { X } from 'lucide-react' import { useState } from 'react' import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/primitives/dialog' import { Switch } from '@/components/ui/primitives/switch' import { useScene } from '@pascal-app/core' import { createProject } from '../lib/projects/actions' interface NewProjectDialogProps { open: boolean onOpenChange: (open: boolean) => void onSuccess?: (projectId: string) => void } /** * NewProjectDialog - Dialog for creating a new project */ export function NewProjectDialog({ open, onOpenChange, onSuccess }: NewProjectDialogProps) { const [projectName, setProjectName] = useState('') const [isPrivate, setIsPrivate] = useState(false) const [isCreating, setIsCreating] = useState(false) const [error, setError] = useState(null) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setError(null) const name = projectName.trim() || 'Untitled Project' setIsCreating(true) try { // Get the default scene graph useScene.getState().clearScene() const { nodes, rootNodeIds } = useScene.getState() const sceneGraph = { nodes, rootNodeIds } const result = await createProject({ name, isPrivate, sceneGraph }) if (result.success && result.data) { onOpenChange(false) setProjectName('') setIsPrivate(false) onSuccess?.(result.data.id) } else { setError(result.error || 'Failed to create project') } } catch (err) { setError(err instanceof Error ? err.message : 'An unexpected error occurred') } finally { setIsCreating(false) } } const handleClose = () => { if (!isCreating) { onOpenChange(false) setProjectName('') setIsPrivate(false) setError(null) } } return ( e.preventDefault()} > Create New Project
{/* Project Name */}
setProjectName(e.target.value)} placeholder="My Project" className="mt-1 w-full rounded-md border border-border bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary" disabled={isCreating} autoFocus />
{/* Privacy Toggle */}
Privacy
{isPrivate ? 'Only you can view this project' : 'Anyone can view this project'}
Public setIsPrivate(!checked)} />
{error && (
{error}
)}
) }