@@ -31,6 +31,7 @@ import {
31
31
COLUMN_NESTED_OR_OBJ_OF_FUNCTIONS ,
32
32
PASSTHRU_PROPS ,
33
33
PROPS_NOT_FOR_AG_GRID ,
34
+ GRID_DANGEROUS_FUNCTIONS ,
34
35
} from '../utils/propCategories' ;
35
36
import debounce from '../utils/debounce' ;
36
37
@@ -296,6 +297,9 @@ export default class DashAgGrid extends Component {
296
297
}
297
298
return this . convertAllProps ( value ) ;
298
299
}
300
+ if ( GRID_DANGEROUS_FUNCTIONS [ target ] ) {
301
+ return this . convertMaybeFunctionNoParams ( value , { prop : target } ) ;
302
+ }
299
303
if ( target === 'getRowId' ) {
300
304
return this . convertFunction ( value ) ;
301
305
}
@@ -329,16 +333,17 @@ export default class DashAgGrid extends Component {
329
333
330
334
onFilterChanged ( ) {
331
335
const { setProps, rowModelType} = this . props ;
336
+ const filterModel = this . state . gridApi . getFilterModel ( ) ;
337
+ const propsToSet = { filterModel} ;
332
338
if ( rowModelType === 'clientSide' ) {
333
339
const virtualRowData = [ ] ;
334
340
this . state . gridApi . forEachNodeAfterFilter ( ( node ) => {
335
341
virtualRowData . push ( node . data ) ;
336
342
} ) ;
337
-
338
- const filterModel = this . state . gridApi . getFilterModel ( ) ;
339
- this . setState ( { filterModel} ) ;
340
- setProps ( { virtualRowData} ) ;
343
+ propsToSet . virtualRowData = virtualRowData ;
341
344
}
345
+
346
+ setProps ( { ...propsToSet } ) ;
342
347
}
343
348
344
349
getRowData ( ) {
@@ -431,8 +436,9 @@ export default class DashAgGrid extends Component {
431
436
432
437
onRowDataUpdated ( ) {
433
438
// Handles preserving existing selections when rowData is updated in a callback
434
- const { selectedRows, setProps, rowData, rowModelType} = this . props ;
435
- const { openGroups, filterModel} = this . state ;
439
+ const { selectedRows, setProps, rowData, rowModelType, filterModel} =
440
+ this . props ;
441
+ const { openGroups} = this . state ;
436
442
437
443
if ( rowData && rowModelType === 'clientSide' && this . state . gridApi ) {
438
444
const virtualRowData = [ ] ;
@@ -517,7 +523,21 @@ export default class DashAgGrid extends Component {
517
523
onGridReady ( params ) {
518
524
// Applying Infinite Row Model
519
525
// see: https://www.ag-grid.com/javascript-grid/infinite-scrolling/
520
- const { rowModelType, selectedRows} = this . props ;
526
+ const {
527
+ rowModelType,
528
+ selectedRows,
529
+ resetColumnState,
530
+ csvExportParams,
531
+ exportDataAsCsv,
532
+ selectAll,
533
+ deselectAll,
534
+ autoSizeAllColumns,
535
+ deleteSelectedRows,
536
+ filterModel,
537
+ setProps,
538
+ } = this . props ;
539
+
540
+ const propsToSet = { } ;
521
541
if ( rowModelType === 'infinite' ) {
522
542
params . api . setDatasource ( this . getDatasource ( ) ) ;
523
543
}
@@ -528,6 +548,45 @@ export default class DashAgGrid extends Component {
528
548
} ) ;
529
549
530
550
this . updateColumnWidths ( ) ;
551
+
552
+ if ( ! isEmpty ( filterModel ) ) {
553
+ this . state . gridApi . setFilterModel ( filterModel ) ;
554
+ }
555
+
556
+ if ( resetColumnState ) {
557
+ this . resetColumnState ( false ) ;
558
+ propsToSet . resetColumnState = false ;
559
+ }
560
+
561
+ if ( exportDataAsCsv ) {
562
+ this . exportDataAsCsv ( csvExportParams , false ) ;
563
+ propsToSet . exportDataAsCsv = false ;
564
+ }
565
+
566
+ if ( selectAll ) {
567
+ this . selectAll ( selectAll , false ) ;
568
+ propsToSet . selectAll = false ;
569
+ }
570
+
571
+ if ( deselectAll ) {
572
+ this . deselectAll ( false ) ;
573
+ propsToSet . deselectAll = false ;
574
+ }
575
+
576
+ if ( autoSizeAllColumns ) {
577
+ this . autoSizeAllColumns ( autoSizeAllColumns , false ) ;
578
+ propsToSet . autoSizeAllColumns = false ;
579
+ }
580
+
581
+ if ( deleteSelectedRows ) {
582
+ this . deleteSelectedRows ( false ) ;
583
+ propsToSet . deleteSelectedRows = false ;
584
+ }
585
+
586
+ if ( ! isEmpty ( propsToSet ) ) {
587
+ setProps ( propsToSet ) ;
588
+ }
589
+
531
590
this . updateColumnState ( ) ;
532
591
533
592
if ( this . state . rowTransaction ) {
@@ -666,44 +725,99 @@ export default class DashAgGrid extends Component {
666
725
) ;
667
726
}
668
727
669
- resetColumnState ( ) {
670
- this . state . gridColumnApi . resetColumnState ( ) ;
671
- this . props . setProps ( {
672
- resetColumnState : false ,
673
- } ) ;
728
+ // Event actions that reset
729
+ exportDataAsCsv ( csvExportParams , reset = true ) {
730
+ if ( ! this . state . gridApi ) {
731
+ return ;
732
+ }
733
+ this . state . gridApi . exportDataAsCsv ( csvExportParams ) ;
734
+ if ( reset ) {
735
+ this . props . setProps ( {
736
+ exportDataAsCsv : false ,
737
+ } ) ;
738
+ }
674
739
}
675
740
676
- exportDataAsCsv ( csvExportParams ) {
677
- this . state . gridApi . exportDataAsCsv ( csvExportParams ) ;
678
- this . props . setProps ( {
679
- exportDataAsCsv : false ,
680
- } ) ;
741
+ resetColumnState ( reset = true ) {
742
+ if ( ! this . state . gridApi ) {
743
+ return ;
744
+ }
745
+ this . state . gridColumnApi . resetColumnState ( ) ;
746
+ if ( reset ) {
747
+ this . props . setProps ( {
748
+ resetColumnState : false ,
749
+ } ) ;
750
+ }
681
751
}
682
752
683
- selectAll ( opts ) {
753
+ selectAll ( opts , reset = true ) {
754
+ if ( ! this . state . gridApi ) {
755
+ return ;
756
+ }
684
757
if ( opts ?. filtered ) {
685
758
this . state . gridApi . selectAllFiltered ( ) ;
686
759
} else {
687
760
this . state . gridApi . selectAll ( ) ;
688
761
}
689
- this . props . setProps ( {
690
- selectAll : false ,
691
- } ) ;
762
+ if ( reset ) {
763
+ this . props . setProps ( {
764
+ selectAll : false ,
765
+ } ) ;
766
+ }
692
767
}
693
768
694
- deselectAll ( ) {
769
+ deselectAll ( reset = true ) {
770
+ if ( ! this . state . gridApi ) {
771
+ return ;
772
+ }
695
773
this . state . gridApi . deselectAll ( ) ;
696
- this . props . setProps ( {
697
- deselectAll : false ,
698
- } ) ;
774
+ if ( reset ) {
775
+ this . props . setProps ( {
776
+ deselectAll : false ,
777
+ } ) ;
778
+ }
699
779
}
700
780
701
- deleteSelectedRows ( ) {
781
+ deleteSelectedRows ( reset = true ) {
782
+ if ( ! this . state . gridApi ) {
783
+ return ;
784
+ }
702
785
const sel = this . state . gridApi . getSelectedRows ( ) ;
703
786
this . state . gridApi . applyTransaction ( { remove : sel } ) ;
787
+ if ( reset ) {
788
+ this . props . setProps ( {
789
+ deleteSelectedRows : false ,
790
+ rowData : this . getRowData ( ) ,
791
+ } ) ;
792
+ }
793
+ }
794
+
795
+ autoSizeAllColumns ( opts , reset = true ) {
796
+ if ( ! this . state . gridApi ) {
797
+ return ;
798
+ }
799
+ const allColumnIds = this . state . gridColumnApi
800
+ . getColumnState ( )
801
+ . map ( ( column ) => column . colId ) ;
802
+ const skipHeaders = Boolean ( opts ?. skipHeaders ) ;
803
+ this . state . gridColumnApi . autoSizeColumns ( allColumnIds , skipHeaders ) ;
804
+ if ( reset ) {
805
+ this . props . setProps ( {
806
+ autoSizeAllColumns : false ,
807
+ } ) ;
808
+ }
809
+ }
810
+ // end event actions
811
+
812
+ updateColumnState ( ) {
813
+ if ( ! this . state . gridApi ) {
814
+ return ;
815
+ }
704
816
this . props . setProps ( {
705
- deleteSelectedRows : false ,
706
- rowData : this . getRowData ( ) ,
817
+ columnState : JSON . parse (
818
+ JSON . stringify ( this . state . gridColumnApi . getColumnState ( ) )
819
+ ) ,
820
+ updateColumnState : false ,
707
821
} ) ;
708
822
}
709
823
@@ -743,26 +857,6 @@ export default class DashAgGrid extends Component {
743
857
this . syncRowData ( ) ;
744
858
}
745
859
746
- autoSizeAllColumns ( opts ) {
747
- const allColumnIds = this . state . gridColumnApi
748
- . getColumnState ( )
749
- . map ( ( column ) => column . colId ) ;
750
- const skipHeaders = Boolean ( opts ?. skipHeaders ) ;
751
- this . state . gridColumnApi . autoSizeColumns ( allColumnIds , skipHeaders ) ;
752
- this . props . setProps ( {
753
- autoSizeAllColumns : false ,
754
- } ) ;
755
- }
756
-
757
- updateColumnState ( ) {
758
- this . props . setProps ( {
759
- columnState : JSON . parse (
760
- JSON . stringify ( this . state . gridColumnApi . getColumnState ( ) )
761
- ) ,
762
- updateColumnState : false ,
763
- } ) ;
764
- }
765
-
766
860
render ( ) {
767
861
const {
768
862
id,
@@ -778,6 +872,7 @@ export default class DashAgGrid extends Component {
778
872
updateColumnState,
779
873
csvExportParams,
780
874
dashGridOptions,
875
+ filterModel,
781
876
...restProps
782
877
} = this . props ;
783
878
@@ -787,6 +882,14 @@ export default class DashAgGrid extends Component {
787
882
omit ( NO_CONVERT_PROPS , { ...dashGridOptions , ...restProps } )
788
883
) ;
789
884
885
+ if ( filterModel ) {
886
+ if ( this . state . gridApi ) {
887
+ if ( this . state . gridApi . getFilterModel ( ) !== filterModel ) {
888
+ this . state . gridApi . setFilterModel ( filterModel ) ;
889
+ }
890
+ }
891
+ }
892
+
790
893
if ( resetColumnState ) {
791
894
this . resetColumnState ( ) ;
792
895
}
0 commit comments