Skip to content

Commit b12d068

Browse files
feat: icons resolver (#58)
* feat: icons resolver * chore: cleanup * bump util-lib --------- Co-authored-by: matjazonline <[email protected]>
1 parent bed6ba5 commit b12d068

File tree

4 files changed

+728
-486
lines changed

4 files changed

+728
-486
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
"@polkadot/react-identicon": "^3.6.6",
3434
"@reef-chain/evm-provider": "^2.0.3",
3535
"@reef-chain/ui-kit": "^3.0.2",
36-
"@reef-chain/util-lib": "^2.5.7",
36+
"@reef-chain/util-lib": "^2.5.12",
3737
"@types/react-router-dom": "^5.3.0",
3838
"axios": "^1.6.5",
3939
"bignumber.js": "^9.0.2",

src/hooks/useAllPools.ts

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,48 @@ import { useState } from 'react';
33
import { ALL_POOLS, PoolQueryObject } from '../graphql/pools';
44
import { PoolWithReserves } from '../state';
55
import { graphqlRequest } from '../graphql/utils';
6-
import { getIconUrl } from '../components/common/Icons';
76
import { useAsyncEffect } from './useAsyncEffect';
7+
import { tokenIconUtils } from '@reef-chain/util-lib';
8+
import { getIconUrl } from '../components/common/Icons';
89

910
export const getAllPoolsQuery = (): PoolQueryObject => ({
1011
query: ALL_POOLS,
1112
variables: {},
1213
});
1314
export const useAllPools = (httpClient: AxiosInstance): PoolWithReserves[] => {
1415
const [allPools, setAllPools] = useState([]);
15-
const [poolsCount,setPoolsCount] = useState(0);
16+
const [poolsCount, setPoolsCount] = useState(0);
17+
1618
const getAllPoolsQry = getAllPoolsQuery();
1719

18-
useAsyncEffect(async()=>{
19-
const response = await graphqlRequest(httpClient, getAllPoolsQry);
20+
useAsyncEffect(async () => {
21+
let emptyTokenIconsAddresses: string[] = []
22+
let tokenIconsMap={};
23+
24+
const response = await graphqlRequest(httpClient, getAllPoolsQry);
25+
response.data.data?.allPools.map((pool) => {
26+
if (pool.iconUrl1 == "") emptyTokenIconsAddresses.push(pool.token1);
27+
else tokenIconsMap[pool.token1]=pool.iconUrl1
28+
if (pool.iconUrl2 == "") emptyTokenIconsAddresses.push(pool.token2);
29+
else tokenIconsMap[pool.token2]=pool.iconUrl2
30+
})
31+
32+
if(emptyTokenIconsAddresses.length){
33+
const _tokenIconsMap = await tokenIconUtils.resolveTokenUrl(emptyTokenIconsAddresses);
34+
tokenIconsMap={
35+
..._tokenIconsMap,
36+
...tokenIconsMap
37+
}
38+
}
39+
2040
const pools = response.data.data?.allPools.map((pool) => ({
2141
...pool,
22-
iconUrl1: pool.iconUrl1 === '' ? getIconUrl(pool.token1) : pool.iconUrl1,
23-
iconUrl2: pool.iconUrl2 === '' ? getIconUrl(pool.token2) : pool.iconUrl2,
42+
iconUrl1: pool.iconUrl1 === '' ? tokenIconsMap[pool.token1]??getIconUrl(pool.token1) : pool.iconUrl1,
43+
iconUrl2: pool.iconUrl2 === '' ? tokenIconsMap[pool.token2]??getIconUrl(pool.token2) : pool.iconUrl2,
2444
}));
25-
if(allPools.length!==pools.length)setPoolsCount(pools.length);
45+
if (allPools.length !== pools.length) setPoolsCount(pools.length);
2646
setAllPools(pools);
27-
},[poolsCount])
47+
}, [poolsCount])
2848

2949
return allPools;
3050
};

src/hooks/usePoolLists.ts

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ import {
1515
PoolQueryObject, PoolQueryType,
1616
} from '../graphql/pools';
1717
import { TokenPrices } from '../state';
18-
import { getIconUrl } from '../components/common/Icons';
1918
import { graphqlRequest } from '../graphql/utils';
19+
import { tokenIconUtils } from '@reef-chain/util-lib';
20+
import { useAsyncEffect } from './useAsyncEffect';
21+
import { getIconUrl } from '../components/common/Icons';
2022

2123
interface PoolItem {
2224
address: string;
@@ -126,6 +128,8 @@ export const usePoolsList = ({
126128
const [dataPoolsCount, setDataPoolsCount] = useState<AllPoolsListCountQuery | UserPoolsListCountQuery|undefined>();
127129
const [loadingPoolsList, setLoadingPoolsList] = useState<boolean>(true);
128130
const [loadingPoolsCount, setLoadingPoolsCount] = useState<boolean>(true);
131+
const [tokenAddresses, setTokenAddresses] = useState<string[]>([]);
132+
const [tokenIconsMap, setTokenIconsMap] = useState({});
129133

130134
useEffect(() => {
131135
const handleResp = async (): Promise<void> => {
@@ -149,20 +153,47 @@ export const usePoolsList = ({
149153
handleResp();
150154
}, []);
151155

156+
useAsyncEffect(async()=>{
157+
if(tokenAddresses.length){
158+
const _fetchedTokenIconsMap = await tokenIconUtils.resolveTokenUrl(tokenAddresses);
159+
setTokenIconsMap(_fetchedTokenIconsMap)
160+
}
161+
},[tokenAddresses])
162+
152163
const processed = useMemo((): PoolItem[] => {
153164
if (!dataPoolsList) return [];
154165
const poolsList = queryType === 'User'
155166
? (dataPoolsList as UserPoolsListQuery).userPoolsList
156167
: (dataPoolsList as AllPoolsListQuery).allPoolsList;
168+
169+
let emptyTokenIconsAddresses: string[] = []
170+
let _tokenIconsMap={};
171+
172+
poolsList.map((pool) => {
173+
if (!pool.iconUrl1) emptyTokenIconsAddresses.push(pool.token1);
174+
else _tokenIconsMap[pool.token1]=pool.iconUrl1
175+
if (!pool.iconUrl2) emptyTokenIconsAddresses.push(pool.token2);
176+
else _tokenIconsMap[pool.token2]=pool.iconUrl2
177+
})
178+
179+
if(tokenAddresses!=emptyTokenIconsAddresses){
180+
setTokenAddresses(emptyTokenIconsAddresses);
181+
}
182+
183+
const mergedTokenIconsMap = {
184+
...tokenIconsMap,
185+
..._tokenIconsMap
186+
}
187+
157188
return poolsList.map((pool) => ({
158189
address: pool.id,
159190
token1: {
160-
image: !pool.iconUrl1 ? getIconUrl(pool.token1) : pool.iconUrl1,
191+
image: !pool.iconUrl1 ? mergedTokenIconsMap[pool.token1]??getIconUrl(pool.token1) : pool.iconUrl1,
161192
name: pool.name1,
162193
address:pool.token1
163194
},
164195
token2: {
165-
image: !pool.iconUrl2 ? getIconUrl(pool.token2) : pool.iconUrl2,
196+
image: !pool.iconUrl2 ? mergedTokenIconsMap[pool.token2]??getIconUrl(pool.token2) : pool.iconUrl2,
166197
name: pool.name2,
167198
address:pool.token2
168199
},
@@ -171,7 +202,7 @@ export const usePoolsList = ({
171202
volumeChange24h: calculateVolumeChange(pool, tokenPrices),
172203
myLiquidity: calculateUserLiquidity(pool, tokenPrices),
173204
}));
174-
}, [dataPoolsList]);
205+
}, [dataPoolsList,tokenIconsMap]);
175206

176207
let count = 0;
177208

0 commit comments

Comments
 (0)