Repository navigation
feat(invoices): yield vesting viewer, limit orders, threshold badge, default resolution - #506
Merged
TS-mfon merged 2 commits intoOct 19, 2026
Conversation
…default resolution Closes StellarState#479 — Add yield vesting schedule viewer on investor portfolio page - YieldVestingSection component with per-invoice tranche cards - Claim per-tranche and Claim All (batch) buttons - Real-time countdown to locked tranche release - useYieldVesting hook + fetchYieldVesting / claimYieldTranche / claimAllYieldTranches API calls - Mounted below VestingProgressWidget in InvestorPortfolio Closes StellarState#480 — Build limit order placement UI for secondary market buy orders - LimitOrderPanel: fraction amount + max price inputs, order summary with escrowed total - Active orders list with optimistic-cancel - SecondaryMarketTabsPanel: Buy Now / Limit Order tab switcher on invoice detail - useLimitOrders hook + placeLimitOrder / cancelLimitOrder / fetchActiveLimitOrders API calls - Panel appears on funded invoice detail pages Closes StellarState#481 — Add funding threshold progress indicator to invoice cards and detail - FundingThresholdWarningBadge: amber badge when threshold unmet and window closes within 24h - FundingFailedCard: replaces progress bar for rejected invoices that missed threshold - Badge added to InvoiceCard and InvoiceDetailView; FundingFailedCard in InvoiceDetailView - shouldShowThresholdWarning pure helper for direct testing - fetchFundingThresholdDetail API stub added Closes StellarState#483 — Add default resolution status page for defaulted invoices - DefaultResolutionView: default banner (declaration date, collateral forfeited, recovery distributed) - Per-holder recovery table with connected-wallet highlight - Dispute/contact external link - Graceful pending state when recovery distribution is in progress - InvoiceDetailView renders DefaultResolutionView instead of normal header for 'defaulted' invoices - PositionCard links defaulted positions to their invoice detail page - Added 'defaulted' to Invoice.status union, InvestmentPosition.status, and InvoiceStatusBadge
|
@jajafwangshak86-ops 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! 🚀 |
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
Resolves four Stellar Wave issues in a single cohesive PR, all touching the invoice/investor surface.
Changes
#479 — Yield vesting schedule viewer (investor portfolio)
YieldVestingSectioncomponent: per-invoice cards listing every yield tranche with its release date, amount, and a Claim button enabled only after the release timestamp passesuseYieldVestinghook withfetchYieldVesting,claimYieldTranche,claimAllYieldTranchesAPI functions added tolib/api/index.tsVestingProgressWidgetinInvestorPortfolio#480 — Limit order UI for secondary market buy orders
LimitOrderPanel: fraction amount + max-price-per-fraction inputs, order summary showing total escrowed, Place Order buttonSecondaryMarketTabsPanel: wraps existing Buy Now listings and the new Limit Order tab; mounted on funded invoice detail pagesuseLimitOrdershook withplaceLimitOrder,cancelLimitOrder,fetchActiveLimitOrdersAPI functions#481 — Funding threshold progress indicator
FundingThresholdWarningBadge: amber badge rendered on invoice cards and the detail page when the funding window closes within 24 h and the minimum threshold is not yet met; uses pureshouldShowThresholdWarninghelperFundingFailedCard: replaces the progress bar on rejected invoices where the threshold was missed — shows raised amount, threshold, gap, and refund statusInvoiceCard(marketplace grid) andInvoiceDetailView#483 — Default resolution status page
DefaultResolutionView: replaces the normal invoice detail header forstatus === "defaulted"invoices; shows declaration date, collateral forfeited, total recovery distributed, distribution status, and a dispute/contact external linkPositionCardnow links defaulted positions to the invoice detail page ("View default resolution →")InvoiceStatusBadgeextended with a"defaulted"entryInvoice.statusandInvestmentPosition.statusunions extended with"defaulted"Files changed
lib/api/index.tslib/portfolio.ts"defaulted"toInvestmentPosition.statushooks/useYieldVesting.tshooks/useLimitOrders.tscomponents/invoices/FundingThresholdWarningBadge.tsxcomponents/invoices/FundingFailedCard.tsxcomponents/invoices/LimitOrderPanel.tsxcomponents/invoices/SecondaryMarketTabsPanel.tsxcomponents/invoices/DefaultResolutionView.tsxcomponents/dashboard/YieldVestingSection.tsxcomponents/invoices/InvoiceDetailView.tsxCompareToggleButtonimportcomponents/invoices/InvoiceStatusBadge.tsxdefaultedstatus configcomponents/marketplace/invoice-card.tsxcomponents/dashboard/InvestorPortfolio.tsxYieldVestingSectioncomponents/dashboard/PositionCard.tsxCloses #479
Closes #480
Closes #481
Closes #483