import React, { useEffect, useContext, useCallback } from "react"; import { useParams, useNavigate, Routes, Route, useSearchParams, } from "react-router-dom"; import { Tab } from "@headlessui/react"; import Blockies from "react-blockies"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faCircleNotch } from "@fortawesome/free-solid-svg-icons/faCircleNotch"; import { faQuestionCircle } from "@fortawesome/free-regular-svg-icons/faQuestionCircle"; import StandardFrame from "./StandardFrame"; import StandardSubtitle from "./StandardSubtitle"; import Copy from "./components/Copy"; import NavTab from "./components/NavTab"; import SourcifyLogo from "./sourcify/SourcifyLogo"; import AddressTransactionResults from "./address/AddressTransactionResults"; import Contracts from "./address/Contracts"; import { RuntimeContext } from "./useRuntime"; import { useAppConfigContext } from "./useAppConfig"; import { useAddressOrENSFromURL } from "./useResolvedAddresses"; import { useSingleMetadata } from "./sourcify/useSourcify"; import { ChecksummedAddress } from "./types"; const AddressTransactions: React.FC = () => { const { provider } = useContext(RuntimeContext); const { addressOrName, direction } = useParams(); if (addressOrName === undefined) { throw new Error("addressOrName couldn't be undefined here"); } const navigate = useNavigate(); const [searchParams] = useSearchParams(); const urlFixer = useCallback( (address: ChecksummedAddress) => { navigate( `/address/${address}${ direction ? "/" + direction : "" }?${searchParams.toString()}`, { replace: true } ); }, [navigate, direction, searchParams] ); const [checksummedAddress, isENS, error] = useAddressOrENSFromURL( addressOrName, urlFixer ); useEffect(() => { if (isENS || checksummedAddress === undefined) { document.title = `Address ${addressOrName} | Otterscan`; } else { document.title = `Address ${checksummedAddress} | Otterscan`; } }, [addressOrName, checksummedAddress, isENS]); const { sourcifySource } = useAppConfigContext(); const addressMetadata = useSingleMetadata( checksummedAddress, provider?.network.chainId, sourcifySource ); return ( {error ? ( "{addressOrName}" is not an ETH address or ENS name. ) : ( checksummedAddress && ( <>
Address {checksummedAddress} {isENS && ( ENS: {addressOrName} )}
Overview Contract {addressMetadata === undefined ? ( ) : addressMetadata === null ? ( ) : ( )} } /> } /> ) )}
); }; export default AddressTransactions;