11import { Trans } from '@lingui/macro' ;
22import { useMediaQuery } from '@mui/material' ;
33import { useState } from 'react' ;
4+ import { mapAaveProtocolIncentives } from 'src/components/incentives/incentives.helper' ;
45import { VariableAPYTooltip } from 'src/components/infoTooltips/VariableAPYTooltip' ;
56import { ListColumn } from 'src/components/lists/ListColumn' ;
67import { ListHeaderTitle } from 'src/components/lists/ListHeaderTitle' ;
78import { ListHeaderWrapper } from 'src/components/lists/ListHeaderWrapper' ;
8- import { ComputedReserveData } from 'src/hooks/app-data-provider/useAppDataProvider' ;
99
10+ import { ReserveWithId } from '../../hooks/app-data-provider/useAppDataProvider' ;
1011import { MarketAssetsListItem } from './MarketAssetsListItem' ;
1112import { MarketAssetsListItemLoader } from './MarketAssetsListItemLoader' ;
1213import { MarketAssetsListMobileItem } from './MarketAssetsListMobileItem' ;
@@ -15,19 +16,19 @@ import { MarketAssetsListMobileItemLoader } from './MarketAssetsListMobileItemLo
1516const listHeaders = [
1617 {
1718 title : < Trans > Asset</ Trans > ,
18- sortKey : 'symbol' ,
19+ sortKey : 'underlyingToken. symbol' ,
1920 } ,
2021 {
2122 title : < Trans > Total supplied</ Trans > ,
22- sortKey : 'totalLiquidityUSD ' ,
23+ sortKey : 'size.usd ' ,
2324 } ,
2425 {
2526 title : < Trans > Supply APY</ Trans > ,
26- sortKey : 'supplyAPY ' ,
27+ sortKey : 'supplyInfo.apy.value ' ,
2728 } ,
2829 {
2930 title : < Trans > Total borrowed</ Trans > ,
30- sortKey : 'totalDebtUSD ' ,
31+ sortKey : 'borrowInfo.total.usd ' ,
3132 } ,
3233 {
3334 title : (
@@ -37,37 +38,71 @@ const listHeaders = [
3738 variant = "subheader2"
3839 />
3940 ) ,
40- sortKey : 'variableBorrowAPY ' ,
41+ sortKey : 'borrowInfo.apy.value ' ,
4142 } ,
4243] ;
4344
4445type MarketAssetsListProps = {
45- reserves : ComputedReserveData [ ] ;
46+ reserves : ReserveWithId [ ] ;
4647 loading : boolean ;
4748} ;
49+ export type ReserveWithProtocolIncentives = ReserveWithId & {
50+ supplyProtocolIncentives : ReturnType < typeof mapAaveProtocolIncentives > ;
51+ borrowProtocolIncentives : ReturnType < typeof mapAaveProtocolIncentives > ;
52+ } ;
4853
4954export default function MarketAssetsList ( { reserves, loading } : MarketAssetsListProps ) {
5055 const isTableChangedToCards = useMediaQuery ( '(max-width:1125px)' ) ;
5156 const [ sortName , setSortName ] = useState ( '' ) ;
5257 const [ sortDesc , setSortDesc ] = useState ( false ) ;
53- if ( sortDesc ) {
54- if ( sortName === 'symbol' ) {
55- reserves . sort ( ( a , b ) => ( a . symbol . toUpperCase ( ) < b . symbol . toUpperCase ( ) ? - 1 : 1 ) ) ;
56- } else {
57- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
58- // @ts -ignore
59- reserves . sort ( ( a , b ) => a [ sortName ] - b [ sortName ] ) ;
60- }
61- } else {
62- if ( sortName === 'symbol' ) {
63- reserves . sort ( ( a , b ) => ( b . symbol . toUpperCase ( ) < a . symbol . toUpperCase ( ) ? - 1 : 1 ) ) ;
64- } else {
65- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
66- // @ts -ignore
67- reserves . sort ( ( a , b ) => b [ sortName ] - a [ sortName ] ) ;
58+ const sortedReserves = [ ...reserves ] . sort ( ( a , b ) => {
59+ if ( ! sortName ) return 0 ;
60+
61+ let aValue : number | string ;
62+ let bValue : number | string ;
63+
64+ switch ( sortName ) {
65+ case 'underlyingToken.symbol' :
66+ aValue = a . underlyingToken . symbol . toUpperCase ( ) ;
67+ bValue = b . underlyingToken . symbol . toUpperCase ( ) ;
68+ if ( sortDesc ) {
69+ return aValue < bValue ? - 1 : 1 ;
70+ }
71+ return bValue < aValue ? - 1 : 1 ;
72+
73+ case 'size.usd' :
74+ aValue = Number ( a . size . usd ) || 0 ;
75+ bValue = Number ( b . size . usd ) || 0 ;
76+ break ;
77+
78+ case 'supplyInfo.apy.value' :
79+ aValue = Number ( a . supplyInfo . apy . value ) || 0 ;
80+ bValue = Number ( b . supplyInfo . apy . value ) || 0 ;
81+ break ;
82+
83+ case 'borrowInfo.total.usd' :
84+ aValue = Number ( a . borrowInfo ?. total . usd ) || 0 ;
85+ bValue = Number ( b . borrowInfo ?. total . usd ) || 0 ;
86+ break ;
87+
88+ case 'borrowInfo.apy.value' :
89+ aValue = Number ( a . borrowInfo ?. apy . value ) || 0 ;
90+ bValue = Number ( b . borrowInfo ?. apy . value ) || 0 ;
91+ break ;
92+
93+ default :
94+ return 0 ;
6895 }
69- }
7096
97+ return sortDesc
98+ ? ( aValue as number ) - ( bValue as number )
99+ : ( bValue as number ) - ( aValue as number ) ;
100+ } ) ;
101+ const reservesWithIncentives : ReserveWithProtocolIncentives [ ] = sortedReserves . map ( ( reserve ) => ( {
102+ ...reserve ,
103+ supplyProtocolIncentives : mapAaveProtocolIncentives ( reserve . incentives , 'supply' ) ,
104+ borrowProtocolIncentives : mapAaveProtocolIncentives ( reserve . incentives , 'borrow' ) ,
105+ } ) ) ;
71106 // Show loading state when loading
72107 if ( loading ) {
73108 return isTableChangedToCards ? (
@@ -95,8 +130,8 @@ export default function MarketAssetsList({ reserves, loading }: MarketAssetsList
95130 < ListHeaderWrapper px = { 6 } >
96131 { listHeaders . map ( ( col ) => (
97132 < ListColumn
98- isRow = { col . sortKey === 'symbol' }
99- maxWidth = { col . sortKey === 'symbol' ? 280 : undefined }
133+ isRow = { col . sortKey === 'underlyingToken. symbol' }
134+ maxWidth = { col . sortKey === 'underlyingToken. symbol' ? 280 : undefined }
100135 key = { col . sortKey }
101136 >
102137 < ListHeaderTitle
@@ -115,7 +150,7 @@ export default function MarketAssetsList({ reserves, loading }: MarketAssetsList
115150 </ ListHeaderWrapper >
116151 ) }
117152
118- { reserves . map ( ( reserve ) =>
153+ { reservesWithIncentives . map ( ( reserve ) =>
119154 isTableChangedToCards ? (
120155 < MarketAssetsListMobileItem { ...reserve } key = { reserve . id } />
121156 ) : (
0 commit comments