99} from "lightweight-charts" ;
1010import { useCallback , useEffect , useMemo , useRef , useState } from "react" ;
1111import { z } from "zod" ;
12- import { useListenMetadata } from "../hooks/useListenMetadata " ;
13- import { CandlestickData , CandlestickDataSchema } from "../lib/types" ;
12+ import { useSolanaToken } from "../hooks/useToken " ;
13+ import { CandlestickData } from "../lib/types" ;
1414import { useTokenStore } from "../store/tokenStore" ;
1515import { Socials } from "./Socials" ;
1616
@@ -189,6 +189,9 @@ async function fetchGeckoTerminalOHLC(
189189 } ;
190190 } ) ;
191191
192+ // Sort by timestamp in ascending order (required by lightweight-charts)
193+ candlesticks . sort ( ( a , b ) => a . timestamp - b . timestamp ) ;
194+
192195 return candlesticks ;
193196 } catch ( error ) {
194197 console . error ( "Failed to fetch GeckoTerminal OHLC data:" , error ) ;
@@ -482,7 +485,7 @@ export function Chart({ mint, interval: defaultInterval = "30s" }: ChartProps) {
482485 // Subscribe to token store updates
483486 const latestUpdate = useTokenStore ( ( state ) => state . latestUpdate ) ;
484487
485- const { data : metadata } = useListenMetadata ( mint ) ;
488+ const { data : metadata } = useSolanaToken ( mint ) ;
486489
487490 const percentChange = useMemo ( ( ) => {
488491 if ( ! data || data . length < 2 ) {
@@ -612,14 +615,10 @@ export function Chart({ mint, interval: defaultInterval = "30s" }: ChartProps) {
612615 responseData = await fetchGeckoTerminalOHLC ( poolAddress , selectedInterval ) ;
613616 }
614617
615- // If GeckoTerminal fails or no pool found, fall back to custom API
618+ // If GeckoTerminal fails or no pool found, show empty chart
616619 if ( ! responseData || responseData . length === 0 ) {
617- console . log ( `Falling back to custom API for token ${ mint } ` ) ;
618- const response = await fetch (
619- // use prod for charts always
620- `https://api.listen-rs.com/v1/adapter/candlesticks?mint=${ mint } &interval=${ selectedInterval } `
621- ) ;
622- responseData = CandlestickDataSchema . parse ( await response . json ( ) ) ;
620+ console . log ( `No chart data available for token ${ mint } - pool might not exist on GeckoTerminal` ) ;
621+ responseData = [ ] ;
623622 }
624623
625624 if ( ! isDisposed . current ) {
@@ -660,10 +659,10 @@ export function Chart({ mint, interval: defaultInterval = "30s" }: ChartProps) {
660659
661660 // Format pubkey for display
662661 const formattedPubkey = useMemo ( ( ) => {
663- if ( ! metadata ?. mint ) return "" ;
664- return metadata . mint . length > 12
665- ? `${ metadata . mint . slice ( 0 , 6 ) } ...${ metadata . mint . slice ( - 6 ) } `
666- : metadata . mint ;
662+ if ( ! metadata ?. address ) return "" ;
663+ return metadata . address . length > 12
664+ ? `${ metadata . address . slice ( 0 , 6 ) } ...${ metadata . address . slice ( - 6 ) } `
665+ : metadata . address ;
667666 } , [ metadata ] ) ;
668667
669668 return (
@@ -672,34 +671,34 @@ export function Chart({ mint, interval: defaultInterval = "30s" }: ChartProps) {
672671 < div className = "flex items-center justify-between mb-2 p-3 backdrop-blur-sm" >
673672 < div className = "flex items-center" >
674673 { /* Add token image with proper spacing */ }
675- { metadata ?. mpl . ipfs_metadata ?. image && (
674+ { metadata ?. logoURI && (
676675 < div className = "w-8 h-8 relative rounded-full overflow-hidden mr-3" >
677676 < img
678- src = { metadata . mpl . ipfs_metadata . image . replace (
677+ src = { metadata . logoURI . replace (
679678 "cf-ipfs.com" ,
680679 "ipfs.io"
681680 ) }
682- alt = { metadata ?. mpl . symbol || "Token" }
681+ alt = { metadata ?. symbol || "Token" }
683682 className = "w-full h-full object-cover"
684683 />
685684 </ div >
686685 ) }
687686 < div className = "flex flex-col" >
688687 < div className = "flex items-center space-x-2" >
689- { metadata ?. mpl . symbol && (
688+ { metadata ?. symbol && (
690689 < span className = "font-bold text-white" >
691- { metadata . mpl . symbol }
690+ { metadata . symbol }
692691 </ span >
693692 ) }
694- { metadata ?. mpl . name && (
693+ { metadata ?. name && (
695694 < span className = "text-white ml-2 hidden lg:block" >
696- { metadata . mpl . name }
695+ { metadata . name }
697696 </ span >
698697 ) }
699- { metadata ?. mint && (
698+ { metadata ?. address && (
700699 < span
701700 className = "text-xs text-white/70 ml-2 hidden lg:block"
702- title = { metadata . mint }
701+ title = { metadata . address }
703702 >
704703 ({ formattedPubkey } )
705704 </ span >
@@ -717,7 +716,7 @@ export function Chart({ mint, interval: defaultInterval = "30s" }: ChartProps) {
717716 </ span >
718717 ) }
719718 </ div >
720- < Socials tokenMetadata = { metadata ?? null } pubkey = { mint } />
719+ < Socials tokenMetadata = { null } pubkey = { mint } />
721720 </ div >
722721 </ div >
723722
0 commit comments