From 1c1ce6102196640d938c102aaca0bf946f3001dc Mon Sep 17 00:00:00 2001 From: Martin Grabina Date: Wed, 15 Apr 2026 12:20:40 -0300 Subject: [PATCH 1/2] fix: guard reserve-overview page against undefined reserve during loading The .find() call returns undefined when SDK data is still loading, but an unsafe cast hid this from TypeScript. Remove the as-casts and add a guard to skip rendering the reserve configuration until data is available. This matches the pattern already used by ReserveTopDetailsWrapper. --- pages/reserve-overview.page.tsx | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/pages/reserve-overview.page.tsx b/pages/reserve-overview.page.tsx index eb3d7467b1..bcc9b2a507 100644 --- a/pages/reserve-overview.page.tsx +++ b/pages/reserve-overview.page.tsx @@ -5,11 +5,7 @@ import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; import StyledToggleButton from 'src/components/StyledToggleButton'; import StyledToggleButtonGroup from 'src/components/StyledToggleButtonGroup'; -import { - ComputedReserveData, - ReserveWithId, - useAppDataContext, -} from 'src/hooks/app-data-provider/useAppDataProvider'; +import { useAppDataContext } from 'src/hooks/app-data-provider/useAppDataProvider'; import { AssetCapsProvider } from 'src/hooks/useAssetCaps'; import { AssetCapsProviderSDK } from 'src/hooks/useAssetCapsSDK'; import { MainLayout } from 'src/layouts/MainLayout'; @@ -55,12 +51,12 @@ export default function ReserveOverview() { //With SDK const reserve = supplyReserves.find((reserve) => { return reserve.underlyingToken.address.toLowerCase() === underlyingAsset?.toLowerCase(); - }) as ReserveWithId; + }); //With Reserves const reserveLegacy = reserves.find((reserve) => { return reserve.underlyingAsset.toLowerCase() === underlyingAsset?.toLowerCase(); - }) as ComputedReserveData; + }); const [pageEventCalled, setPageEventCalled] = useState(false); useEffect(() => { @@ -76,6 +72,15 @@ export default function ReserveOverview() { const isOverview = mode === 'overview'; + // Don't render reserve configuration until SDK data is loaded + if (!reserve || !reserveLegacy) { + return ( + <> + + + ); + } + return ( From c05badb34c17727f1c462ca13774b65608646bf5 Mon Sep 17 00:00:00 2001 From: Martin Grabina Date: Thu, 16 Apr 2026 10:44:44 -0300 Subject: [PATCH 2/2] fix: guard borrowInfo access in market list components --- src/modules/markets/MarketAssetsListItem.tsx | 2 +- src/modules/markets/MarketAssetsListMobileItem.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/markets/MarketAssetsListItem.tsx b/src/modules/markets/MarketAssetsListItem.tsx index f4fce15f03..d81c304fd0 100644 --- a/src/modules/markets/MarketAssetsListItem.tsx +++ b/src/modules/markets/MarketAssetsListItem.tsx @@ -164,7 +164,7 @@ export const MarketAssetsListItem = ({ ...reserve }: ReserveWithProtocolIncentiv {reserve.borrowInfo?.borrowingState === 'DISABLED' && !reserve.isFrozen && !reserve.eModeInfo?.some((eMode) => eMode.canBeBorrowed) && - reserve.borrowInfo.total.amount.value !== '0' && } + reserve.borrowInfo?.total.amount.value !== '0' && } diff --git a/src/modules/markets/MarketAssetsListMobileItem.tsx b/src/modules/markets/MarketAssetsListMobileItem.tsx index 41e5325b7f..fcc9760a0f 100644 --- a/src/modules/markets/MarketAssetsListMobileItem.tsx +++ b/src/modules/markets/MarketAssetsListMobileItem.tsx @@ -161,7 +161,7 @@ export const MarketAssetsListMobileItem = ({ ...reserve }: ReserveWithProtocolIn {reserve.borrowInfo?.borrowingState === 'DISABLED' && !reserve.isFrozen && !reserve.eModeInfo?.some((eMode) => eMode.canBeBorrowed) && - reserve.borrowInfo.total.amount.value !== '0' && } + reserve.borrowInfo?.total.amount.value !== '0' && }