From 58dd54cd214bc5f0261c9d6693c4b783f4c34937 Mon Sep 17 00:00:00 2001 From: Majorfi Date: Fri, 27 Oct 2023 11:58:30 +0200 Subject: [PATCH] fix: registry with kind --- apps/common/schemas/yDaemonVaultsSchemas.ts | 1 + apps/vaults-v3/components/Filters.tsx | 2 +- .../details/tabs/VaultDetailsStrategies.tsx | 35 +++++++++++++------ apps/vaults-v3/constants/index.ts | 10 ++---- apps/vaults/hooks/useFilteredVaults.ts | 19 +++++++++- 5 files changed, 47 insertions(+), 20 deletions(-) diff --git a/apps/common/schemas/yDaemonVaultsSchemas.ts b/apps/common/schemas/yDaemonVaultsSchemas.ts index ddb374ce0..35bf63a0c 100644 --- a/apps/common/schemas/yDaemonVaultsSchemas.ts +++ b/apps/common/schemas/yDaemonVaultsSchemas.ts @@ -60,6 +60,7 @@ export const yDaemonVaultSchema = z.object({ .or(z.literal('Experimental Yearn Vault')) .or(z.literal('Standard')) .or(z.literal('Yearn Vault')), + kind: z.literal('Legacy').or(z.literal('Multi Strategies')).or(z.literal('Single Strategy')), symbol: z.string(), name: z.string(), category: z diff --git a/apps/vaults-v3/components/Filters.tsx b/apps/vaults-v3/components/Filters.tsx index 90c2184cb..53ac1c384 100644 --- a/apps/vaults-v3/components/Filters.tsx +++ b/apps/vaults-v3/components/Filters.tsx @@ -1,6 +1,6 @@ import {useMemo} from 'react'; import {VaultListOptions} from '@vaults/components/list/VaultListOptions'; -import {ALL_CATEGORIES} from '@vaults/constants'; +import {ALL_CATEGORIES} from '@vaults-v3/constants'; import {MultiSelectDropdown} from '@common/components/MultiSelectDropdown'; import {SearchBar} from '@common/components/SearchBar'; import {useChainOptions} from '@common/hooks/useChains'; diff --git a/apps/vaults-v3/components/details/tabs/VaultDetailsStrategies.tsx b/apps/vaults-v3/components/details/tabs/VaultDetailsStrategies.tsx index fc5c36381..6d89d14b0 100755 --- a/apps/vaults-v3/components/details/tabs/VaultDetailsStrategies.tsx +++ b/apps/vaults-v3/components/details/tabs/VaultDetailsStrategies.tsx @@ -1,6 +1,7 @@ import {useMemo, useState} from 'react'; import {findLatestApr} from '@vaults/components/details/tabs/findLatestApr'; import {yDaemonReportsSchema} from '@vaults/schemas/reportsSchema'; +import {VaultsV3ListRow} from '@vaults-v3/components/list/VaultsV3ListRow'; import {IconCopy} from '@yearn-finance/web-lib/icons/IconCopy'; import {toAddress} from '@yearn-finance/web-lib/utils/address'; import {formatToNormalizedValue, toBigInt} from '@yearn-finance/web-lib/utils/format.bigNumber'; @@ -9,6 +10,7 @@ import {formatDuration} from '@yearn-finance/web-lib/utils/format.time'; import {copyToClipboard, parseMarkdown} from '@yearn-finance/web-lib/utils/helpers'; import {SearchBar} from '@common/components/SearchBar'; import {Switch} from '@common/components/Switch'; +import {useYearn} from '@common/contexts/useYearn'; import {useFetch} from '@common/hooks/useFetch'; import {IconChevron} from '@common/icons/IconChevron'; import {useYDaemonBaseURI} from '@common/utils/getYDaemonBaseURI'; @@ -187,6 +189,8 @@ function isExceptionStrategy(strategy: TYDaemonVaultStrategy): boolean { } export function VaultDetailsStrategies({currentVault}: {currentVault: TYDaemonVault}): ReactElement { + const {vaults} = useYearn(); + const [searchValue, set_searchValue] = useState(''); const [shouldHide0DebtStrategies, set_shouldHide0DebtStrategies] = useState(true); @@ -229,16 +233,27 @@ export function VaultDetailsStrategies({currentVault}: {currentVault: TYDaemonVa -
- {filteredStrategies.map( - (strategy): ReactElement => ( - - ) - )} +
+
+ {filteredStrategies.map((strategy): ReactElement => { + const strategyAsVault = vaults[strategy.address]; + if (!strategyAsVault) { + return ( + + ); + } + return ( + + ); + })} +
); diff --git a/apps/vaults-v3/constants/index.ts b/apps/vaults-v3/constants/index.ts index 753e2be81..b036c9f13 100644 --- a/apps/vaults-v3/constants/index.ts +++ b/apps/vaults-v3/constants/index.ts @@ -1,11 +1,5 @@ export const ALL_CATEGORIES = { - holdings: 'Holdings', - crypto: 'Crypto Vaults', - stables: 'Stables Vaults', - curve: 'Curve Vaults', - // balancer: 'Balancer Vaults', - boosted: 'Boosted Vaults', - velodrome: 'Velodrome Vaults', - aerodrome: 'Aerodrome Vaults' + multi: 'Multi Strategies', + single: 'Single Strategy' }; export const ALL_CATEGORIES_KEYS = Object.keys(ALL_CATEGORIES); diff --git a/apps/vaults/hooks/useFilteredVaults.ts b/apps/vaults/hooks/useFilteredVaults.ts index cabcac2c8..fdcb437ad 100644 --- a/apps/vaults/hooks/useFilteredVaults.ts +++ b/apps/vaults/hooks/useFilteredVaults.ts @@ -73,7 +73,18 @@ export function useVaultFilter( [getToken] ); + // V3 Filtered Vaults const v3Vaults = useFilteredVaults(vaults, ({version}): boolean => (version || '')?.split('.')?.[0] === '3'); + const singleVault = useFilteredVaults( + vaults, + ({version, kind}): boolean => (version || '')?.split('.')?.[0] === '3' && kind === 'Single Strategy' + ); + const MultiVault = useFilteredVaults( + vaults, + ({version, kind}): boolean => (version || '')?.split('.')?.[0] === '3' && kind === 'Multi Strategies' + ); + + //V2 Filtered Vaults const boostedVaults = useFilteredVaults(vaults, ({apr}): boolean => apr.extra.stakingRewardsAPR > 0); const curveVaults = useFilteredVaults(vaults, ({category}): boolean => category === 'Curve'); const velodromeVaults = useFilteredVaults(vaults, ({category}): boolean => category === 'Velodrome'); @@ -99,7 +110,13 @@ export function useVaultFilter( const activeVaults = useDeepCompareMemo((): TYDaemonVault[] => { let _vaultList: TYDaemonVault[] = []; if (v3) { - return v3Vaults; + if (categories.includes('single')) { + _vaultList = [..._vaultList, ...singleVault]; + } + if (categories.includes('multi')) { + _vaultList = [..._vaultList, ...MultiVault]; + } + return _vaultList; } if (categories.includes('featured')) {