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
This commit is contained in:
commit
d0572ee55a
@ -1,4 +1,4 @@
|
|||||||
import { useRef, useState } from "react";
|
import { useState } from "react";
|
||||||
import {
|
import {
|
||||||
Collapse,
|
Collapse,
|
||||||
Row,
|
Row,
|
||||||
@ -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} />
|
||||||
|
Loading…
Reference in New Issue
Block a user