/** * Platform: main entry layout with sidebar (sidebar-07). Projects in sidebar; * when a project is selected, the canvas is shown in the main area. */ import React, { useCallback, useState } from 'react' import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from '@/components/ui/breadcrumb' import { Separator } from '@/components/ui/separator' import { SidebarInset, SidebarProvider, SidebarTrigger } from '@/components/ui/sidebar' import { Button } from '@/components/ui/button' import { Plus } from 'lucide-react' import { AppSidebar } from './AppSidebar' import { CanvasPage } from '../canvas/CanvasPage' import type { Project } from './types' import { NewProjectDialog } from './NewProjectDialog' const STORAGE_KEY = 'zui_platform_projects' function loadProjects(): Project[] { try { const raw = localStorage.getItem(STORAGE_KEY) if (!raw) return [] const parsed = JSON.parse(raw) as unknown if (!Array.isArray(parsed)) return [] return parsed.filter( (p): p is Project => p && typeof p === 'object' && typeof (p as Project).id === 'string' && typeof (p as Project).name === 'string' && typeof (p as Project).iconId === 'string' && typeof (p as Project).createdAt === 'number' ) } catch { return [] } } function saveProjects(projects: Project[]) { localStorage.setItem(STORAGE_KEY, JSON.stringify(projects)) } export function PlatformPage() { const [projects, setProjects] = useState(loadProjects) const [selectedProjectId, setSelectedProjectId] = useState(() => { const list = loadProjects() return list.length > 0 ? list[0].id : null }) const persist = useCallback((next: Project[]) => { setProjects(next) saveProjects(next) }, []) const handleCreateProject = useCallback( (project: Project) => { persist([...projects, project]) setSelectedProjectId(project.id) }, [projects, persist] ) const handleDeleteProject = useCallback( (id: string) => { const next = projects.filter((p) => p.id !== id) persist(next) if (selectedProjectId === id) setSelectedProjectId(next[0]?.id ?? null) }, [projects, persist, selectedProjectId] ) const selectedProject = projects.find((p) => p.id === selectedProjectId) return (
Zui {selectedProject ? selectedProject.name : 'No project'}
{selectedProjectId && selectedProject ? (
) : (

No project selected. Create one to open the canvas.

New project } />
)}
) }