// import DragItem from '@components/DragItem/DragItem'; import DragDropIcon from "@components/aisera-icons/DragDropIcon"; import { TrashDeleteIcon } from "@components/aisera-icons/custom"; import React, { DragEvent, useEffect, useState } from "react"; import "./dragContainer.scss"; export interface DragContainerProps { isDeletable: boolean; children: React.ReactNode[]; onChangeList: (sortedList: React.ReactNode[]) => void; } export const DragContainer = ({ isDeletable, children, onChangeList, }: DragContainerProps) => { const [items, setItems] = useState([]); useEffect(() => { setItems(React.Children.toArray(children)); }, [children]); const [draggedItem, setDraggedItem] = useState(null); const [draggedIndex, setDraggedIndex] = useState(null); const [draggedOverIndex, setDraggedOverIndex] = useState(null); const [originalIndex, setOriginalIndex] = useState(null); const handleDragStart = (e: DragEvent, index: number) => { const dragged = items[index] as React.ReactNode; if (dragged) { setDraggedItem(dragged); setDraggedIndex(index); setOriginalIndex(index); } }; const handleDragOver = (e: DragEvent, index: number) => { e.preventDefault(); if (draggedItem && draggedOverIndex !== index) { const updatedItems = [...items]; updatedItems.splice(draggedIndex!, 1); updatedItems.splice(index, 0, draggedItem); setItems(updatedItems); setDraggedIndex(index); setDraggedOverIndex(index); onChangeList(updatedItems); } }; const handleDelete = (e: any, index: number) => { const updatedItems = [...items]; updatedItems.splice(index!, 1); setItems(updatedItems); onChangeList(updatedItems); }; const handleDragEnd = () => { setDraggedItem(null); setDraggedIndex(null); setDraggedOverIndex(null); }; return (
{items.map((children, index) => (
handleDragStart(e, index)} onDragOver={(e) => handleDragOver(e, index)} onDragEnd={handleDragEnd} >
{children}
{isDeletable && (
handleDelete(e, index)} >
)}
))}
); }; export default DragContainer;