fix: topology graph empty after async fetch - #113
Merged
Merged
Conversation
useNodesState/useEdgesState only consume their argument as an initial value at mount time. Since topology is fetched async, the nodes/edges arrays were always empty when React Flow initialised. Fix: capture setNodes/setEdges from the hooks and sync them via useEffect whenever initialNodes/initialEdges change (i.e. when the fetch resolves). Also removes the inert 'synced' state that was added as a failed workaround but never called setNodes/setEdges. Closes #109 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Root cause
useNodesState(initialNodes)anduseEdgesState(initialEdges)from@xyflow/reactonly use their argument as the initial value at mount. The topology data is fetched asynchronously in auseEffect, so when React Flow initialised, both arrays were empty — and never updated when the fetch resolved.There was an existing
syncedworkaround (lines 216–222) that set a boolean flag but never calledsetNodesorsetEdges, making it completely inert.Fix
Capture
setNodesandsetEdgesfrom the hooks and push updates viauseEffectwheneverinitialNodes/initialEdgeschange:Removes the dead
syncedstate.Testing
Closes #109