@@ -134,29 +134,6 @@ function TableRender<T extends Record<string, any>, U, ValueType>(
134
134
return loopFilter ( tableColumns ) ;
135
135
} , [ counter . columnsMap , tableColumns ] ) ;
136
136
137
- /** 如果所有列中的 filters = true | undefined 说明是用的是本地筛选 任何一列配置 filters=false,就能绕过这个判断 */
138
- const useLocaleFilter = useMemo ( ( ) => {
139
- const _columns : any [ ] = [ ] ;
140
- // 平铺所有columns, 用于判断是用的是本地筛选
141
- const loopColumns = ( data : any [ ] ) => {
142
- for ( let i = 0 ; i < data . length ; i ++ ) {
143
- const _curItem = data [ i ] ;
144
- if ( _curItem . children ) {
145
- loopColumns ( _curItem . children ) ;
146
- } else {
147
- _columns . push ( _curItem ) ;
148
- }
149
- }
150
- } ;
151
- loopColumns ( columns ) ;
152
- return _columns ?. every ( ( column ) => {
153
- return (
154
- ( ! ! column . filters && ! ! column . onFilter ) ||
155
- ( column . filters === undefined && column . onFilter === undefined )
156
- ) ;
157
- } ) ;
158
- } , [ columns ] ) ;
159
-
160
137
/**
161
138
* 如果是分页的新增,总是加到最后一行
162
139
*
@@ -226,9 +203,8 @@ function TableRender<T extends Record<string, any>, U, ValueType>(
226
203
extra : TableCurrentDataSource < T > ,
227
204
) => {
228
205
rest . onChange ?.( changePagination , filters , sorter , extra ) ;
229
- if ( ! useLocaleFilter ) {
230
- onFilterChange ( omitUndefined < any > ( filters ) ) ;
231
- }
206
+
207
+ onFilterChange ( omitUndefined < any > ( filters ) ) ;
232
208
233
209
// 制造筛选的数据
234
210
// 制造一个排序的数据
@@ -240,7 +216,7 @@ function TableRender<T extends Record<string, any>, U, ValueType>(
240
216
} ) ,
241
217
{ } ,
242
218
) ;
243
- onSortChange ( omitUndefined < any > ( data ) ) ;
219
+ onSortChange ( omitUndefined < any > ( data ) ?? { } ) ;
244
220
} else {
245
221
const sorterOfColumn = sorter . column ?. sorter ;
246
222
const isSortByField = sorterOfColumn ?. toString ( ) === sorterOfColumn ;
@@ -249,7 +225,7 @@ function TableRender<T extends Record<string, any>, U, ValueType>(
249
225
omitUndefined ( {
250
226
[ `${ isSortByField ? sorterOfColumn : sorter . field } ` ] :
251
227
sorter . order as SortOrder ,
252
- } ) ,
228
+ } ) ?? { } ,
253
229
) ;
254
230
}
255
231
} ,
@@ -522,11 +498,44 @@ const ProTable = <
522
498
{ } ,
523
499
) ;
524
500
525
- /** 设置默认排序和筛选值 */
501
+ // 平铺所有columns, 用于判断是用的是本地筛选/排序
502
+ const loopColumns = useCallback ( ( data : any [ ] ) => {
503
+ const _columns : any [ ] = [ ] ;
504
+
505
+ for ( let i = 0 ; i < data . length ; i ++ ) {
506
+ const _curItem = data [ i ] ;
507
+ if ( _curItem . children ) {
508
+ loopColumns ( _curItem . children ) ;
509
+ } else {
510
+ _columns . push ( _curItem ) ;
511
+ }
512
+ }
513
+
514
+ return _columns
515
+ } , [ ] ) ;
516
+
517
+ /** 如果所有列中的 filters = true | undefined 说明是用的是本地筛选 任何一列配置 filters=false,就能绕过这个判断 */
518
+ const useLocaleFilter = useMemo ( ( ) => {
519
+ const _columns : any [ ] = loopColumns ( propsColumns ) ;
520
+ return _columns ?. every ( ( column ) => {
521
+ return (
522
+ ( ! ! column . filters && ! ! column . onFilter ) ||
523
+ ( column . filters === undefined && column . onFilter === undefined )
524
+ ) ;
525
+ } ) ;
526
+ } , [ loopColumns , propsColumns ] ) ;
527
+
528
+ /** 如果所有列中的 sorter != true 说明是用的是本地排序 任何一列配置 sorter=true,就能绕过这个判断 */
529
+ const useLocaleSorter = useMemo ( ( ) => {
530
+ const _columns : any [ ] = loopColumns ( propsColumns ) ;
531
+ return _columns ?. every ( ( column ) => column . sorter !== true ) ;
532
+ } , [ loopColumns , propsColumns ] ) ;
533
+
534
+ /** 设置默认的服務端排序和筛选值 */
526
535
useEffect ( ( ) => {
527
536
const { sort, filter } = parseDefaultColumnConfig ( propsColumns ) ;
528
- setProFilter ( filter ) ;
529
- setProSort ( sort ) ;
537
+ if ( ! useLocaleFilter ) setProFilter ( filter ) ;
538
+ if ( ! useLocaleSorter ) setProSort ( sort ) ;
530
539
// eslint-disable-next-line react-hooks/exhaustive-deps
531
540
} , [ ] ) ;
532
541
@@ -746,10 +755,13 @@ const ProTable = <
746
755
resetAll : ( ) => {
747
756
// 清空选中行
748
757
onCleanSelected ( ) ;
758
+
759
+ const { sort, filter } = parseDefaultColumnConfig ( propsColumns ) ;
749
760
// 清空筛选
750
- setProFilter ( { } ) ;
761
+ setProFilter ( filter ) ;
751
762
// 清空排序
752
- setProSort ( { } ) ;
763
+ setProSort ( sort ) ;
764
+
753
765
// 清空 toolbar 搜索
754
766
counter . setKeyWords ( undefined ) ;
755
767
// 重置页码
@@ -778,6 +790,8 @@ const ProTable = <
778
790
editableUtils,
779
791
rowKey,
780
792
childrenColumnName : props . expandable ?. childrenColumnName ,
793
+ proFilter,
794
+ proSort,
781
795
} ) . sort ( columnSort ( counter . columnsMap ) ) ;
782
796
// eslint-disable-next-line react-hooks/exhaustive-deps
783
797
} , [
@@ -788,6 +802,8 @@ const ProTable = <
788
802
type ,
789
803
// eslint-disable-next-line react-hooks/exhaustive-deps
790
804
editableUtils . editableKeys && editableUtils . editableKeys . join ( ',' ) ,
805
+ proFilter ,
806
+ proSort ,
791
807
] ) ;
792
808
793
809
/** Table Column 变化的时候更新一下,这个参数将会用于渲染 */
@@ -990,11 +1006,11 @@ const ProTable = <
990
1006
toolbarDom = { toolbarDom }
991
1007
hideToolbar = { hideToolbar }
992
1008
onSortChange = { ( sortConfig ) => {
993
- if ( proSort === sortConfig ) return ;
994
- setProSort ( sortConfig ?? { } ) ;
1009
+ if ( useLocaleSorter || sortConfig === proSort ) return ;
1010
+ setProSort ( sortConfig ) ;
995
1011
} }
996
1012
onFilterChange = { ( filterConfig ) => {
997
- if ( filterConfig === proFilter ) return ;
1013
+ if ( useLocaleFilter || filterConfig === proFilter ) return ;
998
1014
setProFilter ( filterConfig ) ;
999
1015
} }
1000
1016
editableUtils = { editableUtils }
0 commit comments