Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
I
interface
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
LuckySwap
interface
Commits
ce51ffae
Unverified
Commit
ce51ffae
authored
Nov 18, 2022
by
Zach Pomerantz
Committed by
GitHub
Nov 18, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: include user-added tokens in selector (#5319)
parent
8cd32138
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
47 additions
and
48 deletions
+47
-48
CurrencySearch.tsx
src/components/SearchModal/CurrencySearch.tsx
+16
-9
Tokens.ts
src/hooks/Tokens.ts
+24
-36
hooks.tsx
src/state/user/hooks.tsx
+4
-3
tokens.ts
src/types/tokens.ts
+3
-0
No files found.
src/components/SearchModal/CurrencySearch.tsx
View file @
ce51ffae
...
...
@@ -17,8 +17,9 @@ import { FixedSizeList } from 'react-window'
import
{
Text
}
from
'
rebass
'
import
{
useAllTokenBalances
}
from
'
state/connection/hooks
'
import
styled
,
{
useTheme
}
from
'
styled-components/macro
'
import
{
UserAddedToken
}
from
'
types/tokens
'
import
{
useA
ctive
Tokens
,
useIsUserAddedToken
,
useSearchInactiveTokenLists
,
useToken
}
from
'
../../hooks/Tokens
'
import
{
useA
ll
Tokens
,
useIsUserAddedToken
,
useSearchInactiveTokenLists
,
useToken
}
from
'
../../hooks/Tokens
'
import
{
CloseIcon
,
ThemedText
}
from
'
../../theme
'
import
{
isAddress
}
from
'
../../utils
'
import
Column
from
'
../Column
'
...
...
@@ -66,15 +67,8 @@ export function CurrencySearch({
const
[
searchQuery
,
setSearchQuery
]
=
useState
<
string
>
(
''
)
const
debouncedQuery
=
useDebounce
(
searchQuery
,
200
)
// Only display 'imported' tokens when the search filter has input
const
defaultTokens
=
useActiveTokens
(
debouncedQuery
.
length
>
0
)
// if they input an address, use it
const
isAddressSearch
=
isAddress
(
debouncedQuery
)
const
searchToken
=
useToken
(
debouncedQuery
)
const
searchTokenIsAdded
=
useIsUserAddedToken
(
searchToken
)
useEffect
(()
=>
{
...
...
@@ -87,13 +81,26 @@ export function CurrencySearch({
}
},
[
isAddressSearch
])
const
defaultTokens
=
useAllTokens
()
const
filteredTokens
:
Token
[]
=
useMemo
(()
=>
{
return
Object
.
values
(
defaultTokens
).
filter
(
getTokenFilter
(
debouncedQuery
))
},
[
defaultTokens
,
debouncedQuery
])
const
[
balances
,
balancesAreLoading
]
=
useAllTokenBalances
()
const
sortedTokens
:
Token
[]
=
useMemo
(
()
=>
(
!
balancesAreLoading
?
[...
filteredTokens
].
sort
(
tokenComparator
.
bind
(
null
,
balances
))
:
[]),
()
=>
!
balancesAreLoading
?
[...
filteredTokens
]
.
filter
((
token
)
=>
{
// Filter out user-added tokens with no balance
if
(
token
instanceof
UserAddedToken
)
{
const
balance
=
balances
[
token
.
address
]
return
balance
?.
greaterThan
(
0
)
}
return
true
})
.
sort
(
tokenComparator
.
bind
(
null
,
balances
))
:
[],
[
balances
,
filteredTokens
,
balancesAreLoading
]
)
const
isLoading
=
Boolean
(
balancesAreLoading
&&
!
tokenLoaderTimerElapsed
)
...
...
src/hooks/Tokens.ts
View file @
ce51ffae
...
...
@@ -14,23 +14,24 @@ import { useUserAddedTokens, useUserAddedTokensOnChain } from '../state/user/hoo
import
{
TokenAddressMap
,
useUnsupportedTokenList
}
from
'
./../state/lists/hooks
'
// reduce token map into standard address <-> Token mapping, optionally include user added tokens
function
useTokensFromMap
(
tokenMap
:
TokenAddressMap
,
includeUserAdded
:
boolean
):
{
[
address
:
string
]:
Token
}
{
function
useTokensFromMap
(
tokenMap
:
TokenAddressMap
):
{
[
address
:
string
]:
Token
}
{
const
{
chainId
}
=
useWeb3React
()
const
userAddedTokens
=
useUserAddedTokens
()
return
useMemo
(()
=>
{
if
(
!
chainId
)
return
{}
// reduce to just tokens
const
mapWithoutUrls
=
Object
.
keys
(
tokenMap
[
chainId
]
??
{}).
reduce
<
{
[
address
:
string
]:
Token
}
>
(
(
newMap
,
address
)
=>
{
return
Object
.
keys
(
tokenMap
[
chainId
]
??
{}).
reduce
<
{
[
address
:
string
]:
Token
}
>
((
newMap
,
address
)
=>
{
newMap
[
address
]
=
tokenMap
[
chainId
][
address
].
token
return
newMap
},
{}
)
},
{})
},
[
chainId
,
tokenMap
])
}
if
(
includeUserAdded
)
{
export
function
useAllTokens
():
{
[
address
:
string
]:
Token
}
{
const
allTokens
=
useCombinedActiveList
()
const
tokensFromMap
=
useTokensFromMap
(
allTokens
)
const
userAddedTokens
=
useUserAddedTokens
()
return
useMemo
(()
=>
{
return
(
userAddedTokens
// reduce into all ALL_TOKENS filtered by the current chain
...
...
@@ -41,23 +42,10 @@ function useTokensFromMap(tokenMap: TokenAddressMap, includeUserAdded: boolean):
},
// must make a copy because reduce modifies the map, and we do not
// want to make a copy in every iteration
{
...
mapWithoutUrls
}
{
...
tokensFromMap
}
)
)
}
return
mapWithoutUrls
},
[
chainId
,
userAddedTokens
,
tokenMap
,
includeUserAdded
])
}
export
function
useAllTokens
():
{
[
address
:
string
]:
Token
}
{
const
allTokens
=
useCombinedActiveList
()
return
useTokensFromMap
(
allTokens
,
true
)
}
export
function
useActiveTokens
(
includeUserAdded
:
boolean
):
{
[
address
:
string
]:
Token
}
{
const
allTokens
=
useCombinedActiveList
()
return
useTokensFromMap
(
allTokens
,
includeUserAdded
)
},
[
tokensFromMap
,
userAddedTokens
])
}
type
BridgeInfo
=
Record
<
...
...
@@ -73,7 +61,7 @@ export function useUnsupportedTokens(): { [address: string]: Token } {
const
{
chainId
}
=
useWeb3React
()
const
listsByUrl
=
useAllLists
()
const
unsupportedTokensMap
=
useUnsupportedTokenList
()
const
unsupportedTokens
=
useTokensFromMap
(
unsupportedTokensMap
,
false
)
const
unsupportedTokens
=
useTokensFromMap
(
unsupportedTokensMap
)
// checks the default L2 lists to see if `bridgeInfo` has an L1 address value that is unsupported
const
l2InferredBlockedTokens
:
typeof
unsupportedTokens
=
useMemo
(()
=>
{
...
...
src/state/user/hooks.tsx
View file @
ce51ffae
...
...
@@ -8,6 +8,7 @@ import JSBI from 'jsbi'
import
{
useCallback
,
useMemo
}
from
'
react
'
import
{
shallowEqual
}
from
'
react-redux
'
import
{
useAppDispatch
,
useAppSelector
}
from
'
state/hooks
'
import
{
UserAddedToken
}
from
'
types/tokens
'
import
{
V2_FACTORY_ADDRESSES
}
from
'
../../constants/addresses
'
import
{
BASES_TO_TRACK_LIQUIDITY_FOR
,
PINNED_PAIRS
}
from
'
../../constants/routing
'
...
...
@@ -38,8 +39,8 @@ function serializeToken(token: Token): SerializedToken {
}
}
function
deserializeToken
(
serializedToken
:
SerializedToken
):
Token
{
return
new
Token
(
function
deserializeToken
(
serializedToken
:
SerializedToken
,
Class
:
typeof
Token
=
Token
):
Token
{
return
new
Class
(
serializedToken
.
chainId
,
serializedToken
.
address
,
serializedToken
.
decimals
,
...
...
@@ -238,7 +239,7 @@ export function useUserAddedTokensOnChain(chainId: number | undefined | null): T
return
useMemo
(()
=>
{
if
(
!
chainId
)
return
[]
const
tokenMap
:
Token
[]
=
serializedTokensMap
?.[
chainId
]
?
Object
.
values
(
serializedTokensMap
[
chainId
]).
map
(
deserializeToken
)
?
Object
.
values
(
serializedTokensMap
[
chainId
]).
map
(
(
value
)
=>
deserializeToken
(
value
,
UserAddedToken
)
)
:
[]
return
tokenMap
},
[
serializedTokensMap
,
chainId
])
...
...
src/types/tokens.ts
0 → 100644
View file @
ce51ffae
import
{
Token
}
from
'
@uniswap/sdk-core
'
export
class
UserAddedToken
extends
Token
{}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment