@@ -89,24 +89,18 @@ export function TokensProvider({
89
89
}
90
90
91
91
// Create synchronous token initialization
92
- const tokens = [ ...DEFAULT_TOKENS ] ;
93
- if ( tokensArg ) {
94
- tokens . push ( ...tokensArg ) ;
95
- }
96
-
97
- const initialTokens = tokens . reduce < Record < string , ERC20 > > (
92
+ const initialTokens = tokensArg . reduce < Record < string , ERC20 > > (
98
93
( acc , token ) => {
99
- const normalizedAddress = getChecksumAddress ( address ) ;
100
94
const contract = new ERC20Contract ( {
101
- address : normalizedAddress ,
95
+ address : token . address ,
102
96
provider,
103
97
} ) ;
104
98
105
99
return {
106
100
...acc ,
107
- [ normalizedAddress ] : {
101
+ [ contract . address ] : {
108
102
...token ,
109
- address : normalizedAddress ,
103
+ address : contract . address ,
110
104
contract,
111
105
}
112
106
} ;
@@ -166,7 +160,6 @@ export function TokensProvider({
166
160
const addresses = useMemo ( ( ) => Object . keys ( tokens ) , [ tokens ] ) ;
167
161
168
162
const {
169
- data : priceData ,
170
163
isLoading : isPriceLoading ,
171
164
error : priceError ,
172
165
} = usePriceByAddressesQuery (
@@ -176,28 +169,27 @@ export function TokensProvider({
176
169
{
177
170
refetchInterval,
178
171
enabled : addresses . length > 0 ,
172
+ onSuccess : ( data ) => {
173
+ if ( ! data ?. priceByAddresses ) return ;
174
+
175
+ setTokens ( ( tokens ) => {
176
+ data . priceByAddresses . forEach ( ( price , index ) => {
177
+ const address = addresses [ index ] ;
178
+ if ( tokens [ address ] ) {
179
+ tokens [ address ] . price = price ;
180
+ }
181
+ } ) ;
182
+ return tokens ;
183
+ } ) ;
184
+ }
179
185
} ,
180
186
) ;
181
187
182
- useEffect ( ( ) => {
183
- if ( priceData ?. priceByAddresses ) {
184
- setTokens ( ( prevTokens ) => {
185
- const newTokens = { ...prevTokens } ;
186
- priceData . priceByAddresses . forEach ( ( price , index ) => {
187
- const address = addresses [ index ] ;
188
- if ( newTokens [ address ] ) {
189
- newTokens [ address ] . price = price ;
190
- }
191
- } ) ;
192
- return newTokens ;
193
- } ) ;
194
- }
195
- } , [ priceData ?. priceByAddresses , addresses ] ) ;
196
-
197
188
const register = useCallback (
198
189
async ( address : string ) => {
199
190
if ( ! provider || tokens [ getChecksumAddress ( address ) ] ) return ;
200
191
192
+ const newTokens = { ...tokens } ;
201
193
const contract = new ERC20Contract ( {
202
194
address,
203
195
provider,
@@ -207,15 +199,13 @@ export function TokensProvider({
207
199
const balance = await contract . balanceOf ( address ) ;
208
200
await contract . init ( ) ;
209
201
const metadata = contract . metadata ( ) ;
202
+ newTokens [ metadata . address ] = {
203
+ ...metadata ,
204
+ contract,
205
+ balance,
206
+ } ;
210
207
211
- setTokens ( tokens => ( {
212
- ...tokens ,
213
- [ metadata . address ] : {
214
- ...metadata ,
215
- contract,
216
- balance,
217
- }
218
- } ) ) ;
208
+ setTokens ( newTokens ) ;
219
209
} catch ( error ) {
220
210
console . error ( `Failed to load token ${ address } :` , error ) ;
221
211
}
0 commit comments