Make the async operations panel a live submission queue driven by real contract operations#504
Open
ekwe7 wants to merge 6 commits into
Conversation
Implements the Add/Edit Savings Goal flow by lifting goalsData into
component state and providing a fully accessible modal form.
Key changes:
- Integrated lib/validation/savings-goals for real-time form validation.
- Externalized all strings and error messages to en.json for full i18n
support.
- Implemented modal accessibility (focus trap, ESC to close, and
motion-reduce).
- Recomputed daysLeft and isOverdue dynamically from the target date.
- Added 100% test coverage for goals utilities and validation logic.
- Improved UI robustness with line-clamping for long titles and descriptions
… reflection Cleans up unrelated syntax errors, missing imports, and type issues in app/ and components/ to ensure a green CI build for the savings goals feature.
Adds set/edit limit control and a spent-vs-limit progress bar with near/over-limit warning states. Includes validation logic for spending limits and improves accessibility of the utilization display.
apiClient Enhance API request resilience by centralizing retry logic in lib/client/apiClient.ts. Added support for retries on 5xx server errors, 429 rate limiting, and network failures using configurable exponential backoff. Included comprehensive unit tests to verify the retry behavior and ensure session expiry handling remains correctly sequenced.
- Wrap application in WalletProvider in app/layout.tsx to enable wallet connection context.
- Update components/WalletButton.tsx to replace hardcoded mock address and state with real data from useWallet
hook.
- Ensure proper handling of connection, disconnection, and wallet address display using the Stellar wallet kit.
- Replace hardcoded splitStages/splitQueue with a live AsyncOperationsContext.
- Implement operations reducer tracking states: building, awaiting-signature,
submitting, confirmed, failed.
- Cap visible operations at three cards.
- Integrate provider in app/layout.tsx.
- Add Vitest coverage for reducer state transitions.
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.
close #478
Description:
This PR replaces the hardcoded splitStages and splitQueue sample data in the
AsyncOperationsPanel with a live, persistent operations store.
Key Changes:
track AsyncOperation states (building, awaiting-signature, submitting, confirmed,
failed), capped at three concurrent operations.
AsyncOperationsContext and map operation statuses to UI states.
Verification:
To stage and commit these changes manually, you can run:
1 git add lib/context/AsyncOperationsContext.tsx app/layout.tsx
components/AsyncOperationsPanel.tsx components/AsyncSubmissionStatus.tsx
tests/unit/asyncOperationsStore.test.ts
2 git commit -m "feat(async): drive AsyncOperationsPanel from a live operations store"