@@ -99,6 +99,42 @@ type ResourcesTableProps = {
9999 defaultView ?: "proxy" | "internal" ;
100100} ;
101101
102+
103+ const STORAGE_KEYS = {
104+ PAGE_SIZE : 'datatable-page-size' ,
105+ getTablePageSize : ( tableId ?: string ) =>
106+ tableId ? `datatable-${ tableId } -page-size` : STORAGE_KEYS . PAGE_SIZE
107+ } ;
108+
109+ const getStoredPageSize = ( tableId ?: string , defaultSize = 20 ) : number => {
110+ if ( typeof window === 'undefined' ) return defaultSize ;
111+
112+ try {
113+ const key = STORAGE_KEYS . getTablePageSize ( tableId ) ;
114+ const stored = localStorage . getItem ( key ) ;
115+ if ( stored ) {
116+ const parsed = parseInt ( stored , 10 ) ;
117+ if ( parsed > 0 && parsed <= 1000 ) {
118+ return parsed ;
119+ }
120+ }
121+ } catch ( error ) {
122+ console . warn ( 'Failed to read page size from localStorage:' , error ) ;
123+ }
124+ return defaultSize ;
125+ } ;
126+
127+ const setStoredPageSize = ( pageSize : number , tableId ?: string ) : void => {
128+ if ( typeof window === 'undefined' ) return ;
129+
130+ try {
131+ const key = STORAGE_KEYS . getTablePageSize ( tableId ) ;
132+ localStorage . setItem ( key , pageSize . toString ( ) ) ;
133+ } catch ( error ) {
134+ console . warn ( 'Failed to save page size to localStorage:' , error ) ;
135+ }
136+ } ;
137+
102138export default function SitesTable ( {
103139 resources,
104140 internalResources,
@@ -113,6 +149,13 @@ export default function SitesTable({
113149
114150 const api = createApiClient ( { env } ) ;
115151
152+ const [ proxyPageSize , setProxyPageSize ] = useState < number > ( ( ) =>
153+ getStoredPageSize ( 'proxy-resources' , 20 )
154+ ) ;
155+ const [ internalPageSize , setInternalPageSize ] = useState < number > ( ( ) =>
156+ getStoredPageSize ( 'internal-resources' , 20 )
157+ ) ;
158+
116159 const [ isDeleteModalOpen , setIsDeleteModalOpen ] = useState ( false ) ;
117160 const [ selectedResource , setSelectedResource ] =
118161 useState < ResourceRow | null > ( ) ;
@@ -559,7 +602,7 @@ export default function SitesTable({
559602 onGlobalFilterChange : setProxyGlobalFilter ,
560603 initialState : {
561604 pagination : {
562- pageSize : 20 ,
605+ pageSize : proxyPageSize ,
563606 pageIndex : 0
564607 }
565608 } ,
@@ -582,7 +625,7 @@ export default function SitesTable({
582625 onGlobalFilterChange : setInternalGlobalFilter ,
583626 initialState : {
584627 pagination : {
585- pageSize : 20 ,
628+ pageSize : internalPageSize ,
586629 pageIndex : 0
587630 }
588631 } ,
@@ -593,6 +636,16 @@ export default function SitesTable({
593636 }
594637 } ) ;
595638
639+ const handleProxyPageSizeChange = ( newPageSize : number ) => {
640+ setProxyPageSize ( newPageSize ) ;
641+ setStoredPageSize ( newPageSize , 'proxy-resources' ) ;
642+ } ;
643+
644+ const handleInternalPageSizeChange = ( newPageSize : number ) => {
645+ setInternalPageSize ( newPageSize ) ;
646+ setStoredPageSize ( newPageSize , 'internal-resources' ) ;
647+ } ;
648+
596649 return (
597650 < >
598651 { selectedResource && (
@@ -760,7 +813,10 @@ export default function SitesTable({
760813 </ TableBody >
761814 </ Table >
762815 < div className = "mt-4" >
763- < DataTablePagination table = { proxyTable } />
816+ < DataTablePagination
817+ table = { proxyTable }
818+ onPageSizeChange = { handleProxyPageSizeChange }
819+ />
764820 </ div >
765821 </ TabsContent >
766822 < TabsContent value = "internal" >
@@ -860,6 +916,7 @@ export default function SitesTable({
860916 < div className = "mt-4" >
861917 < DataTablePagination
862918 table = { internalTable }
919+ onPageSizeChange = { handleInternalPageSizeChange }
863920 />
864921 </ div >
865922 </ TabsContent >
0 commit comments