From fb0d223c60609ac6eeb135b41e76c751b5fdc09c Mon Sep 17 00:00:00 2001 From: Majorfi Date: Fri, 12 Apr 2024 10:06:49 +0200 Subject: [PATCH] feat: update template --- .eslintignore | 4 - .eslintrc.js | 1 + .vscode/settings.json | 2 +- bun.lockb | Bin 669141 -> 722253 bytes components/common/AddressInput.tsx | 134 ----- .../ComboboxAddressInput/PossibleOption.tsx | 56 --- .../ComboboxAddressInput/SelectedOption.tsx | 88 ---- .../common/ComboboxAddressInput/index.tsx | 215 -------- .../ComboboxAddressInput/useFilterTokens.ts | 20 - components/common/Drawer.tsx | 106 ++++ components/common/Header.tsx | 104 ++++ components/common/HeaderElements.tsx | 262 ---------- components/common/Meta.tsx | 323 ++++++------ .../common/TokenList/TokenListAddBox.tsx | 238 --------- .../TokenList/TokenListHandlerPopover.tsx | 171 ------- components/icons/IconCheck.tsx | 22 + components/icons/IconMenu.tsx | 22 + contexts/useMultichainBalances.ts | 476 ------------------ contexts/useTokenList.tsx | 225 --------- contexts/useWallet.tsx | 168 ------- hooks/useAsyncTrigger.ts | 18 - package.json | 88 ++-- pages/_app.tsx | 113 ++--- utils/actions.ts | 24 +- utils/tools.ens.ts | 30 -- utils/tools.lens.ts | 49 -- utils/types.tsx | 46 -- 27 files changed, 530 insertions(+), 2475 deletions(-) delete mode 100644 .eslintignore delete mode 100644 components/common/AddressInput.tsx delete mode 100644 components/common/ComboboxAddressInput/PossibleOption.tsx delete mode 100644 components/common/ComboboxAddressInput/SelectedOption.tsx delete mode 100644 components/common/ComboboxAddressInput/index.tsx delete mode 100644 components/common/ComboboxAddressInput/useFilterTokens.ts create mode 100644 components/common/Drawer.tsx create mode 100644 components/common/Header.tsx delete mode 100644 components/common/HeaderElements.tsx delete mode 100644 components/common/TokenList/TokenListAddBox.tsx delete mode 100644 components/common/TokenList/TokenListHandlerPopover.tsx create mode 100644 components/icons/IconCheck.tsx create mode 100644 components/icons/IconMenu.tsx delete mode 100644 contexts/useMultichainBalances.ts delete mode 100755 contexts/useTokenList.tsx delete mode 100755 contexts/useWallet.tsx delete mode 100644 hooks/useAsyncTrigger.ts delete mode 100644 utils/tools.ens.ts delete mode 100644 utils/tools.lens.ts delete mode 100644 utils/types.tsx diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 6f6ab39..0000000 --- a/.eslintignore +++ /dev/null @@ -1,4 +0,0 @@ -# Auto Generated PWA files -public/sw* -public/workbox* -ipfs/* diff --git a/.eslintrc.js b/.eslintrc.js index d8b91ad..c90921c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -25,6 +25,7 @@ module.exports = { react: {version: 'detect'}, 'import/resolver': {typescript: {}} }, + ignorePatterns: ['public/sw*', 'public/workbox*', 'ipfs/*'], rules: { 'import/default': 0, 'react/prop-types': 0, diff --git a/.vscode/settings.json b/.vscode/settings.json index 2afec2b..5c79875 100755 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ "editor.wordWrap": "off", "editor.autoIndent": "keep", "editor.codeActionsOnSave": { - "source.fixAll": true + "source.fixAll": "explicit" }, "editor.quickSuggestions": { "strings": true diff --git a/bun.lockb b/bun.lockb index 9576dfa785b4ec1a98bf75d47bc0da72796a47e3..08aed6ac22e8219c8aebd78dca0bfef4335e70b0 100755 GIT binary patch delta 204066 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

bB2vw+COzX0gVdN+Y65#@27 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 delta 172432 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

