1
- import { useState } from "react" ;
1
+ import { useRef , useState } from "react" ;
2
2
import {
3
3
Collapse ,
4
4
Row ,
@@ -19,9 +19,11 @@ import IndexDetails from "./IndexDetails";
19
19
20
20
export default function TableInfo ( { data } ) {
21
21
const [ indexActiveKey , setIndexActiveKey ] = useState ( "" ) ;
22
- const { deleteTable, updateTable } = useTables ( ) ;
22
+ const { deleteTable, updateTable, updateField } = useTables ( ) ;
23
23
const { setUndoStack, setRedoStack } = useUndoRedo ( ) ;
24
24
const [ editField , setEditField ] = useState ( { } ) ;
25
+ const draggingElementIndex = useRef ( ) ;
26
+ const isDragging = useRef ( ) ;
25
27
26
28
return (
27
29
< div >
@@ -53,7 +55,38 @@ export default function TableInfo({ data }) {
53
55
/>
54
56
</ div >
55
57
{ data . fields . map ( ( f , j ) => (
56
- < TableField key = { "field_" + j } data = { f } tid = { data . id } index = { j } />
58
+ < div
59
+ key = { "field_" + j }
60
+ className = "cursor-pointer"
61
+ draggable
62
+ onDragOver = { ( e ) => {
63
+ e . preventDefault ( ) ;
64
+ if ( isDragging . current ) return ;
65
+ isDragging . current = true ;
66
+ draggingElementIndex . current = j ;
67
+ } }
68
+ onDrop = { ( e ) => {
69
+ e . preventDefault ( ) ;
70
+ isDragging . current = false ;
71
+ const index = draggingElementIndex . current ;
72
+
73
+ if ( index == null || index === j ) {
74
+ return ;
75
+ }
76
+
77
+ const a = data . fields [ index ] ;
78
+ const b = data . fields [ j ] ;
79
+
80
+ updateField ( data . id , index , { ...b , id : index } ) ;
81
+ updateField ( data . id , j , { ...a , id : j } ) ;
82
+ } }
83
+ onDragEnd = { ( e ) => {
84
+ e . preventDefault ( ) ;
85
+ isDragging . current = false ;
86
+ } }
87
+ >
88
+ < TableField data = { f } tid = { data . id } index = { j } />
89
+ </ div >
57
90
) ) }
58
91
{ data . indices . length > 0 && (
59
92
< Card
0 commit comments