fix(perps): button flashing color on load #24180
Open
+18
−2
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.



Description
Fixes button color flash when opening a market with an existing position. Users were briefly seeing Long/Short buttons before Modify/Close buttons appeared due to a one-render-cycle gap between position loading completing and position data being populated.
Root cause: In
usePerpsLivePositions,isInitialLoadingbecomesfalseone frame before the positions array is fully populated, causing!existingPositionto briefly evaluate astrue.Solution: Added a
hasPositionSettledstate that waits one frame (viarequestAnimationFrame) after loading completes before allowing buttons to render. This ensures position data is fully available before deciding which buttons to show.Changelog
CHANGELOG entry: Fixed button color flash when opening a market with an existing position
Related issues
Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2236
Manual testing steps
Screenshots/Recordings
Before
After
Pre-merge author checklist
Pre-merge reviewer checklist
Note
Waits one frame after position loading settles before rendering action buttons to avoid Long/Short flashing when a position exists.
PerpsMarketDetailsView.tsx):hasPositionSettledstate anduseEffectusingrequestAnimationFrameto mark position data as settled afterisLoadingPositionbecomes false.hasPositionSettledby updatinghasLongShortButtonsto!isLoadingPosition && !hasZeroBalance && hasPositionSettled.Long/Shortbuttons beforeModify/Closewhen an existing position is present.Written by Cursor Bugbot for commit 5ecad54. This will update automatically on new commits. Configure here.