feat: Saving user's page size choices #171

This commit is contained in:
rustmailer
2026-03-11 12:40:20 +08:00
parent 8f331080bf
commit 396383aa97
14 changed files with 55 additions and 7 deletions
@@ -71,6 +71,7 @@ export function DataTablePagination<TData>({
<Select <Select
value={`${table.getState().pagination.pageSize}`} value={`${table.getState().pagination.pageSize}`}
onValueChange={(value) => { onValueChange={(value) => {
localStorage.setItem('bichon_accounts_page_size', value);
table.setPageSize(Number(value)) table.setPageSize(Number(value))
}} }}
> >
@@ -78,7 +79,7 @@ export function DataTablePagination<TData>({
<SelectValue placeholder={table.getState().pagination.pageSize} /> <SelectValue placeholder={table.getState().pagination.pageSize} />
</SelectTrigger> </SelectTrigger>
<SelectContent side='top'> <SelectContent side='top'>
{[10, 20, 30, 40, 50].map((pageSize) => ( {[10, 20, 30, 40, 50, 100, 150].map((pageSize) => (
<SelectItem key={pageSize} value={`${pageSize}`}> <SelectItem key={pageSize} value={`${pageSize}`}>
{pageSize} {pageSize}
</SelectItem> </SelectItem>
@@ -75,6 +75,12 @@ export function AccountTable({ columns, data }: DataTableProps) {
rowSelection, rowSelection,
columnFilters, columnFilters,
}, },
initialState: {
pagination: {
pageIndex: 0,
pageSize: Number(localStorage.getItem('bichon_accounts_page_size')) || 10
}
},
enableRowSelection: true, enableRowSelection: true,
onRowSelectionChange: setRowSelection, onRowSelectionChange: setRowSelection,
onSortingChange: setSorting, onSortingChange: setSorting,
@@ -71,6 +71,7 @@ export function DataTablePagination<TData>({
<Select <Select
value={`${table.getState().pagination.pageSize}`} value={`${table.getState().pagination.pageSize}`}
onValueChange={(value) => { onValueChange={(value) => {
localStorage.setItem('bichon_oauth2_page_size', value);
table.setPageSize(Number(value)) table.setPageSize(Number(value))
}} }}
> >
@@ -74,6 +74,12 @@ export function Oauth2Table({ columns, data }: DataTableProps) {
rowSelection, rowSelection,
columnFilters, columnFilters,
}, },
initialState: {
pagination: {
pageIndex: 0,
pageSize: Number(localStorage.getItem('bichon_oauth2_page_size')) || 10
}
},
enableRowSelection: true, enableRowSelection: true,
onRowSelectionChange: setRowSelection, onRowSelectionChange: setRowSelection,
onSortingChange: setSorting, onSortingChange: setSorting,
+2 -2
View File
@@ -51,7 +51,7 @@ export default function Search() {
page, page,
pageSize, pageSize,
setPage, setPage,
setPageSize, setSearchPageSize,
setSortBy, setSortBy,
setSortOrder, setSortOrder,
filter, filter,
@@ -60,7 +60,7 @@ export default function Search() {
const handleSetPageSize = (pageSize: number) => { const handleSetPageSize = (pageSize: number) => {
setPage(1); setPage(1);
setPageSize(pageSize) setSearchPageSize(pageSize)
} }
const handleTagToggle = (tag: string) => { const handleTagToggle = (tag: string) => {
@@ -71,6 +71,7 @@ export function DataTablePagination<TData>({
<Select <Select
value={`${table.getState().pagination.pageSize}`} value={`${table.getState().pagination.pageSize}`}
onValueChange={(value) => { onValueChange={(value) => {
localStorage.setItem('bichon_proxy_page_size', value);
table.setPageSize(Number(value)) table.setPageSize(Number(value))
}} }}
> >
@@ -76,6 +76,12 @@ export function ProxyTable({ columns, data }: DataTableProps) {
rowSelection, rowSelection,
columnFilters, columnFilters,
}, },
initialState: {
pagination: {
pageIndex: 0,
pageSize: Number(localStorage.getItem('bichon_proxy_page_size')) || 10
}
},
enableRowSelection: true, enableRowSelection: true,
onRowSelectionChange: setRowSelection, onRowSelectionChange: setRowSelection,
onSortingChange: setSorting, onSortingChange: setSorting,
@@ -72,6 +72,7 @@ export function DataTablePagination<TData>({
<Select <Select
value={`${table.getState().pagination.pageSize}`} value={`${table.getState().pagination.pageSize}`}
onValueChange={(value) => { onValueChange={(value) => {
localStorage.setItem('bichon_apitoken_page_size', value);
table.setPageSize(Number(value)) table.setPageSize(Number(value))
}} }}
> >
@@ -75,6 +75,12 @@ export function ApiTokensTable({ columns, data }: DataTableProps) {
rowSelection, rowSelection,
columnFilters, columnFilters,
}, },
initialState: {
pagination: {
pageIndex: 0,
pageSize: Number(localStorage.getItem('bichon_apitoken_page_size')) || 10
}
},
enableRowSelection: true, enableRowSelection: true,
onRowSelectionChange: setRowSelection, onRowSelectionChange: setRowSelection,
onSortingChange: setSorting, onSortingChange: setSorting,
@@ -71,6 +71,7 @@ export function DataTablePagination<TData>({
<Select <Select
value={`${table.getState().pagination.pageSize}`} value={`${table.getState().pagination.pageSize}`}
onValueChange={(value) => { onValueChange={(value) => {
localStorage.setItem('bichon_roles_page_size', value);
table.setPageSize(Number(value)) table.setPageSize(Number(value))
}} }}
> >
@@ -78,7 +79,7 @@ export function DataTablePagination<TData>({
<SelectValue placeholder={table.getState().pagination.pageSize} /> <SelectValue placeholder={table.getState().pagination.pageSize} />
</SelectTrigger> </SelectTrigger>
<SelectContent side='top'> <SelectContent side='top'>
{[10, 20, 30, 40, 50].map((pageSize) => ( {[10, 20, 30, 40, 50, 100].map((pageSize) => (
<SelectItem key={pageSize} value={`${pageSize}`}> <SelectItem key={pageSize} value={`${pageSize}`}>
{pageSize} {pageSize}
</SelectItem> </SelectItem>
@@ -75,6 +75,12 @@ export function RolesTable({ columns, data }: DataTableProps) {
rowSelection, rowSelection,
columnFilters, columnFilters,
}, },
initialState: {
pagination: {
pageIndex: 0,
pageSize: Number(localStorage.getItem('bichon_roles_page_size')) || 10
}
},
enableRowSelection: true, enableRowSelection: true,
onRowSelectionChange: setRowSelection, onRowSelectionChange: setRowSelection,
onSortingChange: setSorting, onSortingChange: setSorting,
@@ -69,6 +69,7 @@ export function DataTablePagination<TData>({
<Select <Select
value={`${table.getState().pagination.pageSize}`} value={`${table.getState().pagination.pageSize}`}
onValueChange={(value) => { onValueChange={(value) => {
localStorage.setItem('bichon_users_page_size', value);
table.setPageSize(Number(value)) table.setPageSize(Number(value))
}} }}
> >
@@ -76,7 +77,7 @@ export function DataTablePagination<TData>({
<SelectValue placeholder={table.getState().pagination.pageSize} /> <SelectValue placeholder={table.getState().pagination.pageSize} />
</SelectTrigger> </SelectTrigger>
<SelectContent side='top'> <SelectContent side='top'>
{[10, 20, 30, 40, 50].map((pageSize) => ( {[10, 20, 30, 40, 50, 100].map((pageSize) => (
<SelectItem key={pageSize} value={`${pageSize}`}> <SelectItem key={pageSize} value={`${pageSize}`}>
{pageSize} {pageSize}
</SelectItem> </SelectItem>
@@ -75,6 +75,12 @@ export function UsersTable({ columns, data }: DataTableProps) {
rowSelection, rowSelection,
columnFilters, columnFilters,
}, },
initialState: {
pagination: {
pageIndex: 0,
pageSize: Number(localStorage.getItem('bichon_users_page_size')) || 10
}
},
enableRowSelection: true, enableRowSelection: true,
onRowSelectionChange: setRowSelection, onRowSelectionChange: setRowSelection,
onSortingChange: setSorting, onSortingChange: setSorting,
+8 -2
View File
@@ -29,7 +29,7 @@ export function useSearchMessages() {
// const queryClient = useQueryClient(); // const queryClient = useQueryClient();
const [filter, _setFilter] = useState<Record<string, any>>({}); const [filter, _setFilter] = useState<Record<string, any>>({});
const [page, setPage] = useState(1); const [page, setPage] = useState(1);
const [pageSize, setPageSize] = useState(30); const [pageSize, setPageSize] = useState(Number(localStorage.getItem('bichon_search_page_size')) || 30);
const [sortBy, setSortBy] = useState<"DATE" | "SIZE">("DATE"); const [sortBy, setSortBy] = useState<"DATE" | "SIZE">("DATE");
const [sortOrder, setSortOrder] = useState<"desc" | "asc">("desc"); const [sortOrder, setSortOrder] = useState<"desc" | "asc">("desc");
@@ -38,6 +38,12 @@ export function useSearchMessages() {
setPage(1); setPage(1);
}, []); }, []);
const setSearchPageSize = (value: number) => {
localStorage.setItem('bichon_search_page_size', value.toString());
setPageSize(value);
}
const onSubmit = (cleaned: Record<string, any>) => { const onSubmit = (cleaned: Record<string, any>) => {
if ('has_attachment' in cleaned && cleaned.has_attachment === false) { if ('has_attachment' in cleaned && cleaned.has_attachment === false) {
delete cleaned.has_attachment; delete cleaned.has_attachment;
@@ -84,7 +90,7 @@ export function useSearchMessages() {
total: data?.total_items ?? 0, total: data?.total_items ?? 0,
totalPages: data?.total_pages ?? 1, totalPages: data?.total_pages ?? 1,
pageSize: data?.page_size ?? pageSize, pageSize: data?.page_size ?? pageSize,
setPageSize, setSearchPageSize,
sortBy, sortBy,
setSortBy, setSortBy,
sortOrder, sortOrder,