Update opacity style when an item is being dragged over

This commit is contained in:
haecheonlee 2024-04-22 01:27:45 -04:00
parent 3a580149be
commit f30efef747

View File

@ -23,8 +23,10 @@ export default function TableInfo({ data }) {
useTables(); useTables();
const { setUndoStack, setRedoStack } = useUndoRedo(); const { setUndoStack, setRedoStack } = useUndoRedo();
const [editField, setEditField] = useState({}); const [editField, setEditField] = useState({});
const draggingElementIndex = useRef(); const [drag, setDrag] = useState({
const isDragging = useRef(); draggingElementIndex: null,
draggingOverIndexList: [],
});
return ( return (
<div> <div>
@ -58,19 +60,42 @@ export default function TableInfo({ data }) {
{data.fields.map((f, j) => ( {data.fields.map((f, j) => (
<div <div
key={"field_" + j} key={"field_" + j}
className="cursor-pointer" className={`cursor-pointer ${drag.draggingOverIndexList.includes(j) ? "opacity-25" : ""}`}
draggable draggable
onDragStart={() => {
setDrag((prev) => ({ ...prev, draggingElementIndex: j }));
}}
onDragLeave={() => {
setDrag((prev) => ({
...prev,
draggingOverIndexList: prev.draggingOverIndexList.filter(
(index) => index !== j,
),
}));
}}
onDragOver={(e) => { onDragOver={(e) => {
e.preventDefault(); e.preventDefault();
if (isDragging.current) return; if (drag.draggingElementIndex != null) {
isDragging.current = true; if (j !== drag.draggingElementIndex) {
draggingElementIndex.current = j; setDrag((prev) => {
if (prev.draggingOverIndexList.includes(j)) {
return prev;
}
return {
...prev,
draggingOverIndexList: prev.draggingOverIndexList.concat(j),
};
});
}
return;
}
}} }}
onDrop={(e) => { onDrop={(e) => {
e.preventDefault(); e.preventDefault();
isDragging.current = false; const index = drag.draggingElementIndex;
const index = draggingElementIndex.current; setDrag({ draggingElementIndex: null, draggingOverIndexList: [] });
if (index == null || index === j) { if (index == null || index === j) {
return; return;
} }
@ -105,7 +130,7 @@ export default function TableInfo({ data }) {
}} }}
onDragEnd={(e) => { onDragEnd={(e) => {
e.preventDefault(); e.preventDefault();
isDragging.current = false; setDrag({ draggingElementIndex: null, draggingOverIndexList: [] });
}} }}
> >
<TableField data={f} tid={data.id} index={j} /> <TableField data={f} tid={data.id} index={j} />