diff --git a/packages/frontend/components/App/Header/SocialMenuWrapper.tsx b/packages/frontend/components/App/Header/SocialMenuWrapper.tsx
index eef875f6a..55f727d07 100644
--- a/packages/frontend/components/App/Header/SocialMenuWrapper.tsx
+++ b/packages/frontend/components/App/Header/SocialMenuWrapper.tsx
@@ -20,6 +20,11 @@ function SocialMenuWrapper() {
: }
onClick={openMenu}
+ sx={{
+ '& .MuiChip-label': {
+ mb: '-3px',
+ },
+ }}
/>
-
+
{activeProvider?.name} on
-
+
{chainName(vault?.chainId)}
diff --git a/packages/frontend/components/Borrow/Overview/Overview.tsx b/packages/frontend/components/Borrow/Overview/Overview.tsx
index 0eb461c3b..5e4d03be2 100644
--- a/packages/frontend/components/Borrow/Overview/Overview.tsx
+++ b/packages/frontend/components/Borrow/Overview/Overview.tsx
@@ -62,7 +62,7 @@ function Overview({ positionData, isEditing }: OverviewProps) {
mt: !isMobile ? '1rem' : '0',
}}
>
-
+
-
+
{title}
(
- isEditing && (!positions || positions.length === 0)
+ !isEditing || (isEditing && (!positions || positions.length === 0))
);
useEffect(() => {
@@ -105,6 +105,8 @@ function BorrowWrapper({ formType, query }: BorrowWrapperProps) {
and change the values in the store.
*/
useEffect(() => {
+ if (!isEditing) setTimeout(() => setLoading(false), 300);
+
if (isEditing && loading && positionData) {
const vault = positionData.position.vault;
if (vault && vault instanceof BorrowingVault) {
@@ -173,19 +175,37 @@ function BorrowWrapper({ formType, query }: BorrowWrapperProps) {
justifyContent="center"
spacing={3}
>
-
- {positionData ? (
-
- {!isEditing && }
+ {isEditing ? (
+
+ {positionData && (
-
- ) : (
-
- )}
-
+ )}
+
+ ) : (
+
+ {positionData ? (
+
+
+
+
+ ) : (
+
+ )}
+
+ )}
+
(
router.query?.tab === 'lend' ? 1 : 0
);
+ const [isTransitionActive, setIsTransitionActive] = useState(false);
+
+ useEffect(() => {
+ setTimeout(() => {
+ setIsTransitionActive(false);
+ }, 500);
+ }, [currentTab]);
const [filters, setFilters] = useState({
searchQuery: '',
@@ -65,7 +72,10 @@ function Markets() {
wrap="wrap"
>
setCurrentTab(tab)}
+ onChange={(tab) => {
+ setIsTransitionActive(true);
+ setCurrentTab(tab);
+ }}
defaultTab={currentTab}
/>
@@ -76,6 +86,7 @@ function Markets() {
rows={tableData.rows}
vaults={tableData.vaults}
type={tableData.type}
+ isTransitionActive={isTransitionActive}
/>
);
diff --git a/packages/frontend/components/Markets/MarketsTable.tsx b/packages/frontend/components/Markets/MarketsTable.tsx
index 19d919230..1bf5d470c 100644
--- a/packages/frontend/components/Markets/MarketsTable.tsx
+++ b/packages/frontend/components/Markets/MarketsTable.tsx
@@ -30,9 +30,16 @@ type MarketsTableProps = {
filters: MarketFilters;
vaults: AbstractVault[];
type: VaultType;
+ isTransitionActive: boolean;
};
-function MarketsTable({ filters, rows, vaults, type }: MarketsTableProps) {
+function MarketsTable({
+ filters,
+ rows,
+ vaults,
+ type,
+ isTransitionActive,
+}: MarketsTableProps) {
const { palette } = useTheme();
const router = useRouter();
@@ -124,19 +131,23 @@ function MarketsTable({ filters, rows, vaults, type }: MarketsTableProps) {
- {isLoading && vaults.length === 0 ? (
-
- {new Array(numberOfColumns).fill('').map((_, index) => (
-
-
-
+ {(isLoading && vaults.length === 0) || isTransitionActive ? (
+ <>
+ {new Array(rows.length || 1).fill('').map((_, i) => (
+
+ {new Array(numberOfColumns).fill('').map((_, index) => (
+
+
+
+ ))}
+
))}
-
+ >
) : filteredRows.length > 0 ? (
filteredRows.map((row, i) => {
return (
diff --git a/packages/frontend/components/Positions/MyPositions.tsx b/packages/frontend/components/Positions/MyPositions.tsx
index ad34c7871..d5e0c86f0 100644
--- a/packages/frontend/components/Positions/MyPositions.tsx
+++ b/packages/frontend/components/Positions/MyPositions.tsx
@@ -1,7 +1,7 @@
import { Grid, Typography } from '@mui/material';
import { VaultType } from '@x-fuji/sdk';
import { useRouter } from 'next/router';
-import { useState } from 'react';
+import { useEffect, useState } from 'react';
import { useMarkets } from '../../store/markets.store';
import { usePositions } from '../../store/positions.store';
@@ -14,12 +14,19 @@ function MyPositions() {
const [currentTab, setCurrentTab] = useState(
router.query?.tab === 'lend' ? 1 : 0
);
+ const [isTransitionActive, setIsTransitionActive] = useState(false);
const borrowPositions = usePositions((state) => state.borrowPositions);
const lendingPositions = usePositions((state) => state.lendingPositions);
const borrowMarkets = useMarkets((state) => state.borrow.rows);
const lendMarkets = useMarkets((state) => state.lending.rows);
+ useEffect(() => {
+ setTimeout(() => {
+ setIsTransitionActive(false);
+ }, 500);
+ }, [currentTab]);
+
return (
<>
@@ -34,7 +41,10 @@ function MyPositions() {
setCurrentTab(tab)}
+ onChange={(tab) => {
+ setIsTransitionActive(true);
+ setCurrentTab(tab);
+ }}
defaultTab={currentTab}
/>
@@ -43,6 +53,7 @@ function MyPositions() {
positions={currentTab === 0 ? borrowPositions : lendingPositions}
type={currentTab === 0 ? VaultType.BORROW : VaultType.LEND}
markets={currentTab === 0 ? borrowMarkets : lendMarkets}
+ isTransitionActive={isTransitionActive}
/>
>
);
diff --git a/packages/frontend/components/Positions/MyPositionsTable.tsx b/packages/frontend/components/Positions/MyPositionsTable.tsx
index 127180a9d..7e0d7f0b0 100644
--- a/packages/frontend/components/Positions/MyPositionsTable.tsx
+++ b/packages/frontend/components/Positions/MyPositionsTable.tsx
@@ -11,7 +11,7 @@ import {
} from '@mui/material';
import { VaultType } from '@x-fuji/sdk';
import { useRouter } from 'next/router';
-import { useEffect, useState } from 'react';
+import { useEffect, useMemo, useState } from 'react';
import { AprType, AssetType, recommendedLTV } from '../../helpers/assets';
import { chainName } from '../../helpers/chains';
@@ -42,9 +42,15 @@ type MyPositionsTableProps = {
type: VaultType;
markets: MarketRow[];
positions: Position[];
+ isTransitionActive: boolean;
};
-function MyPositionsTable({ type, positions, markets }: MyPositionsTableProps) {
+function MyPositionsTable({
+ type,
+ positions,
+ markets,
+ isTransitionActive,
+}: MyPositionsTableProps) {
const router = useRouter();
const account = useAuth((state) => state.address);
@@ -63,6 +69,32 @@ function MyPositionsTable({ type, positions, markets }: MyPositionsTableProps) {
})();
}, [loading, account, positions]);
+ const loadingBlock = useMemo(
+ () => (
+
+ <>
+ {new Array(rows.length || 1).fill('').map((_, i) => (
+
+ {new Array(numberOfColumns).fill('').map((_, index) => (
+
+
+
+ ))}
+
+ ))}
+ >
+
+
+
+ ),
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ [rows]
+ );
+
if (!account) {
return (
@@ -70,18 +102,8 @@ function MyPositionsTable({ type, positions, markets }: MyPositionsTableProps) {
);
}
- if (loading) {
- return (
-
-
- {new Array(numberOfColumns).fill('').map((_, index) => (
-
-
-
- ))}
-
-
- );
+ if (loading || isTransitionActive) {
+ return loadingBlock;
}
function handleClick(row: PositionRow) {
diff --git a/packages/frontend/components/Shared/AprValue.tsx b/packages/frontend/components/Shared/AprValue.tsx
index d033a6ae3..406fc8299 100644
--- a/packages/frontend/components/Shared/AprValue.tsx
+++ b/packages/frontend/components/Shared/AprValue.tsx
@@ -41,7 +41,9 @@ function AprValue({
>
{reward !== undefined && reward > 0 && (
diff --git a/packages/frontend/components/Shared/Operation/VaultSelect/VaultSelect.tsx b/packages/frontend/components/Shared/Operation/VaultSelect/VaultSelect.tsx
index b7ffd9bff..e6fadf125 100644
--- a/packages/frontend/components/Shared/Operation/VaultSelect/VaultSelect.tsx
+++ b/packages/frontend/components/Shared/Operation/VaultSelect/VaultSelect.tsx
@@ -16,9 +16,9 @@ import {
useMediaQuery,
} from '@mui/material';
import { useTheme } from '@mui/material/styles';
-import { AbstractVault, VaultType } from '@x-fuji/sdk';
+import { VaultType } from '@x-fuji/sdk';
import { useRouter } from 'next/router';
-import React, { useEffect, useMemo, useRef, useState } from 'react';
+import React, { useEffect, useMemo, useState } from 'react';
import { FetchStatus } from '../../../../helpers/assets';
import { useBorrow } from '../../../../store/borrow.store';
@@ -43,8 +43,6 @@ function VaultSelect({ type = VaultType.BORROW }: VaultSelectProps) {
const status = useStore().availableVaultsStatus;
const changeActiveVault = useStore().changeActiveVault;
- const prevVault = useRef(undefined);
-
const hasNoAvailableVaults =
status === FetchStatus.Ready && availableVaults.length === 0;
const override = useNavigation(
diff --git a/packages/frontend/helpers/cache.ts b/packages/frontend/helpers/cache.ts
index 9c93d363a..74bd29763 100644
--- a/packages/frontend/helpers/cache.ts
+++ b/packages/frontend/helpers/cache.ts
@@ -64,13 +64,16 @@ export async function getLlamaCache(): Promise {
});
}
-export async function getCacheLastUpdatedDate(): Promise {
- return new Promise(async (resolve, reject) => {
+export async function getCacheLastUpdatedDate(): Promise {
+ return new Promise(async (resolve) => {
const db = await init();
const transaction = db.transaction(['metaData'], 'readonly');
const request = transaction.objectStore('metaData').get('lastUpdated');
- request.onsuccess = () => resolve(request.result.date);
- request.onerror = () => reject(request.error);
+ transaction.oncomplete = () => {
+ if (request.result) resolve(request.result.date);
+ resolve(undefined);
+ };
+ transaction.onerror = () => resolve(undefined);
});
}
diff --git a/packages/frontend/helpers/errors.ts b/packages/frontend/helpers/errors.ts
index f0ba7ece8..fc8eb3537 100644
--- a/packages/frontend/helpers/errors.ts
+++ b/packages/frontend/helpers/errors.ts
@@ -1,5 +1,4 @@
import * as Sentry from '@sentry/react';
-import { BrowserTracing } from '@sentry/tracing';
import { HELPER_URL, NOTIFICATION_MESSAGES, SENTRY_DSN } from '../constants';
import {
@@ -20,8 +19,6 @@ export const initErrorReporting = () => {
}
Sentry.init({
dsn: SENTRY_DSN,
- integrations: [new BrowserTracing()],
- tracesSampleRate: 1.0,
});
};