@@ -9,7 +9,8 @@ import type {
99 SettingUpdated ,
1010} from '@lifi/widget' ;
1111import { formatTokenPrice , useWidgetEvents } from '@lifi/widget' ;
12- import { useToken } from 'src/hooks/useToken' ;
12+ import type { Address } from 'viem' ;
13+ import { useTokens } from 'src/hooks/useTokens' ;
1314import { isEqual , omit } from 'lodash' ;
1415import type { FC , PropsWithChildren } from 'react' ;
1516import {
@@ -40,7 +41,6 @@ import {
4041 parseFormFieldChangedToTrackingData ,
4142 parseWidgetSettingsToTrackingData ,
4243} from 'src/utils/tracking/widget' ;
43- import type { Hex } from 'viem' ;
4444
4545interface WidgetTrackingState {
4646 setDestinationChainTokenForTracking : (
@@ -129,21 +129,7 @@ export const WidgetTrackingProvider: FC<WidgetTrackingProviderProps> = ({
129129 const urlParamsRef = useRef ( urlParams ) ;
130130 urlParamsRef . current = urlParams ;
131131
132- const { token : sourceTokenData } = useToken (
133- sourceChainToken . current ?. chainId ??
134- urlParams . sourceChainToken . chainId ??
135- 0 ,
136- ( sourceChainToken . current ?. tokenAddress ??
137- urlParams . sourceChainToken . token ??
138- '0x' ) as Hex ,
139- { extended : true } ,
140- ) ;
141-
142- const fromAmountUSDFallback = useRef < number > ( 0 ) ;
143- fromAmountUSDFallback . current =
144- sourceTokenData ?. priceUSD && urlParams . fromAmount
145- ? Number ( formatTokenPrice ( urlParams . fromAmount , sourceTokenData . priceUSD ) )
146- : 0 ;
132+ const { getToken } = useTokens ( ) ;
147133
148134 const posthogTracker = useMemo ( ( ) => {
149135 return makePosthogTracker ( { trackTransaction, trackEvent } ) ;
@@ -178,11 +164,34 @@ export const WidgetTrackingProvider: FC<WidgetTrackingProviderProps> = ({
178164
179165 const availableRoutes = useCallback (
180166 ( availableRoutes : Route [ ] ) => {
167+ const firstRoute = availableRoutes [ 0 ] ;
168+
169+ const fromToken =
170+ sourceChainToken . current ?. tokenAddress ??
171+ urlParamsRef . current . sourceChainToken . token ;
172+ const fromChainId =
173+ sourceChainToken . current ?. chainId ??
174+ urlParamsRef . current . sourceChainToken . chainId ;
175+ const toToken =
176+ destinationChainToken . current ?. tokenAddress ??
177+ urlParamsRef . current . destinationChainToken . token ;
178+ const toChainId =
179+ destinationChainToken . current ?. chainId ??
180+ urlParamsRef . current . destinationChainToken . chainId ;
181+
181182 const fromAmount =
182- availableRoutes [ 0 ] ?. fromAmount ?? urlParamsRef . current . fromAmount ;
183- const fromAmountUSD = availableRoutes [ 0 ]
184- ? Number ( availableRoutes [ 0 ] . fromAmountUSD )
185- : fromAmountUSDFallback . current ;
183+ firstRoute ?. fromAmount ?? urlParamsRef . current . fromAmount ;
184+
185+ const fallbackToken =
186+ fromChainId && fromToken
187+ ? getToken ( fromChainId , fromToken as Address )
188+ : undefined ;
189+
190+ const fromAmountUSD = firstRoute
191+ ? Number ( firstRoute . fromAmountUSD )
192+ : fallbackToken ?. priceUSD && fromAmount
193+ ? Number ( formatTokenPrice ( fromAmount , fallbackToken . priceUSD ) )
194+ : 0 ;
186195
187196 if ( currentFromAmount . current !== fromAmount ) {
188197 currentFromAmount . current = fromAmount ;
@@ -230,22 +239,10 @@ export const WidgetTrackingProvider: FC<WidgetTrackingProviderProps> = ({
230239 label : `routes_available` ,
231240 enableAddressable : true ,
232241 data : {
233- [ TrackingEventParameter . FromToken ] :
234- sourceChainToken . current ?. tokenAddress ||
235- urlParamsRef . current . sourceChainToken . token ||
236- '' ,
237- [ TrackingEventParameter . FromChainId ] :
238- sourceChainToken . current ?. chainId ||
239- urlParamsRef . current . sourceChainToken . chainId ||
240- '' ,
241- [ TrackingEventParameter . ToToken ] :
242- destinationChainToken . current ?. tokenAddress ||
243- urlParamsRef . current . destinationChainToken . token ||
244- '' ,
245- [ TrackingEventParameter . ToChainId ] :
246- destinationChainToken . current ?. chainId ||
247- urlParamsRef . current . destinationChainToken . chainId ||
248- '' ,
242+ [ TrackingEventParameter . FromToken ] : fromToken || '' ,
243+ [ TrackingEventParameter . FromChainId ] : fromChainId || '' ,
244+ [ TrackingEventParameter . ToToken ] : toToken || '' ,
245+ [ TrackingEventParameter . ToChainId ] : toChainId || '' ,
249246 [ TrackingEventParameter . FromAmountUSD ] : fromAmountUSD ,
250247 [ TrackingEventParameter . FromAmount ] : fromAmount || '' ,
251248 [ TrackingEventParameter . NbOfSteps ] : availableRoutes . length ,
@@ -257,7 +254,7 @@ export const WidgetTrackingProvider: FC<WidgetTrackingProviderProps> = ({
257254 isRoutesForCurrentDestinationTokenTracked . current = true ;
258255 isRoutesForCurrentFromAmountTracked . current = true ;
259256 } ,
260- [ trackEvent , trackingActionKeys . availableRoutes ] ,
257+ [ trackEvent , trackingActionKeys . availableRoutes , getToken ] ,
261258 ) ;
262259
263260 const routeExecutionStarted = useCallback (
0 commit comments