@@ -43,7 +43,7 @@ const GridView = <T extends object>({
4343 ) ;
4444 const isMobile = useIsMobileScreen ( ) ;
4545 const isTablet = useIsOnlyTabletScreen ( ) ;
46- const [ currentColDefs , setCurrentColDefs ] = useState < ColDef [ ] > ( [ ] ) ;
46+ const [ currentColDefs , setCurrentColDefs ] = useState < ColDef [ ] | undefined > ( undefined ) ;
4747 const [ showResetButton , setShowResetButton ] = useState ( false ) ;
4848 const [ panelContainerClassName , setPanelContainerClassName ] = useState ( staticPanelContainerClassName ) ;
4949 const [ panelClassName , setPanelClassName ] = useState ( staticPanelClassName ) ;
@@ -59,7 +59,7 @@ const GridView = <T extends object>({
5959 ) ;
6060
6161 useEffect ( ( ) => {
62- if ( currentColDefs == null || currentColDefs . length === 0 ) {
62+ if ( ( currentColDefs == null || currentColDefs . length === 0 ) && columnDefs ) {
6363 const storageColumns = storageKey ? getColumnVisibilityFromStorage ( columnDefs , storageKey ) : null ;
6464 setCurrentColDefs (
6565 ! ( storageColumns && columnDefs && columnDefs . length > storageColumns ?. length )
@@ -88,12 +88,14 @@ const GridView = <T extends object>({
8888
8989 const toggleColumnVisibility = useCallback (
9090 ( id ?: string ) => {
91- const newColDefs = currentColDefs . map ( ( c ) => ( c . field === id ? { ...c , hide : ! c . hide } : c ) ) ;
92- setCurrentColDefs ( newColDefs ) ;
93- if ( storageKey ) {
94- saveColumnVisibilityToStorage ( newColDefs , storageKey ) ;
91+ if ( currentColDefs ) {
92+ const newColDefs = currentColDefs ?. map ( ( c ) => ( c . field === id ? { ...c , hide : ! c . hide } : c ) ) ;
93+ setCurrentColDefs ( newColDefs ) ;
94+ if ( storageKey ) {
95+ saveColumnVisibilityToStorage ( newColDefs , storageKey ) ;
96+ }
97+ setShowResetButton ( newColDefs . some ( ( c , index ) => c . hide !== columnDefs ?. [ index ] . hide ) ) ;
9598 }
96- setShowResetButton ( newColDefs . some ( ( c , index ) => c . hide !== columnDefs ?. [ index ] . hide ) ) ;
9799 } ,
98100 [ currentColDefs , columnDefs , storageKey ] ,
99101 ) ;
@@ -108,21 +110,23 @@ const GridView = <T extends object>({
108110 } ;
109111
110112 const onFindColumn = useCallback (
111- ( field ?: string ) => currentColDefs . findIndex ( ( c ) => c . field === field ) ,
113+ ( field ?: string ) => currentColDefs ? .findIndex ( ( c ) => c . field === field ) ,
112114 [ currentColDefs ] ,
113115 ) ;
114116
115117 const onMoveColumn = useCallback (
116118 ( field : string , atIndex : number ) => {
117119 const index = onFindColumn ( field ) ;
118- const updatedColDefs = [ ...currentColDefs ] ;
119- const [ removedColDef ] = updatedColDefs . splice ( index , 1 ) ;
120- updatedColDefs . splice ( atIndex , 0 , removedColDef ) ;
121- if ( storageKey ) {
122- saveColumnVisibilityToStorage ( updatedColDefs , storageKey ) ;
120+ if ( index ) {
121+ const updatedColDefs = [ ...( currentColDefs || [ ] ) ] ;
122+ const [ removedColDef ] = updatedColDefs . splice ( index , 1 ) ;
123+ updatedColDefs . splice ( atIndex , 0 , removedColDef ) ;
124+ if ( storageKey ) {
125+ saveColumnVisibilityToStorage ( updatedColDefs , storageKey ) ;
126+ }
127+ setCurrentColDefs ( updatedColDefs ) ;
128+ setShowResetButton ( checkColDefsChanges ( updatedColDefs , columnDefs || [ ] ) ) ;
123129 }
124- setCurrentColDefs ( updatedColDefs ) ;
125- setShowResetButton ( checkColDefsChanges ( updatedColDefs , columnDefs || [ ] ) ) ;
126130 } ,
127131 [ onFindColumn , currentColDefs , setShowResetButton , columnDefs , storageKey ] ,
128132 ) ;
@@ -144,7 +148,7 @@ const GridView = <T extends object>({
144148 < div className = { panelContainerClassName } >
145149 < DndProvider backend = { HTML5Backend } >
146150 < ColumnsPanel
147- columns = { currentColDefs }
151+ columns = { currentColDefs || [ ] }
148152 showResetButton = { showResetButton }
149153 panelClassName = { panelClassName }
150154 onReset = { onResetToDefault }
0 commit comments