diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a25b69..602bb15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,15 +23,9 @@ All notable changes are documented here. Format based on [Keep a Changelog](http - `force_cancel()` action in `StreamActions` for recipients (once contract support is merged) ### Fixed -- `withBoundedParallel` no longer manufactures and discards a fresh `AbortController` per item when the caller passes no outer signal — every handler in the batch now receives one shared, referenceable `AbortSignal` instead of a definitionally-dead one (#221) -- `checkRecipientExists` now reads the recipient's ledger entry directly and treats only an empty - result as "does not exist"; an unrelated RPC failure (a JSON-RPC `Method not found`, a 404 from a - mistyped `NEXT_PUBLIC_SOROBAN_RPC_URL`, a proxy error page) is reported as "couldn't check" - instead of telling the user the recipient account doesn't exist. The create form's recipient - check also passes its abort signal through, which it previously created and never used -- `Mutex`/`Semaphore` in `WalletContext` no longer lose the lock/permit when a queued waiter is - aborted in the same tick that dequeues it — after enough of those races the semaphore was - permanently exhausted and every `signTx` hung, and `connect()` deadlocked outright +- Deferred service-worker reloads while tracked transactions are still in flight, removed the unused + `NotificationCenter`, restored a system-theme path in `ThemeToggle`, and made unconfigured + transaction history render as a neutral coming-soon state. - `refreshStreamData` now invalidates active queries once instead of immediately refetching the same queries a second time - Removed the unused multisig transaction scaffold, which had no callers or tests and discarded the clipboard success result - `scValToU64`/`scValToI128` and `streamsBySender`/`streamsByRecipient` now boundary-check the RPC diff --git a/app/transactions/page.tsx b/app/transactions/page.tsx index e1f984b..589b86f 100644 --- a/app/transactions/page.tsx +++ b/app/transactions/page.tsx @@ -4,7 +4,11 @@ import { AlertCircle, RefreshCw, Info } from 'lucide-react'; import { useQuery } from '@tanstack/react-query'; import { Card } from '@/components/ui/Card'; import { formatTimestamp, truncateAddress } from '@/lib/format'; -import { fetchTransactionHistoryWithTimeout, type TransactionRow } from '@/lib/indexer'; +import { + fetchTransactionHistoryWithTimeout, + isIndexerNotConfiguredError, + type TransactionRow, +} from '@/lib/indexer'; import { useWallet } from '@/contexts/WalletContext'; const TRANSACTIONS_QUERY_KEY = ['transactions'] as const; @@ -26,10 +30,12 @@ export default function TransactionsPage() { queryKey: [...TRANSACTIONS_QUERY_KEY, publicKey], queryFn: () => fetchTransactionHistoryWithTimeout(publicKey), staleTime: 1000 * 30, - retry: 1, + retry: (failureCount, queryError) => + !isIndexerNotConfiguredError(queryError) && failureCount < 1, }); const isDemoData = connected && txs.length > 0; + const isIndexerComingSoon = status === 'error' && isIndexerNotConfiguredError(error); return (
@@ -59,10 +65,24 @@ export default function TransactionsPage() { Loading transactions…
+ ) : isIndexerComingSoon ? ( + +
+
+
) : status === 'error' ? (
-