Skip to content

Commit 24e5283

Browse files
authored
Merge pull request #1610 from mars-protocol/vault-fetch-fix
Vault fetch fix
2 parents 25e4028 + 0ad97e7 commit 24e5283

File tree

2 files changed

+40
-18
lines changed

2 files changed

+40
-18
lines changed

src/components/managedVaults/table/AvailableCommunityVaults.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,7 @@ export default function AvailableCommunityVaults() {
4949
return tabs
5050
}, [data.depositedVaults, data.ownedVaults, isLoading])
5151

52-
const hasNoVaults =
53-
!data.ownedVaults.length && !data.depositedVaults.length && !data.availableVaults.length
54-
55-
if (isLoading || hasNoVaults) {
52+
if (isLoading) {
5653
return (
5754
<div className='flex justify-center w-full mt-10'>
5855
<CircularProgress size={50} />

src/hooks/managedVaults/useManagedVaults.ts

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import { useManagedVaultDeposits } from 'hooks/managedVaults/useManagedVaultDepo
44
import { useDepositedManagedVaultsFallback } from 'hooks/managedVaults/useDepositedManagedVaultsFallback'
55
import useChainConfig from 'hooks/chain/useChainConfig'
66
import useStore from 'store'
7-
import useSWR from 'swr'
8-
import { useMemo } from 'react'
7+
import useSWR, { mutate } from 'swr'
8+
import { useEffect, useMemo, useState } from 'react'
99
import BN from 'bignumber.js'
1010

1111
export default function useManagedVaults() {
@@ -121,30 +121,55 @@ export default function useManagedVaults() {
121121
},
122122
{
123123
revalidateOnFocus: false,
124-
refreshInterval: 60_000,
125124
suspense: false,
125+
refreshInterval: (latestData) => {
126+
if (
127+
Array.isArray(latestData) &&
128+
(latestData.length === 0 ||
129+
!latestData.some((vault) => BN(vault.base_tokens_amount).isGreaterThan(0)))
130+
) {
131+
return 2000 // 2 seconds if empty
132+
}
133+
return 120000 // else 120 seconds
134+
},
126135
},
127136
)
128137

129-
const vaultDeposits = useManagedVaultDeposits(address, vaultsResponse ?? [])
138+
// Add local state for last valid (non-empty) vaults
139+
const [lastValidVaults, setLastValidVaults] = useState<ManagedVaultWithDetails[]>([])
140+
useEffect(() => {
141+
if (
142+
vaultsResponse &&
143+
vaultsResponse.length > 0 &&
144+
vaultsResponse.some((vault) => BN(vault.base_tokens_amount).isGreaterThan(0))
145+
) {
146+
setLastValidVaults(vaultsResponse)
147+
}
148+
}, [vaultsResponse])
149+
150+
// Use last valid data if current response is empty or returns no funded vaults
151+
const dataToUse =
152+
vaultsResponse &&
153+
vaultsResponse.length > 0 &&
154+
vaultsResponse.some((vault) => BN(vault.base_tokens_amount).isGreaterThan(0))
155+
? vaultsResponse
156+
: lastValidVaults
157+
158+
const vaultDeposits = useManagedVaultDeposits(address, dataToUse ?? [])
130159
const result = useMemo(() => {
131-
if (error || !vaultsResponse || vaultsResponse.length === 0) {
160+
if (error || !dataToUse || dataToUse.length === 0) {
132161
return {
133162
ownedVaults: fallbackUserVaults.filter((vault) => vault.isOwner) || [],
134163
depositedVaults: fallbackUserVaults.filter((vault) => !vault.isOwner) || [],
135164
availableVaults: [],
136165
}
137166
}
138-
139167
// Filter out unfunded vaults (those with zero total_base_tokens) for available vaults table
140-
const fundedVaults = vaultsResponse.filter((vault) =>
141-
BN(vault.base_tokens_amount).isGreaterThan(0),
142-
)
143-
168+
const fundedVaults = dataToUse.filter((vault) => BN(vault.base_tokens_amount).isGreaterThan(0))
144169
return {
145-
ownedVaults: address ? vaultsResponse.filter((vault) => vault.isOwner) : [],
170+
ownedVaults: address ? dataToUse.filter((vault) => vault.isOwner) : [],
146171
depositedVaults: address
147-
? vaultsResponse.filter(
172+
? dataToUse.filter(
148173
(vault) => !vault.isOwner && vaultDeposits.get(vault.vault_tokens_denom) === true,
149174
)
150175
: [],
@@ -154,10 +179,10 @@ export default function useManagedVaults() {
154179
)
155180
: fundedVaults,
156181
}
157-
}, [vaultsResponse, vaultDeposits, address, error, fallbackUserVaults])
182+
}, [dataToUse, vaultDeposits, address, error, fallbackUserVaults])
158183

159184
return {
160185
data: result,
161-
isLoading: isLoading || isFallbackLoading,
186+
isLoading: (isLoading || isFallbackLoading) && dataToUse.length === 0,
162187
}
163188
}

0 commit comments

Comments
 (0)