Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions src/features/market-detail/components/pro-activities-table.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ const isSameMarketId = (left: string, right: string): boolean => getMarketMapKey
const sameAddress = (left: string | undefined, right: string | undefined): boolean =>
left !== undefined && right !== undefined && left.toLowerCase() === right.toLowerCase();
const isRebalanceLikeKind = (kind: MarketProActivityKind): boolean => kind === 'vaultRebalance' || kind === 'monarchTx';
const isSimpleMonarchAccountResolvedKind = (kind: MarketProActivityKind): boolean => kind === 'directSupply' || kind === 'directWithdraw';

type ProActivitiesTableProps = {
chainId: number;
Expand Down Expand Up @@ -522,6 +523,18 @@ export function ProActivitiesTable({ chainId, market, onSwitchToBasic }: ProActi
return activity.vaultAddress as Address;
};

const getDisplayActorAddress = (activity: (typeof activities)[number]): Address | undefined => {
if (!activity.actorAddress) {
return undefined;
}

if (!activity.isMonarch || isSimpleMonarchAccountResolvedKind(activity.kind)) {
return activity.actorAddress as Address;
}

return undefined;
};

const renderRowFlow = (activity: (typeof activities)[number]): ReactNode => {
const rowLoanFlows = getRowLoanFlows(activity);
if (rowLoanFlows.length === 0) {
Expand Down Expand Up @@ -712,6 +725,7 @@ export function ProActivitiesTable({ chainId, market, onSwitchToBasic }: ProActi
const activityMeta = activityKindMeta[activity.kind];
const detailRowId = `${activity.id}-detail`;
const isExpanded = expandedRows.has(activity.id);
const displayActorAddress = getDisplayActorAddress(activity);
const intermediaryAddress = getIntermediaryAddress(activity);

return (
Expand All @@ -737,9 +751,9 @@ export function ProActivitiesTable({ chainId, market, onSwitchToBasic }: ProActi
className="px-4 py-3"
onClick={(event) => event.stopPropagation()}
>
{!activity.isMonarch && activity.actorAddress ? (
{displayActorAddress ? (
<AccountIdentity
address={activity.actorAddress as Address}
address={displayActorAddress}
chainId={chainId}
variant="compact"
linkTo="profile"
Expand Down
3 changes: 1 addition & 2 deletions src/features/markets/markets-view.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,7 @@ export default function Markets() {
const effectiveTableViewMode = isMobile ? 'compact' : tableViewMode;
const isLoadingTableState = loading || filteredMarketsLoading;
const isTableFallbackState = !rawMarkets || markets.length === 0 || isWhitelistUnavailable;
const shouldUseFullWidthTableLayout =
isLoadingTableState || isTableFallbackState || effectiveTableViewMode === 'compact';
const shouldUseFullWidthTableLayout = isLoadingTableState || isTableFallbackState || effectiveTableViewMode === 'compact';

// Compute unique collaterals and loan assets for filter dropdowns
useEffect(() => {
Expand Down
22 changes: 11 additions & 11 deletions src/hooks/useFilteredMarkets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@ export const useFilteredMarkets = (): UseFilteredMarketsResult => {
return [];
}

let markets = showUnwhitelistedMarkets ? allMarkets : whitelistedMarkets;
if (markets.length === 0) return [];
let filteredMarkets = showUnwhitelistedMarkets ? allMarkets : whitelistedMarkets;
if (filteredMarkets.length === 0) return [];

markets = filterMarkets(markets, {
filteredMarkets = filterMarkets(filteredMarkets, {
selectedNetwork: filters.selectedNetwork,
showUnknownTokens: preferences.includeUnknownTokens,
showUnknownOracle: preferences.showUnknownOracle,
Expand Down Expand Up @@ -69,7 +69,7 @@ export const useFilteredMarkets = (): UseFilteredMarketsResult => {

if (preferences.trustedVaultsOnly) {
const trustedVaultKeys = new Set(trustedVaults.map((vault) => getVaultKey(vault.address, vault.chainId)));
markets = markets.filter((market) => {
filteredMarkets = filteredMarkets.filter((market) => {
if (!market.supplyingVaults?.length) return false;
const chainId = market.morphoBlue.chain.id;
return market.supplyingVaults.some((vault) => {
Expand All @@ -81,15 +81,15 @@ export const useFilteredMarkets = (): UseFilteredMarketsResult => {

// Official trending filter (backend-computed)
if (filters.trendingMode && officialTrendingKeys.size > 0) {
markets = markets.filter((market) => {
filteredMarkets = filteredMarkets.filter((market) => {
const key = getMetricsKey(market.morphoBlue.chain.id, market.uniqueKey);
return officialTrendingKeys.has(key);
});
}

// Custom tag filter (user-defined)
if (filters.customTagMode && customTagKeys.size > 0) {
markets = markets.filter((market) => {
filteredMarkets = filteredMarkets.filter((market) => {
const key = getMetricsKey(market.morphoBlue.chain.id, market.uniqueKey);
return customTagKeys.has(key);
});
Expand All @@ -98,17 +98,17 @@ export const useFilteredMarkets = (): UseFilteredMarketsResult => {
// Starred markets filter
if (filters.starredOnly && preferences.starredMarkets.length > 0) {
const starredSet = new Set(preferences.starredMarkets);
markets = markets.filter((market) => starredSet.has(market.uniqueKey));
filteredMarkets = filteredMarkets.filter((market) => starredSet.has(market.uniqueKey));
}

if (preferences.sortColumn === SortColumn.Starred) {
return sortMarkets(markets, createStarredSort(preferences.starredMarkets), 1);
return sortMarkets(filteredMarkets, createStarredSort(preferences.starredMarkets), 1);
}

if (preferences.sortColumn === SortColumn.TrustedBy) {
const trustedVaultKeys = new Set(trustedVaults.map((vault) => getVaultKey(vault.address, vault.chainId)));
return sortMarkets(
markets,
filteredMarkets,
(a, b) => {
const aHasTrusted =
a.supplyingVaults?.some((v) => v.address && trustedVaultKeys.has(getVaultKey(v.address, a.morphoBlue.chain.id))) ?? false;
Expand Down Expand Up @@ -144,10 +144,10 @@ export const useFilteredMarkets = (): UseFilteredMarketsResult => {

const propertyPath = sortPropertyMap[preferences.sortColumn];
if (propertyPath) {
return sortMarkets(markets, createPropertySort(propertyPath), preferences.sortDirection as 1 | -1);
return sortMarkets(filteredMarkets, createPropertySort(propertyPath), preferences.sortDirection as 1 | -1);
}

return markets;
return filteredMarkets;
}, [
allMarkets,
whitelistedMarkets,
Expand Down
2 changes: 1 addition & 1 deletion src/utils/markets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ export const blacklistedMarkets = [
'0x8d18658cd2688b702222c11467133c1c2237bd058ba2467e47bc360067ebe038',
'0xa9d6a0caea685bb0099ba2d52a58fb7ed33a6447616c25df93bdb8330337a9c3',
'0x394494c539655eb489089b33eba5119ff7e322646cac3fa3e817814164bab094',
'0x50e26162f35945381884ea34bf5c1d5d9f15c9305febbc1f890c916963ba0f2b'
'0x50e26162f35945381884ea34bf5c1d5d9f15c9305febbc1f890c916963ba0f2b',
];

// Market specially whitelisted by Monarch, lowercase
Expand Down