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