Skip to content

fix: yield fixes and improvements#11778

Merged
gomesalexandre merged 12 commits intodevelopfrom
feat_yield_full_toggle_1
Jan 27, 2026
Merged

fix: yield fixes and improvements#11778
gomesalexandre merged 12 commits intodevelopfrom
feat_yield_full_toggle_1

Conversation

@gomesalexandre
Copy link
Contributor

@gomesalexandre gomesalexandre commented Jan 26, 2026

Description

Collection of yield.xyz polish fixes and improvements identified during QA testing.

Fixes

  1. Provider row for liquid staking yields - Fixed missing Provider row for ETH liquid staking (like Lido) in yield modals. Liquid staking yields are classified as "staking" but have no validators, so the condition now shows the provider when there's no validator metadata.

  2. Filter non-default validator positions - Positions from non-ShapeShift validators are now filtered at the data layer to prevent showing staking positions we don't manage.

  3. Fiat zero amount styling - Zero fiat amounts in yield modals now display as placeholder text instead of actual values to avoid confusion (e.g., showing available balance when user has none).

  4. Yield success step footer spacing - Eliminated dead space in the yield success step footer for cleaner UI.

  5. Yield routing fix - Corrected "Other Yields" links from /yields/ (404) to /yield/.

  6. Prevent earn confirm re-access - Users can no longer navigate back to /earn/confirm after completing a yield transaction.

  7. Spinner loading state for legacy positions - DeFi earn page now shows a spinner with tooltip when legacy positions are still loading, allowing the yield table to render immediately with yield.xyz data.

  8. Best actionable yield selection - Asset page CTA now filters out disabled yields (enter disabled, under maintenance, deprecated) before selecting the highest APY option. Prevents showing CTAs for opportunities users can't act on.

  9. Aggregate yield balances in drawer - DeFi drawer now properly aggregates yield balances across all accounts instead of only showing Account #0's balance.

Issue (if applicable)

N/A - QA polish fixes

Risk

High Risk PRs Require 2 approvals

Low - UI/UX fixes and data filtering. No transaction logic changes.

What protocols, transaction types, wallets or contract interactions might be affected by this PR?

None - purely display logic and data filtering fixes.

Testing

Engineering

  • Navigate to Yields page, click "Other Yields" → should go to /yield/ not /yields/
  • Stake ETH via Lido → Provider row should show "Lido"
  • Stake Cosmos → Validator row should show (not Provider)
  • Check asset page CTA for asset with disabled yields → should show next best actionable yield or no CTA (test with Solana, which is currently the affected one)
  • Navigate to DeFi earn tab → yields should load first, legacy positions show spinner while loading
  • Complete a yield transaction → should not be able to navigate back to confirm step
  • Open DeFi drawer with yield positions on multiple accounts → fiat value should aggregate across all accounts

Operations

  • 🏁 My feature is behind a flag and doesn't require operations testing (yet)

Screenshots (if applicable)

  • E2E

https://jam.dev/c/55c3f07e-45c7-4891-b06e-d568ea5ab6e6

  • Missing provider deets on some yields
Screenshot 2026-01-26 at 13 17 03
  • Success styling improvements
Screenshot 2026-01-26 at 12 56 11
  • Best actionable provider in CTA
image
  • Multi-account aggregate in DeFi drawer
image image

Summary by CodeRabbit

Release Notes

  • New Features

    • Added loading indicator for DeFi positions
    • Added View Position button to navigate to completed yield positions
  • Improvements

    • Enhanced yield selection to identify the best available option automatically
    • Refined navigation paths for yield detail pages
    • Improved provider information visibility in yield forms
    • Better display formatting for fiat amounts

✏️ Tip: You can customize this high-level summary in your review settings.

gomesalexandre and others added 7 commits January 26, 2026 12:34
…letes

After completing a yield enter transaction and navigating away (e.g., clicking
"View position"), the user could previously go back to /earn/confirm which
shouldn't be accessible anymore.

Fixes:
1. Reorder guards - check for success state BEFORE checking for selectedYield,
   ensuring the success screen renders even if Redux state becomes undefined
