import { Text, Shapes, Eye, EyeSlash, Copy, Trash, Gallery, Link2, VideoSquare, Music, DocumentText, ArrowLeft, Minus, Grid8, Layer, MouseSquare, Sticker, } from 'iconsax-react' import { useState } from 'react' import { useEditorStore } from '../store/editorStore' import { clx } from '@/helpers/utils' const LayersList = () => { const { objects, selectedObjectId, setSelectedObjectId, deleteObject, duplicateObject, toggleObjectVisibility, reorderObjects, } = useEditorStore() const [draggedObjectId, setDraggedObjectId] = useState(null) const [dragOverObjectId, setDragOverObjectId] = useState(null) const orderedLayers = [...objects].reverse() const getLayerIcon = (type: string) => { switch (type) { case 'text': return case 'rectangle': return case 'image': return case 'link': return case 'video': return case 'audio': return case 'document': return case 'arrow': return case 'line': return case 'grid': return case 'group': return case 'select': return case 'sticker': return default: return } } const getLayerLabel = (obj: typeof objects[0]) => { if (obj.isMask) { return 'ماسک' } switch (obj.type) { case 'text': return 'متن' case 'rectangle': { // نام واقعی شکل بر اساس shapeType switch (obj.shapeType) { case 'circle': return 'دایره' case 'triangle': return 'مثلث' case 'abstract': return 'انتزاعی' case 'square': default: return 'مربع' } } case 'image': return 'تصویر' case 'link': return 'لینک' case 'video': return 'ویدیو' case 'audio': return obj.audioName || 'صدا' case 'document': return 'سند' case 'arrow': return 'پیکان' case 'line': return 'خط' case 'grid': return 'گرید' case 'group': return 'گروه' case 'select': return 'انتخاب' case 'sticker': return 'استیکر' default: return 'لایه' } } return (
{objects.length === 0 ? (
لایه‌ای وجود ندارد
) : ( orderedLayers.map((obj) => { const isSelected = selectedObjectId === obj.id return (
setSelectedObjectId(obj.id)} draggable onDragStart={() => { setDraggedObjectId(obj.id) }} onDragOver={(e) => { e.preventDefault() if (dragOverObjectId !== obj.id) { setDragOverObjectId(obj.id) } }} onDrop={(e) => { e.preventDefault() if (draggedObjectId && draggedObjectId !== obj.id) { reorderObjects(draggedObjectId, obj.id) } setDraggedObjectId(null) setDragOverObjectId(null) }} onDragEnd={() => { setDraggedObjectId(null) setDragOverObjectId(null) }} className={clx( 'flex items-center gap-3 p-3 rounded-lg cursor-pointer transition-colors', dragOverObjectId === obj.id && draggedObjectId !== obj.id && 'ring-2 ring-blue-300', isSelected ? 'bg-blue-50 border border-blue-200' : 'bg-gray-50 hover:bg-gray-100' )} >
{getLayerIcon(obj.type)}
{getLayerLabel(obj)}
) }) )}
) } export default LayersList