iter(g69): 修正单击排序升降序循环与 getPageInfo 陈旧快照
This commit is contained in:
@@ -80,4 +80,43 @@ const before = table.getVisibleRows(); // memo 基线
|
||||
table.dispatch({ type: 'clearSelection' }); // 无关状态变更
|
||||
assert(table.getVisibleRows() === before, 'derive stages memoized across unrelated state changes');
|
||||
|
||||
// —— 补充不变量 ——
|
||||
const fresh = createTable({
|
||||
data: users,
|
||||
columns: [{ key: 'name', header: 'Name', sortable: true }],
|
||||
rowKey: 'id',
|
||||
plugins: [paginationPlugin()],
|
||||
initialState: { pagination: { page: 2, pageSize: 2 } },
|
||||
});
|
||||
assert(
|
||||
fresh.getPageInfo().page === 2 && fresh.getPageInfo().pageSize === 2,
|
||||
'getPageInfo 无需先取可见行即返回 initialState 生效值',
|
||||
);
|
||||
assert(fresh.getPageInfo().totalPages === 3, 'getPageInfo 的 totalPages 由上游 total 推导');
|
||||
|
||||
const marks = createTable({
|
||||
data: users,
|
||||
columns: [{ key: 'name', header: 'Name' }, { key: 'city', header: 'City' }],
|
||||
rowKey: 'id',
|
||||
plugins: [filterPlugin(), paginationPlugin(), selectionPlugin()],
|
||||
initialState: { pagination: { page: 1, pageSize: 2 } },
|
||||
});
|
||||
marks.selectAllVisible(); // 选中第 1 页的 id 1 / 2
|
||||
marks.dispatch({ type: 'setFilter', key: 'city', value: 'Beijing' }); // 可见行整体换掉
|
||||
assert(
|
||||
JSON.stringify(marks.getState().selection) === JSON.stringify([1, 2]),
|
||||
'selection 以 rowKey 记账,筛选换掉可见行后仍保留',
|
||||
);
|
||||
|
||||
const toggle = createTable({
|
||||
data: users,
|
||||
columns: [{ key: 'age', header: 'Age', sortable: true }],
|
||||
rowKey: 'id',
|
||||
plugins: [sortPlugin()],
|
||||
});
|
||||
toggle.dispatch({ type: 'toggleSort', key: 'age' });
|
||||
toggle.dispatch({ type: 'toggleSort', key: 'age' });
|
||||
toggle.dispatch({ type: 'toggleSort', key: 'age' });
|
||||
assert(toggle.getState().sorting.length === 0, '同一列连点三次回到无序(asc → desc → 取消)');
|
||||
|
||||
console.log('SMOKE OK');
|
||||
|
||||
Reference in New Issue
Block a user