iter(g69): 修正单击排序升降序循环与 getPageInfo 陈旧快照
This commit is contained in:
@@ -54,7 +54,10 @@ export function paginationPlugin<T = unknown>(): TablePlugin<T> {
|
||||
nextPage: () => table.dispatch({ type: 'setPage', page: pageInfo.page + 1 }),
|
||||
prevPage: () => table.dispatch({ type: 'setPage', page: pageInfo.page - 1 }),
|
||||
setPageSize: (pageSize: number) => table.dispatch({ type: 'setPageSize', pageSize }),
|
||||
getPageInfo: (): PageInfo => ({ ...pageInfo }),
|
||||
getPageInfo: (): PageInfo => {
|
||||
table.getVisibleRows(); // 先跑一遍派生(内部有 memo),保证快照对应当前 state
|
||||
return { ...pageInfo };
|
||||
},
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
@@ -41,11 +41,13 @@ export function sortPlugin<T = unknown>(
|
||||
case 'setSorting':
|
||||
return { ...state, sorting: action.sorting };
|
||||
case 'toggleSort': {
|
||||
const rules = action.multi ? [...state.sorting] : []; // 非 multi 直接单列重置
|
||||
const idx = rules.findIndex((r) => r.key === action.key);
|
||||
if (idx === -1) rules.push({ key: action.key, dir: initialDir });
|
||||
else if (rules[idx].dir === 'asc') rules[idx] = { key: action.key, dir: 'desc' };
|
||||
else rules.splice(idx, 1); // desc 再点即取消
|
||||
const idx = state.sorting.findIndex((r) => r.key === action.key); // 本列当前方向的位置
|
||||
// 非 multi 只保留本列(单选语义),multi 保留全部列;不能一味清空,否则本列永远停在 asc
|
||||
const rules = action.multi ? [...state.sorting] : idx === -1 ? [] : [state.sorting[idx]];
|
||||
const at = rules.findIndex((r) => r.key === action.key);
|
||||
if (at === -1) rules.push({ key: action.key, dir: initialDir });
|
||||
else if (rules[at].dir === 'asc') rules[at] = { key: action.key, dir: 'desc' };
|
||||
else rules.splice(at, 1); // desc 再点即取消
|
||||
return { ...state, sorting: rules };
|
||||
}
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user