Skip to content

fix: ARIA semantics, i18n gaps, dynamic assets, stellar.js dedup (#94… - #1068

Merged
Mystery-CLI merged 1 commit into
Ethereal-Future:mainfrom
GoodnessJohn:fix/941-940-942-943-aria-i18n-amount-stellar-dedup
Aug 3, 2026
Merged

fix: ARIA semantics, i18n gaps, dynamic assets, stellar.js dedup (#94…#1068
Mystery-CLI merged 1 commit into
Ethereal-Future:mainfrom
GoodnessJohn:fix/941-940-942-943-aria-i18n-amount-stellar-dedup

Conversation

@GoodnessJohn

Copy link
Copy Markdown
Contributor

…0 #941 #942 #943)

#941 — VirtualList ARIA list semantics

  • Add role="list" + aria-label (ariaLabel prop, falls back to virtualList.listLabel translation) to the scroll container in VirtualList and InfiniteVirtualList
  • Add role="listitem", aria-setsize={items.length}, and aria-posinset={index + 1} to every virtualized row
  • TransactionList passes a translated ariaLabel describing total count
  • perfOverlay gets aria-hidden="true" so it is invisible to AT

#940 — VirtualList empty state and MultiSigTransactions status badges

  • Import useTranslation into VirtualList; replace hardcoded 'No items to display.' fallback with t('virtualList.emptyDefault')
  • Add virtualList.* keys (emptyDefault, listLabel, transactionListLabel, noTransactions) to all 7 locale files
  • Replace MultiSigTransactions static STATUS_BADGE label map with getStatusLabel(status, t) that resolves t('multiSig.status.*') at render time; StatusBadge now calls useTranslation itself
  • Add multiSig.status.{pending,submitted,failed,expired,unknown} to all 7 locale files (ar/es/fr/he/pt/zh translated, en authoritative)

#942 — AmountInput dynamic asset list

…ereal-Future#940 Ethereal-Future#941 Ethereal-Future#942 Ethereal-Future#943)

Ethereal-Future#941 — VirtualList ARIA list semantics
- Add role="list" + aria-label (ariaLabel prop, falls back to
  virtualList.listLabel translation) to the scroll container in
  VirtualList and InfiniteVirtualList
- Add role="listitem", aria-setsize={items.length}, and
  aria-posinset={index + 1} to every virtualized row
- TransactionList passes a translated ariaLabel describing total count
- perfOverlay gets aria-hidden="true" so it is invisible to AT

Ethereal-Future#940 — VirtualList empty state and MultiSigTransactions status badges
- Import useTranslation into VirtualList; replace hardcoded
  'No items to display.' fallback with t('virtualList.emptyDefault')
- Add virtualList.* keys (emptyDefault, listLabel,
  transactionListLabel, noTransactions) to all 7 locale files
- Replace MultiSigTransactions static STATUS_BADGE label map with
  getStatusLabel(status, t) that resolves t('multiSig.status.*') at
  render time; StatusBadge now calls useTranslation itself
- Add multiSig.status.{pending,submitted,failed,expired,unknown} to
  all 7 locale files (ar/es/fr/he/pt/zh translated, en authoritative)

Ethereal-Future#942 — AmountInput dynamic asset list
- Add availableAssets prop (array of {code, issuer?, balance?, name?})
  to AmountInput; when supplied, the currency <select> is populated
  from this list instead of the hardcoded CURRENCIES constant
- Existing callers that omit availableAssets continue to see the
  static XLM/USDC/BTC fallback — fully backward compatible
- CURRENCIES constant retained as documentation; DEFAULT_ASSETS drives
  the fallback rendering path

Ethereal-Future#943 — backend/src/services/stellar.js merge-conflict deduplication
- Remove duplicate import { getIssuer }
- createAccount: remove orphaned const pair / logger.info /
  prisma.user.upsert blocks; keep withSpan version with correlationId
- getBalance: remove bare first export; keep withSpan / getCachedBalance
  / withHorizonRetry / correlationId version
- getTransactions: remove body-less first export; keep full version
  with withHorizonRetry and date/type filtering
- sendPayment: remove first loadAccount, first asset/txBuilder block,
  raw submitTransaction call, and first prisma.; keep
  withHorizonRetry / memo / feeBump versions throughout
- getFeeStats: keep withSpan version; remove orphaned duplicate const
  blocks and dead second return
- getNetworkStatus: keep withSpan version; remove orphaned second impl
- getExchangeRate: keep withHorizonRetry versions; remove bare first set
- stopHorizonLatencyMonitor: restore missing closing brace
- node --check passes; all 29 named exports appear exactly once

Closes Ethereal-Future#940
Closes Ethereal-Future#941
Closes Ethereal-Future#942
Closes Ethereal-Future#943
@drips-wave

drips-wave Bot commented Jul 30, 2026

Copy link
Copy Markdown

@GoodnessJohn 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! 🚀

Learn more about application limits

@Mystery-CLI
Mystery-CLI merged commit c17c780 into Ethereal-Future:main Aug 3, 2026
7 of 45 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment