@@ -59,33 +59,78 @@ const getColumnVis = () => {
5959 }
6060}
6161
62+ const initialFilters = {
63+ column : "name" ,
64+ columnVisibility : getColumnVis ( ) ,
65+ page : "bin" ,
66+ search : '' ,
67+ }
68+
69+ const getUrlParams = ( ) => {
70+ const params = new URLSearchParams ( window . location . search ) ;
71+ return {
72+ column : params . get ( 'searchBy' ) || initialFilters . column ,
73+ page : params . get ( 'repo' ) || initialFilters . page ,
74+ search : params . get ( 'search' ) || initialFilters . search ,
75+ } ;
76+ } ;
77+
78+ const updateUrlParams = ( params : typeof initialFilters ) => {
79+ const urlParams = new URLSearchParams ( ) ;
80+ if ( params . column !== initialFilters . column ) urlParams . set ( 'searchBy' , params . column ) ;
81+ if ( params . page !== initialFilters . page ) urlParams . set ( 'repo' , params . page ) ;
82+ if ( params . search ) urlParams . set ( 'search' , params . search ) ;
83+
84+ const newUrl = `${ window . location . pathname } ${ urlParams . toString ( ) ? '?' + urlParams . toString ( ) : '' } ` ;
85+ window . history . replaceState ( { } , '' , newUrl ) ;
86+ } ;
87+
6288export function DataTable < TData , TValue > ( {
6389 columns,
6490} : DataTableProps < TData , TValue > ) {
91+ const urlParams = getUrlParams ( ) ;
6592 const [ sorting , setSorting ] = React . useState < SortingState > ( [ ] )
66- const [ columnFilters , setColumnFilters ] = React . useState < ColumnFiltersState > (
67- [ ]
68- )
69- const [ column , setColumn ] = React . useState ( "name" ) ;
70- const [ columnVisibility , setColumnVisibility ] =
71- React . useState < VisibilityState > ( getColumnVis ( ) ) ;
72- const [ page , setPage ] = React . useState ( "bin" ) ;
93+ const [ columnFilters , setColumnFilters ] = React . useState < ColumnFiltersState > ( [ ] )
94+ const [ column , setColumn ] = React . useState ( urlParams . column ) ;
95+ const [ columnVisibility , setColumnVisibility ] = React . useState < VisibilityState > ( getColumnVis ( ) ) ;
96+ const [ page , setPage ] = React . useState ( urlParams . page ) ;
7397 const [ data , setData ] = React . useState < TData [ ] | "loading" > ( binX86 as unknown as TData [ ] ) ;
7498
99+
100+ React . useEffect ( ( ) => {
101+ updateUrlParams (
102+ {
103+ column,
104+ page,
105+ search : ( table ?. getColumn ( column ) ?. getFilterValue ( ) as string ) || '' ,
106+ columnVisibility,
107+ } ,
108+ ) ;
109+ } , [ column , page , columnFilters , columnVisibility ] ) ;
110+
111+ React . useEffect ( ( ) => {
112+ if ( urlParams . search ) {
113+ table ?. getColumn ( urlParams . column ) ?. setFilterValue ( urlParams . search ) ;
114+ if ( input . current ) {
115+ input . current . value = urlParams . search ;
116+ }
117+ }
118+ } , [ ] ) ;
119+
75120 React . useEffect ( ( ) => {
76121 localStorage . visiv = JSON . stringify ( columnVisibility ) ;
77122 } , [ columnVisibility ] ) ;
78123
79124 React . useEffect ( ( ) => {
80125 ( async ( ) => {
81126 switch ( page ) {
82- case "s " :
127+ case "soar " :
83128 setData ( ( await soarPkgs ) . default as unknown as TData [ ] ) ;
84129 break ;
85130 case "bin" :
86131 setData ( binX86 as unknown as TData [ ] ) ;
87132 break ;
88- case "bina " :
133+ case "bin_arm " :
89134 setData ( ( await binArm64 ) . default as unknown as TData [ ] ) ;
90135 break ;
91136 }
@@ -159,9 +204,9 @@ export function DataTable<TData, TValue>({
159204 < SelectGroup >
160205 < SelectLabel > bincache</ SelectLabel >
161206 < SelectItem value = "bin" > bincache (x86_64)</ SelectItem >
162- < SelectItem value = "bina" > bincache (aarch64)</ SelectItem >
207+ < SelectItem value = "bin_arm" > bincache (aarch64)</ SelectItem >
208+ < SelectItem value = "soar" > soarpkgs</ SelectItem >
163209 </ SelectGroup >
164- < SelectItem value = "s" > soarpkgs</ SelectItem >
165210 </ SelectContent >
166211 </ Select >
167212 < Select
0 commit comments