2. Clear tradeEarnInput Redux state on unmount when in success state, preventing
   re-access via browser back button or navigation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Links were navigating to /yields/${yieldId} which resulted in 404s.
The correct route is /yield/${yieldId} (singular).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Moved success buttons from YieldSuccess body content to footerContent
prop in EarnConfirm, matching the pattern used by input/confirm steps.

Added showButtons prop to YieldSuccess for backwards compatibility.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When fiat amount is zero, return empty string instead of '0.00' to
trigger placeholder styling (greyed out) matching crypto mode behavior.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
For yields with a default validator (Cosmos ATOM, Solana SOL native staking),
filter out positions from other validators in useAllYieldBalances query.

This ensures only ShapeShift DAO positions show for Cosmos and only Figment
positions show for Solana, hiding positions staked externally with other
validators.

Removed redundant validator-specific filtering from YieldsList.tsx since
filtering now happens at the data layer.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Liquid staking yields (like ETH Lido) were missing the Provider row
because they are classified as staking but have no validators. The
condition now shows the provider when there's no validator metadata.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Document that PRs opened via CLI tools should always use the
PULL_REQUEST_TEMPLATE.md as the base for the PR body.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 26, 2026

📝 Walkthrough

Walkthrough

This PR integrates YieldXyz features into the yield earning flow with new utilities for selecting best yields, introduces a multi-validator balance filtering system, adds dynamic components for crypto amount input display, and updates navigation paths from pluralized /yields to singular /yield routes.

Changes

Cohort / File(s) Summary
YieldXyz Utilities
src/lib/yieldxyz/utils.ts, src/lib/yieldxyz/utils.test.ts
New exported utility getBestActionableYield() filters and selects the highest-APY actionable yield; renamed isStakingType to isStakingYieldType and exported it as public API; comprehensive unit tests added.
Yield Success & Confirmation Flow
src/pages/Yields/components/YieldSuccess.tsx, src/components/MultiHopTrade/components/Earn/EarnConfirm.tsx
YieldSuccess now accepts optional showButtons prop; EarnConfirm tracks step via ref, clears state on unmount, and adds "View Position" navigation with enhanced footer buttons when yieldId exists.
Yield Form & Input Components
src/pages/Yields/components/YieldForm.tsx, src/pages/Yields/components/YieldEnterModal.tsx, src/components/CryptoAmountInput/CryptoAmountInput.tsx
YieldForm and YieldEnterModal now use external CryptoAmountInput component; display value shows empty string for zero fiat amounts; provider metadata rendering condition updated; new memoized CryptoAmountInput component with dynamic font sizing based on input length.
Yield Data Merging & Loading
src/components/StakingVaults/DeFiEarn.tsx, src/react-queries/queries/yieldxyz/useAllYieldBalances.ts
DeFiEarn refactored to merge YieldXyz data with legacy positions when enabled, adds loading indicator with CircularProgress; useAllYieldBalances simplified to filter balances by DEFAULT_VALIDATOR instead of account numbers.
Yield Display & Selection
src/pages/Yields/components/YieldAssetSection.tsx, src/pages/Yields/hooks/useYieldDisplayInfo.ts
YieldAssetSection uses new getBestActionableYield() utility; new useYieldDisplayInfo hook handles display information for yields with special-case handling for Cosmos and Solana native staking.
Navigation Path Updates
src/pages/Yields/YieldAssetDetails.tsx, src/pages/Yields/components/YieldRelatedMarkets.tsx, src/pages/Yields/components/YieldsList.tsx
Updated navigation routes from /yields/${yieldId} to /yield/${yieldId} across multiple components; YieldsList simplified to use new hook and removes per-yield filtering logic.
Documentation & Configuration
CLAUDE.md, src/assets/translations/en/main.json
Added guideline for using PR template base; added translation entry loadingMorePositions for DeFi loading state.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Suggested reviewers

  • NeOMakinG
  • 0xApotheosis
  • premiumjibles

Poem

🐰 A hop through the yields, so fine and fair,
Best actions found with utmost care,
Validators dance, balances align,
Display fonts resize, input divine,
From /yields now singular, /yield we stride!

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'fix: yield fixes and improvements' is overly vague and generic, using non-descriptive terms that don't convey meaningful information about the specific changes made. Consider a more specific title that highlights the primary change, such as 'fix: yield.xyz filtering and UI improvements' or 'fix: show actionable yields and improve data layer filtering'.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat_yield_full_toggle_1

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gomesalexandre gomesalexandre changed the title fix: show provider row for liquid staking yields fix: yield fixes and improvements Jan 27, 2026
gomesalexandre and others added 3 commits January 26, 2026 14:08
Shows a loading spinner with tooltip when legacy positions are still
loading, allowing the yield table to render immediately with yield.xyz data.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds getBestActionableYield utility that filters out disabled yields
(enter disabled, under maintenance, deprecated) before selecting the
highest APY option. Prevents showing CTAs for opportunities users can't act on.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When DeFiEarn is rendered outside a YieldAccountProvider (like in the
wallet drawer), the default accountNumber: 0 was incorrectly filtering
to only Account #0's balances. Now falls through to enabledWalletAccountIds
when no context is present, properly aggregating balances across all accounts.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@gomesalexandre gomesalexandre marked this pull request as ready for review January 27, 2026 00:19
@gomesalexandre gomesalexandre requested a review from a team as a code owner January 27, 2026 00:19
@gomesalexandre
Copy link
Contributor Author

Opening for a sec so @coderabbitai rabbits.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 27, 2026

@gomesalexandre: I'll review the changes right away! 🐰


🧠 Learnings used
Learnt from: gomesalexandre
Repo: shapeshift/web PR: 10206
File: src/config.ts:127-128
Timestamp: 2025-08-07T11:20:44.614Z
Learning: gomesalexandre prefers required environment variables without default values in the config file (src/config.ts). They want explicit configuration and fail-fast behavior when environment variables are missing, rather than having fallback defaults.

Learnt from: gomesalexandre
Repo: shapeshift/web PR: 10461
File: src/plugins/walletConnectToDapps/components/modals/ContractInteractionBreakdown.tsx:0-0
Timestamp: 2025-09-13T16:45:18.813Z
Learning: gomesalexandre prefers aggressively deleting unused/obsolete code files ("ramboing") rather than fixing technical issues in code that won't be used, demonstrating his preference for keeping codebases clean and PR scope focused.

Learnt from: gomesalexandre
Repo: shapeshift/web PR: 10458
File: src/plugins/walletConnectToDapps/types.ts:7-7
Timestamp: 2025-09-10T15:34:29.604Z
Learning: gomesalexandre is comfortable relying on transitive dependencies (like abitype through ethers/viem) rather than explicitly declaring them in package.json, preferring to avoid package.json bloat when the transitive dependency approach works reliably in practice.

Learnt from: gomesalexandre
Repo: shapeshift/web PR: 10503
File: .env:56-56
Timestamp: 2025-09-16T13:17:02.938Z
Learning: gomesalexandre prefers to enable feature flags globally in the base .env file when the intent is to activate features everywhere, even when there are known issues like crashes, demonstrating his preference for intentional global feature rollouts over cautious per-environment enablement.

Learnt from: gomesalexandre
Repo: shapeshift/web PR: 10249
File: src/pages/ThorChainLP/components/ReusableLpStatus/TransactionRow.tsx:447-503
Timestamp: 2025-08-13T17:07:10.763Z
Learning: gomesalexandre prefers relying on TypeScript's type system for validation rather than adding defensive runtime null checks when types are properly defined. They favor a TypeScript-first approach over defensive programming with runtime validations.

Learnt from: gomesalexandre
Repo: shapeshift/web PR: 10276
File: src/hooks/useActionCenterSubscribers/useThorchainLpDepositActionSubscriber.tsx:61-66
Timestamp: 2025-08-14T17:51:47.556Z
Learning: gomesalexandre is not concerned about structured logging and prefers to keep console.error usage as-is rather than implementing structured logging patterns, even when project guidelines suggest otherwise.

