Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
118 commits
Select commit Hold shift + click to select a range
6f4de0d
[skip ci] feat: yield.xyz exploration
gomesalexandre Jan 6, 2026
bfd8e24
feat: add comprehensive Yield.xyz POC implementation plan
gomesalexandre Jan 6, 2026
04619bd
feat: add Yield.xyz foundation (env vars, CSP, types, API, hooks)
gomesalexandre Jan 6, 2026
cce008e
feat: wip
gomesalexandre Jan 6, 2026
fd81d5e
fix: improve Yield.xyz types and filter SKIPPED/CREATED approval steps
gomesalexandre Jan 6, 2026
988df70
wip: wip
gomesalexandre Jan 6, 2026
374ce85
fix: shit
gomesalexandre Jan 6, 2026
412a26f
feat: wip
gomesalexandre Jan 6, 2026
bdee0d8
wip: wip
gomesalexandre Jan 6, 2026
07f2d57
fix: patch yield-xyz provider logo with local image
gomesalexandre Jan 6, 2026
72b633d
feat: add yield filters, tx confirmation polling, and UI improvements
gomesalexandre Jan 6, 2026
659dd71
fix: revert AssetIcon changes that caused nested icon bug
gomesalexandre Jan 6, 2026
5e74f1f
feat: carrot
gomesalexandre Jan 6, 2026
544b651
feat: wip
gomesalexandre Jan 6, 2026
1cf9fd1
feat: visual bits
gomesalexandre Jan 6, 2026
072cc5e
[skip ci] wip: disgusting ai spew wip
gomesalexandre Jan 7, 2026
8862b52
[skip ci] fix: sui staking tx execution and yield detail icon
gomesalexandre Jan 7, 2026
8b93520
[skip ci] fix: revert to base unit amount for yield api
gomesalexandre Jan 7, 2026
2f96d10
[skip ci] wip: sui minimum deposit
gomesalexandre Jan 7, 2026
2b2ece9
[skip ci] feat: add Solana staking support for yield.xyz
gomesalexandre Jan 7, 2026
1b138f3
[skip ci] fix: show yield balances on account page and sum all balanc…
gomesalexandre Jan 7, 2026
8350517
[skip ci] fix: hide duplicate opportunity row when no active positions
gomesalexandre Jan 7, 2026
11dffe3
Merge remote-tracking branch 'origin/develop' into feat_yield
gomesalexandre Jan 7, 2026
fec6eeb
feat: robots review code
gomesalexandre Jan 7, 2026
d934342
Apply yield xyz fixes and cleanup
gomesalexandre Jan 7, 2026
7134897
Follow-up yield xyz adjustments
gomesalexandre Jan 7, 2026
57e4be5
fix: yield xyz query key inconsistencies and related improvements
gomesalexandre Jan 7, 2026
3d71632
refactor: delete unused formatters.ts, replace with Amount component
gomesalexandre Jan 7, 2026
8338e99
fix: yield component refinements and transaction flow hook
gomesalexandre Jan 7, 2026
041ff35
feat: add token name to yields search
gomesalexandre Jan 7, 2026
2e85e56
wip: wip
gomesalexandre Jan 7, 2026
4677e65
fix: add Figment validator address for Monad native staking
gomesalexandre Jan 7, 2026
52f4e71
wip: wip
gomesalexandre Jan 7, 2026
a4e09c9
fix: spacing
gomesalexandre Jan 7, 2026
98778a3
wip: wip
gomesalexandre Jan 7, 2026
2ece99e
feat: wip
gomesalexandre Jan 7, 2026
c1d8a85
chore: save yields page perf optimization attempts as diff for reference
gomesalexandre Jan 7, 2026
c312710
feat: validator breakdown
gomesalexandre Jan 7, 2026
b054c08
feat: normalization
gomesalexandre Jan 7, 2026
f85d171
fix: shit
gomesalexandre Jan 7, 2026
ff00a37
feat: normalize more
gomesalexandre Jan 7, 2026
ebe40fa
feat: even more normalization
gomesalexandre Jan 7, 2026
b1f789b
wip: wip
gomesalexandre Jan 7, 2026
bd6882e
wip: wip
gomesalexandre Jan 7, 2026
b7e172a
feat: wip
gomesalexandre Jan 7, 2026
afc01d3
wip: wip
gomesalexandre Jan 8, 2026
dedef6e
wip: wip
gomesalexandre Jan 8, 2026
a88afd5
feat: cr final
gomesalexandre Jan 8, 2026
8be4d50
fix: yield.xyz claim modal validator fallback, precision amounts, tra…
gomesalexandre Jan 8, 2026
dfe412d
refactor(yields): normalize balance data architecture for O(1) lookups
gomesalexandre Jan 8, 2026
1b1b577
fix(yields): use correct query key for useYield cache lookup
gomesalexandre Jan 8, 2026
bf50af6
[skip ci] wip: wip
gomesalexandre Jan 8, 2026
dd6dbf2
[skip ci] wip: rm cr
gomesalexandre Jan 8, 2026
b14cc3c
feat(AssetAccountDetails): explicitly gate YieldAssetSection behind Y…
gomesalexandre Jan 8, 2026
fbf8b97
refactor(lib/utils): remove dead code isTransactionStatusAdapter
gomesalexandre Jan 8, 2026
e43c4ac
fix(lib/utils): restore isTransactionStatusAdapter (was actually used)
gomesalexandre Jan 8, 2026
76780f9
fix(yields): use context-based account selection and cleanup API
gomesalexandre Jan 8, 2026
6b30286
feat: hyperevm
gomesalexandre Jan 8, 2026
7ed1b99
[skip ci] wip: cleanup
gomesalexandre Jan 8, 2026
0829eaa
[skip ci] wip: wip
gomesalexandre Jan 8, 2026
c3bda92
[skip ci] refactor(YieldDetail): add memo, useMemo, extract memoized …
gomesalexandre Jan 8, 2026
9806a6a
[skip ci] refactor(YieldAssetDetails): add memo, useMemo, useCallback…
gomesalexandre Jan 8, 2026
ad3fa93
[skip ci] refactor(ValidatorBreakdown): add memo, useMemo, useCallbac…
gomesalexandre Jan 8, 2026
eca1a4a
[skip ci] refactor(YieldsList): add memo, useMemo, useCallback, extra…
gomesalexandre Jan 8, 2026
187135e
[skip ci] refactor(Yields): add memo, implicit return
gomesalexandre Jan 8, 2026
af06793
[skip ci] refactor(YieldFilters): add memo, useMemo, useCallback, cle…
gomesalexandre Jan 8, 2026
5cc8b1d
[skip ci] refactor(YieldAssetGroupRow): add memo, useMemo, useCallbac…
gomesalexandre Jan 8, 2026
110a7b7
[skip ci] refactor(YieldActivePositions): add memo, useMemo, useCallb…
gomesalexandre Jan 8, 2026
77e46f9
[skip ci] refactor(YieldAssetSection): add memo, useMemo, useCallback…
gomesalexandre Jan 8, 2026
352cae8
[skip ci] refactor(YieldCard): add memo, useMemo, useCallback, clean …
gomesalexandre Jan 8, 2026
8b44395
[skip ci] refactor(YieldStats): add memo, useMemo, useCallback, clean…
gomesalexandre Jan 8, 2026
ec18dda
[skip ci] refactor(YieldEnterExit): add memo, useMemo, useCallback, c…
gomesalexandre Jan 8, 2026
8c7ed68
[skip ci] refactor(YieldPositionCard): add memo, useMemo, useCallback…
gomesalexandre Jan 8, 2026
b00280e
[skip ci] refactor(YieldOpportunityStats): add memo, useMemo, useCall…
gomesalexandre Jan 8, 2026
aaa03ba
[skip ci] refactor(YieldAssetCard): add memo, useMemo, useCallback, c…
gomesalexandre Jan 8, 2026
de8141e
[skip ci] refactor(YieldValidatorSelectModal): add memo, useMemo, use…
gomesalexandre Jan 8, 2026
bac2c43
[skip ci] refactor(YieldActionModal): add memo, useMemo, useCallback,…
gomesalexandre Jan 8, 2026
d34c044
[skip ci] refactor(YieldViewHelpers): add memo, useMemo, useCallback,…
gomesalexandre Jan 8, 2026
9a913d0
[skip ci] refactor(GradientApy): add memo, useMemo, clean up JSX
gomesalexandre Jan 8, 2026
4bd7b2f
[skip ci] refactor(YieldOpportunityCard): add memo, useMemo, useCallb…
gomesalexandre Jan 8, 2026
095c086
[skip ci] refactor(YieldTable): add memo, useMemo, useCallback, clean…
gomesalexandre Jan 8, 2026
22f96d6
[skip ci] refactor(YieldAccountContext): add memo, useMemo for contex…
gomesalexandre Jan 8, 2026
77835d6
[skip ci] refactor(useYieldOpportunities): add useMemo, useCallback
gomesalexandre Jan 8, 2026
c798386
[skip ci] refactor(useYieldTransactionFlow): add useMemo, useCallback
gomesalexandre Jan 8, 2026
6ac88d9
feat(yields): add NEAR signing, fix EVM nonce, improve validator TVL …
gomesalexandre Jan 8, 2026
c6228a7
merge: resolve conflicts with origin/develop, keep both Yield and Kat…
gomesalexandre Jan 8, 2026
4416ee5
[skip ci] fix(YieldActivePositions): use ReactNode type instead of JS…
gomesalexandre Jan 8, 2026
68b2368
[skip ci] perf(useYields): use push() instead of spread in pagination…
gomesalexandre Jan 8, 2026
c0ece7e
[skip ci] perf(useAllYieldBalances): use Map for O(1) chainId lookup …
gomesalexandre Jan 8, 2026
1c93615
[skip ci] fix: restore yield.xyz feature flags lost in merge
gomesalexandre Jan 8, 2026
cb568e2
fix: flags
gomesalexandre Jan 8, 2026
9fd5ed3
[skip ci] refactor(yieldxyz): extract poll constants and formatYieldT…
gomesalexandre Jan 8, 2026
a0247be
[skip ci] refactor(yieldxyz): extract hardcoded ShapeShift validator …
gomesalexandre Jan 8, 2026
fc6487a
Revert "[skip ci] refactor(yieldxyz): extract hardcoded ShapeShift va…
gomesalexandre Jan 8, 2026
f11f312
[skip ci] refactor(yieldxyz): cleanup - remove docs, add feature flag…
gomesalexandre Jan 8, 2026
03de53b
[skip ci] refactor(yieldxyz): replace forEach/let patterns with funct…
gomesalexandre Jan 8, 2026
f592770
[skip ci] fix(YieldsList): fix positions grid not rendering and remov…
gomesalexandre Jan 8, 2026
648d945
feat(yieldXYZ): add missing successClaim translation
gomesalexandre Jan 8, 2026
fab0c4d
fix(yieldXYZ): move action center notification and query invalidation…
gomesalexandre Jan 8, 2026
d336783
feat: cleanup dead code
gomesalexandre Jan 8, 2026
b8a6885
feat: more normalization
gomesalexandre Jan 8, 2026
3e7d565
refactor: split ValidatorBreakdown into smaller components
gomesalexandre Jan 8, 2026
0d2a359
refactor(yield): normalize data flow and consolidate components (-106…
gomesalexandre Jan 8, 2026
8f9898c
fix(yield): preserve claim amount during transaction and cleanup unus…
gomesalexandre Jan 8, 2026
d55ac12
wip : wip
gomesalexandre Jan 8, 2026
44e4b48
fix(yield): restore SUI gas buffer, improve claim detection, add miss…
gomesalexandre Jan 8, 2026
5a357c8
feat: make @coderabbitai happy, pls resolve
gomesalexandre Jan 8, 2026
4bb0509
feat: make @coderabbitai happy
gomesalexandre Jan 8, 2026
77351bd
fix: lint
gomesalexandre Jan 8, 2026
270ca59
fix: whoopsie
gomesalexandre Jan 8, 2026
94db88b
fix: things @coderabbitai
gomesalexandre Jan 8, 2026
8fc9cca
feat: @coderabbitai you nitty rabbit pls resolve
gomesalexandre Jan 8, 2026
a9d3df9
chore: lint fixes
gomesalexandre Jan 8, 2026
39b2d89
Merge branch 'develop' into feat_yield
gomesalexandre Jan 9, 2026
8476f7a
feat: rm todos
gomesalexandre Jan 9, 2026
764d781
Merge remote-tracking branch 'origin/feat_yield' into feat_yield
gomesalexandre Jan 9, 2026
60baf28
Merge branch 'develop' into feat_yield
gomesalexandre Jan 9, 2026
3afcc5f
Merge branch 'develop' into feat_yield
gomesalexandre Jan 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -306,3 +306,8 @@ VITE_HYPEREVM_NODE_URL=https://rpc.hyperliquid.xyz/evm
VITE_FEATURE_HYPEREVM=true
VITE_FEATURE_NEAR=false
VITE_FEATURE_KATANA=false

# Yield.xyz Feature Flag
VITE_FEATURE_YIELD_XYZ=false
VITE_YIELD_XYZ_API_KEY=06903960-e442-4870-81eb-03ff3ad4c035
VITE_FEATURE_YIELD_MULTI_ACCOUNT=false
Comment on lines +311 to +313
Copy link
Collaborator

Choose a reason for hiding this comment

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

Do we need those 2 different flags? Might discover later while reviewing

Copy link
Contributor Author

Choose a reason for hiding this comment

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

We do! Though multi-account isn't implemented at all atm.

1 change: 1 addition & 0 deletions .env.development
Original file line number Diff line number Diff line change
Expand Up @@ -96,3 +96,4 @@ VITE_FEATURE_CETUS_SWAP=true
VITE_FEATURE_AVNU_SWAP=true
VITE_FEATURE_NEAR=true
VITE_FEATURE_KATANA=true
VITE_FEATURE_YIELD_XYZ=true
2 changes: 2 additions & 0 deletions headers/csps/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ import { csp as metamask } from './wallets/metamask'
import { csp as walletConnect } from './wallets/walletConnect'
import { csp as walletMigration } from './wallets/walletMigration'
import { csp as webflow } from './webflow'
import { csp as yieldxyz } from './yieldxyz'

export const csps = [
base,
Expand Down Expand Up @@ -152,4 +153,5 @@ export const csps = [
relay,
railway,
discord,
yieldxyz,
]
6 changes: 6 additions & 0 deletions headers/csps/yieldxyz.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import type { Csp } from '../types'

export const csp: Csp = {
'connect-src': ['https://api.yield.xyz'],
'img-src': ['https://assets.stakek.it'],
}
Binary file added public/images/providers/yield-xyz.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
20 changes: 20 additions & 0 deletions src/Routes/RoutesCommon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,16 @@ const MarketsPage = makeSuspenseful(
true,
)

const YieldsPage = makeSuspenseful(
lazy(() =>
import('@/pages/Yields/Yields').then(({ Yields }) => ({
default: Yields,
})),
),
{},
true,
)

const WalletConnectDeepLink = makeSuspenseful(
lazy(() =>
import('@/pages/WalletConnectDeepLink/WalletConnectDeepLink').then(
Expand Down Expand Up @@ -228,6 +238,16 @@ export const routes: Route[] = [
mobileNav: false,
disable: !getConfig().VITE_FEATURE_MARKETS,
},
{
path: '/yields/*',
label: 'navBar.yields',
icon: <TbGraph />,
main: YieldsPage,
category: RouteCategory.Featured,
priority: 3,
mobileNav: false,
disable: !getConfig().VITE_FEATURE_YIELD_XYZ,
},
{
path: '/ramp/*',
label: 'navBar.buyCrypto',
Expand Down
151 changes: 149 additions & 2 deletions src/assets/translations/en/main.json
Copy link
Collaborator

Choose a reason for hiding this comment

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

There are a lot of duplicates (actually I found one but didn't check all of them) already existing in this file, maybe we could do a quick LLM pass to remove them

Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
"withdraw": "Withdraw",
"withdrawal": "Withdrawal",
"claim": "Claim",
"claiming": "Claiming...",
"withdrawAndClaim": "Withdraw & Claim",
"overview": "Overview",
"connectWallet": "Connect Wallet",
Expand Down Expand Up @@ -345,6 +346,7 @@
}
},
"defi": {
"yourBalance": "Your Balance",
"modals": {
"learnMore": {
"next": "Next",
Expand Down Expand Up @@ -516,7 +518,8 @@
"ecosystem": "Ecosystem",
"markets": "Markets",
"tokens": "Tokens",
"swap": "Swap"
"swap": "Swap",
"yields": "Yields"
},
"shapeShiftMenu": {
"products": "Products",
Expand Down Expand Up @@ -2661,5 +2664,149 @@
"description": "Your reward of %{amountAndSymbol} is complete."
}
}
},
"yieldXYZ": {
"pageTitle": "Yields",
"pageSubtitle": "Discover and manage yield opportunities across multiple chains",
"enter": "Enter",
"exit": "Exit",
"yield": "Yield",
"apy": "APY",
"apr": "APR",
"tvl": "TVL",
"asset": "Asset",
"provider": "Provider",
"balance": "Balance",
"yourBalance": "Your Balance",
"noYields": "No yield opportunities available",
"connectWallet": "Connect a wallet to view yields",
"stats": "Stats",
"minDeposit": "Min Deposit",
"mechanics": "Mechanics",
"rewardSchedule": "Reward Schedule",
"gasToken": "Gas Token",
"transactionSteps": "Transaction Steps",
"stepApprove": "Approve",
"stepApproveDesc": "Approve the token for deposit",
"stepDeposit": "Deposit",
"stepDepositDesc": "Deposit your assets into the strategy",
"stepComplete": "Complete",
"stepCompleteDesc": "Your deposit is complete and earning yield",
"gasFeeNote": "Gas fees are paid in the native token of the network",
"yourInfo": "Your Position",
"activeBalance": "Active Balance",
"entering": "Entering",
"withdrawable": "Withdrawable",
"locked": "Locked",
"enterDisabled": "Enter is currently disabled for this yield opportunity",
"exitDisabled": "Exit is currently disabled for this yield opportunity",
"type": "Type",
"inputToken": "Input Token",
"netApy": "Net APY",
"grossApy": "Gross APY",
"totalValue": "Total Value",
"myPosition": "My Position",
"myValidatorPosition": "My %{validator} Position",
"vault": "Vault",
"lending": "Lending",
"yourDeposits": "Your Deposits",
"positions": "Positions",
"opportunities": "Opportunities",
"yields": "Yields",
"earnUpTo": "You could earn up to %{apy}% on your balance",
"startEarning": "Start earning",
"maxApy": "Max APY",
"validator": "Validator",
"validatorBreakdown": "Validator Breakdown",
"staked": "Staked",
"exiting": "Exiting",
"claimable": "Claimable",
"loadingQuote": "Loading Quote...",
"depositing": "Depositing...",
"withdrawing": "Withdrawing...",
"selectValidator": "Select Validator",
"allValidators": "All Validators",
"myValidators": "My Validators",
"noValidatorsFound": "No validators found",
"preferred": "Preferred",
"pending": "Pending",
"ready": "Ready",
"highestApy": "Highest APY",
"lowestApy": "Lowest APY",
"highestTvl": "Highest TVL",
"lowestTvl": "Lowest TVL",
"nameAZ": "Name (A-Z)",
"nameZA": "Name (Z-A)",
"allNetworks": "All Networks",
"allProviders": "All Providers",
"showAll": "Show All",
"searchValidator": "Search for validator",
"depositYourToken": "Deposit your %{symbol} to start earning yield securely.",
"noActiveValidators": "You don't have any active validators yet.",
"confirming": "Confirming...",
"success": "Success!",
"transactions": "Transactions",
"currentApy": "Current APY",
"estYearlyEarnings": "Est. Yearly Earnings",
"allPositions": "All Positions",
"switch": "Switch",
"supplySymbol": "Supply %{symbol}",
"withdrawSymbol": "Withdraw %{symbol}",
"claimSymbol": "Claim %{symbol}",
"noActivePositions": "You do not have any active yield positions.",
"connectWalletPositions": "Connect a wallet to view your active yield positions.",
"view": "View",
"close": "Close",
"estEarnings": "Est. Earnings",
"network": "Network",
"market": "market",
"markets": "markets",
"protocol": "protocol",
"protocols": "protocols",
"chain": "chain",
"chains": "chains",
"reward": "Reward",
"assetYields": "%{asset} Yields",
"opportunitiesAvailable": "%{count} opportunities available",
"noYieldsMatchingFilters": "No yields found matching filters.",
"activeDeposits": "Active Deposits",
"acrossPositions": "Across %{count} positions",
"availableToEarn": "Available to Earn",
"idleAssetsEarning": "Idle assets that could be earning up to %{apy}% APY",
"potentialEarnings": "Potential Earnings",
"perYear": "/yr",
"earn": "Earn",
"myBalance": "My Balance",
"providers": "Providers",
"deposit": "Deposit",
"withdraw": "Withdraw",
"successDeposit": "You successfully deposited %{amount} %{symbol}",
"successWithdraw": "You successfully withdrew %{amount} %{symbol}",
"successClaim": "You successfully claimed %{amount} %{symbol}",
"loading": {
"signInWallet": "Sign in Wallet",
"signNow": "Sign now...",
"waiting": "Waiting",
"done": "Done",
"preparing": "Preparing...",
"preparingTransaction": "Preparing transaction..."
},
"errors": {
"walletNotConnected": "Wallet not connected",
"unsupportedYieldNetwork": "Unsupported yield network",
"broadcastFailed": "Failed to broadcast transaction",
"transactionFailedTitle": "Transaction failed",
"transactionFailedDescription": "Please try again.",
"unsupportedNetworkTitle": "Unsupported network",
"unsupportedNetworkDescription": "This yield network is not supported yet.",
"walletNotConnectedTitle": "Wallet not connected",
"walletNotConnectedDescription": "Connect a wallet that supports this network to continue.",
"enterAmountTitle": "Enter an amount",
"enterAmountDescription": "Amount must be greater than zero.",
"initiateFailedTitle": "Error",
"initiateFailedDescription": "Failed to initiate transaction sequence.",
"quoteFailedTitle": "Quote failed",
"quoteFailedDescription": "Unable to get a quote for this transaction. Please try again."
}
}
}
}
4 changes: 4 additions & 0 deletions src/components/AssetAccountDetails/AssetAccountDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ import { SpamWarningBanner } from './components/SpamWarningBanner'

import { AssetTransactionHistory } from '@/components/TransactionHistory/AssetTransactionHistory'
import { getChainAdapterManager } from '@/context/PluginProvider/chainAdapterSingleton'
import { useFeatureFlag } from '@/hooks/useFeatureFlag/useFeatureFlag'
import { StandaloneTrade } from '@/pages/Trade/StandaloneTrade'
import { YieldAssetSection } from '@/pages/Yields/components/YieldAssetSection'
import { selectIsSpamMarkedByAssetId } from '@/state/slices/preferencesSlice/selectors'
import { selectMarketDataByAssetIdUserCurrency } from '@/state/slices/selectors'
import { useAppSelector } from '@/state/store'
Expand All @@ -34,6 +36,7 @@ const display = { base: 'none', md: 'block' }
const contentPaddingY = { base: 0, md: 8 }

export const AssetAccountDetails = ({ assetId, accountId }: AssetDetailsProps) => {
const isYieldXyzEnabled = useFeatureFlag('YieldXyz')
const marketData = useAppSelector(state => selectMarketDataByAssetIdUserCurrency(state, assetId))
const isSpamMarked = useAppSelector(state => selectIsSpamMarkedByAssetId(state, assetId))
const assetIds = useMemo(() => [assetId], [assetId])
Expand All @@ -58,6 +61,7 @@ export const AssetAccountDetails = ({ assetId, accountId }: AssetDetailsProps) =
<MaybeChartUnavailable assetIds={assetIds} />
<Equity assetId={assetId} accountId={accountId} />
{accountId && <AccountAssets assetId={assetId} accountId={accountId} />}
{isYieldXyzEnabled && <YieldAssetSection assetId={assetId} accountId={accountId} />}
<RelatedAssets assetId={assetId} />
<AssetTransactionHistory limit={10} assetId={assetId} accountId={accountId} />
</Stack>
Expand Down
19 changes: 13 additions & 6 deletions src/components/Layout/Header/Header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
TbPool,
TbRefresh,
TbStack,
TbTrendingUp,
} from 'react-icons/tb'
import { useTranslate } from 'react-polyglot'
import { useSelector } from 'react-redux'
Expand Down Expand Up @@ -67,16 +68,11 @@ const exploreSubMenuItems = [
{ label: 'navBar.markets', path: '/markets', icon: TbGraph },
]

const earnSubMenuItems = [
{ label: 'navBar.tcy', path: '/tcy', icon: TCYIcon },
{ label: 'navBar.pools', path: '/pools', icon: TbPool },
{ label: 'navBar.lending', path: '/lending', icon: TbBuildingBank },
]

export const Header = memo(() => {
const isDegradedState = useSelector(selectPortfolioDegradedState)
const translate = useTranslate()
const [isLargerThanMd] = useMediaQuery(`(min-width: ${breakpoints['md']})`)
const isYieldXyzEnabled = useFeatureFlag('YieldXyz')

const navigate = useNavigate()
const {
Expand Down Expand Up @@ -117,6 +113,17 @@ export const Header = memo(() => {
const { degradedChainIds } = useDiscoverAccounts()

const hasWallet = Boolean(walletInfo?.deviceId)
const earnSubMenuItems = useMemo(
() => [
{ label: 'navBar.tcy', path: '/tcy', icon: TCYIcon },
{ label: 'navBar.pools', path: '/pools', icon: TbPool },
{ label: 'navBar.lending', path: '/lending', icon: TbBuildingBank },
...(isYieldXyzEnabled
? [{ label: 'navBar.yields', path: '/yields', icon: TbTrendingUp }]
: []),
],
[isYieldXyzEnabled],
)

/**
* FOR DEVELOPERS:
Expand Down
4 changes: 4 additions & 0 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,10 @@ const validators = {
VITE_NOTIFICATIONS_SERVER_URL: url({ default: '' }),
VITE_FEATURE_ADDRESS_BOOK: bool({ default: false }),
VITE_FEATURE_APP_RATING: bool({ default: false }),
VITE_FEATURE_YIELD_XYZ: bool({ default: false }),
VITE_YIELD_XYZ_API_KEY: str({ default: '' }),
VITE_YIELD_XYZ_BASE_URL: url({ default: 'https://api.yield.xyz/v1' }),
VITE_FEATURE_YIELD_MULTI_ACCOUNT: bool({ default: false }),
}

function reporter<T>({ errors }: envalid.ReporterOptions<T>) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,13 @@ const displayTypeMessagesMap: Partial<Record<ActionType, DisplayTypeMessageMap>>
[GenericTransactionDisplayType.RFOX]: 'RFOX.stakeSuccess',
[GenericTransactionDisplayType.TCY]: 'actionCenter.tcy.stakeComplete',
[GenericTransactionDisplayType.FoxFarm]: 'actionCenter.deposit.complete',
[GenericTransactionDisplayType.Yield]: 'actionCenter.deposit.complete',
},
[ActionType.Withdraw]: {
[GenericTransactionDisplayType.RFOX]: 'RFOX.unstakeSuccess',
[GenericTransactionDisplayType.TCY]: 'actionCenter.tcy.unstakeComplete',
[GenericTransactionDisplayType.FoxFarm]: 'actionCenter.withdrawal.complete',
[GenericTransactionDisplayType.Yield]: 'actionCenter.withdrawal.complete',
},
[ActionType.Claim]: {
[GenericTransactionDisplayType.FoxFarm]: 'actionCenter.claim.complete',
Expand Down Expand Up @@ -73,6 +75,7 @@ export const useGenericTransactionSubscriber = () => {
GenericTransactionDisplayType.TCY,
GenericTransactionDisplayType.FoxFarm,
GenericTransactionDisplayType.Approve,
GenericTransactionDisplayType.Yield,
].includes(action.transactionMetadata.displayType)
) {
return
Expand Down
Loading