This PR addresses four related frontend maintenance issues in a single branch:
- #556 — Remove unused
useCancelStream/useWithdrawStreamhooks and their dead REST helpers (cancelStream/withdrawStreaminlib/api/streams.ts). Active cancel/withdraw flows remain on Soroban (stream detail) anduseIncomingStreams. - #557 — Delete the never-mounted
Bannercomponent andbanner.config.ts(no global announcement banner is wired today). - #558 — Consolidate duplicated stream-endpoint resolver and stroop conversion helpers into
lib/api/_shared.ts;dashboard.tsandapi/streams.tsnow import from one source. - #559 — Add
role="dialog",aria-modal,aria-labelledby, Tab focus trapping, and focus restoration on close forStreamCreationWizard,CancelConfirmModal, andTopUpModalvia a shareduseModalDialoghook (Escape-to-close preserved).
| Issue | Files |
|---|---|
| #556 | Removed hooks/useCancelStream.ts, hooks/useWithdrawStream.ts; trimmed lib/api/streams.ts |
| #557 | Removed components/ui/Banner.tsx, lib/banner.config.ts |
| #558 | Added lib/api/_shared.ts; updated lib/dashboard.ts, lib/api/streams.ts |
| #559 | Added hooks/useModalDialog.ts; updated stream-creation modals |
-
npm run build --workspace=frontendpasses -
npm test --workspace=frontendpasses (existing utils tests unchanged) - Confirm no imports of removed hooks, Banner, or
cancelStream/withdrawStreamREST helpers - Open Create Stream wizard — Tab cycles within modal only; Escape closes; focus returns to trigger
- Open Cancel Stream confirm modal — same keyboard/a11y behavior; Escape blocked while submitting
- Open Top Up modal — input auto-focused; Tab trapped; Escape closes when idle
- Dashboard and incoming streams pages still load stream lists correctly (shared endpoint resolver)
shortenAddressindashboard.tswas left local (dashboard-only);streams.tscontinues usingshortenPublicKeyfrom wallet utils.- Overlap with #456 (authenticate/remove unused cancel/withdraw REST helpers) is resolved here by deleting the dead REST helpers entirely.