"use client"; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger, } from "@/components/ui/sheet"; import { Button } from "@/components/ui/button"; import { Check, ListCheck, Trash2 } from "lucide-react"; import { cn } from "@/lib/utils"; import { useState } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, DialogTrigger, } from "@/components/ui/dialog"; import { canDeleteScene, getMainScene } from "@/lib/scene-utils"; import { toast } from "sonner"; import { useEditor } from "@/hooks/use-editor"; export function ScenesView({ children }: { children: React.ReactNode }) { const editor = useEditor(); const scenes = editor.scenes.getScenes(); const currentScene = editor.scenes.getActiveScene(); const [isSelectMode, setIsSelectMode] = useState(false); const [selectedScenes, setSelectedScenes] = useState>(new Set()); const handleSceneSwitch = async (sceneId: string) => { if (isSelectMode) { toggleSceneSelection({ sceneId }); return; } try { await editor.scenes.switchToScene({ sceneId }); } catch (error) { console.error("Failed to switch scene:", error); } }; const toggleSceneSelection = ({ sceneId }: { sceneId: string }) => { setSelectedScenes((prev) => { const newSet = new Set(prev); if (newSet.has(sceneId)) { newSet.delete(sceneId); } else { newSet.add(sceneId); } return newSet; }); }; const handleSelectMode = () => { setIsSelectMode(!isSelectMode); setSelectedScenes(new Set()); }; const handleDeleteSelected = async () => { for (const sceneId of selectedScenes) { const scene = scenes.find((scene) => scene.id === sceneId); if (!scene) { continue; } const { canDelete, reason } = canDeleteScene({ scene }); if (!canDelete) { toast.error(reason || "Failed to delete scene"); continue; } try { await editor.scenes.deleteScene({ sceneId }); } catch (error) { console.error("Failed to delete scene:", error); } } setSelectedScenes(new Set()); setIsSelectMode(false); }; const isMainSceneSelected = (() => { const mainScene = getMainScene({ scenes }); return Boolean(mainScene?.id && selectedScenes.has(mainScene.id)); })(); return ( {children} {isSelectMode ? `Select scenes (${selectedScenes.size})` : "Scenes"} {isSelectMode ? "Select scenes to delete" : "Switch between scenes in your project"}
{isSelectMode && ( Delete ({selectedScenes.size}) } /> )}
{scenes.length === 0 ? (
No scenes available
) : (
{scenes.map((scene) => ( ))}
)}
); } function DeleteDialog({ count, onDelete, disabled, trigger, }: { count: number; onDelete: () => void; disabled?: boolean; trigger: React.ReactNode; }) { const [open, setOpen] = useState(false); const handleDelete = () => { onDelete(); setOpen(false); }; return ( {trigger} Delete Scenes Are you sure you want to delete {count} scene {count === 1 ? "" : "s"}? This action cannot be undone. ); }