Commit 26b6b364 by 同語 Committed by GitHub

feat: persist table page size across navigation/sessions (#5377)

Merge pull request #5403 from feitianbubu/feat/persist-table-page-size
parents 2154fce0 17e34273
......@@ -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),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment