Skip to content

Commit 846c924

Browse files
authored
Merge pull request #1614 from mars-protocol/develop
2 parents 16b672a + 0a92005 commit 846c924

File tree

4 files changed

+148
-19
lines changed

4 files changed

+148
-19
lines changed
Lines changed: 106 additions & 0 deletions
Loading

src/components/common/Icons/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ export { default as Discord } from 'components/common/Icons/Discord.svg'
2828
export { default as Droplet } from 'components/common/Icons/Droplet.svg'
2929
export { default as Edit } from 'components/common/Icons/Edit.svg'
3030
export { default as Enter } from 'components/common/Icons/Enter.svg'
31-
export { default as Eye } from 'components/common/Icons/Eye.svg'
3231
export { default as ExclamationMarkCircled } from 'components/common/Icons/ExclamationMarkCircled.svg'
3332
export { default as ExclamationMarkTriangle } from 'components/common/Icons/ExclamationMarkTriangle.svg'
3433
export { default as ExternalLink } from 'components/common/Icons/ExternalLink.svg'
34+
export { default as Eye } from 'components/common/Icons/Eye.svg'
3535
export { default as Flag } from 'components/common/Icons/Flag.svg'
3636
export { default as Gear } from 'components/common/Icons/Gear.svg'
3737
export { default as GridGlobe } from 'components/common/Icons/GridGlobe.svg'
@@ -49,6 +49,7 @@ export { default as LockLocked } from 'components/common/Icons/LockLocked.svg'
4949
export { default as LockUnlocked } from 'components/common/Icons/LockUnlocked.svg'
5050
export { default as Logo } from 'components/common/Icons/Logo.svg'
5151
export { default as Luggage } from 'components/common/Icons/Luggage.svg'
52+
export { default as MarsFragments } from 'components/common/Icons/MarsFragments.svg'
5253
export { default as MarsProtocol } from 'components/common/Icons/MarsProtocol.svg'
5354
export { default as MilkyWay } from 'components/common/Icons/MilkyWay.svg'
5455
export { default as Neutron } from 'components/common/Icons/Neutron.svg'

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)