@@ -720,4 +720,104 @@ describe('<DataGridPro /> - Column pinning', () => {
720
720
expect ( ageCellColumnGroupHeader . textContent ) . to . equal ( 'Basic info' ) ;
721
721
} ) ;
722
722
} ) ;
723
+
724
+ describe ( 'pinned columns order in column management' , ( ) => {
725
+ it ( 'should keep pinned column order in column management panel when toggling columns' , async ( ) => {
726
+ const { user } = render (
727
+ < TestCase
728
+ rows = { [ { id : 1 , brand : 'Nike' } ] }
729
+ columns = { [ { field : 'id' } , { field : 'brand' } ] }
730
+ showToolbar
731
+ initialState = { {
732
+ pinnedColumns : {
733
+ left : [ 'brand' ] ,
734
+ } ,
735
+ } }
736
+ /> ,
737
+ ) ;
738
+
739
+ await user . click ( screen . getByRole ( 'button' , { name : 'Columns' } ) ) ;
740
+
741
+ const columnCheckboxes = screen . getAllByRole ( 'checkbox' ) ;
742
+
743
+ expect ( columnCheckboxes [ 0 ] ) . to . have . attribute ( 'name' , 'brand' ) ;
744
+ expect ( columnCheckboxes [ 1 ] ) . to . have . attribute ( 'name' , 'id' ) ;
745
+
746
+ await user . click ( columnCheckboxes [ 1 ] ) ;
747
+
748
+ await user . click ( screen . getByRole ( 'button' , { name : 'Columns' } ) ) ;
749
+ await user . click ( screen . getByRole ( 'button' , { name : 'Columns' } ) ) ;
750
+
751
+ const checkboxesAfterToggle = screen . getAllByRole ( 'checkbox' ) ;
752
+
753
+ expect ( checkboxesAfterToggle [ 0 ] ) . to . have . attribute ( 'name' , 'brand' ) ;
754
+ expect ( checkboxesAfterToggle [ 1 ] ) . to . have . attribute ( 'name' , 'id' ) ;
755
+ } ) ;
756
+
757
+ it ( 'should keep pinned column order in column management panel when clicking show/hide all checkbox' , async ( ) => {
758
+ const { user } = render (
759
+ < TestCase
760
+ rows = { [ { id : 0 , brand : 'Nike' } ] }
761
+ columns = { [ { field : 'id' } , { field : 'brand' } ] }
762
+ showToolbar
763
+ initialState = { {
764
+ pinnedColumns : {
765
+ left : [ 'brand' ] ,
766
+ } ,
767
+ } }
768
+ /> ,
769
+ ) ;
770
+
771
+ await user . click ( screen . getByRole ( 'button' , { name : 'Columns' } ) ) ;
772
+
773
+ const columnCheckboxes = screen . getAllByRole ( 'checkbox' ) ;
774
+
775
+ expect ( columnCheckboxes [ 0 ] ) . to . have . attribute ( 'name' , 'brand' ) ;
776
+ expect ( columnCheckboxes [ 1 ] ) . to . have . attribute ( 'name' , 'id' ) ;
777
+
778
+ await user . click ( columnCheckboxes [ columnCheckboxes . length - 1 ] ) ;
779
+
780
+ await user . click ( screen . getByRole ( 'button' , { name : 'Columns' } ) ) ;
781
+ await user . click ( screen . getByRole ( 'button' , { name : 'Columns' } ) ) ;
782
+
783
+ const checkboxesAfterToggle = screen . getAllByRole ( 'checkbox' ) ;
784
+ expect ( checkboxesAfterToggle [ 0 ] ) . to . have . attribute ( 'name' , 'brand' ) ;
785
+ expect ( checkboxesAfterToggle [ 1 ] ) . to . have . attribute ( 'name' , 'id' ) ;
786
+ } ) ;
787
+
788
+ it ( 'should update column order when pinned columns are updated' , async ( ) => {
789
+ const { user } = render (
790
+ < TestCase
791
+ rows = { [ { id : 0 , brand : 'Nike' , price : 100 } ] }
792
+ columns = { [ { field : 'id' } , { field : 'brand' } , { field : 'price' } ] }
793
+ showToolbar
794
+ initialState = { {
795
+ pinnedColumns : { } ,
796
+ columns : {
797
+ columnVisibilityModel : { id : false } ,
798
+ } ,
799
+ } }
800
+ /> ,
801
+ ) ;
802
+
803
+ await user . click ( screen . getByRole ( 'button' , { name : 'Columns' } ) ) ;
804
+
805
+ const columnCheckboxes = screen . getAllByRole ( 'checkbox' ) ;
806
+
807
+ expect ( columnCheckboxes [ 0 ] ) . to . have . attribute ( 'name' , 'id' ) ;
808
+ expect ( columnCheckboxes [ 1 ] ) . to . have . attribute ( 'name' , 'brand' ) ;
809
+ expect ( columnCheckboxes [ 2 ] ) . to . have . attribute ( 'name' , 'price' ) ;
810
+
811
+ await act ( ( ) => {
812
+ apiRef . current ?. pinColumn ( 'brand' , GridPinnedColumnPosition . LEFT ) ;
813
+ apiRef . current ?. pinColumn ( 'id' , GridPinnedColumnPosition . RIGHT ) ;
814
+ } ) ;
815
+
816
+ const checkboxesAfterPinning = screen . getAllByRole ( 'checkbox' ) ;
817
+
818
+ expect ( checkboxesAfterPinning [ 0 ] ) . to . have . attribute ( 'name' , 'brand' ) ;
819
+ expect ( checkboxesAfterPinning [ 1 ] ) . to . have . attribute ( 'name' , 'price' ) ;
820
+ expect ( checkboxesAfterPinning [ 2 ] ) . to . have . attribute ( 'name' , 'id' ) ;
821
+ } ) ;
822
+ } ) ;
723
823
} ) ;
0 commit comments