@@ -4,8 +4,8 @@ import { useManagedVaultDeposits } from 'hooks/managedVaults/useManagedVaultDepo
44import { useDepositedManagedVaultsFallback } from 'hooks/managedVaults/useDepositedManagedVaultsFallback'
55import useChainConfig from 'hooks/chain/useChainConfig'
66import 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'
99import BN from 'bignumber.js'
1010
1111export 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