Skip to content

Commit c0fc398

Browse files
committed
Fix token to buy list empty spaces (#5983)
* fixes empty spaces * also add searching to recents * rm log * remove duplicate recents and add migration * fix sort
1 parent 64b58a0 commit c0fc398

File tree

3 files changed

+75
-28
lines changed

3 files changed

+75
-28
lines changed

src/__swaps__/screens/Swap/hooks/useSearchCurrencyLists.ts

+70-24
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ export interface AssetToBuySection {
2727
const MAX_UNVERIFIED_RESULTS = 8;
2828
const MAX_VERIFIED_RESULTS = 48;
2929

30+
const mergeAssetsFavoriteStatus = ({
31+
assets,
32+
favoritesList,
33+
}: {
34+
assets: SearchAsset[] | undefined;
35+
favoritesList: SearchAsset[] | undefined;
36+
}): SearchAsset[] => assets?.map(asset => ({ ...asset, favorite: favoritesList?.some(fav => fav.address === asset.address) })) || [];
37+
3038
const filterAssetsFromBridge = ({
3139
assets,
3240
filteredBridgeAssetAddress,
@@ -35,16 +43,43 @@ const filterAssetsFromBridge = ({
3543
filteredBridgeAssetAddress: string | undefined;
3644
}): SearchAsset[] => assets?.filter(curatedAsset => !isLowerCaseMatch(curatedAsset?.address, filteredBridgeAssetAddress)) || [];
3745

38-
const filterAssetsFromFavoritesAndBridge = ({
46+
const filterAssetsFromRecentSwaps = ({
47+
assets,
48+
recentSwaps,
49+
}: {
50+
assets: SearchAsset[] | undefined;
51+
recentSwaps: RecentSwap[] | undefined;
52+
}): SearchAsset[] => (assets || []).filter(asset => !recentSwaps?.some(recent => recent.address === asset.address));
53+
54+
const filterAssetsFromBridgeAndRecent = ({
55+
assets,
56+
recentSwaps,
57+
filteredBridgeAssetAddress,
58+
}: {
59+
assets: SearchAsset[] | undefined;
60+
recentSwaps: RecentSwap[] | undefined;
61+
filteredBridgeAssetAddress: string | undefined;
62+
}): SearchAsset[] =>
63+
filterAssetsFromRecentSwaps({
64+
assets: filterAssetsFromBridge({ assets, filteredBridgeAssetAddress }),
65+
recentSwaps: recentSwaps,
66+
});
67+
68+
const filterAssetsFromFavoritesAndBridgeAndRecent = ({
3969
assets,
4070
favoritesList,
4171
filteredBridgeAssetAddress,
72+
recentSwaps,
4273
}: {
4374
assets: SearchAsset[] | undefined;
4475
favoritesList: SearchAsset[] | undefined;
4576
filteredBridgeAssetAddress: string | undefined;
77+
recentSwaps: RecentSwap[] | undefined;
4678
}): SearchAsset[] =>
47-
filterAssetsFromBridge({ assets, filteredBridgeAssetAddress })?.filter(
79+
filterAssetsFromRecentSwaps({
80+
assets: filterAssetsFromBridge({ assets, filteredBridgeAssetAddress }),
81+
recentSwaps: recentSwaps,
82+
})?.filter(
4883
curatedAsset => !favoritesList?.some(({ address }) => curatedAsset.address === address || curatedAsset.mainnetAddress === address)
4984
) || [];
5085

@@ -79,49 +114,65 @@ const buildListSectionsData = ({
79114
};
80115

81116
if (combinedData.bridgeAsset) {
82-
addSection('bridge', [combinedData.bridgeAsset]);
117+
addSection(
118+
'bridge',
119+
mergeAssetsFavoriteStatus({
120+
assets: [combinedData.bridgeAsset],
121+
favoritesList,
122+
})
123+
);
83124
}
84125

85126
if (combinedData.recentSwaps?.length) {
86-
const filteredRecents = filterAssetsFromFavoritesAndBridge({
127+
const filteredRecents = filterAssetsFromBridge({
87128
assets: combinedData.recentSwaps,
88-
favoritesList,
89129
filteredBridgeAssetAddress,
90130
});
91-
addSection('recent', filteredRecents);
131+
132+
addSection(
133+
'recent',
134+
mergeAssetsFavoriteStatus({
135+
assets: filteredRecents,
136+
favoritesList,
137+
})
138+
);
92139
}
93140

94141
if (favoritesList?.length) {
95-
const filteredFavorites = filterAssetsFromBridge({
142+
const filteredFavorites = filterAssetsFromBridgeAndRecent({
96143
assets: favoritesList,
97144
filteredBridgeAssetAddress,
145+
recentSwaps: combinedData.recentSwaps,
98146
});
99147
addSection('favorites', filteredFavorites);
100148
}
101149

102150
if (combinedData.verifiedAssets?.length) {
103-
const filteredVerified = filterAssetsFromFavoritesAndBridge({
151+
const filteredVerified = filterAssetsFromFavoritesAndBridgeAndRecent({
104152
assets: combinedData.verifiedAssets,
105153
favoritesList,
106154
filteredBridgeAssetAddress,
155+
recentSwaps: combinedData.recentSwaps,
107156
});
108157
addSection('verified', filteredVerified);
109158
}
110159

111160
if (!formattedData.length && combinedData.crosschainExactMatches?.length) {
112-
const filteredCrosschain = filterAssetsFromFavoritesAndBridge({
161+
const filteredCrosschain = filterAssetsFromFavoritesAndBridgeAndRecent({
113162
assets: combinedData.crosschainExactMatches,
114163
favoritesList,
115164
filteredBridgeAssetAddress,
165+
recentSwaps: combinedData.recentSwaps,
116166
});
117167
addSection('other_networks', filteredCrosschain);
118168
}
119169

120170
if (combinedData.unverifiedAssets?.length) {
121-
const filteredUnverified = filterAssetsFromFavoritesAndBridge({
171+
const filteredUnverified = filterAssetsFromFavoritesAndBridgeAndRecent({
122172
assets: combinedData.unverifiedAssets,
123173
favoritesList,
124174
filteredBridgeAssetAddress,
175+
recentSwaps: combinedData.recentSwaps,
125176
});
126177
addSection('unverified', filteredUnverified);
127178
}
@@ -236,10 +287,6 @@ export function useSearchCurrencyLists() {
236287
})) as SearchAsset[];
237288
}, [favorites, state.toChainId]);
238289

239-
const recentsForChain = useMemo(() => {
240-
return getRecentSwapsByChain(state.toChainId);
241-
}, [getRecentSwapsByChain, state.toChainId]);
242-
243290
const memoizedData = useMemo(() => {
244291
const queryIsAddress = isAddress(query);
245292
const keys: TokenSearchAssetKey[] = queryIsAddress ? ['address'] : ['name', 'symbol'];
@@ -256,23 +303,22 @@ export function useSearchCurrencyLists() {
256303
: null;
257304

258305
const filteredBridgeAsset = bridgeAsset && filterBridgeAsset({ asset: bridgeAsset, filter: query }) ? bridgeAsset : null;
259-
const isBridgeAssetUserFavorite =
260-
bridgeAsset &&
261-
unfilteredFavorites.some(asset => asset.mainnetAddress === bridgeAsset.mainnetAddress || asset.address === bridgeAsset.address);
262306

263307
return {
264308
queryIsAddress,
265309
keys,
266310
threshold,
267311
enableUnverifiedSearch,
268-
filteredBridgeAsset: filteredBridgeAsset
269-
? {
270-
...filteredBridgeAsset,
271-
favorite: isBridgeAssetUserFavorite,
272-
}
273-
: null,
312+
filteredBridgeAsset,
274313
};
275-
}, [assetToSell, query, selectedOutputChainId, state, verifiedAssets, unfilteredFavorites]);
314+
}, [assetToSell, query, selectedOutputChainId, state, verifiedAssets]);
315+
316+
const recentsForChain = useMemo(() => {
317+
return filterList(getRecentSwapsByChain(state.toChainId), query, memoizedData.keys, {
318+
threshold: memoizedData.queryIsAddress ? rankings.CASE_SENSITIVE_EQUAL : rankings.CONTAINS,
319+
sorter: matchItems => matchItems.sort((a, b) => b.item.swappedAt - a.item.swappedAt),
320+
});
321+
}, [getRecentSwapsByChain, state.toChainId, query, memoizedData.keys, memoizedData.queryIsAddress]);
276322

277323
const favoritesList = useMemo(() => {
278324
if (query === '') {

src/migrations/types.ts

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ export enum MigrationName {
2020
migrateRemotePromoSheetsToZustand = 'migration_migrateRemotePromoSheetsToZustand',
2121
migrateFavoritesV2 = 'migration_migrateFavoritesV2',
2222
migrateFavoritesV3 = 'migration_migrateFavoritesV3',
23-
removeDuplicateRecentSwaps = 'migration_removeDuplicateRecentSwaps',
2423
}
2524

2625
export type Migration = {

src/state/swaps/swapsStore.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,7 @@ export const swapsStore = createRainbowStore<SwapsState>(
162162
getRecentSwapsByChain: (chainId: ChainId) => {
163163
const { recentSwaps } = get();
164164

165-
const chainSwaps = recentSwaps.get(chainId) || [];
166-
return chainSwaps.sort((a, b) => b.swappedAt - a.swappedAt);
165+
return recentSwaps.get(chainId) || [];
167166
},
168167
addRecentSwap(asset) {
169168
const { recentSwaps, latestSwapAt } = get();
@@ -178,7 +177,10 @@ export const swapsStore = createRainbowStore<SwapsState>(
178177
recentSwaps.set(chainId, updatedSwaps);
179178
latestSwapAt.set(chainId, now);
180179

181-
set({ recentSwaps: new Map(recentSwaps) });
180+
set({
181+
recentSwaps: new Map(recentSwaps),
182+
latestSwapAt: new Map(latestSwapAt),
183+
});
182184
},
183185
}),
184186
{

0 commit comments

Comments
 (0)