@@ -99,6 +99,42 @@ type ResourcesTableProps = {
99
99
defaultView ?: "proxy" | "internal" ;
100
100
} ;
101
101
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
+
102
138
export default function SitesTable ( {
103
139
resources,
104
140
internalResources,
@@ -113,6 +149,13 @@ export default function SitesTable({
113
149
114
150
const api = createApiClient ( { env } ) ;
115
151
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
+
116
159
const [ isDeleteModalOpen , setIsDeleteModalOpen ] = useState ( false ) ;
117
160
const [ selectedResource , setSelectedResource ] =
118
161
useState < ResourceRow | null > ( ) ;
@@ -559,7 +602,7 @@ export default function SitesTable({
559
602
onGlobalFilterChange : setProxyGlobalFilter ,
560
603
initialState : {
561
604
pagination : {
562
- pageSize : 20 ,
605
+ pageSize : proxyPageSize ,
563
606
pageIndex : 0
564
607
}
565
608
} ,
@@ -582,7 +625,7 @@ export default function SitesTable({
582
625
onGlobalFilterChange : setInternalGlobalFilter ,
583
626
initialState : {
584
627
pagination : {
585
- pageSize : 20 ,
628
+ pageSize : internalPageSize ,
586
629
pageIndex : 0
587
630
}
588
631
} ,
@@ -593,6 +636,16 @@ export default function SitesTable({
593
636
}
594
637
} ) ;
595
638
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
+
596
649
return (
597
650
< >
598
651
{ selectedResource && (
@@ -760,7 +813,10 @@ export default function SitesTable({
760
813
</ TableBody >
761
814
</ Table >
762
815
< div className = "mt-4" >
763
- < DataTablePagination table = { proxyTable } />
816
+ < DataTablePagination
817
+ table = { proxyTable }
818
+ onPageSizeChange = { handleProxyPageSizeChange }
819
+ />
764
820
</ div >
765
821
</ TabsContent >
766
822
< TabsContent value = "internal" >
@@ -860,6 +916,7 @@ export default function SitesTable({
860
916
< div className = "mt-4" >
861
917
< DataTablePagination
862
918
table = { internalTable }
919
+ onPageSizeChange = { handleInternalPageSizeChange }
863
920
/>
864
921
</ div >
865
922
</ TabsContent >
0 commit comments