Skip to content

feat: SSE reconnection state, list virtualization, wallet availability, stream card memoization - #1072

Open
DeFiVC wants to merge 5 commits into
LabsCrypt:mainfrom
DeFiVC:feat/frontend-improvements
Open

feat: SSE reconnection state, list virtualization, wallet availability, stream card memoization#1072
DeFiVC wants to merge 5 commits into
LabsCrypt:mainfrom
DeFiVC:feat/frontend-improvements

Conversation

@DeFiVC

@DeFiVC DeFiVC commented Jul 29, 2026

Copy link
Copy Markdown

Closes #1044, Closes #1045, Closes #1046, Closes #1047

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Refactoring (no functional or behavioral changes)
  • Performance improvement
  • Documentation update
  • Build / CI configuration change
  • Dependency update
  • Other:

Summary

This PR addresses four frontend issues: (1) SSEStatusIndicator now shows a yellow "reconnecting" banner instead of always red, giving users clear visual feedback during backoff; (2) ActivityHistory virtualizes lists exceeding 50 items using @tanstack/react-virtual to prevent scroll jank; (3) WalletButton detects when the wallet extension is uninstalled mid-session and prompts reconnection; (4) IncomingStreamCard is wrapped in React.memo to prevent unnecessary re-renders on parent updates.

Motivation / Context

Closes #1044 — SSEStatusIndicator shows only connected/disconnected with no visual state for reconnecting. The disconnect banner was always red even during reconnection, confusing users into thinking the connection was permanently lost.

Closes #1045 — ActivityHistory renders an unbounded list with no virtualization for accounts with many events, causing visible jank on scroll.

Closes #1046 — WalletButton does not handle the case where the connected wallet extension is uninstalled mid-session, leading to raw signing errors.

Closes #1047 — IncomingStreamCard does not memoize its per-second amount calculation, causing unnecessary re-renders when parent components update.

DeFiVC added 5 commits July 29, 2026 09:48
The disconnect banner was always red even during reconnection, which
confused users into thinking the connection was permanently lost. Now
the banner color changes to yellow when reconnecting to provide clear
visual feedback that a retry is in progress.
ActivityHistory.tsx rendered all events into DOM rows with no windowing,
causing visible jank on scroll for accounts with many historical events.
Added @tanstack/react-virtual to virtualize the list when it exceeds 50
items, while preserving the existing pagination behavior for initial fetch.
WalletButton.tsx assumed a connected wallet stays available for the
entire session. If the user disabled or uninstalled the wallet extension
while connected, subsequent operations would fail with raw errors. Now
the component periodically checks wallet availability and prompts
reconnection with a clear message when the extension is unavailable.
…re-renders

IncomingStreamCard was re-rendering on every parent update even when
its props hadn't changed. Wrapped the component in React.memo with a
custom comparison function that checks stream data and withdrawing
state, preventing unnecessary recalculations on the dashboard.
Fixed syntax error in dashboard.ts (misplaced closing brace before
catch block) and added missing useQueryClient import in
dashboard-view.tsx that were preventing successful builds.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment