11import React from "react" ;
2- import { Column , flexRender } from "@tanstack/react-table" ;
2+ import { flexRender } from "@tanstack/react-table" ;
33import { c } from "helpers/StylesHelper" ;
44import { TableHeaderProps } from "cdm/HeaderModel" ;
5- import { useDrag , useDrop } from "react-dnd" ;
6- import { RowDataType } from "cdm/FolderModel" ;
7- import { DnDConfiguration } from "helpers/Constants" ;
85
96export default function TableHeader ( headerProps : TableHeaderProps ) {
107 const { table, header, reorderColumn, headerIndex } = headerProps ;
118 const { view } = table . options . meta ;
129 const { columnOrder } = table . options . state ;
13-
10+ const [ isDragging , setIsDragging ] = React . useState ( false ) ;
11+ const dndRef = React . useRef ( null ) ;
1412 function moveColumn (
1513 draggedColumnId : string ,
1614 targetColumnId : string ,
@@ -27,37 +25,49 @@ export default function TableHeader(headerProps: TableHeaderProps) {
2725 return newColumnOrder ;
2826 }
2927
30- const [ , dropRef ] = useDrop ( {
31- accept : DnDConfiguration . DRAG_TYPE ,
32- drop : ( draggedColumn : Column < RowDataType > ) => {
33- const newColumnOrder = moveColumn (
34- draggedColumn . id ,
35- header . column . id ,
36- columnOrder
37- ) ;
38- table . setColumnOrder ( newColumnOrder ) ;
39- } ,
40- } ) ;
41-
42- const [ { isDragging } , dragRef ] = useDrag ( {
43- collect : ( monitor ) => ( {
44- isDragging : monitor . isDragging ( ) ,
45- } ) ,
46- item : ( ) => header . column ,
47- type : DnDConfiguration . DRAG_TYPE ,
48- } ) ;
49-
5028 return (
5129 < div
5230 key = { `${ header . id } -${ headerIndex } ` }
5331 className = { `${ c ( "th noselect" ) } header` }
32+ ref = { dndRef }
5433 style = { {
5534 width : header . getSize ( ) ,
5635 opacity : isDragging ? 0.5 : 1 ,
5736 } }
58- ref = { dropRef }
37+ onDrop = { ( e ) => {
38+ e . preventDefault ( ) ;
39+ const newColumnOrder = moveColumn (
40+ e . dataTransfer . getData ( "dbfolderDragId" ) ,
41+ header . column . id ,
42+ columnOrder
43+ ) ;
44+ table . setColumnOrder ( newColumnOrder ) ;
45+ return false ;
46+ } }
47+ draggable
48+ onDragStart = { ( e ) => {
49+ setIsDragging ( true ) ;
50+ e . dataTransfer . effectAllowed = "move" ;
51+ e . dataTransfer . setData ( "dbfolderDragId" , header . column . id ) ;
52+ } }
53+ onDragEnter = { ( e ) => {
54+ dndRef . current . classList . add ( "over" ) ;
55+ } }
56+ onDragLeave = { ( e ) => {
57+ dndRef . current . classList . remove ( "over" ) ;
58+ } }
59+ onDragEnd = { ( e ) => {
60+ setIsDragging ( false ) ;
61+ } }
62+ onDragOver = { ( e ) => {
63+ if ( e . preventDefault ) {
64+ e . preventDefault ( ) ;
65+ }
66+ e . dataTransfer . dropEffect = "move" ;
67+ return false ;
68+ } }
5969 >
60- < div ref = { dragRef } key = { `${ header . id } -${ headerIndex } -dnd` } >
70+ < div key = { `${ header . id } -${ headerIndex } -dnd` } >
6171 { header . isPlaceholder
6272 ? null
6373 : flexRender ( header . column . columnDef . header , header . getContext ( ) ) }
0 commit comments