-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuseSanitizedQuery.ts
More file actions
53 lines (44 loc) · 1.61 KB
/
useSanitizedQuery.ts
File metadata and controls
53 lines (44 loc) · 1.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { Token, TokensByNetwork } from '@/types/token'
import { ParsedUrlQuery } from 'querystring'
import { Chains, ChainsValues } from '@/src/constants/config/types'
import { isSameString } from '@/src/utils/tools'
import { usdcTokens } from '@/src/constants/usdcTokens'
import { useMemo } from 'react'
import { useRouter } from 'next/router'
const tokensException: TokensByNetwork = {
'100': [usdcTokens.usdceGnosis],
}
type SanitizedQuery = {
amount: string
fromChainId: ChainsValues
toChainId: ChainsValues
token: Token | undefined
}
const sanitizeQuery = (query: ParsedUrlQuery, tokensByNetwork: TokensByNetwork): SanitizedQuery => {
const sanitizedAmount =
query.amount && !isNaN(Number(query.amount)) ? query.amount.toString() : ''
const validFromChainId = (Object.values(Chains) as number[]).includes(Number(query.fromChainId))
? (Number(query.fromChainId) as ChainsValues)
: Chains.mainnet
const validToChainId = validFromChainId === Chains.mainnet ? Chains.gnosis : Chains.mainnet
const validToken = tokensByNetwork[validFromChainId]?.find((t) =>
isSameString(t.address, query.token as string),
)
return {
amount: sanitizedAmount,
fromChainId: validFromChainId,
toChainId: validToChainId,
token: validToken,
}
}
export const useSanitizedQuery = (tokensByNetwork: TokensByNetwork) => {
const router = useRouter()
return useMemo(
() =>
sanitizeQuery(router.query, {
[1]: [...tokensByNetwork[1], ...(tokensException[1] || [])],
[100]: [...tokensByNetwork[100], ...(tokensException[100] || [])],
}),
[router.query, tokensByNetwork],
)
}