@@ -15,6 +15,15 @@ function _tvSetupLegendControls(chartId) {
1515 var entry = resolved . entry ;
1616 if ( ! entry . chart ) return ;
1717
18+ // Live entry accessor — always returns the current chart entry from the
19+ // global registry. The closure-captured `entry` can go stale when the
20+ // chart is destroyed and recreated (e.g. on interval change). Functions
21+ // that read symbol metadata must use _liveEntry() to stay in sync.
22+ function _liveEntry ( ) {
23+ var r = _tvResolveChartEntry ( chartId ) ;
24+ return ( r && r . entry ) ? r . entry : entry ;
25+ }
26+
1827 function scopedById ( id ) {
1928 return _tvScopedById ( chartId , id ) ;
2029 }
@@ -710,13 +719,14 @@ function _tvSetupLegendControls(chartId) {
710719 _legendCloseSecurityInfo ( ) ;
711720 var sid = String ( seriesId || '' ) ;
712721 if ( ! sid ) return ;
713- var info = ( entry && entry . _compareSymbolInfo && entry . _compareSymbolInfo [ sid ] )
714- ? entry . _compareSymbolInfo [ sid ]
715- : ( entry && entry . _resolvedSymbolInfo && entry . _resolvedSymbolInfo [ sid ] )
716- ? entry . _resolvedSymbolInfo [ sid ]
722+ var e = _liveEntry ( ) ;
723+ var info = ( e && e . _compareSymbolInfo && e . _compareSymbolInfo [ sid ] )
724+ ? e . _compareSymbolInfo [ sid ]
725+ : ( e && e . _resolvedSymbolInfo && e . _resolvedSymbolInfo [ sid ] )
726+ ? e . _resolvedSymbolInfo [ sid ]
717727 : { } ;
718728 var label = _legendSeriesLabel ( sid ) ;
719- var rawSymbol = ( entry && entry . _compareSymbols && entry . _compareSymbols [ sid ] ) ? entry . _compareSymbols [ sid ] : label ;
729+ var rawSymbol = ( e && e . _compareSymbols && e . _compareSymbols [ sid ] ) ? e . _compareSymbols [ sid ] : label ;
720730
721731 var name = String ( info . ticker || info . displaySymbol || label || '' ) . trim ( ) || 'Unknown' ;
722732 var description = String ( info . fullName || info . description || '' ) . trim ( ) || 'Unavailable' ;
@@ -1203,23 +1213,25 @@ function _tvSetupLegendControls(chartId) {
12031213 }
12041214
12051215 function _legendTitleBase ( ds ) {
1216+ var e = _liveEntry ( ) ;
12061217 var base = ( ds && ds . baseTitle ) ? ds . baseTitle : '' ;
1207- if ( ! base && entry && entry . payload && entry . payload . useDatafeed && entry . payload . series && entry . payload . series [ 0 ] && entry . payload . series [ 0 ] . symbol ) {
1208- base = String ( entry . payload . series [ 0 ] . symbol ) ;
1218+ if ( ! base && e && e . payload && e . payload . useDatafeed && e . payload . series && e . payload . series [ 0 ] && e . payload . series [ 0 ] . symbol ) {
1219+ base = String ( e . payload . series [ 0 ] . symbol ) ;
12091220 }
1210- if ( ! base && entry && entry . payload && entry . payload . title ) {
1211- base = String ( entry . payload . title ) ;
1221+ if ( ! base && e && e . payload && e . payload . title ) {
1222+ base = String ( e . payload . title ) ;
12121223 }
1213- if ( ! base && entry && entry . payload && entry . payload . series && entry . payload . series [ 0 ] && entry . payload . series [ 0 ] . seriesId ) {
1214- var s0 = String ( entry . payload . series [ 0 ] . seriesId ) ;
1224+ if ( ! base && e && e . payload && e . payload . series && e . payload . series [ 0 ] && e . payload . series [ 0 ] . seriesId ) {
1225+ var s0 = String ( e . payload . series [ 0 ] . seriesId ) ;
12151226 if ( s0 && s0 !== 'main' ) base = s0 ;
12161227 }
12171228 if ( ! base ) base = ( mainKey === 'main' ? '' : mainKey ) ;
12181229 // Description mode replaces the base title with resolved symbol info
12191230 if ( ds && ds . description && ds . description !== 'Off' ) {
12201231 var descMode = ds . description ;
1221- var symInfo = ( entry && entry . _resolvedSymbolInfo && entry . _resolvedSymbolInfo . main )
1222- || ( entry && entry . _mainSymbolInfo ) || { } ;
1232+ var le = _liveEntry ( ) ;
1233+ var symInfo = ( le && le . _resolvedSymbolInfo && le . _resolvedSymbolInfo . main )
1234+ || ( le && le . _mainSymbolInfo ) || { } ;
12231235 var ticker = String ( symInfo . ticker || symInfo . displaySymbol || symInfo . symbol || base || '' ) . trim ( ) ;
12241236 var descText = String ( symInfo . description || symInfo . fullName || '' ) . trim ( ) ;
12251237 if ( descMode === 'Description' && descText ) {
@@ -1524,22 +1536,23 @@ function _tvSetupLegendControls(chartId) {
15241536
15251537 function _legendSeriesLabel ( seriesId ) {
15261538 var sid = String ( seriesId || 'main' ) ;
1539+ var e = _liveEntry ( ) ;
15271540 if ( sid === 'main' ) {
15281541 var ds = _legendDataset ( ) || { } ;
15291542 var base = ( ds && ds . baseTitle ) ? String ( ds . baseTitle ) : '' ;
1530- if ( ! base && entry && entry . payload && entry . payload . useDatafeed && entry . payload . series && entry . payload . series [ 0 ] && entry . payload . series [ 0 ] . symbol ) {
1531- base = String ( entry . payload . series [ 0 ] . symbol ) ;
1543+ if ( ! base && e && e . payload && e . payload . useDatafeed && e . payload . series && e . payload . series [ 0 ] && e . payload . series [ 0 ] . symbol ) {
1544+ base = String ( e . payload . series [ 0 ] . symbol ) ;
15321545 }
1533- if ( ! base && entry && entry . payload && entry . payload . title ) {
1534- base = String ( entry . payload . title ) ;
1546+ if ( ! base && e && e . payload && e . payload . title ) {
1547+ base = String ( e . payload . title ) ;
15351548 }
15361549 return base || 'Main' ;
15371550 }
1538- if ( entry && entry . _compareLabels && entry . _compareLabels [ sid ] ) {
1539- return String ( entry . _compareLabels [ sid ] ) ;
1551+ if ( e && e . _compareLabels && e . _compareLabels [ sid ] ) {
1552+ return String ( e . _compareLabels [ sid ] ) ;
15401553 }
1541- if ( entry && entry . _compareSymbolInfo && entry . _compareSymbolInfo [ sid ] ) {
1542- var info = entry . _compareSymbolInfo [ sid ] || { } ;
1554+ if ( e && e . _compareSymbolInfo && e . _compareSymbolInfo [ sid ] ) {
1555+ var info = e . _compareSymbolInfo [ sid ] || { } ;
15431556 var display = String ( info . displaySymbol || info . ticker || '' ) . trim ( ) ;
15441557 if ( display ) return display . toUpperCase ( ) ;
15451558 var full = String ( info . fullName || '' ) . trim ( ) ;
@@ -1551,8 +1564,8 @@ function _tvSetupLegendControls(chartId) {
15511564 : infoSymbol . toUpperCase ( ) ;
15521565 }
15531566 }
1554- if ( entry && entry . _compareSymbols && entry . _compareSymbols [ sid ] ) {
1555- var raw = String ( entry . _compareSymbols [ sid ] ) ;
1567+ if ( e && e . _compareSymbols && e . _compareSymbols [ sid ] ) {
1568+ var raw = String ( e . _compareSymbols [ sid ] ) ;
15561569 return raw . indexOf ( ':' ) >= 0 ? raw . split ( ':' ) . pop ( ) . trim ( ) . toUpperCase ( ) : raw . toUpperCase ( ) ;
15571570 }
15581571 return sid ;
@@ -1571,7 +1584,8 @@ function _tvSetupLegendControls(chartId) {
15711584 }
15721585
15731586 function _legendGetTimezone ( ) {
1574- var info = entry && entry . _resolvedSymbolInfo && entry . _resolvedSymbolInfo . main ;
1587+ var e = _liveEntry ( ) ;
1588+ var info = e && e . _resolvedSymbolInfo && e . _resolvedSymbolInfo . main ;
15751589 return ( info && info . timezone ) ? String ( info . timezone ) . trim ( ) : 'America/New_York' ;
15761590 }
15771591
0 commit comments