Learnt from: gomesalexandre
Repo: shapeshift/web PR: 10413
File: src/components/Modals/FiatRamps/fiatRampProviders/onramper/utils.ts:29-55
Timestamp: 2025-09-02T14:26:19.028Z
Learning: gomesalexandre prefers to keep preparatory/reference code simple until it's actively consumed, rather than implementing comprehensive error handling, validation, and robustness improvements upfront. They prefer to add these improvements when the code is actually being used in production.

Learnt from: gomesalexandre
Repo: shapeshift/web PR: 10276
File: src/pages/ThorChainLP/components/ReusableLpStatus/TransactionRow.tsx:396-402
Timestamp: 2025-08-14T17:55:57.490Z
Learning: gomesalexandre is comfortable with functions/variables that return undefined or true (tri-state) when only the truthy case matters, preferring to rely on JavaScript's truthy/falsy behavior rather than explicitly returning boolean values.

Learnt from: gomesalexandre
Repo: shapeshift/web PR: 10783
File: src/context/ModalStackProvider/useModalRegistration.ts:30-41
Timestamp: 2025-10-16T11:14:40.657Z
Learning: gomesalexandre prefers to add lint rules (like typescript-eslint/strict-boolean-expressions for truthiness checks on numbers) to catch common issues project-wide rather than relying on code review to catch them.

Learnt from: gomesalexandre
Repo: shapeshift/web PR: 10206
File: src/lib/moralis.ts:47-85
Timestamp: 2025-08-07T11:22:16.983Z
Learning: gomesalexandre prefers console.error over structured logging for Moralis API integration debugging, as they find it more conventional and prefer to examine XHR requests directly rather than rely on structured logs for troubleshooting.

Learnt from: NeOMakinG
Repo: shapeshift/web PR: 10231
File: src/components/AssetSearch/components/AssetList.tsx:2-2
Timestamp: 2025-08-08T15:00:49.887Z
Learning: Project shapeshift/web: NeOMakinG prefers avoiding minor a11y/UI nitpicks (e.g., adding aria-hidden to decorative icons in empty states like src/components/AssetSearch/components/AssetList.tsx) within feature PRs; defer such suggestions to a follow-up instead of blocking the PR.

Learnt from: NeOMakinG
Repo: shapeshift/web PR: 10323
File: src/components/ButtonWalletPredicate/ButtonWalletPredicate.tsx:7-7
Timestamp: 2025-08-27T09:47:06.275Z
Learning: In shapeshift/web project, NeOMakinG consistently prefers to defer UI/UX improvements and refactoring work (like the Drawer.Close hack fix in ButtonWalletPredicate.tsx) to follow-up PRs rather than expanding the scope of feature PRs, even when the improvements would enhance robustness.
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/react-queries/queries/yieldxyz/useAllYieldBalances.ts (1)

288-308: Recompute highestAmountUsdValidator after default-validator filtering.
Right now it’s computed before the default-validator filter, so for yields with enforced validators it can point to a validator that gets excluded. That can leak inconsistent “highest” metadata downstream.

