Skip to content

Commit b48d057

Browse files
authored
Merge pull request #1602 from mars-protocol/develop
v2.11.1
2 parents a09ce28 + 19e8dce commit b48d057

File tree

11 files changed

+119
-92
lines changed

11 files changed

+119
-92
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
FROM node:20-alpine as builder
22
WORKDIR /app
33

4-
COPY package.json yarn.lock ./
4+
COPY package.json ./
55
RUN yarn install
66
COPY . .
77
RUN apk --update add patch

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "mars-v2-frontend",
3-
"version": "2.11.0",
3+
"version": "2.11.1",
44
"homepage": "./",
55
"private": false,
66
"license": "SEE LICENSE IN LICENSE FILE",

src/api/cosmwasm-client.ts

Lines changed: 47 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,10 @@ const getRedBankQueryClient = async (chainConfig: ChainConfig) => {
169169
}
170170
}
171171

172-
const getManagedVaultQueryClient = async (chainConfig: ChainConfig, address: string) => {
172+
const getManagedVaultQueryClient = async (
173+
chainConfig: ChainConfig,
174+
address: string,
175+
): Promise<MarsVaultQueryClient | null> => {
173176
try {
174177
const rpc = getUrl(chainConfig.endpoints.rpc)
175178
const key = rpc + address
@@ -181,24 +184,30 @@ const getManagedVaultQueryClient = async (chainConfig: ChainConfig, address: str
181184

182185
return _managedVaultQueryClient.get(key)!
183186
} catch (error) {
184-
setNodeError(getUrl(chainConfig.endpoints.rpc), error)
185-
throw error
187+
console.error(`Error creating managed vault query client for ${address}:`, error)
188+
return null
186189
}
187190
}
191+
188192
const getManagedVaultOwnerAddress = async (chainConfig: ChainConfig, address: string) => {
189193
try {
190194
const client = await getClient(getUrl(chainConfig.endpoints.rpc))
191195
const contractInfo = await client.getContract(address)
192196
return contractInfo.creator
193197
} catch (error) {
194-
setNodeError(getUrl(chainConfig.endpoints.rpc), error)
195-
throw error
198+
console.error(`Error fetching owner address for vault ${address}:`, error)
199+
return undefined
196200
}
197201
}
198202

199-
const getManagedVaultDetails = async (chainConfig: ChainConfig, vaultAddress: string) => {
203+
const getManagedVaultDetails = async (
204+
chainConfig: ChainConfig,
205+
vaultAddress: string,
206+
): Promise<ManagedVaultSCDetailsResponse | null> => {
200207
try {
201208
const client = await getManagedVaultQueryClient(chainConfig, vaultAddress)
209+
if (!client) return null
210+
202211
const response = await client.vaultExtension({
203212
vault_info: {},
204213
})
@@ -212,13 +221,15 @@ const getManagedVaultDetails = async (chainConfig: ChainConfig, vaultAddress: st
212221
const getManagedVaultPnl = async (chainConfig: ChainConfig, vaultAddress: string) => {
213222
try {
214223
const client = await getManagedVaultQueryClient(chainConfig, vaultAddress)
224+
if (!client) return null
225+
215226
const response = await client.vaultExtension({
216227
vault_pnl: {},
217228
})
218229
return response as unknown as ManagedVaultPnlResponse
219230
} catch (error) {
220-
setNodeError(getUrl(chainConfig.endpoints.rpc), error)
221-
throw error
231+
console.error(`Error fetching PnL for vault ${vaultAddress}:`, error)
232+
return null
222233
}
223234
}
224235

@@ -229,15 +240,17 @@ const getManagedVaultUserPosition = async (
229240
) => {
230241
try {
231242
const client = await getManagedVaultQueryClient(chainConfig, vaultAddress)
243+
if (!client) return null
244+
232245
const response = await client.vaultExtension({
233246
user_pnl: {
234247
user_address: userAddress,
235248
},
236249
})
237250
return response as unknown as ManagedVaultUserPositionResponse
238251
} catch (error) {
239-
setNodeError(getUrl(chainConfig.endpoints.rpc), error)
240-
throw error
252+
console.error(`Error fetching user position for vault ${vaultAddress}:`, error)
253+
return null
241254
}
242255
}
243256

@@ -247,13 +260,15 @@ const getManagedVaultPerformanceFeeState = async (
247260
) => {
248261
try {
249262
const client = await getManagedVaultQueryClient(chainConfig, vaultAddress)
263+
if (!client) return null
264+
250265
const response = await client.vaultExtension({
251266
performance_fee_state: {},
252267
})
253268
return response as unknown as PerformanceFeeState
254269
} catch (error) {
255-
setNodeError(getUrl(chainConfig.endpoints.rpc), error)
256-
throw error
270+
console.error(`Error fetching performance fee state for vault ${vaultAddress}:`, error)
271+
return null
257272
}
258273
}
259274

@@ -264,15 +279,17 @@ const getManagedVaultUserUnlocks = async (
264279
) => {
265280
try {
266281
const client = await getManagedVaultQueryClient(chainConfig, vaultAddress)
282+
if (!client) return []
283+
267284
const response = await client.vaultExtension({
268285
user_unlocks: {
269286
user_address: userAddress,
270287
},
271288
})
272289
return response as unknown as UserManagedVaultUnlockResponse[]
273290
} catch (error) {
274-
setNodeError(getUrl(chainConfig.endpoints.rpc), error)
275-
throw error
291+
console.error(`Error fetching user unlocks for vault ${vaultAddress}:`, error)
292+
return []
276293
}
277294
}
278295

@@ -284,6 +301,8 @@ const getManagedVaultAllUnlocks = async (
284301
) => {
285302
try {
286303
const client = await getManagedVaultQueryClient(chainConfig, vaultAddress)
304+
if (!client) return { data: [], metadata: { has_more: false } }
305+
287306
const response = await client.vaultExtension({
288307
all_unlocks: {
289308
limit,
@@ -295,8 +314,8 @@ const getManagedVaultAllUnlocks = async (
295314
metadata: { has_more: boolean }
296315
}
297316
} catch (error) {
298-
setNodeError(getUrl(chainConfig.endpoints.rpc), error)
299-
throw error
317+
console.error(`Error fetching all unlocks for vault ${vaultAddress}:`, error)
318+
return { data: [], metadata: { has_more: false } }
300319
}
301320
}
302321

@@ -307,13 +326,15 @@ const getManagedVaultPreviewRedeem = async (
307326
) => {
308327
try {
309328
const client = await getManagedVaultQueryClient(chainConfig, vaultAddress)
329+
if (!client) return null
330+
310331
const response = await client.previewRedeem({
311332
amount,
312333
})
313334
return response
314335
} catch (error) {
315-
setNodeError(getUrl(chainConfig.endpoints.rpc), error)
316-
throw error
336+
console.error(`Error fetching preview redeem for vault ${vaultAddress}:`, error)
337+
return null
317338
}
318339
}
319340

@@ -324,13 +345,15 @@ const getManagedVaultConvertToTokens = async (
324345
) => {
325346
try {
326347
const client = await getManagedVaultQueryClient(chainConfig, vaultAddress)
348+
if (!client) return null
349+
327350
const response = await client.convertToAssets({
328351
amount,
329352
})
330353
return response
331354
} catch (error) {
332-
setNodeError(getUrl(chainConfig.endpoints.rpc), error)
333-
throw error
355+
console.error(`Error fetching convert to tokens for vault ${vaultAddress}:`, error)
356+
return null
334357
}
335358
}
336359

@@ -341,13 +364,15 @@ const getManagedVaultConvertToShares = async (
341364
) => {
342365
try {
343366
const client = await getManagedVaultQueryClient(chainConfig, vaultAddress)
367+
if (!client) return null
368+
344369
const response = await client.convertToShares({
345370
amount,
346371
})
347372
return response
348373
} catch (error) {
349-
setNodeError(getUrl(chainConfig.endpoints.rpc), error)
350-
throw error
374+
console.error(`Error fetching convert to shares for vault ${vaultAddress}:`, error)
375+
return null
351376
}
352377
}
353378

src/components/Modals/FundWithdraw/WithdrawFromAccount.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,21 @@ interface Props {
2525
export default function WithdrawFromAccount(props: Props) {
2626
const { account } = props
2727
const { data: assets } = useAssets()
28-
const tradeEnabledAssets = useMemo(() => assets.filter((asset) => asset.isTradeEnabled), [assets])
28+
const nonPoolTokens = useMemo(() => assets.filter((asset) => !asset.isPoolToken), [assets])
2929
const sortedBalances = useMemo(
3030
() =>
3131
mergeBNCoinArrays(account.deposits, account.lends)
32-
.filter((coin) => tradeEnabledAssets.some((asset) => asset.denom === coin.denom))
32+
.filter((coin) => nonPoolTokens.some((asset) => asset.denom === coin.denom))
3333
.sort((a, b) => {
34-
const valueA = getCoinValue(a, tradeEnabledAssets)?.toNumber?.() ?? 0
35-
const valueB = getCoinValue(b, tradeEnabledAssets)?.toNumber?.() ?? 0
34+
const valueA = getCoinValue(a, nonPoolTokens)?.toNumber?.() ?? 0
35+
const valueB = getCoinValue(b, nonPoolTokens)?.toNumber?.() ?? 0
3636
return valueB - valueA
3737
}),
38-
[account.deposits, account.lends, tradeEnabledAssets],
38+
[account.deposits, account.lends, nonPoolTokens],
3939
)
4040
const defaultAsset = useMemo(
41-
() => tradeEnabledAssets.find(byDenom(sortedBalances[0]?.denom)) ?? tradeEnabledAssets[0],
42-
[tradeEnabledAssets, sortedBalances],
41+
() => nonPoolTokens.find(byDenom(sortedBalances[0]?.denom)) ?? nonPoolTokens[0],
42+
[sortedBalances, nonPoolTokens],
4343
)
4444

4545
const withdraw = useStore((s) => s.withdraw)

src/components/common/Select/Option.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export default function Option(props: Props) {
3434
const balance = props.amount ?? BN_ZERO
3535
const marketAsset = markets.find((market) => market.asset.denom === props.denom)
3636

37-
if (!asset || !marketAsset) return null
37+
if (!asset) return null
3838

3939
if (props.isDisplay) {
4040
return (

src/components/managedVaults/table/AvailableCommunityVaults.tsx

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

52-
if (isLoading) {
53-
return (
54-
<div className='flex justify-center w-full mt-10'>
55-
<CircularProgress size={50} />
56-
</div>
57-
)
58-
}
59-
6052
const hasNoVaults =
6153
!data.ownedVaults.length && !data.depositedVaults.length && !data.availableVaults.length
6254

63-
if (hasNoVaults) {
55+
if (isLoading || hasNoVaults) {
6456
return (
65-
<Text size='lg' className='text-center w-full p-8 text-white/60'>
66-
No community vaults have been created yet
67-
</Text>
57+
<div className='flex justify-center w-full mt-10'>
58+
<CircularProgress size={50} />
59+
</div>
6860
)
6961
}
7062

src/components/managedVaults/vaultDetails/index.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ import { useCallback, useEffect, useState } from 'react'
1818

1919
function VaultLoadingState() {
2020
return (
21-
<div className='flex flex-wrap justify-center w-full gap-4'>
22-
<CircularProgress size={60} />
23-
<Text className='w-full text-center' size='2xl'>
24-
Fetching on-chain data...
21+
<div className='flex flex-wrap justify-center w-full gap-4 mt-20'>
22+
<CircularProgress size={40} />
23+
<Text className='w-full text-center' size='xl'>
24+
Fetching vault data...
2525
</Text>
2626
</div>
2727
)
@@ -131,8 +131,6 @@ export function VaultDetailsContent({
131131
return <VaultLoadingState />
132132
}
133133

134-
if (!vaultDetails) return null
135-
136134
return (
137135
<>
138136
{activeTabIdx === 0 ? (

src/components/managedVaults/vaultDetails/performance/UserMetrics.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export default function UserMetrics(props: Props) {
4949
showSignPrefix: true,
5050
},
5151
{
52-
value: calculateROI(userVaultTokensAmount),
52+
value: calculateROI(userVaultTokensAmount ?? 0),
5353
label: 'Your ROI',
5454
formatOptions: { maxDecimals: 2, minDecimals: 2, suffix: '%' },
5555
isProfitOrLoss: true,

0 commit comments

Comments
 (0)