@@ -1248,32 +1248,41 @@ class NetJSONGraphUtil {
12481248 }
12491249
12501250 addActionToUrl ( self , params ) {
1251- console . log ( params ) ;
12521251 if ( ! self . config . bookmarkableActions . enabled || params . data . cluster ) {
12531252 return ;
12541253 }
12551254 const fragments = this . parseUrlFragments ( ) ;
12561255 const { id} = self . config . bookmarkableActions ;
1257- let nodeId ;
1258- self . indexedNode = self . indexedNode || { } ;
1256+ let nodeId , index , nodeData ;
12591257 if ( self . config . render === self . utils . graphRender ) {
1260- nodeId = params . data . id ;
1261- self . indexedNode [ nodeId ] = params . data ;
1262- }
1263- if ( self . config . render === self . utils . mapRender ) {
1264- nodeId = params . data . node . id ;
1265- self . indexedNode [ nodeId ] = params . data . node ;
1258+ if ( params . dataType === "node" ) {
1259+ nodeId = params . data . id ;
1260+ index = self . nodeIndex [ nodeId ] ;
1261+ nodeData = self . data . nodes [ index ] ;
1262+ } else if ( params . dataType === "edge" ) {
1263+ const { source, target} = params . data ;
1264+ nodeId = `${ source } -${ target } ` ;
1265+ index = self . nodeIndex [ source ] ;
1266+ nodeData = self . data . links [ index ] ;
1267+ }
1268+ } else if ( self . config . render === self . utils . mapRender ) {
1269+ if ( params . seriesType === "scatter" ) {
1270+ nodeId = params . data . node . id ;
1271+ index = self . nodeIndex [ nodeId ] ;
1272+ nodeData = self . data . nodes [ index ] ;
1273+ } else if ( params . seriesType === "lines" ) {
1274+ const { source, target} = params . data . link ;
1275+ nodeId = `${ source } -${ target } ` ;
1276+ index = self . nodeIndex [ source ] ;
1277+ nodeData = self . data . links [ index ] ;
1278+ }
12661279 }
12671280 if ( ! fragments [ id ] ) {
12681281 fragments [ id ] = new URLSearchParams ( ) ;
12691282 fragments [ id ] . set ( "id" , id ) ;
12701283 }
1271- // Sync nodeId to URL only if defined, prevents pushing empty states in case of links
1272- if ( nodeId ) {
1273- fragments [ id ] . set ( "nodeId" , nodeId ) ;
1274- const state = self . indexedNode [ nodeId ] ;
1275- this . updateUrlFragments ( fragments , state ) ;
1276- }
1284+ fragments [ id ] . set ( "nodeId" , nodeId ) ;
1285+ this . updateUrlFragments ( fragments , nodeData ) ;
12771286 }
12781287
12791288 removeUrlFragment ( id ) {
@@ -1285,20 +1294,6 @@ class NetJSONGraphUtil {
12851294 this . updateUrlFragments ( fragments , state ) ;
12861295 }
12871296
1288- setIndexedNodeFromUrlFragments ( self , fragments , node ) {
1289- if ( ! self . config . bookmarkableActions . enabled || ! Object . keys ( fragments ) . length ) {
1290- return ;
1291- }
1292- const { id} = self . config . bookmarkableActions ;
1293- const fragmentParams = fragments [ id ] && fragments [ id ] . get ? fragments [ id ] : null ;
1294- const nodeId =
1295- fragmentParams && fragmentParams . get ? fragmentParams . get ( "nodeId" ) : undefined ;
1296- if ( nodeId === node . id ) {
1297- self . indexedNode = self . indexedNode || { } ;
1298- self . indexedNode [ nodeId ] = node ;
1299- }
1300- }
1301-
13021297 applyUrlFragmentState ( self ) {
13031298 if ( ! self . config . bookmarkableActions . enabled ) {
13041299 return ;
@@ -1308,29 +1303,33 @@ class NetJSONGraphUtil {
13081303 const fragmentParams = fragments [ id ] && fragments [ id ] . get ? fragments [ id ] : null ;
13091304 const nodeId =
13101305 fragmentParams && fragmentParams . get ? fragmentParams . get ( "nodeId" ) : undefined ;
1311- if ( ! self . indexedNode || ! self . indexedNode [ nodeId ] ) {
1306+ if ( ! nodeId || ! self . nodeIndex || ! self . nodeIndex [ nodeId ] == null ) {
13121307 return ;
13131308 }
1314- const node = self . indexedNode [ nodeId ] ;
1309+ const [ source , target ] = nodeId . split ( "-" ) ;
1310+ const index = self . nodeIndex [ nodeId ] ;
1311+ // If source && target both exists then the node is a link
1312+ const node = source && target ? self . data . links [ index ] : self . data . nodes [ index ] ;
13151313 const nodeType =
13161314 self . config . graphConfig . series . type || self . config . mapOptions . nodeConfig . type ;
1317- const { location, cluster} = node ;
1315+ const { location, cluster} = node || { } ;
1316+ // Only adjust the map view if this is a scatter-type node (leaflet map)
13181317 if ( [ "scatter" , "effectScatter" ] . includes ( nodeType ) ) {
1318+ // For links, fall back to the default map center from config
1319+ const center = location
1320+ ? [ location . lat , location . lng ]
1321+ : self . config . mapOptions . center ;
13191322 const zoom =
13201323 cluster != null
13211324 ? self . config . disableClusteringAtLevel
13221325 : self . leaflet ?. getZoom ( ) ;
1323- self . leaflet ?. setView ( [ location . lat , location . lng ] , zoom ) ;
1326+ self . leaflet ?. setView ( center , zoom ) ;
13241327 }
1325- self . config . onClickElement . call ( self , "node" , node ) ;
1328+ self . config . onClickElement . call ( self , source && target ? "link" : "node" , node ) ;
13261329 }
13271330
13281331 setupHashChangeHandler ( self ) {
13291332 window . addEventListener ( "popstate" , ( ) => {
1330- const currentNode = history . state ;
1331- if ( currentNode != null && ! self . indexedNode [ currentNode . id ] ) {
1332- self . indexedNode [ currentNode . id ] = currentNode ;
1333- }
13341333 this . applyUrlFragmentState ( self ) ;
13351334 } ) ;
13361335 }
0 commit comments