diff --git a/src/components/EditorSidePanel/TablesTab/TableInfo.jsx b/src/components/EditorSidePanel/TablesTab/TableInfo.jsx
index ca10bb5..7d8e6b8 100644
--- a/src/components/EditorSidePanel/TablesTab/TableInfo.jsx
+++ b/src/components/EditorSidePanel/TablesTab/TableInfo.jsx
@@ -1,4 +1,4 @@
-import { useRef, useState } from "react";
+import { useState } from "react";
import {
Collapse,
Row,
@@ -23,8 +23,10 @@ export default function TableInfo({ data }) {
useTables();
const { setUndoStack, setRedoStack } = useUndoRedo();
const [editField, setEditField] = useState({});
- const draggingElementIndex = useRef();
- const isDragging = useRef();
+ const [drag, setDrag] = useState({
+ draggingElementIndex: null,
+ draggingOverIndexList: [],
+ });
return (
@@ -58,19 +60,42 @@ export default function TableInfo({ data }) {
{data.fields.map((f, j) => (
{
+ setDrag((prev) => ({ ...prev, draggingElementIndex: j }));
+ }}
+ onDragLeave={() => {
+ setDrag((prev) => ({
+ ...prev,
+ draggingOverIndexList: prev.draggingOverIndexList.filter(
+ (index) => index !== j,
+ ),
+ }));
+ }}
onDragOver={(e) => {
e.preventDefault();
- if (isDragging.current) return;
- isDragging.current = true;
- draggingElementIndex.current = j;
+ if (drag.draggingElementIndex != null) {
+ if (j !== drag.draggingElementIndex) {
+ setDrag((prev) => {
+ if (prev.draggingOverIndexList.includes(j)) {
+ return prev;
+ }
+
+ return {
+ ...prev,
+ draggingOverIndexList: prev.draggingOverIndexList.concat(j),
+ };
+ });
+ }
+
+ return;
+ }
}}
onDrop={(e) => {
e.preventDefault();
- isDragging.current = false;
- const index = draggingElementIndex.current;
-
+ const index = drag.draggingElementIndex;
+ setDrag({ draggingElementIndex: null, draggingOverIndexList: [] });
if (index == null || index === j) {
return;
}
@@ -105,7 +130,7 @@ export default function TableInfo({ data }) {
}}
onDragEnd={(e) => {
e.preventDefault();
- isDragging.current = false;
+ setDrag({ draggingElementIndex: null, draggingOverIndexList: [] });
}}
>