✅ Suggested fix (keep highest within retained balances)
-              let highestAmountUsd = bnOrZero(0)
-              let highestAmountUsdValidator: string | undefined
-
-              for (const balance of augmentedBalances) {
-                const usd = bnOrZero(balance.amountUsd)
-                if (balance.validator?.address && usd.gt(highestAmountUsd)) {
-                  highestAmountUsd = usd
-                  highestAmountUsdValidator = balance.validator.address
-                }
-              }
+              const defaultValidator = DEFAULT_VALIDATOR_BY_YIELD_ID[item.yieldId]
+              let highestAmountUsd = bnOrZero(0)
+              let highestAmountUsdValidator: string | undefined
+
+              for (const balance of augmentedBalances) {
+                if (defaultValidator && balance.validator?.address !== defaultValidator) continue
+                const usd = bnOrZero(balance.amountUsd)
+                if (balance.validator?.address && usd.gt(highestAmountUsd)) {
+                  highestAmountUsd = usd
+                  highestAmountUsdValidator = balance.validator.address
+                }
+              }
@@
-              for (const balance of augmentedBalances) {
-                const defaultValidator = DEFAULT_VALIDATOR_BY_YIELD_ID[item.yieldId]
-                if (defaultValidator && balance.validator?.address !== defaultValidator) {
-                  continue
-                }
+              for (const balance of augmentedBalances) {
+                if (defaultValidator && balance.validator?.address !== defaultValidator) continue

- Wrap DeFiEarn in memo to prevent unnecessary re-renders
- Remove empty useEffect in YieldForm
- Consolidate isStakingYieldType utility (remove redundant wrapper)
- Extract CryptoAmountInput to shared component
- Extract useYieldDisplayInfo hook from YieldsList
- Move static searchIcon outside component
- Fix highestAmountUsdValidator computed after validator filtering
- Remove YIELD_IMPROVEMENTS.md dev notes file

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@src/components/CryptoAmountInput/CryptoAmountInput.tsx`:
- Around line 26-41: Compute a resolved font size that respects prop overrides
and keeps lineHeight in sync: derive valueLength with valueLength/useMemo and
computedFontSize via getInputFontSize(valueLength), then create resolvedFontSize
= props.fontSize ?? computedFontSize and pass fontSize={resolvedFontSize} and
lineHeight={resolvedFontSize} to the Input (so a provided props.fontSize
overrides but lineHeight stays matched). Also memoize the color by creating a
colorMemo = useMemo(() => (props.value ? 'text.base' : 'text.subtle'),
[props.value]) and pass color={colorMemo} to Input to follow memoization
guidelines.
🧹 Nitpick comments (5)
src/components/StakingVaults/DeFiEarn.tsx (1)

101-107: Consider removing redundant .filter(Boolean).

Per the fromAssetId implementation in the relevant snippets, it always returns a chainId (or throws on invalid input). The .filter(Boolean) on line 105 is redundant since chainId will never be falsy for valid asset IDs.

♻️ Optional cleanup
     const chainIds = useMemo(() => {
       if (!isYieldXyzEnabled || !yieldOpportunities?.length) return chainIdsFromWallet
-      const yieldChainIds = yieldOpportunities
-        .map(item => fromAssetId(item.assetId).chainId)
-        .filter(Boolean)
+      const yieldChainIds = yieldOpportunities.map(item => fromAssetId(item.assetId).chainId)
       return Array.from(new Set([...chainIdsFromWallet, ...yieldChainIds]))
     }, [chainIdsFromWallet, isYieldXyzEnabled, yieldOpportunities])
src/pages/Yields/hooks/useYieldDisplayInfo.ts (1)

21-61: Add an explicit return type for the hook.

This keeps the hook aligned with the TS explicit-typing guideline and makes the public API clearer.

♻️ Proposed fix
-export const useYieldDisplayInfo = (providers: Record<string, ProviderDto> | undefined) => {
+export const useYieldDisplayInfo = (
+  providers: Record<string, ProviderDto> | undefined,
+): ((yieldItem: AugmentedYieldDto) => YieldDisplayInfo) => {
As per coding guidelines, explicit return types are required.
src/components/CryptoAmountInput/CryptoAmountInput.tsx (3)

5-14: Consider enum-backed breakpoint keys for typed constants.

Guidelines prefer enums for constants; a string enum for breakpoint keys + a typed Record reduces typo risk as usage grows.
As per coding guidelines.

♻️ Possible refactor
-const INPUT_LENGTH_BREAKPOINTS = {
-  FOR_XS_FONT: 22,
-  FOR_SM_FONT: 14,
-  FOR_MD_FONT: 10,
-} as const
+enum InputLengthBreakpoint {
+  ForXsFont = 'FOR_XS_FONT',
+  ForSmFont = 'FOR_SM_FONT',
+  ForMdFont = 'FOR_MD_FONT',
+}
+
+const INPUT_LENGTH_BREAKPOINTS: Record<InputLengthBreakpoint, number> = {
+  [InputLengthBreakpoint.ForXsFont]: 22,
+  [InputLengthBreakpoint.ForSmFont]: 14,
+  [InputLengthBreakpoint.ForMdFont]: 10,
+}
 
-const getInputFontSize = (length: number): string => {
-  if (length >= INPUT_LENGTH_BREAKPOINTS.FOR_XS_FONT) return '24px'
-  if (length >= INPUT_LENGTH_BREAKPOINTS.FOR_SM_FONT) return '30px'
-  if (length >= INPUT_LENGTH_BREAKPOINTS.FOR_MD_FONT) return '38px'
+const getInputFontSize = (length: number): string => {
+  if (length >= INPUT_LENGTH_BREAKPOINTS[InputLengthBreakpoint.ForXsFont]) return '24px'
+  if (length >= INPUT_LENGTH_BREAKPOINTS[InputLengthBreakpoint.ForSmFont]) return '30px'
+  if (length >= INPUT_LENGTH_BREAKPOINTS[InputLengthBreakpoint.ForMdFont]) return '38px'
   return '48px'
 }

18-23: Tighten CryptoAmountInputProps typing (avoid unknown props).

The index signature drops Chakra’s prop typing and allows invalid props. Prefer InputProps and name the event parameter.
As per coding guidelines.

♻️ Suggested typing update
-import { Input } from '@chakra-ui/react'
+import { Input, type InputProps } from '@chakra-ui/react'
 import type { ChangeEvent } from 'react'
 
-export type CryptoAmountInputProps = {
-  value?: string
-  onChange?: (e: ChangeEvent<HTMLInputElement>) => void
-  placeholder?: string
-  [key: string]: unknown
-}
+export type CryptoAmountInputProps = Omit<InputProps, 'value' | 'onChange' | 'placeholder'> & {
+  value?: string
+  onChange?: (event: ChangeEvent<HTMLInputElement>) => void
+  placeholder?: string
+}

25-27: Add explicit return type; confirm ErrorBoundary coverage.

The memoized component should declare an explicit return type, and please verify it’s rendered under an ErrorBoundary (or wrap at usage).
As per coding guidelines.

♻️ Suggested signature tweak
-export const CryptoAmountInput = memo((props: CryptoAmountInputProps) => {
+export const CryptoAmountInput = memo((props: CryptoAmountInputProps): JSX.Element => {

@premiumjibles premiumjibles self-requested a review January 27, 2026 21:00
Copy link
Collaborator

@premiumjibles premiumjibles left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Navigate to Yields page, click "Other Yields" → should go to /yield/ not /yields/ - 🤷 wasn't sure on this one. Where's the "Other yields" button?

Stake ETH via Lido → Provider row should show "Lido" 👍

Stake Cosmos → Validator row should show (not Provider) 👍

Check asset page CTA for asset with disabled yields → should show next best actionable yield or no CTA (test with Solana, which is currently the affected one) 👍 - confirmed SOL yield on asset pages now matches what's on the /yield page for solana

Navigate to DeFi earn tab → yields should load first, legacy positions show spinner while loading 👍

Complete a yield transaction → should not be able to navigate back to confirm step 👍

Open DeFi drawer with yield positions on multiple accounts → fiat value should aggregate across all accounts 👍

https://jam.dev/c/d832050b-fe6a-4947-909a-24b43b61d477

@gomesalexandre
Copy link
Contributor Author

Navigate to Yields page, click "Other Yields" → should go to /yield/ not /yields/ - 🤷 wasn't sure on this one. Where's the "Other yields" button?

This guy! https://jam.dev/c/27fd1ab2-ccf8-48d0-8f5a-7b5f2f3cc0ca

@gomesalexandre gomesalexandre enabled auto-merge (squash) January 27, 2026 22:25
@gomesalexandre gomesalexandre merged commit 98bb0d9 into develop Jan 27, 2026
4 checks passed
@gomesalexandre gomesalexandre deleted the feat_yield_full_toggle_1 branch January 27, 2026 22:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants