Change address tx by nonce url to addressOrName?nonce=? format
This commit is contained in:
parent
20fc443009
commit
e6d60f1fcd
@ -26,6 +26,13 @@ import { useMultipleMetadata } from "./sourcify/useSourcify";
|
|||||||
import { ChecksummedAddress } from "./types";
|
import { ChecksummedAddress } from "./types";
|
||||||
import { useAddressesWithCode } from "./useErigonHooks";
|
import { useAddressesWithCode } from "./useErigonHooks";
|
||||||
|
|
||||||
|
const AddressTransactionByNonce = React.lazy(
|
||||||
|
() =>
|
||||||
|
import(
|
||||||
|
/* webpackChunkName: "addresstxbynonce", webpackPrefetch: true */ "./AddressTransactionByNonce"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
const Address: React.FC = () => {
|
const Address: React.FC = () => {
|
||||||
const { provider } = useContext(RuntimeContext);
|
const { provider } = useContext(RuntimeContext);
|
||||||
const { addressOrName, direction } = useParams();
|
const { addressOrName, direction } = useParams();
|
||||||
@ -79,6 +86,23 @@ const Address: React.FC = () => {
|
|||||||
? metadatas[checksummedAddress]
|
? metadatas[checksummedAddress]
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
||||||
|
// Search address by nonce === transaction @ nonce
|
||||||
|
const rawNonce = searchParams.get("nonce");
|
||||||
|
if (rawNonce !== null) {
|
||||||
|
let nonce: number | undefined = undefined;
|
||||||
|
try {
|
||||||
|
nonce = parseInt(rawNonce);
|
||||||
|
} catch (err) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<AddressTransactionByNonce
|
||||||
|
checksummedAddress={checksummedAddress}
|
||||||
|
nonce={nonce}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<StandardFrame>
|
<StandardFrame>
|
||||||
{error ? (
|
{error ? (
|
||||||
|
@ -1,85 +0,0 @@
|
|||||||
import React, { useCallback, useContext } from "react";
|
|
||||||
import { useNavigate, useParams, useSearchParams } from "react-router-dom";
|
|
||||||
import StandardFrame from "./StandardFrame";
|
|
||||||
import AddressOrENSNameNotFound from "./components/AddressOrENSNameNotFound";
|
|
||||||
import AddressOrENSNameInvalidNonce from "./components/AddressOrENSNameInvalidNonce";
|
|
||||||
import { ChecksummedAddress } from "./types";
|
|
||||||
import { transactionURL } from "./url";
|
|
||||||
import { useTransactionBySenderAndNonce } from "./useErigonHooks";
|
|
||||||
import { useAddressOrENS } from "./useResolvedAddresses";
|
|
||||||
import { RuntimeContext } from "./useRuntime";
|
|
||||||
|
|
||||||
const AddressTransaction: React.FC = () => {
|
|
||||||
const { provider } = useContext(RuntimeContext);
|
|
||||||
const navigate = useNavigate();
|
|
||||||
const { addressOrName } = useParams();
|
|
||||||
if (addressOrName === undefined) {
|
|
||||||
throw new Error("addressOrName couldn't be undefined here");
|
|
||||||
}
|
|
||||||
|
|
||||||
const [searchParams] = useSearchParams();
|
|
||||||
const urlFixer = useCallback(
|
|
||||||
(address: ChecksummedAddress) => {
|
|
||||||
navigate(`/address/${address}/tx?${searchParams.toString()}`, {
|
|
||||||
replace: true,
|
|
||||||
});
|
|
||||||
},
|
|
||||||
[navigate, searchParams]
|
|
||||||
);
|
|
||||||
const [checksummedAddress, , error] = useAddressOrENS(
|
|
||||||
addressOrName,
|
|
||||||
urlFixer
|
|
||||||
);
|
|
||||||
|
|
||||||
const rawNonce = searchParams.get("nonce");
|
|
||||||
let nonce: number | undefined = undefined;
|
|
||||||
try {
|
|
||||||
nonce = rawNonce === null ? undefined : parseInt(rawNonce);
|
|
||||||
} catch (err) {
|
|
||||||
// ignore
|
|
||||||
}
|
|
||||||
|
|
||||||
const txHash = useTransactionBySenderAndNonce(
|
|
||||||
provider,
|
|
||||||
checksummedAddress,
|
|
||||||
nonce
|
|
||||||
);
|
|
||||||
|
|
||||||
if (error) {
|
|
||||||
return (
|
|
||||||
<StandardFrame>
|
|
||||||
<AddressOrENSNameNotFound addressOrENSName={addressOrName} />
|
|
||||||
</StandardFrame>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (checksummedAddress !== undefined && rawNonce === null) {
|
|
||||||
return (
|
|
||||||
<StandardFrame>
|
|
||||||
<AddressOrENSNameInvalidNonce
|
|
||||||
addressOrENSName={checksummedAddress}
|
|
||||||
nonce={"undefined"}
|
|
||||||
/>
|
|
||||||
</StandardFrame>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
checksummedAddress !== undefined &&
|
|
||||||
nonce !== undefined &&
|
|
||||||
txHash === null
|
|
||||||
) {
|
|
||||||
return (
|
|
||||||
<StandardFrame>
|
|
||||||
<AddressOrENSNameInvalidNonce
|
|
||||||
addressOrENSName={checksummedAddress}
|
|
||||||
nonce={nonce.toString()}
|
|
||||||
/>
|
|
||||||
</StandardFrame>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (txHash) {
|
|
||||||
navigate(transactionURL(txHash));
|
|
||||||
}
|
|
||||||
return <StandardFrame />;
|
|
||||||
};
|
|
||||||
|
|
||||||
export default AddressTransaction;
|
|
57
src/AddressTransactionByNonce.tsx
Normal file
57
src/AddressTransactionByNonce.tsx
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
import React, { useContext } from "react";
|
||||||
|
import { useNavigate } from "react-router-dom";
|
||||||
|
import StandardFrame from "./StandardFrame";
|
||||||
|
import AddressOrENSNameInvalidNonce from "./components/AddressOrENSNameInvalidNonce";
|
||||||
|
import { ChecksummedAddress } from "./types";
|
||||||
|
import { transactionURL } from "./url";
|
||||||
|
import { useTransactionBySenderAndNonce } from "./useErigonHooks";
|
||||||
|
import { RuntimeContext } from "./useRuntime";
|
||||||
|
|
||||||
|
type AddressTransactionByNonceProps = {
|
||||||
|
checksummedAddress: ChecksummedAddress | undefined;
|
||||||
|
nonce: number | undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
const AddressTransactionByNonce: React.FC<AddressTransactionByNonceProps> = ({
|
||||||
|
checksummedAddress,
|
||||||
|
nonce,
|
||||||
|
}) => {
|
||||||
|
const { provider } = useContext(RuntimeContext);
|
||||||
|
const txHash = useTransactionBySenderAndNonce(
|
||||||
|
provider,
|
||||||
|
checksummedAddress,
|
||||||
|
nonce
|
||||||
|
);
|
||||||
|
const navigate = useNavigate();
|
||||||
|
|
||||||
|
if (checksummedAddress !== undefined && nonce === undefined) {
|
||||||
|
return (
|
||||||
|
<StandardFrame>
|
||||||
|
<AddressOrENSNameInvalidNonce
|
||||||
|
addressOrENSName={checksummedAddress}
|
||||||
|
nonce={"undefined"}
|
||||||
|
/>
|
||||||
|
</StandardFrame>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
checksummedAddress !== undefined &&
|
||||||
|
nonce !== undefined &&
|
||||||
|
txHash === null
|
||||||
|
) {
|
||||||
|
return (
|
||||||
|
<StandardFrame>
|
||||||
|
<AddressOrENSNameInvalidNonce
|
||||||
|
addressOrENSName={checksummedAddress}
|
||||||
|
nonce={nonce.toString()}
|
||||||
|
/>
|
||||||
|
</StandardFrame>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (txHash) {
|
||||||
|
navigate(transactionURL(txHash));
|
||||||
|
}
|
||||||
|
return <StandardFrame />;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default AddressTransactionByNonce;
|
10
src/App.tsx
10
src/App.tsx
@ -21,12 +21,6 @@ const Address = React.lazy(
|
|||||||
() =>
|
() =>
|
||||||
import(/* webpackChunkName: "address", webpackPrefetch: true */ "./Address")
|
import(/* webpackChunkName: "address", webpackPrefetch: true */ "./Address")
|
||||||
);
|
);
|
||||||
const AddressTransaction = React.lazy(
|
|
||||||
() =>
|
|
||||||
import(
|
|
||||||
/* webpackChunkName: "addresstx", webpackPrefetch: true */ "./AddressTransaction"
|
|
||||||
)
|
|
||||||
);
|
|
||||||
const Transaction = React.lazy(
|
const Transaction = React.lazy(
|
||||||
() =>
|
() =>
|
||||||
import(/* webpackChunkName: "tx", webpackPrefetch: true */ "./Transaction")
|
import(/* webpackChunkName: "tx", webpackPrefetch: true */ "./Transaction")
|
||||||
@ -67,10 +61,6 @@ const App = () => {
|
|||||||
path="address/:addressOrName/*"
|
path="address/:addressOrName/*"
|
||||||
element={<Address />}
|
element={<Address />}
|
||||||
/>
|
/>
|
||||||
<Route
|
|
||||||
path="address/:addressOrName/tx/*"
|
|
||||||
element={<AddressTransaction />}
|
|
||||||
/>
|
|
||||||
<Route path="*" element={<Home />} />
|
<Route path="*" element={<Home />} />
|
||||||
</Route>
|
</Route>
|
||||||
</Routes>
|
</Routes>
|
||||||
|
Loading…
Reference in New Issue
Block a user