@@ -5,113 +5,31 @@ import withDraggableColumns, { DragMode } from 'react-table-hoc-draggable-column
5
5
import 'react-table-hoc-draggable-columns/dist/styles.css' ;
6
6
import { useState } from 'react' ;
7
7
8
- function shuffleArray ( array ) {
9
- const resultArr = [ ...array ] ;
10
-
11
- for ( var i = resultArr . length - 1 ; i > 0 ; i -- ) {
12
- var j = Math . floor ( Math . random ( ) * ( i + 1 ) ) ;
13
- var temp = resultArr [ i ] ;
14
- resultArr [ i ] = resultArr [ j ] ;
15
- resultArr [ j ] = temp ;
16
- }
17
-
18
- return resultArr ;
19
- }
20
-
21
- export default function App ( ) {
22
- const [ columns , setColumns ] = useState ( carColumns ) ;
23
- const [ draggable , setDraggable ] = useState ( [ 'vin' , 'year' , 'brand' , 'color' ] ) ;
24
-
25
- const removeColumn = ( ) => {
26
- setColumns ( prevState => prevState . slice ( 1 ) ) ;
27
- } ;
28
-
29
- const removeDraggable = ( ) => {
30
- setDraggable ( prevState => prevState . slice ( 1 ) ) ;
31
- } ;
32
-
33
- const randomOrderColumns = ( ) => {
34
- setColumns ( shuffleArray ( columns ) ) ;
35
- } ;
36
-
37
- const ReactTableDraggableColumns = withDraggableColumns ( ReactTable ) ;
38
-
39
- return (
40
- < div className = "App" >
41
- < button style = { { backgroundColor : 'red' , color : 'white' } } onClick = { removeColumn } >
42
- Remove A Column
43
- </ button >
44
-
45
- < button style = { { backgroundColor : 'blue' , color : 'white' } } onClick = { removeDraggable } >
46
- Remove A Draggable
47
- </ button >
48
-
49
- < button style = { { backgroundColor : 'green' , color : 'white' } } onClick = { randomOrderColumns } >
50
- Reshuffle Columns
51
- </ button >
52
- < br />
53
- Draggable Columns: { draggable . join ( ', ' ) }
54
- < br />
55
- < ReactTableDraggableColumns
56
- style = { {
57
- width : '98vw' ,
58
- height : '500px'
59
- } }
60
- sortable = { false }
61
- columns = { columns }
62
- data = { carData }
63
- showPagination = { false }
64
- draggableColumns = { {
65
- mode : DragMode . REORDER ,
66
- draggable : draggable ,
67
- enableColumnWideDrag : false ,
68
- disableTableScroll : false ,
69
- useDragImage : true ,
70
- onDraggedColumnChange : cols => {
71
- //update state
72
- setColumns ( cols )
73
- } ,
74
- onDropSuccess : (
75
- draggedColumn ,
76
- targetColumn ,
77
- oldIndex ,
78
- newIndex ,
79
- oldOffset ,
80
- newOffset
81
- ) => {
82
- console . log ( draggedColumn , targetColumn , oldIndex , newIndex , oldOffset , newOffset ) ;
83
- }
84
- } }
85
- />
86
- </ div >
87
- ) ;
88
- }
89
-
90
8
const carColumns = [
91
9
{
92
10
Header : 'Vin' ,
93
11
accessor : 'vin' ,
94
- width : 300
12
+ width : 200
95
13
} ,
96
14
{
97
15
Header : 'Year' ,
98
16
accessor : 'year' ,
99
- width : 500
17
+ width : 200
100
18
} ,
101
19
{
102
20
Header : 'Brand' ,
103
21
accessor : 'brand' ,
104
- width : 500
22
+ width : 200
105
23
} ,
106
24
{
107
25
Header : 'Color' ,
108
26
accessor : 'color' ,
109
- width : 500
27
+ width : 200
110
28
} ,
111
29
{
112
30
Header : 'Price' ,
113
31
accessor : 'price' ,
114
- width : 500
32
+ width : 200
115
33
}
116
34
] ;
117
35
@@ -467,3 +385,140 @@ const carData = [
467
385
price : 50000
468
386
}
469
387
] ;
388
+
389
+ function shuffleArray ( array ) {
390
+ const resultArr = [ ...array ] ;
391
+
392
+ for ( var i = resultArr . length - 1 ; i > 0 ; i -- ) {
393
+ var j = Math . floor ( Math . random ( ) * ( i + 1 ) ) ;
394
+ var temp = resultArr [ i ] ;
395
+ resultArr [ i ] = resultArr [ j ] ;
396
+ resultArr [ j ] = temp ;
397
+ }
398
+
399
+ return resultArr ;
400
+ }
401
+
402
+ class TableComponent extends React . Component {
403
+ constructor ( props ) {
404
+ super ( props ) ;
405
+ this . ReactTableDraggableColumns = withDraggableColumns ( ReactTable ) ;
406
+ }
407
+
408
+ render ( ) {
409
+ const {
410
+ removeColumn,
411
+ randomOrderColumns,
412
+ setColumns,
413
+ columns,
414
+ draggable,
415
+ removeDraggable
416
+ } = this . props ;
417
+
418
+ return (
419
+ < >
420
+ < button style = { { backgroundColor : 'red' , color : 'white' } } onClick = { removeColumn } >
421
+ Remove A Column
422
+ </ button >
423
+
424
+ < button style = { { backgroundColor : 'blue' , color : 'white' } } onClick = { removeDraggable } >
425
+ Remove A Draggable
426
+ </ button >
427
+
428
+ < button style = { { backgroundColor : 'green' , color : 'white' } } onClick = { randomOrderColumns } >
429
+ Reshuffle Columns
430
+ </ button >
431
+ < br />
432
+ < strong > Draggable Columns: { draggable . join ( ', ' ) } </ strong >
433
+ < br />
434
+ < this . ReactTableDraggableColumns
435
+ style = { {
436
+ width : '98vw' ,
437
+ height : '500px'
438
+ } }
439
+ columns = { columns }
440
+ data = { carData }
441
+ showPagination = { false }
442
+ draggableColumns = { {
443
+ mode : DragMode . REORDER ,
444
+ draggable : draggable ,
445
+ enableColumnWideDrag : false ,
446
+ disableTableScroll : false ,
447
+ useDragImage : true ,
448
+ onDraggedColumnChange : cols => setColumns ( cols ) ,
449
+ onDropSuccess : (
450
+ draggedColumn ,
451
+ targetColumn ,
452
+ oldIndex ,
453
+ newIndex ,
454
+ oldOffset ,
455
+ newOffset
456
+ ) => {
457
+ /*console.log(
458
+ draggedColumn,
459
+ targetColumn,
460
+ oldIndex,
461
+ newIndex,
462
+ oldOffset,
463
+ newOffset
464
+ );*/
465
+ }
466
+ } }
467
+ />
468
+ </ >
469
+ ) ;
470
+ }
471
+ }
472
+
473
+ function ColumnOrderList ( { columns, randomOrderColumns } ) {
474
+ return (
475
+ < >
476
+ < strong > Column Order:</ strong >
477
+ < button
478
+ style = { { backgroundColor : 'green' , color : 'white' , margin : '0 15px' } }
479
+ onClick = { randomOrderColumns }
480
+ >
481
+ Reshuffle Columns
482
+ </ button >
483
+ < ul >
484
+ { columns . map ( ( col , idx ) => {
485
+ return < li key = { idx } > { col . Header } </ li > ;
486
+ } ) }
487
+ </ ul >
488
+ </ >
489
+ ) ;
490
+ }
491
+
492
+ export default function App ( ) {
493
+ const [ columns , setColumns ] = useState ( carColumns ) ;
494
+ const [ draggable , setDraggable ] = useState ( [ 'vin' , 'year' , 'brand' , 'color' , 'price' ] ) ;
495
+
496
+ const removeColumn = ( ) => {
497
+ setColumns ( prevState => prevState . slice ( 1 ) ) ;
498
+ } ;
499
+
500
+ const removeDraggable = ( ) => {
501
+ setDraggable ( prevState => prevState . slice ( 1 ) ) ;
502
+ } ;
503
+
504
+ const randomOrderColumns = ( ) => {
505
+ setColumns ( shuffleArray ( columns ) ) ;
506
+ } ;
507
+
508
+ return (
509
+ < div className = "App" >
510
+ < TableComponent
511
+ { ...{
512
+ removeColumn,
513
+ randomOrderColumns,
514
+ setColumns,
515
+ columns,
516
+ draggable,
517
+ removeDraggable
518
+ } }
519
+ />
520
+ < br />
521
+ < ColumnOrderList columns = { columns } randomOrderColumns = { randomOrderColumns } />
522
+ </ div >
523
+ ) ;
524
+ }
0 commit comments