@@ -20,43 +20,84 @@ import {
20
20
} from '~/hooks/sponsorships'
21
21
import { useTableOrder } from '~/hooks/useTableOrder'
22
22
import Tabs , { Tab } from '~/shared/components/Tabs'
23
- import { useWalletAccount } from '~/shared/stores/wallet'
23
+ import { useWalletAccount , useIsWalletLoading } from '~/shared/stores/wallet'
24
24
import {
25
25
useCurrentChainFullName ,
26
26
useCurrentChainId ,
27
27
useCurrentChainSymbolicName ,
28
28
} from '~/utils/chains'
29
29
import { Route as R , routeOptions } from '~/utils/routes'
30
-
31
- const PAGE_SIZE = 20
30
+ import { useUrlParams } from '~/hooks/useUrlParams'
32
31
33
32
enum TabOption {
34
33
AllSponsorships = 'all' ,
35
34
MySponsorships = 'my' ,
36
35
}
37
36
37
+ const PAGE_SIZE = 20
38
+ const DEFAULT_ORDER_BY = 'remainingWei'
39
+ const DEFAULT_ORDER_DIRECTION = 'desc'
40
+ const DEFAULT_TAB = TabOption . AllSponsorships
41
+
38
42
function isTabOption ( value : unknown ) : value is TabOption {
39
43
return value === TabOption . AllSponsorships || value === TabOption . MySponsorships
40
44
}
41
45
42
46
export const SponsorshipsPage = ( ) => {
43
47
const [ params ] = useSearchParams ( )
44
-
45
- const tab = params . get ( 'tab' )
46
-
47
- const selectedTab = isTabOption ( tab ) ? tab : TabOption . AllSponsorships
48
-
49
- const [ searchQuery , setSearchQuery ] = useState ( '' )
50
-
51
- const [ filters , setFilters ] = useState < SponsorshipFilters > ( defaultFilters )
48
+ const initialFilters = {
49
+ ...defaultFilters ,
50
+ ...Object . keys ( defaultFilters ) . reduce ( ( acc , key ) => {
51
+ if ( params . has ( key ) ) {
52
+ return { ...acc , [ key ] : params . get ( key ) === 'true' }
53
+ }
54
+ return acc
55
+ } , { } ) ,
56
+ }
57
+
58
+ const [ filters , setFilters ] = useState < SponsorshipFilters > ( initialFilters )
52
59
53
60
const wallet = useWalletAccount ( )
61
+ const isWalletLoading = useIsWalletLoading ( )
54
62
55
63
const { orderBy, orderDirection, setOrder } = useTableOrder < string > ( {
56
- orderBy : 'remainingWei' ,
57
- orderDirection : 'desc' ,
64
+ orderBy : DEFAULT_ORDER_BY ,
65
+ orderDirection : DEFAULT_ORDER_DIRECTION ,
58
66
} )
59
67
68
+ const tab = params . get ( 'tab' )
69
+ const selectedTab = isTabOption ( tab ) ? tab : DEFAULT_TAB
70
+
71
+ const [ searchQuery , setSearchQuery ] = useState ( params . get ( 'search' ) || '' )
72
+
73
+ useUrlParams ( [
74
+ {
75
+ param : 'tab' ,
76
+ value : selectedTab ,
77
+ defaultValue : DEFAULT_TAB ,
78
+ } ,
79
+ {
80
+ param : 'orderBy' ,
81
+ value : orderBy ,
82
+ defaultValue : DEFAULT_ORDER_BY ,
83
+ } ,
84
+ {
85
+ param : 'orderDir' ,
86
+ value : orderDirection ,
87
+ defaultValue : DEFAULT_ORDER_DIRECTION ,
88
+ } ,
89
+ {
90
+ param : 'search' ,
91
+ value : searchQuery ,
92
+ defaultValue : '' ,
93
+ } ,
94
+ ...Object . entries ( defaultFilters ) . map ( ( [ key , value ] ) => ( {
95
+ param : key ,
96
+ value : filters [ key as keyof SponsorshipFilters ] . toString ( ) ,
97
+ defaultValue : value . toString ( ) ,
98
+ } ) ) ,
99
+ ] )
100
+
60
101
const allSponsorshipsQuery = useAllSponsorshipsQuery ( {
61
102
pageSize : PAGE_SIZE ,
62
103
searchQuery,
@@ -78,7 +119,7 @@ export const SponsorshipsPage = () => {
78
119
const chainName = useCurrentChainSymbolicName ( )
79
120
80
121
useEffect ( ( ) => {
81
- if ( ! wallet ) {
122
+ if ( ! wallet && ! isWalletLoading ) {
82
123
navigate (
83
124
R . sponsorships (
84
125
routeOptions ( chainName , {
@@ -87,7 +128,7 @@ export const SponsorshipsPage = () => {
87
128
) ,
88
129
)
89
130
}
90
- } , [ wallet , navigate , chainName ] )
131
+ } , [ wallet , navigate , chainName , isWalletLoading ] )
91
132
92
133
const createSponsorship = useCreateSponsorship ( )
93
134
@@ -102,6 +143,7 @@ export const SponsorshipsPage = () => {
102
143
< NetworkHelmet title = "Sponsorships" />
103
144
< NetworkActionBar
104
145
searchEnabled
146
+ searchValue = { searchQuery }
105
147
onSearch = { setSearchQuery }
106
148
leftSideContent = {
107
149
< Tabs
0 commit comments