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 (