Skip to content

Commit f417539

Browse files
committed
Turns transaction polling to a custom hook for use on single transaction page and list
1 parent 6ebd3bf commit f417539

File tree

3 files changed

+43
-21
lines changed

3 files changed

+43
-21
lines changed

renderer/components/NoteRow/NoteRow.tsx

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import type {
55
TransactionStatus,
66
TransactionType,
77
} from "@ironfish/sdk";
8-
import { useState, useEffect, ReactNode, useMemo } from "react";
8+
import { ReactNode, useMemo } from "react";
99
import { MessageDescriptor, useIntl } from "react-intl";
1010

11-
import { trpcReact } from "@/providers/TRPCProvider";
11+
import { useTransactionPolling } from "@/hooks/useTransactionPolling";
1212
import { MaybeLink } from "@/ui/ChakraLink/ChakraLink";
1313
import { COLORS } from "@/ui/colors";
1414
import { ShadowCard } from "@/ui/ShadowCard/ShadowCard";
@@ -132,25 +132,12 @@ export function NoteRow({
132132
isBridge?: boolean;
133133
}) {
134134
const { formatMessage } = useIntl();
135-
const [status, setStatus] = useState<TransactionStatus>(initialStatus);
136-
137-
const { data: transactionData } = trpcReact.getTransaction.useQuery(
138-
{ accountName, transactionHash },
139-
{
140-
enabled:
141-
status === "pending" ||
142-
status === "unconfirmed" ||
143-
status === "unknown",
144-
refetchInterval: 5000,
145-
},
135+
const { status = initialStatus } = useTransactionPolling(
136+
accountName,
137+
transactionHash,
138+
initialStatus,
146139
);
147140

148-
useEffect(() => {
149-
if (transactionData && transactionData.transaction.status !== status) {
150-
setStatus(transactionData.transaction.status);
151-
}
152-
}, [transactionData, status]);
153-
154141
const statusDisplay = getNoteStatusDisplay(
155142
type,
156143
status,
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import type { TransactionStatus } from "@ironfish/sdk";
2+
import { useState, useEffect } from "react";
3+
4+
import { trpcReact } from "@/providers/TRPCProvider";
5+
6+
export function useTransactionPolling(
7+
accountName: string,
8+
transactionHash: string,
9+
initialStatus?: TransactionStatus,
10+
) {
11+
const [status, setStatus] = useState<TransactionStatus | undefined>(
12+
initialStatus,
13+
);
14+
15+
const { data: transactionData } = trpcReact.getTransaction.useQuery(
16+
{ accountName, transactionHash },
17+
{
18+
enabled:
19+
!status ||
20+
status === "pending" ||
21+
status === "unconfirmed" ||
22+
status === "unknown",
23+
refetchInterval: 5000,
24+
},
25+
);
26+
27+
useEffect(() => {
28+
if (transactionData && transactionData.transaction.status !== status) {
29+
setStatus(transactionData.transaction.status);
30+
}
31+
}, [transactionData, status]);
32+
33+
return { status, transactionData };
34+
}

renderer/pages/accounts/[account-name]/transaction/[transaction-hash].tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { BridgeTransactionProgressIndicator } from "@/components/BridgeTransacti
77
import { CopyAddress } from "@/components/CopyAddress/CopyAddress";
88
import { NotesList } from "@/components/NotesList/NotesList";
99
import { TransactionInformation } from "@/components/TransactionInformation/TransactionInformation";
10+
import { useTransactionPolling } from "@/hooks/useTransactionPolling";
1011
import MainLayout from "@/layouts/MainLayout";
1112
import { trpcReact } from "@/providers/TRPCProvider";
1213
import { asQueryString } from "@/utils/parseRouteQuery";
@@ -38,10 +39,10 @@ function SingleTransactionContent({
3839
name: accountName,
3940
});
4041

41-
const { data: transactionData } = trpcReact.getTransaction.useQuery({
42+
const { transactionData } = useTransactionPolling(
4243
accountName,
4344
transactionHash,
44-
});
45+
);
4546

4647
if (!accountData) {
4748
return null;

0 commit comments

Comments
 (0)