@@ -52,17 +52,26 @@ export default Component => {
52
52
53
53
// helper methods
54
54
findParentHeader ( element ) {
55
- if ( element . className . includes ( 'rt-th' ) ) {
55
+ // need to check typeof to avoid errors when traversing special elements like SVGs
56
+ if ( element . className && typeof element . className === 'string' && element . className . includes ( 'rt-th' ) ) {
56
57
return element
57
58
} else {
58
59
let parent = element . parentElement
59
- while ( ! parent . className . includes ( 'rt-th' ) ) {
60
+ while ( typeof parent . className !== 'string' || ! parent . className . includes ( 'rt-th' ) ) {
60
61
parent = parent . parentElement
61
62
if ( ! parent ) break
62
63
}
63
64
return parent
64
65
}
65
66
}
67
+
68
+ getFirstChildWithColumnIndexAttributeValue ( element ) {
69
+ const header = DomHelper . findFirstChildWithClassName ( element , 'draggable-header' )
70
+
71
+ if ( header ) {
72
+ return DomHelper . getAttribute ( header , 'data-column-index' )
73
+ }
74
+ }
66
75
// end helper methods
67
76
68
77
createDragEvents ( ) {
@@ -288,6 +297,10 @@ export default Component => {
288
297
// only move if the dragged column is meets position threshold
289
298
let dragIndex = DomHelper . index ( this . draggedColumn )
290
299
let dropIndex = DomHelper . index ( this . findParentHeader ( e . target ) )
300
+
301
+ // for the future
302
+ // this.getFirstChildWithColumnIndexAttributeValue(this.draggedColumn)
303
+
291
304
let allowDrop = dragIndex !== dropIndex
292
305
293
306
if (
@@ -312,6 +325,8 @@ export default Component => {
312
325
}
313
326
}
314
327
328
+ console . log ( 'ddropIndex' , dropIndex , 'this.dragged' , this . dragged )
329
+
315
330
this . reorder . push ( { a : dropIndex , b : this . dragged } )
316
331
317
332
if ( onDropSuccess ) {
@@ -408,7 +423,7 @@ export default Component => {
408
423
} ;
409
424
410
425
render ( ) {
411
- const { columns, draggableColumns, ...rest } = this . props
426
+ const { columns : origColumns , draggableColumns, ...rest } = this . props
412
427
const {
413
428
draggable = defaultProps . draggable ,
414
429
mode = defaultProps . mode ,
@@ -437,7 +452,15 @@ export default Component => {
437
452
/>
438
453
)
439
454
440
- const cols = columns . map ( col => {
455
+ // separate out visible and hidden columns
456
+ const visibleColumns = origColumns . filter ( col => col . show === true || col . show === undefined )
457
+ const hiddenColumns = origColumns . filter ( col => col . show === false )
458
+
459
+ // place hidden columns at very end of array
460
+ // having a hidden column inbetween two draggable columns will cause this HOC to improperly calculate the new column index positions
461
+ const adjustedOrigColumns = [ ...visibleColumns , ...hiddenColumns ]
462
+
463
+ const cols = adjustedOrigColumns . map ( ( col , index ) => {
441
464
let headerClassName = `${ this . uniqueId } draggable-header`
442
465
443
466
// add additional className if column is draggable enabled
@@ -452,17 +475,19 @@ export default Component => {
452
475
...col ,
453
476
Header :
454
477
typeof col . Header === 'function' ? (
455
- < div className = { headerClassName } >
478
+ < div className = { headerClassName } data-column-index = { index } >
456
479
{ col . Header ( ) }
457
480
</ div >
458
481
) : (
459
- < div className = { headerClassName } >
482
+ < div className = { headerClassName } data-column-index = { index } >
460
483
{ col . Header }
461
484
</ div >
462
485
)
463
486
}
464
487
} )
465
488
489
+ const previousOrder = [ ...this . currentColumnOrder ]
490
+
466
491
// run all reorder events
467
492
if ( mode && mode === DragMode . SWAP ) {
468
493
this . reorder . forEach ( o => ( cols [ o . a ] = cols . splice ( o . b , 1 , cols [ o . a ] ) [ 0 ] ) )
@@ -476,7 +501,7 @@ export default Component => {
476
501
477
502
// fire change event?
478
503
if ( ! this . state . firstLoad ) {
479
- const originalOrder = columns . map ( col => {
504
+ const originalOrder = previousOrder . map ( col => {
480
505
if ( typeof col . accessor === 'function' ) return col . id
481
506
return col . accessor
482
507
} )
0 commit comments