feat: persist table page size across navigation/sessions (#5377)
Merge pull request #5403 from feitianbubu/feat/persist-table-page-size
This commit is contained in:
+25
-1
@@ -25,6 +25,27 @@ import type {
|
||||
|
||||
type SearchRecord = Record<string, unknown>
|
||||
|
||||
// Page size persists globally under the classic theme's key (raw number
|
||||
// string), so the choice is remembered and carries over from classic.
|
||||
const PAGE_SIZE_STORAGE_KEY = 'page-size'
|
||||
|
||||
function getStoredPageSize(): number | undefined {
|
||||
try {
|
||||
const n = parseInt(localStorage.getItem(PAGE_SIZE_STORAGE_KEY) ?? '', 10)
|
||||
return n > 0 ? n : undefined // n > 0 also rejects NaN
|
||||
} catch {
|
||||
return undefined
|
||||
}
|
||||
}
|
||||
|
||||
function setStoredPageSize(size: number) {
|
||||
try {
|
||||
localStorage.setItem(PAGE_SIZE_STORAGE_KEY, String(size))
|
||||
} catch {
|
||||
/* ignore */
|
||||
}
|
||||
}
|
||||
|
||||
export type NavigateFn = (opts: {
|
||||
search:
|
||||
| true
|
||||
@@ -139,7 +160,9 @@ export function useTableUrlState(
|
||||
const rawPageSize = (search as SearchRecord)[pageSizeKey]
|
||||
const pageNum = typeof rawPage === 'number' ? rawPage : defaultPage
|
||||
const pageSizeNum =
|
||||
typeof rawPageSize === 'number' ? rawPageSize : defaultPageSize
|
||||
typeof rawPageSize === 'number'
|
||||
? rawPageSize
|
||||
: (getStoredPageSize() ?? defaultPageSize)
|
||||
return { pageIndex: Math.max(0, pageNum - 1), pageSize: pageSizeNum }
|
||||
}, [search, pageKey, pageSizeKey, defaultPage, defaultPageSize])
|
||||
|
||||
@@ -147,6 +170,7 @@ export function useTableUrlState(
|
||||
const next = typeof updater === 'function' ? updater(pagination) : updater
|
||||
const nextPage = next.pageIndex + 1
|
||||
const nextPageSize = next.pageSize
|
||||
if (nextPageSize !== pagination.pageSize) setStoredPageSize(nextPageSize)
|
||||
navigate({
|
||||
search: (prev) => ({
|
||||
...(prev as SearchRecord),
|
||||
|
||||
Reference in New Issue
Block a user