`6p8uT`hcu3TNGH;RgNzKKW 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 diff --git a/components/common/AddressInput.tsx b/components/common/AddressInput.tsx deleted file mode 100644 index aa33765..0000000 --- a/components/common/AddressInput.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import React, {useCallback, useMemo, useRef, useState} from 'react'; -import {checkENSValidity} from 'utils/tools.ens'; -import {checkLensValidity} from 'utils/tools.lens'; -import {IconCircleCheck} from '@icons/IconCircleCheck'; -import {IconCircleCross} from '@icons/IconCircleCross'; -import {IconLoader} from '@yearn-finance/web-lib/icons/IconLoader'; -import {isZeroAddress, toAddress} from '@yearn-finance/web-lib/utils/address'; -import {cl} from '@yearn-finance/web-lib/utils/cl'; -import {ZERO_ADDRESS} from '@yearn-finance/web-lib/utils/constants'; - -import type {ReactElement} from 'react'; -import type {TAddress} from '@yearn-finance/web-lib/types'; - -export type TAddressInput = { - value: TInputAddressLike; - onChangeValue: (value: TInputAddressLike) => void; - inputClassName?: string; -}; -export type TInputAddressLike = { - address: TAddress | undefined; - label: string; - isValid: boolean | 'undetermined'; -}; -export const defaultInputAddressLike: TInputAddressLike = { - address: undefined, - label: '', - isValid: false -}; - -function AddressInput({value, onChangeValue, ...props}: TAddressInput): ReactElement { - const [isLoadingValidish, set_isLoadingValidish] = useState(false); - const currentLabel = useRef(value.label); - const isFocused = useRef(false); - const status = useMemo((): 'valid' | 'invalid' | 'warning' | 'pending' | 'none' => { - if (value.isValid === true) { - return 'valid'; - } - if (value.isValid === false && value.label !== '' && value.address === ZERO_ADDRESS) { - return 'invalid'; - } - if (value.isValid === false && value.label !== '' && !isLoadingValidish && !isFocused.current) { - return 'invalid'; - } - if (isLoadingValidish) { - return 'pending'; - } - return 'none'; - }, [value, isLoadingValidish, isFocused]); - - const onChange = useCallback( - async (label: string): Promise => { - currentLabel.current = label; - - if (label.endsWith('.eth') && label.length > 4) { - onChangeValue({address: undefined, label, isValid: 'undetermined'}); - set_isLoadingValidish(true); - const [address, isValid] = await checkENSValidity(label); - if (currentLabel.current === label) { - onChangeValue({address, label, isValid}); - } - set_isLoadingValidish(false); - } else if (label.endsWith('.lens') && label.length > 5) { - onChangeValue({address: undefined, label, isValid: 'undetermined'}); - set_isLoadingValidish(true); - const [address, isValid] = await checkLensValidity(label); - if (currentLabel.current === label) { - onChangeValue({address, label, isValid}); - } - set_isLoadingValidish(false); - } else if (!isZeroAddress(toAddress(label))) { - onChangeValue({address: toAddress(label), label, isValid: true}); - } else { - onChangeValue({address: undefined, label, isValid: false}); - } - }, - [onChangeValue, currentLabel] - ); - - return ( -

- ); -} - -export default AddressInput; diff --git a/components/common/ComboboxAddressInput/PossibleOption.tsx b/components/common/ComboboxAddressInput/PossibleOption.tsx deleted file mode 100644 index 55c1869..0000000 --- a/components/common/ComboboxAddressInput/PossibleOption.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import React, {useMemo} from 'react'; -import {Combobox} from '@headlessui/react'; -import {IconCircleCheck} from '@icons/IconCircleCheck'; -import {toAddress} from '@yearn-finance/web-lib/utils/address'; -import {ImageWithFallback} from '@common/ImageWithFallback'; - -import type {ReactElement} from 'react'; -import type {TToken} from '@types'; - -function Option(props: TToken): ReactElement { - return ( -
-
- -
-
-
{props.symbol}
- {toAddress(props.address)} -
-
- ); -} - -function PossibleOption({option}: {option: TToken}): ReactElement { - const memorizedElement = useMemo((): ReactElement =>
{ - e.stopPropagation(); - e.preventDefault(); - onClose(); - }} - /> - ); -} - -function WithTransition({children, isOpen}: {children: ReactElement; isOpen: boolean}): ReactElement { - return ( - - {children} - - ); -} - -function Options( - props: TComboboxAddressInput & { - isOpen: boolean; - onToggle: Dispatch>; - activaValue: TToken | null; - isLoadingTokenData: boolean; - } -): ReactElement { - const {balances} = useWallet(); - const [query, set_query] = useState(''); - const filteredValues = useFilterTokens(Object.values(props.possibleValues), query); - - const filteredBalances = useMemo((): [TToken[], TToken[]] => { - if (!props.shouldSort) { - return [filteredValues, []]; - } - const withBalance = []; - const withoutBalance = []; - for (const dest of filteredValues) { - if (toBigInt(balances?.[toAddress(dest.address)]?.raw) > 0n) { - withBalance.push(dest); - } else { - withoutBalance.push(dest); - } - } - return [withBalance, withoutBalance]; - }, [balances, filteredValues, props.shouldSort]); - - return ( -
- { - props.onToggle(true); - set_query(event.target.value); - }} - /> - - - {filteredValues.length === 0 && query !== '' ? ( -
- {'No token found.'} -
- ) : ( - [...filteredBalances[0], ...filteredBalances[1]].slice(0, 100).map( - (dest): ReactElement => ( - - ) - ) - )} -
-
-
- ); -} - -function ComboboxAddressInput({ - possibleValues, - value, - onChangeValue, - onAddValue, - shouldSort = true -}: TComboboxAddressInput): ReactElement { - const {safeChainID} = useChainID(); - const {refresh} = useWallet(); - const [isOpen, set_isOpen] = useThrottledState(false, 100); - const [isLoadingTokenData, set_isLoadingTokenData] = useState(false); - - const fetchToken = useCallback( - async ( - _safeChainID: number, - _query: TAddress - ): Promise<{name: string; symbol: string; decimals: number} | undefined> => { - if (!isAddress(_query)) { - return undefined; - } - const results = await multicall({ - contracts: [ - {address: _query, abi: erc20ABI, functionName: 'name'}, - {address: _query, abi: erc20ABI, functionName: 'symbol'}, - {address: _query, abi: erc20ABI, functionName: 'decimals'} - ], - chainId: _safeChainID - }); - const name = decodeAsString(results[0]); - const symbol = decodeAsString(results[1]); - const decimals = decodeAsNumber(results[2]); - await refresh([{decimals, name, symbol, token: _query}]); - return {name, symbol, decimals}; - }, - [refresh] - ); - - const onChange = useCallback( - async (_selected: TToken): Promise => { - let _tokenData = _selected; - if (!_tokenData || (!_tokenData.name && !_tokenData.symbol && !_tokenData.decimals)) { - set_isLoadingTokenData(true); - const result = await fetchToken(safeChainID, _selected.address); - _tokenData = { - ..._tokenData, - name: result?.name || '', - symbol: result?.symbol || '', - decimals: result?.decimals || 0, - chainID: safeChainID, - logoURI: `${process.env.SMOL_ASSETS_URL}/token/${_selected.chainID}/${_selected.address}/logo-32.png` - }; - set_isLoadingTokenData(false); - } - - onAddValue((prev: TDict): TDict => { - if (prev[_selected.address]) { - return prev; - } - return {...prev, [toAddress(_selected.address)]: _tokenData}; - }); - onChangeValue(_tokenData); - set_isOpen(false); - }, - [fetchToken, safeChainID, onAddValue, onChangeValue, set_isOpen] - ); - - return ( -
- set_isOpen(false)} - /> - - value={value} - onChange={onChange}> - {(comboOptions): ReactElement => ( - - )} - -
- ); -} - -export default ComboboxAddressInput; diff --git a/components/common/ComboboxAddressInput/useFilterTokens.ts b/components/common/ComboboxAddressInput/useFilterTokens.ts deleted file mode 100644 index 0a7a2ee..0000000 --- a/components/common/ComboboxAddressInput/useFilterTokens.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {useMemo} from 'react'; - -import type {TToken} from '@types'; - -function useFilterTokens(tokens: TToken[], query: string): TToken[] { - const filteredTokens = useMemo((): TToken[] => { - if (query === '' || tokens.length === 0) { - return tokens; - } - return tokens.filter( - (token): boolean => - token.name.toLowerCase().startsWith(query.toLowerCase()) || - token.symbol.toLowerCase().startsWith(query.toLowerCase()) || - token.address.toLowerCase().startsWith(query.toLowerCase()) - ); - }, [query, tokens]); - return filteredTokens; -} - -export {useFilterTokens}; diff --git a/components/common/Drawer.tsx b/components/common/Drawer.tsx new file mode 100644 index 0000000..7d900c1 --- /dev/null +++ b/components/common/Drawer.tsx @@ -0,0 +1,106 @@ +'use client'; + +import * as React from 'react'; +import {Drawer as DrawerPrimitive} from 'vaul'; +import {cl} from '@builtbymom/web3/utils'; + +const Drawer = ({ + shouldScaleBackground = true, + ...props +}: React.ComponentProps): React.ReactElement => ( + +); +Drawer.displayName = 'Drawer'; + +const DrawerTrigger = DrawerPrimitive.Trigger; + +const DrawerPortal = DrawerPrimitive.Portal; + +const DrawerClose = DrawerPrimitive.Close; + +const DrawerOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({className, ...props}, ref) => ( + +)); +DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName; + +const DrawerContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({className, children, ...props}, ref) => ( + + + + {children} + + +)); +DrawerContent.displayName = 'DrawerContent'; + +const DrawerHeader = ({className, ...props}: React.HTMLAttributes): React.ReactElement => ( +
+); +DrawerHeader.displayName = 'DrawerHeader'; + +const DrawerFooter = ({className, ...props}: React.HTMLAttributes): React.ReactElement => ( +
+); +DrawerFooter.displayName = 'DrawerFooter'; + +const DrawerTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({className, ...props}, ref) => ( + +)); +DrawerTitle.displayName = DrawerPrimitive.Title.displayName; + +const DrawerDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({className, ...props}, ref) => ( + +)); +DrawerDescription.displayName = DrawerPrimitive.Description.displayName; + +export { + Drawer, + DrawerClose, + DrawerContent, + DrawerDescription, + DrawerFooter, + DrawerHeader, + DrawerOverlay, + DrawerPortal, + DrawerTitle, + DrawerTrigger +}; diff --git a/components/common/Header.tsx b/components/common/Header.tsx new file mode 100644 index 0000000..56e28e3 --- /dev/null +++ b/components/common/Header.tsx @@ -0,0 +1,104 @@ +import React from 'react'; +import Link from 'next/link'; +import {usePathname} from 'next/navigation'; +import {useWeb3} from '@builtbymom/web3/contexts/useWeb3'; +import {cl, truncateHex} from '@builtbymom/web3/utils'; +import {IconMenu} from '@icons/IconMenu'; +import {useAccountModal} from '@rainbow-me/rainbowkit'; +import {Drawer, DrawerClose, DrawerContent, DrawerFooter, DrawerHeader, DrawerTrigger} from '@common/Drawer'; + +import type {ReactElement} from 'react'; + +function Header(): ReactElement { + const pathname = usePathname(); + const {onConnect, onDesactivate, address, ens} = useWeb3(); + const {openAccountModal} = useAccountModal(); + + const tabs = [{href: '/', label: 'Home', target: '_self'}]; + + return ( +
+ +
+ + + + + + + +
+ {tabs.map(({href, label, target}) => ( + + +

+ {label} +

+
+ + ))} +
+
+ + + + + +
+
+
+ +
+
+
+ ); +} + +export {Header}; diff --git a/components/common/HeaderElements.tsx b/components/common/HeaderElements.tsx deleted file mode 100644 index 1e624a4..0000000 --- a/components/common/HeaderElements.tsx +++ /dev/null @@ -1,262 +0,0 @@ -import React, {Fragment, useEffect, useMemo, useState} from 'react'; -import Image from 'next/image'; -import assert from 'assert'; -import {useConnect, usePublicClient} from 'wagmi'; -import {Listbox, Transition} from '@headlessui/react'; -import {useAccountModal, useChainModal} from '@rainbow-me/rainbowkit'; -import {useIsMounted} from '@react-hookz/web'; -import {useWeb3} from '@yearn-finance/web-lib/contexts/useWeb3'; -import {toSafeChainID} from '@yearn-finance/web-lib/hooks/useChainID'; -import {IconChevronBottom} from '@yearn-finance/web-lib/icons/IconChevronBottom'; -import {IconWallet} from '@yearn-finance/web-lib/icons/IconWallet'; -import {truncateHex} from '@yearn-finance/web-lib/utils/address'; - -import type {ReactElement} from 'react'; -import type {Chain} from 'wagmi'; - -function NetworkButton({ - label, - isDisabled, - onClick -}: { - label: string; - isDisabled?: boolean; - onClick?: () => void; -}): ReactElement { - return ( - - ); -} - -function CurrentNetworkButton({label, value, isOpen}: {label: string; value: number; isOpen: boolean}): ReactElement { - const [src, set_src] = useState(undefined); - - useEffect((): void => { - if (value) { - set_src(`${process.env.SMOL_ASSETS_URL}/chain/${value}/logo-128.png`); - } - }, [value]); - - return ( - -
- {src ? ( - {label} - ) : ( -
- )} - {label} -
-
- -
- - ); -} - -type TNetwork = {value: number; label: string}; -export function NetworkSelector({networks}: {networks: number[]}): ReactElement { - const {onSwitchChain} = useWeb3(); - const publicClient = usePublicClient(); - const {connectors} = useConnect(); - const safeChainID = toSafeChainID(publicClient?.chain.id, Number(process.env.BASE_CHAINID)); - const isMounted = useIsMounted(); - - const supportedNetworks = useMemo((): TNetwork[] => { - const injectedConnector = connectors.find((e): boolean => e.id.toLocaleLowerCase() === 'injected'); - assert(injectedConnector, 'No injected connector found'); - const chainsForInjected = injectedConnector.chains; - - return chainsForInjected - .filter(({id}): boolean => id !== 1337 && ((networks.length > 0 && networks.includes(id)) || true)) - .map((network: Chain): TNetwork => ({value: network.id, label: network.name})); - }, [connectors, networks]); - - const currentNetwork = useMemo( - (): TNetwork | undefined => supportedNetworks.find((network): boolean => network.value === safeChainID), - [safeChainID, supportedNetworks] - ); - - if (supportedNetworks.length === 1) { - if (publicClient?.chain.id === 1337) { - return ( - - ); - } - if (currentNetwork?.value === supportedNetworks[0]?.value) { - return ( - - ); - } - return ( - onSwitchChain(supportedNetworks[0].value)} - /> - ); - } - - if (!isMounted() || !currentNetwork) { -
-
-
; - } - - return ( -
- onSwitchChain((value as {value: number}).value)}> - {({open}): ReactElement => ( - <> - - -
- -
- - - -
- {supportedNetworks.map( - (network): ReactElement => ( - - {({active}): ReactElement => ( -
- {network?.label || 'Ethereum'} -
- )} -
- ) - )} -
-
-
-
- - - )} - -
- ); -} - -export function WalletSelector(): ReactElement { - const {openAccountModal} = useAccountModal(); - const {openChainModal} = useChainModal(); - const {isActive, address, ens, lensProtocolHandle, openLoginModal} = useWeb3(); - - const [walletIdentity, set_walletIdentity] = useState(undefined); - const isMounted = useIsMounted(); - - useEffect((): void => { - if (!isMounted()) { - return; - } - if (!isActive && address) { - set_walletIdentity('Invalid Network'); - } else if (ens) { - set_walletIdentity(ens); - } else if (lensProtocolHandle) { - set_walletIdentity(lensProtocolHandle); - } else if (address) { - set_walletIdentity(truncateHex(address, 6)); - } else { - set_walletIdentity(undefined); - } - }, [ens, lensProtocolHandle, address, isActive, isMounted]); - - return ( -
{ - if (isActive) { - openAccountModal?.(); - } else if (!isActive && address) { - openChainModal?.(); - } else { - openLoginModal(); - } - }}> -
- {walletIdentity ? ( - walletIdentity - ) : ( - - - - - )} -
-
- ); -} diff --git a/components/common/Meta.tsx b/components/common/Meta.tsx index 4babf7b..3c4a29c 100644 --- a/components/common/Meta.tsx +++ b/components/common/Meta.tsx @@ -1,171 +1,176 @@ import React from 'react'; import Head from 'next/head'; -import {DefaultSeo} from 'next-seo'; -import meta from 'public/manifest.json'; + +import meta from '../../public/manifest.json'; import type {ReactElement} from 'react'; function Meta(): ReactElement { return ( - <> - - {meta.name} - - - - - + + {meta.name} + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + ); } diff --git a/components/common/TokenList/TokenListAddBox.tsx b/components/common/TokenList/TokenListAddBox.tsx deleted file mode 100644 index ad70fae..0000000 --- a/components/common/TokenList/TokenListAddBox.tsx +++ /dev/null @@ -1,238 +0,0 @@ -import React, {useCallback, useMemo, useRef, useState} from 'react'; -import axios from 'axios'; -import {IconCircleCheck} from '@icons/IconCircleCheck'; -import {IconCircleCross} from '@icons/IconCircleCross'; -import {erc20ABI, readContracts} from '@wagmi/core'; -import {Button} from '@yearn-finance/web-lib/components/Button'; -import {useChainID} from '@yearn-finance/web-lib/hooks/useChainID'; -import {IconLoader} from '@yearn-finance/web-lib/icons/IconLoader'; -import {decodeAsBigInt, decodeAsNumber, decodeAsString} from '@yearn-finance/web-lib/utils/decoder'; -import {toNormalizedBN} from '@yearn-finance/web-lib/utils/format.bigNumber'; -import AddressInput, {defaultInputAddressLike} from '@common/AddressInput'; - -import type {TInputAddressLike} from '@common/AddressInput'; -import type {TToken, TTokenList} from '@types'; - -type TValue = { - label: string; - isValid: boolean | 'undetermined'; - list: TTokenList | undefined; -}; -type TTokenListAddBox = { - onAddTokenList: (list: TTokenList) => void; - onAddToken: (token: TToken) => void; -}; -function TokenListAddBox({onAddTokenList, onAddToken}: TTokenListAddBox): React.ReactElement { - const {safeChainID} = useChainID(); - const [value, set_value] = useState({label: '', isValid: 'undetermined', list: undefined}); - const [extraToken, set_extraToken] = useState(defaultInputAddressLike); - const [isLoadingTokenList, set_isLoadingTokenList] = useState(false); - const [isLoadingTokenAddress, set_isLoadingTokenAddress] = useState(false); - const currentLabel = useRef(''); - - const statusURI = useMemo((): 'valid' | 'invalid' | 'warning' | 'pending' | 'none' => { - if (value.isValid === true) { - return 'valid'; - } - if (value.isValid === false && value.label !== '' && !isLoadingTokenList) { - return 'invalid'; - } - if (isLoadingTokenList) { - return 'pending'; - } - return 'none'; - }, [value, isLoadingTokenList]); - - const onChangeURI = useCallback( - async (label: string): Promise => { - currentLabel.current = label; - - if (!label.endsWith('.json')) { - return set_value({label, isValid: false, list: undefined}); - } - - set_value({label, isValid: 'undetermined', list: undefined}); - set_isLoadingTokenList(true); - - const [fromLabel] = await Promise.allSettled([axios.get(label)]); - if (fromLabel.status === 'fulfilled') { - //Check if we got name, logoURI and tokens array - const {name, logoURI, tokens} = fromLabel.value.data; - if (name && logoURI && Array.isArray(tokens) && tokens.length > 0) { - //Check if the tokens contains address, name, symbol, logoURI, chainID and decimals - const areTokensValid = (tokens as TToken[]).every((eachToken: TToken): boolean => { - const {address, name, symbol, logoURI, chainID, decimals} = eachToken; - return Boolean( - address && - name !== undefined && - symbol !== undefined && - logoURI !== undefined && - chainID && - decimals - ); - }); - if (currentLabel.current === label) { - set_value({ - label, - isValid: areTokensValid, - list: {...(fromLabel.value.data as TTokenList), uri: label} - }); - } - set_isLoadingTokenList(false); - } - } else { - if (currentLabel.current === label) { - set_value({label, isValid: false, list: undefined}); - } - set_isLoadingTokenList(false); - } - }, - [currentLabel] - ); - - const onSubmitURI = useCallback( - async (e: React.FormEvent): Promise => { - e.preventDefault(); - if (value.isValid === true && value.list) { - onAddTokenList(value.list); - set_value({label: '', isValid: 'undetermined', list: undefined}); - } - }, - [value, onAddTokenList] - ); - - const onSubmitAddress = useCallback( - async (e: React.FormEvent): Promise => { - e.preventDefault(); - if (extraToken.isValid === true && extraToken.address) { - set_isLoadingTokenAddress(true); - const [name, symbol, decimals] = await readContracts({ - contracts: [ - {abi: erc20ABI, address: extraToken.address, functionName: 'name'}, - {abi: erc20ABI, address: extraToken.address, functionName: 'symbol'}, - {abi: erc20ABI, address: extraToken.address, functionName: 'decimals'} - ] - }); - onAddToken({ - address: extraToken.address, - chainID: safeChainID, - name: decodeAsString(name), - symbol: decodeAsString(symbol), - decimals: Number(decodeAsBigInt(decimals)) || decodeAsNumber(decimals), - logoURI: `${process.env.SMOL_ASSETS_URL}/token/${safeChainID}/${extraToken.address}/logo-32.png`, - value: 0, - price: toNormalizedBN(0), - balance: toNormalizedBN(0) - }); - set_extraToken(defaultInputAddressLike); - set_isLoadingTokenAddress(false); - } - }, - [extraToken.isValid, extraToken.address, onAddToken, safeChainID] - ); - - return ( -
- ); -} - -export {TokenListAddBox}; diff --git a/components/common/TokenList/TokenListHandlerPopover.tsx b/components/common/TokenList/TokenListHandlerPopover.tsx deleted file mode 100644 index e9e8fc5..0000000 --- a/components/common/TokenList/TokenListHandlerPopover.tsx +++ /dev/null @@ -1,171 +0,0 @@ -import React, {Fragment, useRef} from 'react'; -import {Dialog, Transition} from '@headlessui/react'; -import {IconCircleCross} from '@icons/IconCircleCross'; -import {ImageWithFallback} from '@common/ImageWithFallback'; -import {TokenListAddBox} from '@common/TokenList/TokenListAddBox'; - -import type {Dispatch, ReactElement, SetStateAction} from 'react'; -import type {TToken, TTokenList} from '@types'; - -type TTokenListHandlerPopover = { - lists: TTokenList[]; - onAddTokenList: (list: TTokenList) => void; - onAddToken: (token: TToken) => void; - isOpen: boolean; - set_isOpen: Dispatch>; -}; -function TokenListHandlerPopover({ - lists, - onAddTokenList, - onAddToken, - isOpen, - set_isOpen -}: TTokenListHandlerPopover): React.ReactElement { - const cancelButtonRef = useRef(null); - - return ( - - - -
- - - - - - ); -} - -export {TokenListHandlerPopover}; diff --git a/components/icons/IconCheck.tsx b/components/icons/IconCheck.tsx new file mode 100644 index 0000000..7d5e5a8 --- /dev/null +++ b/components/icons/IconCheck.tsx @@ -0,0 +1,22 @@ +import React from 'react'; + +import type {ReactElement} from 'react'; + +function IconCheck(props: React.SVGProps): ReactElement { + return ( + + + + ); +} + +export {IconCheck}; diff --git a/components/icons/IconMenu.tsx b/components/icons/IconMenu.tsx new file mode 100644 index 0000000..9f21305 --- /dev/null +++ b/components/icons/IconMenu.tsx @@ -0,0 +1,22 @@ +import React from 'react'; + +import type {ReactElement} from 'react'; + +function IconMenu(props: React.SVGProps): ReactElement { + return ( + + + + ); +} + +export {IconMenu}; diff --git a/contexts/useMultichainBalances.ts b/contexts/useMultichainBalances.ts deleted file mode 100644 index 3527f3c..0000000 --- a/contexts/useMultichainBalances.ts +++ /dev/null @@ -1,476 +0,0 @@ -import {useCallback, useMemo, useRef, useState} from 'react'; -import {useAsyncTrigger} from 'hooks/useAsyncTrigger'; -import {erc20ABI, useChainId} from 'wagmi'; -import {deserialize, multicall, serialize} from '@wagmi/core'; -import {useUI} from '@yearn-finance/web-lib/contexts/useUI'; -import {useWeb3} from '@yearn-finance/web-lib/contexts/useWeb3'; -import {AGGREGATE3_ABI} from '@yearn-finance/web-lib/utils/abi/aggregate.abi'; -import {isZeroAddress, toAddress} from '@yearn-finance/web-lib/utils/address'; -import {MULTICALL3_ADDRESS} from '@yearn-finance/web-lib/utils/constants'; -import {decodeAsBigInt, decodeAsNumber, decodeAsString} from '@yearn-finance/web-lib/utils/decoder'; -import {toBigInt, toNormalizedBN, toNormalizedValue} from '@yearn-finance/web-lib/utils/format.bigNumber'; -import {isEth} from '@yearn-finance/web-lib/utils/isEth'; -import {isZero} from '@yearn-finance/web-lib/utils/isZero'; -import {getNetwork} from '@yearn-finance/web-lib/utils/wagmi/utils'; - -import type {DependencyList} from 'react'; -import type {ContractFunctionConfig} from 'viem'; -import type {Connector} from 'wagmi'; -import type {TAddress, TDict, TNDict} from '@yearn-finance/web-lib/types'; -import type {TDefaultStatus} from '@yearn-finance/web-lib/types/hooks'; -import type {TYDaemonPrices} from '@yearn-finance/web-lib/utils/schemas/yDaemonPricesSchema'; -import type {TChainTokens, TToken} from '@types'; - -/* 🔵 - Yearn Finance ********************************************************** - ** Request, Response and helpers for the useBalances hook. - ******************************************************************************/ -export type TUseBalancesTokens = { - address: TAddress; - chainID: number; - decimals?: number; - name?: string; - symbol?: string; - for?: string; -}; -export type TUseBalancesReq = { - key?: string | number; - tokens: TUseBalancesTokens[]; - prices?: TYDaemonPrices; - effectDependencies?: DependencyList; - provider?: Connector; -}; - -export type TUseBalancesRes = { - data: TChainTokens; - onUpdate: () => Promise; - onUpdateSome: (token: TUseBalancesTokens[]) => Promise; - error?: Error; - status: 'error' | 'loading' | 'success' | 'unknown'; -} & TDefaultStatus; - -type TDataRef = { - nonce: number; - address: TAddress; - balances: TChainTokens; -}; - -/* 🔵 - Yearn Finance ********************************************************** - ** Default status for the loading state. - ******************************************************************************/ -const defaultStatus = { - isLoading: false, - isFetching: false, - isSuccess: false, - isError: false, - isFetched: false, - isRefetching: false -}; - -async function performCall( - chainID: number, - calls: ContractFunctionConfig[], - tokens: TUseBalancesTokens[], - prices?: TYDaemonPrices -): Promise<[TDict, Error | undefined]> { - const _data: TDict = {}; - const results = await multicall({ - contracts: calls as never[], - chainId: chainID - }); - - let rIndex = 0; - for (const element of tokens) { - const {address, decimals: injectedDecimals, name: injectedName, symbol: injectedSymbol} = element; - const balanceOf = decodeAsBigInt(results[rIndex++]); - const decimals = decodeAsNumber(results[rIndex++]) || injectedDecimals || 18; - const rawPrice = toBigInt(prices?.[address]); - let symbol = decodeAsString(results[rIndex++]) || injectedSymbol || ''; - let name = decodeAsString(results[rIndex++]) || injectedName || ''; - if (isEth(address)) { - const nativeTokenWrapper = getNetwork(chainID)?.contracts?.wrappedToken; - if (nativeTokenWrapper) { - symbol = nativeTokenWrapper.coinSymbol; - name = nativeTokenWrapper.coinName; - } - } - - _data[address] = { - address: address, - name: name, - symbol: symbol, - decimals: decimals, - chainID: chainID, - balance: toNormalizedBN(balanceOf, decimals), - price: toNormalizedBN(rawPrice, 6), - value: toNormalizedValue(balanceOf, decimals) * toNormalizedValue(rawPrice, 6) - }; - } - return [_data, undefined]; -} - -async function getBalances( - chainID: number, - address: TAddress, - tokens: TUseBalancesTokens[], - prices?: TYDaemonPrices -): Promise<[TDict, Error | undefined]> { - let result: TDict = {}; - const calls: ContractFunctionConfig[] = []; - - for (const element of tokens) { - const {address: token} = element; - const ownerAddress = address; - if (isEth(token)) { - const nativeTokenWrapper = getNetwork(chainID)?.contracts?.wrappedToken; - if (!nativeTokenWrapper) { - console.error('No native token wrapper found for chainID', chainID); - continue; - } - const multicall3Contract = {address: MULTICALL3_ADDRESS, abi: AGGREGATE3_ABI}; - const baseContract = {address: nativeTokenWrapper.address, abi: erc20ABI}; - calls.push({...multicall3Contract, functionName: 'getEthBalance', args: [ownerAddress]}); - calls.push({...baseContract, functionName: 'decimals'}); - calls.push({...baseContract, functionName: 'symbol'}); - calls.push({...baseContract, functionName: 'name'}); - } else { - const baseContract = {address: token, abi: erc20ABI}; - calls.push({...baseContract, functionName: 'balanceOf', args: [ownerAddress]}); - calls.push({...baseContract, functionName: 'decimals'}); - calls.push({...baseContract, functionName: 'symbol'}); - calls.push({...baseContract, functionName: 'name'}); - } - } - - try { - const [callResult] = await performCall(chainID, calls, tokens, prices); - result = {...result, ...callResult}; - return [result, undefined]; - } catch (_error) { - console.error(_error); - return [result, _error as Error]; - } -} - -/* 🔵 - Yearn Finance ****************************************************** - ** This hook can be used to fetch balance information for any ERC20 tokens. - **************************************************************************/ -export function useBalances(props?: TUseBalancesReq): TUseBalancesRes { - const {address: userAddress} = useWeb3(); - const chainID = useChainId(); - const {onLoadStart, onLoadDone} = useUI(); - const [status, set_status] = useState(defaultStatus); - const [error, set_error] = useState(undefined); - const [balances, set_balances] = useState({}); - const data = useRef({nonce: 0, address: toAddress(), balances: {}}); - const stringifiedTokens = useMemo((): string => serialize(props?.tokens || []), [props?.tokens]); - - const updateBalancesCall = useCallback( - (chainID: number, newRawData: TDict): TChainTokens => { - if (toAddress(userAddress) !== data?.current?.address) { - data.current = { - address: toAddress(userAddress), - balances: {}, - nonce: 0 - }; - } - data.current.address = toAddress(userAddress); - - for (const [address, element] of Object.entries(newRawData)) { - if (!data.current.balances[chainID]) { - data.current.balances[chainID] = {}; - } - data.current.balances[chainID][address] = { - ...data.current.balances[chainID][address], - ...element - }; - } - data.current.nonce += 1; - - set_balances( - (b): TChainTokens => ({ - ...b, - [chainID]: { - ...(b[chainID] || {}), - ...data.current.balances[chainID] - } - }) - ); - return data.current.balances; - }, - [userAddress] - ); - - /* 🔵 - Yearn Finance ****************************************************** - ** onUpdate will take the stringified tokens and fetch the balances for each - ** token. It will then update the balances state with the new balances. - ** This takes the whole list and is not optimized for performance, aka not - ** send in a worker. - **************************************************************************/ - const onUpdate = useCallback(async (): Promise => { - if (!userAddress) { - return {}; - } - const tokenList = deserialize(stringifiedTokens) || []; - const tokens = tokenList.filter(({address}: TUseBalancesTokens): boolean => !isZeroAddress(address)); - if (isZero(tokens.length)) { - return {}; - } - set_status({ - ...defaultStatus, - isLoading: true, - isFetching: true, - isRefetching: defaultStatus.isFetched - }); - onLoadStart(); - - const tokensPerChainID: TNDict = {}; - for (const token of tokens) { - if (!tokensPerChainID[token.chainID]) { - tokensPerChainID[token.chainID] = []; - } - tokensPerChainID[token.chainID].push(token); - } - - const updated: TChainTokens = {}; - for (const [chainIDStr, tokens] of Object.entries(tokensPerChainID)) { - const chainID = Number(chainIDStr); - const chunks = []; - for (let i = 0; i < tokens.length; i += 5_000) { - chunks.push(tokens.slice(i, i + 5_000)); - } - - for (const chunkTokens of chunks) { - const [newRawData, err] = await getBalances(chainID || 1, userAddress, chunkTokens); - if (err) { - set_error(err as Error); - } - - if (toAddress(userAddress) !== data?.current?.address) { - data.current = { - address: toAddress(userAddress), - balances: {}, - nonce: 0 - }; - } - data.current.address = toAddress(userAddress); - for (const [address, element] of Object.entries(newRawData)) { - if (!updated[chainID]) { - updated[chainID] = {}; - } - updated[chainID][address] = element; - - if (!data.current.balances[chainID]) { - data.current.balances[chainID] = {}; - } - data.current.balances[chainID][address] = { - ...data.current.balances[chainID][address], - ...element - }; - } - data.current.nonce += 1; - } - - set_balances( - (b): TChainTokens => ({ - ...b, - [chainID]: { - ...(b[chainID] || {}), - ...data.current.balances[chainID] - } - }) - ); - set_status({...defaultStatus, isSuccess: true, isFetched: true}); - } - onLoadDone(); - - return updated; - }, [onLoadDone, onLoadStart, stringifiedTokens, userAddress]); - - /* 🔵 - Yearn Finance ****************************************************** - ** onUpdateSome takes a list of tokens and fetches the balances for each - ** token. Even if it's not optimized for performance, it should not be an - ** issue as it should only be used for a little list of tokens. - **************************************************************************/ - const onUpdateSome = useCallback( - async (tokenList: TUseBalancesTokens[]): Promise => { - set_status({ - ...defaultStatus, - isLoading: true, - isFetching: true, - isRefetching: defaultStatus.isFetched - }); - onLoadStart(); - const tokens = tokenList.filter(({address}: TUseBalancesTokens): boolean => !isZeroAddress(address)); - const tokensPerChainID: TNDict = {}; - for (const token of tokens) { - if (!tokensPerChainID[token.chainID]) { - tokensPerChainID[token.chainID] = []; - } - tokensPerChainID[token.chainID].push(token); - } - - const updated: TChainTokens = {}; - for (const [chainIDStr, tokens] of Object.entries(tokensPerChainID)) { - const chainID = Number(chainIDStr); - const chunks = []; - for (let i = 0; i < tokens.length; i += 2_000) { - chunks.push(tokens.slice(i, i + 2_000)); - } - - for (const chunkTokens of chunks) { - const [newRawData, err] = await getBalances(chainID || 1, toAddress(userAddress), chunkTokens); - if (err) { - set_error(err as Error); - } - if (toAddress(userAddress) !== data?.current?.address) { - data.current = { - address: toAddress(userAddress), - balances: {}, - nonce: 0 - }; - } - data.current.address = toAddress(userAddress); - - for (const [address, element] of Object.entries(newRawData)) { - if (!updated[chainID]) { - updated[chainID] = {}; - } - updated[chainID][address] = element; - - if (!data.current.balances[chainID]) { - data.current.balances[chainID] = {}; - } - data.current.balances[chainID][address] = { - ...data.current.balances[chainID][address], - ...element - }; - } - data.current.nonce += 1; - } - } - - set_balances( - (b): TChainTokens => ({ - ...b, - [chainID]: { - ...(b[chainID] || {}), - ...data.current.balances[chainID] - } - }) - ); - set_status({...defaultStatus, isSuccess: true, isFetched: true}); - onLoadDone(); - return updated; - }, - [onLoadDone, onLoadStart, userAddress, chainID] - ); - - const assignPrices = useCallback( - (_rawData: TChainTokens): TChainTokens => { - const newData = {..._rawData}; - for (const chainIDStr of Object.keys(newData)) { - const chainID = Number(chainIDStr); - for (const address of Object.keys(newData[chainID])) { - const tokenAddress = toAddress(address); - const rawPrice = toBigInt(props?.prices?.[tokenAddress]); - if (!newData[chainID]) { - newData[chainID] = {}; - } - newData[chainID][tokenAddress] = { - ...newData[chainID][tokenAddress], - price: toNormalizedBN(rawPrice, 6), - value: - Number(newData?.[chainID]?.[tokenAddress]?.balance?.normalized || 0) * - toNormalizedValue(rawPrice, 6) - }; - } - } - return newData; - }, - [props?.prices] - ); - - /* 🔵 - Yearn Finance ****************************************************** - ** Everytime the stringifiedTokens change, we need to update the balances. - ** This is the main hook and is optimized for performance, using a worker - ** to fetch the balances, preventing the UI to freeze. - **************************************************************************/ - useAsyncTrigger(async (): Promise => { - if (!userAddress) { - return; - } - set_status({ - ...defaultStatus, - isLoading: true, - isFetching: true, - isRefetching: defaultStatus.isFetched - }); - onLoadStart(); - - const tokens = (JSON.parse(stringifiedTokens) || []) as TUseBalancesTokens[]; - const tokensPerChainID: TNDict = {}; - for (const token of tokens) { - if (!tokensPerChainID[token.chainID]) { - tokensPerChainID[token.chainID] = []; - } - tokensPerChainID[token.chainID].push(token); - } - - for (const [chainIDStr, tokens] of Object.entries(tokensPerChainID)) { - const chainID = Number(chainIDStr); - const chunks = []; - for (let i = 0; i < tokens.length; i += 100) { - chunks.push(tokens.slice(i, i + 100)); - } - const allPromises = []; - for (const chunkTokens of chunks) { - allPromises.push( - getBalances(chainID, userAddress, chunkTokens).then(async ([newRawData, err]): Promise => { - updateBalancesCall(chainID, newRawData); - set_error(err); - }) - ); - } - await Promise.all(allPromises); - } - onLoadDone(); - set_status({...defaultStatus, isSuccess: true, isFetched: true}); - }, [stringifiedTokens, userAddress, onLoadStart, updateBalancesCall, onLoadDone]); - - const contextValue = useMemo( - (): TUseBalancesRes => ({ - data: assignPrices(balances || {}), - onUpdate: onUpdate, - onUpdateSome: onUpdateSome, - error, - isLoading: status.isLoading, - isFetching: status.isFetching, - isSuccess: status.isSuccess, - isError: status.isError, - isFetched: status.isFetched, - isRefetching: status.isRefetching, - status: status.isError - ? 'error' - : status.isLoading || status.isFetching - ? 'loading' - : status.isSuccess - ? 'success' - : 'unknown' - }), - [ - assignPrices, - balances, - error, - onUpdate, - onUpdateSome, - status.isError, - status.isFetched, - status.isFetching, - status.isLoading, - status.isRefetching, - status.isSuccess - ] - ); - - return contextValue; -} diff --git a/contexts/useTokenList.tsx b/contexts/useTokenList.tsx deleted file mode 100755 index d441333..0000000 --- a/contexts/useTokenList.tsx +++ /dev/null @@ -1,225 +0,0 @@ -import React, {createContext, useCallback, useContext, useMemo, useState} from 'react'; -import {useAsyncTrigger} from 'hooks/useAsyncTrigger'; -import axios from 'axios'; -import {useLocalStorageValue} from '@react-hookz/web'; -import {useChainID} from '@yearn-finance/web-lib/hooks/useChainID'; -import {toAddress} from '@yearn-finance/web-lib/utils/address'; -import {toNormalizedBN} from '@yearn-finance/web-lib/utils/format.bigNumber'; -import {TokenListHandlerPopover} from '@common/TokenList/TokenListHandlerPopover'; - -import type {AxiosResponse} from 'axios'; -import type {Dispatch, SetStateAction} from 'react'; -import type {TAddress, TDict} from '@yearn-finance/web-lib/types'; -import type {TToken, TTokenList} from '@types'; - -export type TTokenListProps = { - tokenList: TDict; - getToken: (tokenAddress: TAddress) => TToken | undefined; - set_tokenList: Dispatch>>; - openTokenListModal: () => void; -}; -const defaultProps: TTokenListProps = { - tokenList: {}, - getToken: (): TToken | undefined => undefined, - set_tokenList: (): void => undefined, - openTokenListModal: (): void => undefined -}; -const customDefaultList = { - name: 'Custom', - description: 'Custom token list', - timestamp: new Date().toISOString(), - logoURI: '', - uri: '', - keywords: [], - version: { - major: 1, - minor: 0, - patch: 0 - }, - tokens: [] -}; - -const TokenList = createContext(defaultProps); -export const TokenListContextApp = ({children}: {children: React.ReactElement}): React.ReactElement => { - const {safeChainID} = useChainID(); - const {value: extraTokenlist, set: set_extraTokenlist} = useLocalStorageValue( - `${process.env.PROJECT_SLUG}/extraTokenlists` - ); - const {value: extraTokens, set: set_extraTokens} = useLocalStorageValue( - `${process.env.PROJECT_SLUG}/extraTokens` - ); - const [tokenList, set_tokenList] = useState>({}); - const [tokenListExtra, set_tokenListExtra] = useState>({}); - const [tokenListCustom, set_tokenListCustom] = useState>({}); - - const [lists, set_lists] = useState([]); - const [extraLists, set_extraLists] = useState([]); - const [customLists, set_customLists] = useState(customDefaultList); - const [isTokenListModalOpen, set_isTokenListModalOpen] = useState(false); - - useAsyncTrigger(async (): Promise => { - const rootURI = `https://raw.githubusercontent.com/SmolDapp/tokenLists/main/lists/${safeChainID}`; - const tokenListURIs = [`${rootURI}/etherscan.json`, `${rootURI}/tokenlistooor.json`]; - const [fromEtherscan, fromSmol] = await Promise.allSettled( - tokenListURIs.map(async (eachURI: string): Promise => axios.get(eachURI)) - ); - const tokens: TTokenList['tokens'] = []; - const fromList: TTokenList[] = []; - if (fromEtherscan.status === 'fulfilled' && fromEtherscan.value.data?.tokens) { - tokens.push(...(fromEtherscan.value.data as TTokenList).tokens); - fromList.push({...(fromEtherscan.value.data as TTokenList), uri: tokenListURIs[0]}); - } - if (fromSmol.status === 'fulfilled' && fromSmol.value.data?.tokens) { - tokens.push(...(fromSmol.value.data as TTokenList).tokens); - fromList.push({...(fromSmol.value.data as TTokenList), uri: tokenListURIs[1]}); - } - - const tokenListTokens: TDict = {}; - for (const eachToken of tokens) { - if (!tokenListTokens[toAddress(eachToken.address)]) { - tokenListTokens[toAddress(eachToken.address)] = { - address: eachToken.address, - name: eachToken.name, - symbol: eachToken.symbol, - decimals: eachToken.decimals, - chainID: eachToken.chainId, - logoURI: eachToken.logoURI, - value: 0, - price: toNormalizedBN(0), - balance: toNormalizedBN(0) - }; - } - } - set_tokenList(tokenListTokens); - set_lists(fromList); - }, [safeChainID]); - - useAsyncTrigger(async (): Promise => { - const tokenListTokens: TDict = {}; - const fromList: TTokenList[] = []; - for (const eachURI of extraTokenlist || []) { - const [fromUserList] = await Promise.allSettled([axios.get(eachURI)]); - if (fromUserList.status === 'fulfilled') { - fromList.push({...(fromUserList.value.data as TTokenList), uri: eachURI}); - const {tokens} = fromUserList.value.data; - for (const eachToken of tokens) { - if (!tokenListTokens[toAddress(eachToken.address)]) { - tokenListTokens[toAddress(eachToken.address)] = { - address: eachToken.address, - name: eachToken.name, - symbol: eachToken.symbol, - decimals: eachToken.decimals, - chainID: eachToken.chainId, - logoURI: eachToken.logoURI, - value: 0, - price: toNormalizedBN(0), - balance: toNormalizedBN(0) - }; - } - } - } - } - set_tokenListExtra(tokenListTokens); - set_extraLists(fromList); - }, [extraTokenlist]); - - useAsyncTrigger(async (): Promise => { - if (extraTokens === undefined) { - return; - } - if ((extraTokens || []).length > 0) { - const tokenListTokens: TDict = {}; - for (const eachToken of extraTokens || []) { - if (!tokenListTokens[toAddress(eachToken.address)]) { - tokenListTokens[toAddress(eachToken.address)] = { - address: eachToken.address, - name: eachToken.name, - symbol: eachToken.symbol, - decimals: eachToken.decimals, - chainID: eachToken.chainId, - logoURI: eachToken.logoURI, - value: 0, - price: toNormalizedBN(0), - balance: toNormalizedBN(0) - }; - } - } - set_tokenListCustom(tokenListTokens); - set_customLists({...customDefaultList, tokens: extraTokens}); - } - }, [extraTokens]); - - const aggregatedTokenList = useMemo( - () => ({...tokenList, ...tokenListExtra, ...tokenListCustom}), - [tokenList, tokenListExtra, tokenListCustom] - ); - - const getToken = useCallback( - (tokenAddress: TAddress): TToken => { - const fromTokenList = aggregatedTokenList[toAddress(tokenAddress)]; - if (fromTokenList) { - return fromTokenList; - } - return {} as TToken; - }, - [aggregatedTokenList] - ); - - const contextValue = useMemo( - (): TTokenListProps => ({ - tokenList: aggregatedTokenList, - set_tokenList, - getToken, - openTokenListModal: (): void => set_isTokenListModalOpen(true) - }), - [aggregatedTokenList, getToken] - ); - - return ( - - {children} - { - const tokenListTokens: TDict = {}; - for (const eachToken of list.tokens) { - if (!tokenListTokens[toAddress(eachToken.address)]) { - tokenListTokens[toAddress(eachToken.address)] = { - address: eachToken.address, - name: eachToken.name, - symbol: eachToken.symbol, - decimals: eachToken.decimals, - chainID: eachToken.chainId, - logoURI: eachToken.logoURI, - value: 0, - price: toNormalizedBN(0), - balance: toNormalizedBN(0) - }; - } - } - set_tokenList(prevTokenList => ({...prevTokenList, ...tokenListTokens})); - set_lists((prevLists: TTokenList[]): TTokenList[] => [...prevLists, list]); - set_extraTokenlist([...(extraTokenlist || []), list.uri]); - }} - onAddToken={(newToken: TToken): void => { - set_tokenList(prevTokenList => ({...prevTokenList, [newToken.address]: newToken})); - set_extraTokens([ - ...(extraTokens || []), - { - address: newToken.address, - name: newToken.name, - symbol: newToken.symbol, - decimals: newToken.decimals, - logoURI: newToken.logoURI, - chainId: newToken.chainID - } - ]); - }} - /> - - ); -}; - -export const useTokenList = (): TTokenListProps => useContext(TokenList); diff --git a/contexts/useWallet.tsx b/contexts/useWallet.tsx deleted file mode 100755 index ba2877e..0000000 --- a/contexts/useWallet.tsx +++ /dev/null @@ -1,168 +0,0 @@ -import React, {createContext, memo, useCallback, useContext, useMemo, useState} from 'react'; -import {useTokenList} from 'contexts/useTokenList'; -import {useLocalStorageValue, useMountEffect, useUpdateEffect} from '@react-hookz/web'; -import {useWeb3} from '@yearn-finance/web-lib/contexts/useWeb3'; -import {useBalances} from '@yearn-finance/web-lib/hooks/useBalances'; -import {useChainID} from '@yearn-finance/web-lib/hooks/useChainID'; -import {toAddress} from '@yearn-finance/web-lib/utils/address'; -import {ETH_TOKEN_ADDRESS} from '@yearn-finance/web-lib/utils/constants'; -import {toNormalizedBN} from '@yearn-finance/web-lib/utils/format.bigNumber'; -import {getNetwork} from '@yearn-finance/web-lib/utils/wagmi/utils'; - -import type {Dispatch, ReactElement, SetStateAction} from 'react'; -import type {TUseBalancesTokens} from '@yearn-finance/web-lib/hooks/useBalances'; -import type {TAddress, TDict} from '@yearn-finance/web-lib/types'; -import type {TBalanceData} from '@yearn-finance/web-lib/types/hooks'; -import type {TNormalizedBN} from '@yearn-finance/web-lib/utils/format.bigNumber'; -import type {TToken} from '@types'; - -export type TWalletContext = { - balances: TDict; - isLoading: boolean; - walletProvider: string; - getBalance: (tokenAddress: TAddress) => TNormalizedBN; - refresh: (tokenList?: TUseBalancesTokens[], shouldSaveInStorage?: boolean) => Promise>; - refreshWithList: (tokenList: TDict) => Promise>; - set_walletProvider: Dispatch>; -}; - -const defaultProps = { - balances: {}, - getBalance: (): TNormalizedBN => toNormalizedBN(0), - isLoading: true, - walletProvider: 'NONE', - refresh: async (): Promise> => ({}), - refreshWithList: async (): Promise> => ({}), - set_walletProvider: (): void => undefined -}; - -/* 🔵 - Yearn Finance ********************************************************** - ** This context controls most of the user's wallet data we may need to - ** interact with our app, aka mostly the balances and the token prices. - ******************************************************************************/ -const WalletContext = createContext(defaultProps); -export const WalletContextApp = memo(function WalletContextApp({children}: {children: ReactElement}): ReactElement { - const {tokenList} = useTokenList(); - const {isActive} = useWeb3(); - const {safeChainID} = useChainID(); - const [walletProvider, set_walletProvider] = useState('NONE'); - const {value: extraTokens, set: saveExtraTokens} = useLocalStorageValue( - `${process.env.PROJECT_SLUG}/tokens`, - {defaultValue: []} - ); - - const availableTokens = useMemo((): TUseBalancesTokens[] => { - const fromTokenList = Object.values(tokenList); - const tokens: TUseBalancesTokens[] = []; - fromTokenList - .filter((token): boolean => token.chainID === safeChainID) - .forEach((token): void => { - tokens.push({ - token: toAddress(token.address), - decimals: Number(token.decimals), - name: token.name, - symbol: token.symbol - }); - }); - const {wrappedToken} = getNetwork(safeChainID).contracts; - if (wrappedToken) { - tokens.push({ - token: toAddress(ETH_TOKEN_ADDRESS), - decimals: wrappedToken.decimals, - name: wrappedToken.coinName, - symbol: wrappedToken.coinSymbol - }); - } - return tokens; - }, [safeChainID, tokenList]); - - const {data: balances, update, updateSome, isLoading} = useBalances({tokens: availableTokens}); - - const onRefresh = useCallback( - async (tokenToUpdate?: TUseBalancesTokens[], shouldSaveInStorage?: boolean): Promise> => { - if (tokenToUpdate) { - const updatedBalances = await updateSome(tokenToUpdate); - if (shouldSaveInStorage) { - saveExtraTokens([...(extraTokens || []), ...tokenToUpdate]); - } - return updatedBalances; - } - const updatedBalances = await update(); - return updatedBalances; - }, - [update, updateSome, saveExtraTokens, extraTokens] - ); - - const onRefreshWithList = useCallback( - async (newTokenList: TDict): Promise> => { - const withDefaultTokens = [...Object.values(newTokenList)]; - const tokens: TUseBalancesTokens[] = []; - withDefaultTokens - .filter((token): boolean => token.chainID === safeChainID) - .forEach((token): void => { - tokens.push({ - token: toAddress(token.address), - decimals: Number(token.decimals), - name: token.name, - symbol: token.symbol - }); - }); - const tokensToFetch = tokens.filter((token): boolean => { - return !availableTokens.find((availableToken): boolean => availableToken.token === token.token); - }); - if (tokensToFetch.length > 0) { - return await onRefresh(tokensToFetch); - } - return balances; - }, - [balances, onRefresh, safeChainID, availableTokens] - ); - - const onLoadExtraTokens = useCallback(async (): Promise => { - if (extraTokens) { - await updateSome(extraTokens); - } - }, [extraTokens, updateSome]); - - useMountEffect((): void => { - if (!isActive) { - set_walletProvider('NONE'); - } - }); - - useUpdateEffect((): void => { - if (isActive) { - onLoadExtraTokens(); - } - }, [isActive, onLoadExtraTokens]); - - const getBalance = useCallback( - (tokenAddress: TAddress): TNormalizedBN => { - return toNormalizedBN( - balances?.[toAddress(tokenAddress)]?.raw || 0, - balances?.[toAddress(tokenAddress)]?.decimals || 18 - ); - }, - [balances] - ); - - /* 🔵 - Yearn Finance ****************************************************** - ** Setup and render the Context provider to use in the app. - ***************************************************************************/ - const contextValue = useMemo( - (): TWalletContext => ({ - balances: balances, - getBalance, - isLoading: isLoading || false, - refresh: onRefresh, - refreshWithList: onRefreshWithList, - walletProvider, - set_walletProvider - }), - [balances, isLoading, onRefresh, onRefreshWithList, walletProvider, getBalance] - ); - - return {children}; -}); - -export const useWallet = (): TWalletContext => useContext(WalletContext); diff --git a/hooks/useAsyncTrigger.ts b/hooks/useAsyncTrigger.ts deleted file mode 100644 index ba51b47..0000000 --- a/hooks/useAsyncTrigger.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* eslint-disable react-hooks/exhaustive-deps */ - -import {type DependencyList, useCallback, useEffect} from 'react'; - -//Should be useAsyncEffect, but exhaustive-deps is messing with this. -function useAsyncTrigger(effect: () => Promise, deps: DependencyList): () => Promise { - const asyncEffectInCallback = useCallback(async (): Promise => { - effect(); - }, [...deps]); - - useEffect((): void => { - asyncEffectInCallback(); - }, [asyncEffectInCallback]); - - return asyncEffectInCallback; -} - -export {useAsyncTrigger}; diff --git a/package.json b/package.json index 0664a84..6a8ad1e 100644 --- a/package.json +++ b/package.json @@ -15,61 +15,63 @@ "lint": "eslint . --ext .js,.jsx,.ts,.tsx" }, "dependencies": { + "@builtbymom/web3": "^0.0.70", "@closeio/use-abortable-effect": "^1.0.0", - "@headlessui/react": "^1.7.17", - "@rainbow-me/rainbowkit": "^1.2.0", - "@react-hookz/web": "^23.1.0", - "@tailwindcss/forms": "^0.5.6", - "@wagmi/core": "^1.4.3", - "@yearn-finance/web-lib": "^3.0.58", - "axios": "^1.6.1", - "framer-motion": "^10.16.4", - "next": "^14.0.2", + "@headlessui/react": "^1.7.18", + "@rainbow-me/rainbowkit": "^2.0.5", + "@react-hookz/web": "^24.0.4", + "@tailwindcss/forms": "^0.5.7", + "@tailwindcss/typography": "^0.5.12", + "@wagmi/core": "^2.6.16", + "axios": "^1.6.8", + "framer-motion": "^11.0.28", + "next": "^13.5.4", "next-pwa": "^5.6.0", - "next-seo": "^6.4.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "swr": "^2.2.4", - "tailwindcss": "^3.3.5", - "viem": "^1.16.6", - "wagmi": "^1.4.5" + "react-hot-toast": "^2.4.1", + "swr": "^2.2.5", + "tailwindcss": "^3.4.3", + "vaul": "^0.9.0", + "viem": "^2.9.16", + "wagmi": "^2.5.19" }, "devDependencies": { - "@commitlint/cli": "^18.4.1", - "@commitlint/config-conventional": "^18.4.0", + "@commitlint/cli": "^19.2.1", + "@commitlint/config-conventional": "^19.1.0", "@total-typescript/ts-reset": "^0.5.1", - "@types/node": "^20.9.0", + "@types/node": "^20.12.7", "@types/nprogress": "^0.2.3", - "@types/react": "^18.2.37", - "@types/react-dom": "^18.2.15", - "@typescript-eslint/eslint-plugin": "^6.10.0", - "@typescript-eslint/parser": "^6.10.0", - "autoprefixer": "^10.4.16", + "@types/react": "^18.2.77", + "@types/react-dom": "^18.2.25", + "@typescript-eslint/eslint-plugin": "^7.6.0", + "@typescript-eslint/parser": "^7.6.0", + "autoprefixer": "^10.4.19", "babel-loader": "^9.1.3", - "bun-types": "^1.0.11", - "eslint": "^8.53.0", - "eslint-config-next": "^14.0.2", - "eslint-config-prettier": "^9.0.0", + "bun-types": "^1.1.3", + "eslint": "^9.0.0", + "eslint-config-next": "^14.2.0", + "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-brackets": "^0.1.3", - "eslint-plugin-import": "^2.29.0", - "eslint-plugin-react": "^7.33.2", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-simple-import-sort": "^10.0.0", - "eslint-plugin-tailwindcss": "^3.13.0", - "eslint-plugin-unused-imports": "^3.0.0", - "husky": "^8.0.3", - "lint-staged": "^15.0.2", + "eslint-plugin-simple-import-sort": "^12.0.0", + "eslint-plugin-tailwindcss": "^3.15.1", + "eslint-plugin-unused-imports": "^3.1.0", + "husky": "^9.0.11", + "lint-staged": "^15.2.2", "next-transpile-modules": "^10.0.1", - "postcss": "^8.4.31", - "postcss-import": "^15.1.0", - "postcss-nesting": "^12.0.1", - "prettier": "^3.0.3", - "sass": "^1.69.5", - "sharp": "^0.32.6", - "stylelint": "^15.11.0", - "stylelint-config-standard": "^34.0.0", - "ts-loader": "^9.5.0", - "typescript": "^5.2.2" + "postcss": "^8.4.38", + "postcss-import": "^16.1.0", + "postcss-nesting": "^12.1.1", + "prettier": "^3.2.5", + "sass": "^1.75.0", + "sharp": "^0.33.3", + "stylelint": "^16.3.1", + "stylelint-config-standard": "^36.0.0", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5" } } diff --git a/pages/_app.tsx b/pages/_app.tsx index 1250ac8..287f85b 100755 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -1,12 +1,14 @@ import React, {Fragment} from 'react'; +import {Toaster} from 'react-hot-toast'; import {Inter} from 'next/font/google'; -import Image from 'next/image'; -import {TokenListContextApp} from 'contexts/useTokenList'; -import {WalletContextApp} from 'contexts/useWallet'; -import {mainnet} from 'wagmi'; -import {WithYearn} from '@yearn-finance/web-lib/contexts/WithYearn'; -import {localhost} from '@yearn-finance/web-lib/utils/wagmi/networks'; -import {NetworkSelector, WalletSelector} from '@common/HeaderElements'; +import Head from 'next/head'; +import {mainnet} from 'viem/chains'; +import {WalletContextApp} from '@builtbymom/web3/contexts/useWallet'; +import {WithMom} from '@builtbymom/web3/contexts/WithMom'; +import {localhost} from '@builtbymom/web3/utils/wagmi'; +import {IconCheck} from '@icons/IconCheck'; +import {IconCircleCross} from '@icons/IconCircleCross'; +import {Header} from '@common/Header'; import Meta from '@common/Meta'; import type {AppProps} from 'next/app'; @@ -21,64 +23,55 @@ const inter = Inter({ variable: '--inter-font' }); -function Header(): ReactElement { - return ( -
-
-
-
-
- {''} -
-
-
- - -
-
-
-
- ); -} - function MyApp({Component, ...props}: AppProps): ReactElement { return ( <> - + + + - - - - -
-
- -
- - - - + + + +
+
+ +
+ + + + , + iconTheme: { + primary: 'black', + secondary: '#F1EBD9' + } + }, + error: { + icon: , + iconTheme: { + primary: 'black', + secondary: '#F1EBD9' + } + } + }} + position={'top-right'} + /> ); } - export default MyApp; diff --git a/utils/actions.ts b/utils/actions.ts index 96b435c..d28e2f4 100644 --- a/utils/actions.ts +++ b/utils/actions.ts @@ -1,13 +1,11 @@ -import {erc20ABI, readContract} from '@wagmi/core'; -import {MAX_UINT_256} from '@yearn-finance/web-lib/utils/constants'; -import {toBigInt} from '@yearn-finance/web-lib/utils/format.bigNumber'; -import {handleTx, toWagmiProvider} from '@yearn-finance/web-lib/utils/wagmi/provider'; -import {assertAddress} from '@yearn-finance/web-lib/utils/wagmi/utils'; +import {erc20Abi} from 'viem'; +import {assertAddress, MAX_UINT_256, toAddress, toBigInt} from '@builtbymom/web3/utils'; +import {handleTx, retrieveConfig, toWagmiProvider} from '@builtbymom/web3/utils/wagmi'; +import {readContract} from '@wagmi/core'; import type {Connector} from 'wagmi'; -import type {TAddress} from '@yearn-finance/web-lib/types'; -import type {TWriteTransaction} from '@yearn-finance/web-lib/utils/wagmi/provider'; -import type {TTxResponse} from '@yearn-finance/web-lib/utils/web3/transaction'; +import type {TAddress} from '@builtbymom/web3/types'; +import type {TTxResponse, TWriteTransaction} from '@builtbymom/web3/utils/wagmi'; //Because USDT do not return a boolean on approve, we need to use this ABI const ALTERNATE_ERC20_APPROVE_ABI = [ @@ -38,9 +36,9 @@ type TIsApprovedERC20 = { }; export async function isApprovedERC20(props: TIsApprovedERC20): Promise { const wagmiProvider = await toWagmiProvider(props.connector); - const result = await readContract({ + const result = await readContract(retrieveConfig(), { ...wagmiProvider, - abi: erc20ABI, + abi: erc20Abi, chainId: props.chainID, address: props.contractAddress, functionName: 'allowance', @@ -66,10 +64,11 @@ export async function approveERC20(props: TApproveERC20): Promise { props.onTrySomethingElse = async (): Promise => { assertAddress(props.spenderAddress, 'spenderAddress'); return await handleTx(props, { - address: props.contractAddress, + address: toAddress(props.contractAddress), chainId: props.chainID, abi: ALTERNATE_ERC20_APPROVE_ABI, functionName: 'approve', + confirmation: 1, args: [props.spenderAddress, props.amount] }); }; @@ -77,8 +76,9 @@ export async function approveERC20(props: TApproveERC20): Promise { return await handleTx(props, { address: props.contractAddress, chainId: props.chainID, - abi: erc20ABI, + abi: erc20Abi, functionName: 'approve', + confirmation: 1, args: [props.spenderAddress, props.amount] }); } diff --git a/utils/tools.ens.ts b/utils/tools.ens.ts deleted file mode 100644 index 57cbc38..0000000 --- a/utils/tools.ens.ts +++ /dev/null @@ -1,30 +0,0 @@ -import {gql, request} from 'graphql-request'; -import {isAddress, toHex} from 'viem'; -import {fetchEnsAddress} from '@wagmi/core'; -import {toAddress} from '@yearn-finance/web-lib/utils/address'; - -import type {TAddress} from '@yearn-finance/web-lib/types'; - -export async function retrieveENSNameFromNode(tokenId: bigint): Promise { - const labelHash = toHex(tokenId, {size: 32}); - const url = 'https://api.thegraph.com/subgraphs/name/ensdomains/ens'; - const GET_LABEL_NAME = gql` - query { - domains(first:1, where:{labelhash:"${labelHash}"}) { - labelName - } - }`; - - const name = (await request(url, GET_LABEL_NAME)) as {domains: {labelName: string}[]}; - return name.domains[0].labelName; -} - -export async function checkENSValidity(ens: string): Promise<[TAddress, boolean]> { - const resolvedAddress = await fetchEnsAddress({name: ens, chainId: 1}); - if (resolvedAddress) { - if (isAddress(resolvedAddress)) { - return [toAddress(resolvedAddress), true]; - } - } - return [toAddress(), false]; -} diff --git a/utils/tools.lens.ts b/utils/tools.lens.ts deleted file mode 100644 index f6da71c..0000000 --- a/utils/tools.lens.ts +++ /dev/null @@ -1,49 +0,0 @@ -import {isAddress} from 'viem'; -import {toAddress} from '@yearn-finance/web-lib/utils/address'; -import {lensProtocolFetcher} from '@yearn-finance/web-lib/utils/fetchers'; - -import type {TAddress} from '@yearn-finance/web-lib/types'; - -type THandleFromAddress = {defaultProfile: {handle: string}}; -async function getHandleFromAddress(address: TAddress): Promise { - const {defaultProfile}: THandleFromAddress = await lensProtocolFetcher( - `{defaultProfile(request: {ethereumAddress: "${address?.toLowerCase()}"}) {handle}}` - ); - return defaultProfile?.handle || ''; -} - -type TAddressFromHandle = {profile: {ownedBy: TAddress}}; -async function getAddressFromHandle(handle: string): Promise { - const {profile}: TAddressFromHandle = await lensProtocolFetcher( - `{profile(request: {handle: "${handle?.toLowerCase()}"}) {ownedBy}}` - ); - return profile?.ownedBy ? toAddress(profile?.ownedBy) : ''; -} - -export function isLensNFT(nftName: string): boolean { - nftName = nftName.toLowerCase(); - - if ( - nftName.includes('lens-Follower') || - nftName.includes('lensprotocol') || - nftName.includes('lens protocol') || - nftName.includes('lens-collect') || - nftName.includes("lens's follower nft") - ) { - return true; - } - return false; -} - -export async function checkLensValidity(lens: string): Promise<[TAddress, boolean]> { - const resolvedName = await lensProtocol.getAddressFromHandle(lens); - if (resolvedName) { - if (isAddress(resolvedName)) { - return [toAddress(resolvedName), true]; - } - } - return [toAddress(), false]; -} - -const lensProtocol = {getHandleFromAddress, getAddressFromHandle}; -export default lensProtocol; diff --git a/utils/types.tsx b/utils/types.tsx deleted file mode 100644 index 32e1a1d..0000000 --- a/utils/types.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import type {Dispatch, SetStateAction} from 'react'; -import type {TAddress, TDict, TNDict} from '@yearn-finance/web-lib/types'; -import type {TNormalizedBN} from '@yearn-finance/web-lib/utils/format.bigNumber'; - -export type TTokenList = { - name: string; - description: string; - timestamp: string; - logoURI: string; - uri: string; - keywords: string[]; - version: { - major: number; - minor: number; - patch: number; - }; - tokens: { - address: TAddress; - name: string; - symbol: string; - decimals: number; - chainId: number; - logoURI?: string; - }[]; -}; - -export type TToken = { - address: TAddress; - name: string; - symbol: string; - decimals: number; - chainID: number; - logoURI?: string; - value: number; - price: TNormalizedBN; - balance: TNormalizedBN; -}; -export type TChainTokens = TNDict>; - -export type TComboboxAddressInput = { - value: TToken | null; - possibleValues: TDict; - onChangeValue: (value: TToken) => void; - onAddValue: Dispatch>>; - shouldSort?: boolean; -};