import React, { useState, useEffect } from 'react'; import { toolsApi } from '../utils/api'; import './Layers.css'; const Layers = ({ projectId, layers, setLayers, activeLayer, setActiveLayer, onLayerVisibilityChange, onFlatten, isProcessing, }) => { const [draggedLayer, setDraggedLayer] = useState(null); // Load layers on mount and when projectId changes useEffect(() => { if (projectId) { loadLayers(); } }, [projectId]); const loadLayers = async () => { if (!projectId) return; try { const result = await toolsApi.listLayers(projectId); setLayers(result.layers || []); } catch (err) { console.error('Failed to load layers:', err); } }; const handleDragStart = (e, index) => { setDraggedLayer(index); e.dataTransfer.effectAllowed = 'move'; }; const handleDragOver = (e, index) => { e.preventDefault(); if (draggedLayer === null || draggedLayer === index) return; // Reorder layers const newLayers = [...layers]; const [removed] = newLayers.splice(draggedLayer, 1); newLayers.splice(index, 0, removed); setLayers(newLayers); setDraggedLayer(index); }; const handleDragEnd = () => { setDraggedLayer(null); }; const toggleVisibility = (layerId) => { const layer = layers.find((l) => l.id === layerId); if (layer) { layer.visible = !layer.visible; setLayers([...layers]); onLayerVisibilityChange?.(layerId, layer.visible); } }; const handleFlatten = async () => { if (!projectId || layers.length === 0) return; const visibleLayers = layers.filter((l) => l.visible !== false); const layerOrder = visibleLayers.map((l) => l.id); await onFlatten(layerOrder); loadLayers(); }; return (

Layers

{layers.length > 0 && ( )}
{/* Background layer (always present) */}
setActiveLayer('background')} > Background 🔒
{/* Dynamic layers */} {layers.map((layer, index) => (
handleDragStart(e, index)} onDragOver={(e) => handleDragOver(e, index)} onDragEnd={handleDragEnd} onClick={() => setActiveLayer(layer.id)} > toggleVisibility(layer.id)} onClick={(e) => e.stopPropagation()} /> {layer.thumbnail && ( {layer.name} )} {layer.name} ⋮⋮
))} {layers.length === 0 && (
Use "Remove Background" to create layers
)}
); }; export default Layers;