Repository navigation
Transaction table a11y, date-range export, and Soroban panel/invoke fixes - #1024
Merged
k-deejah merged 5 commits intoOct 24, 2026
Merged
Conversation
aria-sort, directional chevrons, and the mobile card layout were already in place; the remaining gap from Sorokit#902 was an accessible way to copy a transaction hash. Adds a labeled copy button next to the hash in both the desktop and mobile rows.
Clamps the export end date so it can never precede the start date or fall in the future, enforcing startDate <= endDate <= today. Adds a CSV and JSON export flow with a progress modal (percentage and record count) for histories over 500 records, with cancellation support.
Trims and validates contract IDs against /^C[A-Z0-9]{55}$/ with inline
feedback, blocking invoke/simulate before any RPC call goes out for a
malformed ID. Groups the loaded ABI's methods into "Read (View)" and
"Write (State Changes)" sections, and adds a "Load into form" button
on each invocation-history entry to repopulate the builder inputs.
Also fixes a pre-existing bug in ContractInteractionDebugger where its
action buttons (Show/Hide debugger, Copy, and the new Load into form)
defaulted to type="submit" and silently re-submitted the parent form
when clicked.
…tooltips
Normalizes whatever a rejected/odd-shaped error looks like (a bare
contract-panic object, a non-Error throw, a response that doesn't
destructure into { data, error }) into a displayable message instead
of only handling plain strings and Error instances, and adds a
finally-block safety net so loading can never get stuck on. Wraps the
disabled button in a tooltip that names the exact blocking reason
(wallet disconnected, invocation in flight, or missing contract
ID/method), and adds abort-signal coverage for user-aborted and
superseded invocations.
|
@theladyanina Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
theladyanina
force-pushed
the
feat/txn-table-soroban-panel-fixes
branch
from
October 19, 2026 23:32
2aebf5d to
ea9345d
Compare
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.
Summary
Four scoped fixes/UX improvements across the transaction history and Soroban interaction components.
#902 - TransactionHistoryTable
aria-sort, directional chevrons, and the mobile card layout were already shipped on main. The remaining gap was an accessible way to copy a transaction hash, so I added a Copy01Icon button with aria-label="Copy transaction hash" next to the hash in both the desktop row and the mobile card, using the same clipboard pattern as AddressDisplay.
#903 - TransactionsScreen
Added a date-range filter (start/end) wired into TransactionHistory's existing startDate/endDate props, clamped so startDate <= endDate <= today: picking an end date before the start pulls it forward, picking a future date clamps to today. Added CSV/JSON export with a progress modal (percentage and record count) that appears once a history has 500+ records, with a Cancel button that aborts the in-flight export.
#904 - SorobanPanel
Contract IDs are now trimmed and validated against /^C[A-Z0-9]{55}$/ with inline feedback on blur; invoking/simulating is blocked before any RPC call goes out for a malformed ID. The loaded ABI's method dropdown is grouped into "Read (View)" and "Write (State Changes)" optgroups (inferred from an ABI entry's mutating/readonly/stateMutability field, falling back to a naming-convention heuristic). Added a "Load into form" button on each invocation-history entry that repopulates the contract ID, method, and args.
While wiring up "Load into form" I found a pre-existing bug in ContractInteractionDebugger: its action buttons (Show/Hide debugger, Copy buttons) didn't set type="button", so clicking them inside SorobanPanel's form silently re-submitted it (a second, unintended invokeContract call). Fixed as part of this change since the new button lives in the same component.
#905 - SorobanInvokeButton
Normalized error handling so a rejected/odd-shaped error (a bare contract-panic object, a non-Error throw, a response that doesn't destructure into { data, error }) always produces a friendly message instead of only handling plain strings and Error instances, plus a finally-block safety net so loading state can't get stuck on. Wrapped the disabled button in a tooltip naming the exact blocking reason (wallet disconnected, invocation already in flight, or missing contract ID/method). Added test coverage for abort-signal handling (user-aborted mid-flight, superseded invocation).
Validation
No pre-existing failures encountered; the suite was clean on main before these changes and stays clean after.
Closes #902
Closes #903
Closes #904
Closes #905