@@ -4,6 +4,7 @@ import Link from 'next/link'
44import { useRouter } from 'next/router'
55
66import SEO from '../../components/SEO'
7+ import TokenSelector from '../../components/UI/TokenSelector'
78import { tokenClass } from '../../styles/pages/token.module.scss'
89import { niceNumber , shortNiceNumber , fullNiceNumber , AddressWithIconFilled } from '../../utils/format'
910import { axiosServer , getFiatRateServer , passHeaders } from '../../utils/axios'
@@ -97,6 +98,7 @@ export default function TokenPage({
9798 const router = useRouter ( )
9899 const [ token , setToken ] = useState ( initialData )
99100 const [ loading , setLoading ] = useState ( false )
101+ const [ selectedToken , setSelectedToken ] = useState ( initialData )
100102 const errorMessage = initialErrorMessage || ''
101103 const firstRenderRef = useRef ( true )
102104
@@ -115,11 +117,11 @@ export default function TokenPage({
115117 }
116118 } , [ initialData , initialErrorMessage , router ] )
117119
118- const getHistoricalRates = async ( ) => {
120+ const getData = async ( ) => {
119121 setLoading ( true )
120122 const cur = selectedCurrency ?. toLowerCase ( )
121123 if ( ! cur ) return
122- const url = `v2/trustlines/token/${ initialData . issuer } /${ initialData . currency } ?statistics=true¤cyDetails=true&convertCurrencies=${ cur } `
124+ const url = `v2/trustlines/token/${ selectedToken . issuer } /${ selectedToken . currency } ?statistics=true¤cyDetails=true&convertCurrencies=${ cur } `
123125 const res = await axiosServer ( {
124126 method : 'get' ,
125127 url
@@ -136,11 +138,18 @@ export default function TokenPage({
136138 firstRenderRef . current = false
137139 return
138140 }
139- getHistoricalRates ( )
141+ getData ( )
140142 // eslint-disable-next-line react-hooks/exhaustive-deps
141- } , [ selectedCurrency ] )
142- // Helper: price line as "fiat (XRP)" using historical rate when available
143+ } , [ selectedCurrency , selectedToken ] )
144+
145+ useEffect ( ( ) => {
146+ const { pathname, query } = router
147+ query . id = [ selectedToken ?. issuer , selectedToken ?. currency ]
148+ router . replace ( { pathname, query } , null , { shallow : true } )
149+ // eslint-disable-next-line react-hooks/exhaustive-deps
150+ } , [ selectedToken ] )
143151
152+ // Helper: price line as "fiat (XRP)" using historical rate when available
144153 const priceLine = ( { priceNative, priceFiat } ) => {
145154 const price = priceNative
146155 return (
@@ -272,16 +281,26 @@ export default function TokenPage({
272281 token . issuerDetails ?. service || token . issuerDetails ?. username || 'Token Details'
273282 } `}
274283 />
275-
276284 < div className = { tokenClass } >
277285 < div className = "content-profile" >
286+ < div
287+ style = { {
288+ display : 'flex' ,
289+ flexDirection : 'column' ,
290+ alignItems : 'center'
291+ } }
292+ >
293+ < div style = { { width : isSsrMobile ? '100%' : '80%' , marginBottom : '20px' } } >
294+ < TokenSelector value = { selectedToken } onChange = { setSelectedToken } excludeNative = { true } />
295+ </ div >
296+ </ div >
278297 < div className = "column-left" >
279298 { /* Big Token Icon */ }
280299 < img
281300 alt = "token"
282301 src = { tokenImageSrc ( token ) }
283302 className = "token-image"
284- style = { { width : '100%' , height : 'auto' } }
303+ style = { { width : 'calc( 100% - 4px) ' , height : 'auto' } }
285304 />
286305 < h1 > { token ?. currencyDetails ?. currency } </ h1 >
287306
0 commit comments