Skip to content

Commit d0572ee

Browse files
authored
Merge pull request #61 from HaecheonLee/enh/update-opacity-when-an-item-is-being-dragged-over
Update opacity style when an item is being hover after another item is dragged over
2 parents 8fdb579 + f87df3f commit d0572ee

File tree

1 file changed

+36
-11
lines changed

1 file changed

+36
-11
lines changed

src/components/EditorSidePanel/TablesTab/TableInfo.jsx

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useRef, useState } from "react";
1+
import { useState } from "react";
22
import {
33
Collapse,
44
Row,
@@ -23,8 +23,10 @@ export default function TableInfo({ data }) {
2323
useTables();
2424
const { setUndoStack, setRedoStack } = useUndoRedo();
2525
const [editField, setEditField] = useState({});
26-
const draggingElementIndex = useRef();
27-
const isDragging = useRef();
26+
const [drag, setDrag] = useState({
27+
draggingElementIndex: null,
28+
draggingOverIndexList: [],
29+
});
2830

2931
return (
3032
<div>
@@ -58,19 +60,42 @@ export default function TableInfo({ data }) {
5860
{data.fields.map((f, j) => (
5961
<div
6062
key={"field_" + j}
61-
className="cursor-pointer"
63+
className={`cursor-pointer ${drag.draggingOverIndexList.includes(j) ? "opacity-25" : ""}`}
6264
draggable
65+
onDragStart={() => {
66+
setDrag((prev) => ({ ...prev, draggingElementIndex: j }));
67+
}}
68+
onDragLeave={() => {
69+
setDrag((prev) => ({
70+
...prev,
71+
draggingOverIndexList: prev.draggingOverIndexList.filter(
72+
(index) => index !== j,
73+
),
74+
}));
75+
}}
6376
onDragOver={(e) => {
6477
e.preventDefault();
65-
if (isDragging.current) return;
66-
isDragging.current = true;
67-
draggingElementIndex.current = j;
78+
if (drag.draggingElementIndex != null) {
79+
if (j !== drag.draggingElementIndex) {
80+
setDrag((prev) => {
81+
if (prev.draggingOverIndexList.includes(j)) {
82+
return prev;
83+
}
84+
85+
return {
86+
...prev,
87+
draggingOverIndexList: prev.draggingOverIndexList.concat(j),
88+
};
89+
});
90+
}
91+
92+
return;
93+
}
6894
}}
6995
onDrop={(e) => {
7096
e.preventDefault();
71-
isDragging.current = false;
72-
const index = draggingElementIndex.current;
73-
97+
const index = drag.draggingElementIndex;
98+
setDrag({ draggingElementIndex: null, draggingOverIndexList: [] });
7499
if (index == null || index === j) {
75100
return;
76101
}
@@ -105,7 +130,7 @@ export default function TableInfo({ data }) {
105130
}}
106131
onDragEnd={(e) => {
107132
e.preventDefault();
108-
isDragging.current = false;
133+
setDrag({ draggingElementIndex: null, draggingOverIndexList: [] });
109134
}}
110135
>
111136
<TableField data={f} tid={data.id} index={j} />

0 commit comments

Comments
 (0)