From bb5e24d34455e8d07b3481061536bb271e5fa7b6 Mon Sep 17 00:00:00 2001
From: Michael Zhang
Date: Wed, 28 Jun 2023 16:53:19 -0400
Subject: [PATCH] Revert "hooks json"
This reverts commit 7e304a40724019c1a3b6f82b3129df02951142a7.
---
src/components/card.js | 2 +-
src/components/list-info.js | 7 +-
src/components/list-tokens.js | 17 +++--
src/hooks.json | 42 -----------
src/pages/list.js | 2 +-
src/token-lists.json | 136 ++++++++++++++++++++++++++++++----
src/utils/useMultiFetch.ts | 44 +++++++----
7 files changed, 164 insertions(+), 86 deletions(-)
delete mode 100644 src/hooks.json
diff --git a/src/components/card.js b/src/components/card.js
index 2e031d4..11fd9e5 100644
--- a/src/components/card.js
+++ b/src/components/card.js
@@ -82,7 +82,7 @@ export default function Card({ id, list, name }) {
{actualName}
- {list?.hooks?.length >= 0 ? `${list.hooks.length} Hooks` : list === null ? 'Error' : 'Loading...'}
+ {list?.tokens?.length > 0 ? `${list.tokens.length} tokens` : list === null ? 'Error' : 'Loading...'}
diff --git a/src/components/list-info.js b/src/components/list-info.js
index af0f29b..931a664 100644
--- a/src/components/list-info.js
+++ b/src/components/list-info.js
@@ -1,9 +1,9 @@
import React from 'react'
-import Moment from 'react-moment'
import styled from 'styled-components'
-import { getListURLFromListID } from '../utils/useMultiFetch'
import Card from './card'
+import Moment from 'react-moment'
import CopyHelper from './copy'
+import { getListURLFromListID } from '../utils/useMultiFetch'
const StyledInfo = styled.section`
display: grid;
@@ -91,7 +91,8 @@ export default function Info({ listID, list }) {
- Version {`${list.version.major}.${list.version.minor}.${list.version.patch}`}
+ Version
+ {`${list.version.major}.${list.version.minor}.${list.version.patch}`}
diff --git a/src/components/list-tokens.js b/src/components/list-tokens.js
index ff50adb..0072241 100644
--- a/src/components/list-tokens.js
+++ b/src/components/list-tokens.js
@@ -1,8 +1,8 @@
-import React, { memo, useState } from 'react'
+import React, { useState, memo } from 'react'
import styled from 'styled-components'
-import { lookUpchain, lookupScanner } from '../utils/getChainId'
-import CopyHelper from './copy'
import Search from './search'
+import CopyHelper from './copy'
+import { lookUpchain, lookupScanner } from '../utils/getChainId'
import { toChecksumAddress } from 'ethereumjs-util'
import FilterResults from 'react-filter-search'
@@ -86,9 +86,9 @@ const Chain = styled.span`
`
export const ListItem = memo(function ListItem({ token }) {
- const scanner = lookupScanner(token.chainId)
- const tokenAddress = toChecksumAddress(token.address)
- const scannerUrl = scanner == '' ? '' : scanner + tokenAddress
+ const scanner = lookupScanner(token.chainId);
+ const tokenAddress = toChecksumAddress(token.address);
+ const scannerUrl = scanner == "" ? "" : scanner + tokenAddress;
return (
@@ -182,8 +182,9 @@ const ListHeader = styled.div`
export default function Tokens({ tokens }) {
const [value, setValue] = useState('')
- const sortedTokens = tokens.sort((a, b) => {
- return a.name > b.name ? 1 : a.name < b.name ? -1 : 0
+ const sortedTokens = tokens.sort((a,b) =>{
+ return a.symbol > b.symbol ? 1 :
+ a.symbol < b.symbol ? -1 : 0;
})
function handleChange(e) {
diff --git a/src/hooks.json b/src/hooks.json
deleted file mode 100644
index 16a1783..0000000
--- a/src/hooks.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "arrakis": {
- "name": "Arrakis",
- "version": { "major": 1, "minor": 0, "patch": 0 },
- "hooks": []
- },
- "blackrock": {
- "name": "Blackrock",
- "version": { "major": 1, "minor": 0, "patch": 0 },
- "hooks": []
- },
- "euler": {
- "name": "Euler",
- "version": { "major": 1, "minor": 0, "patch": 0 },
- "hooks": []
- },
- "froggy": {
- "name": "Froggy Friends",
- "version": { "major": 1, "minor": 0, "patch": 0 },
- "hooks": []
- },
- "infinity": {
- "name": "Infinity Pool",
- "version": { "major": 1, "minor": 0, "patch": 0 },
- "hooks": []
- },
- "chase": {
- "name": "J.P. Morgan Chase",
- "version": { "major": 0, "minor": 0, "patch": 420 },
- "hooks": []
- },
- "panoptic": {
- "name": "Panoptic",
- "version": { "major": 1, "minor": 0, "patch": 0 },
- "hooks": []
- },
- "sushi": {
- "name": "Sushiswap",
- "version": { "major": 1, "minor": 0, "patch": 0 },
- "hooks": []
- }
-}
diff --git a/src/pages/list.js b/src/pages/list.js
index 6d5d094..a22078e 100644
--- a/src/pages/list.js
+++ b/src/pages/list.js
@@ -69,7 +69,7 @@ function List() {
) : (
-
+
)}
diff --git a/src/token-lists.json b/src/token-lists.json
index b0aa241..a206e63 100644
--- a/src/token-lists.json
+++ b/src/token-lists.json
@@ -1,34 +1,138 @@
{
- "arrakis": {
- "name": "Arrakis",
+ "tokens.1inch.eth": {
+ "name": "1inch",
"homepage": ""
},
- "blackrock": {
- "name": "Blackrock",
+ "tokenlist.aave.eth": {
+ "name": "Aave Token List",
"homepage": ""
},
- "euler": {
- "name": "Euler",
+ "datafi.theagora.eth": {
+ "name": "Agora dataFi Tokens",
"homepage": ""
},
- "froggy": {
- "name": "Froggy Friends",
+ "https://raw.githubusercontent.com/The-Blockchain-Association/sec-notice-list/master/ba-sec-list.json": {
+ "name": "Blockchain Association SEC Non Compliant List",
"homepage": ""
},
- "infinity": {
- "name": "Infinity Pool",
+ "defi.cmc.eth": {
+ "name": "CMC DeFi",
"homepage": ""
},
- "chase": {
- "name": "J.P. Morgan Chase",
+ "stablecoin.cmc.eth": {
+ "name": "CMC Stablecoin",
"homepage": ""
},
- "panoptic": {
- "name": "Panoptic",
+ "erc20.cmc.eth": {
+ "name": "CMC200 ERC20",
"homepage": ""
},
- "sushi": {
- "name": "Sushiswap",
+ "https://compli.fi/complifi.tokenlist.json": {
+ "name": "CompliFi Originals",
+ "homepage": ""
+ },
+ "https://tokens.coingecko.com/uniswap/all.json": {
+ "name": "CoinGecko",
+ "homepage": ""
+ },
+ "https://www.coingecko.com/tokens_list/uniswap/defi_100/v_0_0_0.json": {
+ "name": "CoinGecko DeFi 100",
+ "homepage": ""
+ },
+ "https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json": {
+ "name": "Compound",
+ "homepage": ""
+ },
+ "https://defiprime.com/defiprime.tokenlist.json": {
+ "name": "Defiprime",
+ "homepage": ""
+ },
+ "https://raw.githubusercontent.com/b-u-i-d-l/bazar-tokens-list/master/dist/decentralizedFlexibleOrganizations.json": {
+ "name": "DFO Flexible Org",
+ "homepage": ""
+ },
+ "tokenlist.dharma.eth": {
+ "name": "Dharma Token List",
+ "homepage": ""
+ },
+ "https://cdn.furucombo.app/furucombo.tokenlist.json": {
+ "name": "Furucombo",
+ "homepage": ""
+ },
+ "https://www.gemini.com/uniswap/manifest.json": {
+ "name": "Gemini Token List",
+ "homepage": "https://www.gemini.com/"
+ },
+ "t2crtokens.eth": {
+ "name": "Kleros T2CR",
+ "homepage": ""
+ },
+ "https://api.kyber.network/tokenlist": {
+ "name": "Kyber",
+ "homepage": ""
+ },
+ "https://messari.io/tokenlist/messari-verified": {
+ "name": "Messari Verified",
+ "homepage": ""
+ },
+ "https://uniswap.mycryptoapi.com/": {
+ "name": "MyCrypto",
+ "homepage": ""
+ },
+ "https://raw.githubusercontent.com/opynfinance/opyn-tokenlist/master/opyn-v1.tokenlist.json": {
+ "name": "Opyn Token List",
+ "homepage": ""
+ },
+ "https://static.optimism.io/optimism.tokenlist.json": {
+ "name": "Optimism",
+ "homepage": "https://optimism.io/"
+ },
+ "https://app.tryroll.com/tokens.json": {
+ "name": "Roll Social Money",
+ "homepage": ""
+ },
+ "https://raw.githubusercontent.com/SetProtocol/uniswap-tokenlist/main/set.tokenlist.json": {
+ "name": "Set Protocol",
+ "homepage": ""
+ },
+ "synths.snx.eth": {
+ "name": "Synthetix",
+ "homepage": ""
+ },
+ "testnet.tokenlist.eth": {
+ "name": "Testnet Tokens",
+ "homepage": ""
+ },
+ "list.tkn.eth": {
+ "name": "TokenDao",
+ "homepage": "https://tkn.eth.limo"
+ },
+ "https://gateway.ipfs.io/ipns/tokens.uniswap.org": {
+ "name": "Uniswap Default List",
+ "homepage": ""
+ },
+ "https://raw.githubusercontent.com/jab416171/uniswap-pairtokens/master/uniswap_pair_tokens.json": {
+ "name": "Uniswap Token Pairs",
+ "homepage": ""
+ },
+ "https://umaproject.org/uma.tokenlist.json": {
+ "name": "UMA",
+ "homepage": ""
+ },
+ "wrapped.tokensoft.eth": {
+ "name": "Wrapped Tokens",
+ "homepage": ""
+ },
+ "https://yearn.science/static/tokenlist.json": {
+ "name": "Yearn",
+ "homepage": "https://yearn.finance/"
+ },
+ "https://zapper.fi/api/token-list": {
+ "name": "Zapper Token List",
+ "homepage": ""
+ },
+ "tokenlist.zerion.eth": {
+ "name": "Zerion Explore",
"homepage": ""
}
}
diff --git a/src/utils/useMultiFetch.ts b/src/utils/useMultiFetch.ts
index 479b5e4..875c0c9 100644
--- a/src/utils/useMultiFetch.ts
+++ b/src/utils/useMultiFetch.ts
@@ -1,5 +1,4 @@
-import { useEffect, useMemo, useState } from 'react'
-import hooksLists from '../hooks.json'
+import { useState, useEffect, useMemo } from 'react'
interface ListReturn {
list: any | undefined | null // TODO replace any
@@ -8,15 +7,14 @@ interface ListReturn {
}
export function getListURLFromListID(listID: string): string {
- // if (listID.startsWith('https://')) {
- // return listID
- // } else if (listID?.endsWith('.eth')) {
- // // proxy http urls through a CF worker
- // return `https://wispy-bird-88a7.uniswap.workers.dev/?url=${`http://${listID}.link`}`
- // } else {
- // throw Error(`Unrecognized listId ${listID}`)
- // }
- return listID
+ if (listID.startsWith('https://')) {
+ return listID
+ } else if (listID?.endsWith('.eth')) {
+ // proxy http urls through a CF worker
+ return `https://wispy-bird-88a7.uniswap.workers.dev/?url=${`http://${listID}.link`}`
+ } else {
+ throw Error(`Unrecognized listId ${listID}`)
+ }
}
export function useMultiFetch(listIDs: string[] = []): { [listID: string]: ListReturn } {
@@ -26,10 +24,26 @@ export function useMultiFetch(listIDs: string[] = []): { [listID: string]: ListR
if (listIDs.length > 0) {
let stale = false
- listIDs.forEach((listID) => {
- const list = (hooksLists as Record)[listID]
- setLists((lists) => ({ ...lists, [listID]: list }))
- })
+ listIDs.forEach((listID) =>
+ fetch(getListURLFromListID(listID))
+ .then((response) => {
+ if (!response.ok) {
+ throw new Error('Network response was not ok')
+ }
+ return response.json()
+ })
+ .then((list) => {
+ if (!stale) {
+ setLists((lists) => ({ ...lists, [listID]: list }))
+ }
+ })
+ .catch((error) => {
+ if (!stale) {
+ console.error(`Failed to fetch ${listID} at ${getListURLFromListID(listID)}`, error)
+ setLists((lists) => ({ ...lists, [listID]: null }))
+ }
+ })
+ )
return () => {
stale = true