Skip to content

Commit 3def3f0

Browse files
cursoragentn3ps
andcommitted
fix: address account api transaction ci failures
Co-authored-by: Francis Nepomuceno <n3ps@users.noreply.github.com>
1 parent 1955f4b commit 3def3f0

5 files changed

Lines changed: 45 additions & 13 deletions

File tree

app/components/Views/UnifiedTransactionsView/UnifiedTransactionsView.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ import type { ConfirmedEvmTransaction } from './helpers/types';
5858
type SmartTransactionWithId = SmartTransaction & { id: string };
5959
type EvmTransaction = TransactionMeta | SmartTransactionWithId;
6060

61+
const isEvmTransaction = (
62+
tx: TransactionMeta | SmartTransaction,
63+
): tx is EvmTransaction => 'id' in tx && typeof tx.id === 'string';
64+
6165
const getTransactionId = (tx: EvmTransaction) => tx.id;
6266

6367
const getEvmTransactionTime = (tx: EvmTransaction) => tx.time ?? 0;
@@ -179,7 +183,11 @@ const UnifiedTransactionsView = ({
179183
}>(() => {
180184
// Deduplicate submitted by (address + chain + nonce) and drop if already confirmed
181185
const seenSubmittedNonces = new Set<string>();
182-
const submittedTxsFiltered = submittedTxs.filter((tx) => {
186+
const submittedTxsFiltered = submittedTxs.filter((tx): tx is EvmTransaction => {
187+
if (!isEvmTransaction(tx)) {
188+
return false;
189+
}
190+
183191
const { chainId: _chainId, txParams, hash } = tx;
184192
const { from, nonce, actionId } = txParams || {};
185193
// Some txs don't have nonce, like intent based swaps

app/components/Views/UnifiedTransactionsView/hooks/useTransactionsQuery.ts

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1-
import { useInfiniteQuery } from '@tanstack/react-query';
1+
import {
2+
QueryFunctionContext,
3+
QueryKey,
4+
useInfiniteQuery,
5+
} from '@tanstack/react-query';
26
import { useMemo } from 'react';
37
import { useSelector } from 'react-redux';
8+
import { V4MultiAccountTransactionsResponse } from '@metamask/core-backend';
49
import { getApiClient } from '../../../../core/apiClient';
510
import { selectAccountGroupEvmAccountAddresses } from '../../../../selectors/multichainAccounts/accountTreeController';
611
import { selectEvmEnabledCaipNetworks } from '../../../../selectors/networkEnablementController';
@@ -18,15 +23,31 @@ export const useTransactionsQuery = () => {
1823
[accountAddresses],
1924
);
2025

21-
const queryOptions =
22-
getApiClient().accounts.getV4MultiAccountTransactionsInfiniteQueryOptions({
23-
accountAddresses,
24-
networks,
25-
includeTxMetadata: true,
26-
});
26+
const queryOptions = useMemo(
27+
() =>
28+
getApiClient().accounts.getV4MultiAccountTransactionsInfiniteQueryOptions(
29+
{
30+
accountAddresses: [...accountAddresses],
31+
networks: [...networks],
32+
includeTxMetadata: true,
33+
},
34+
),
35+
[accountAddresses, networks],
36+
);
2737

28-
return useInfiniteQuery({
29-
...queryOptions,
38+
return useInfiniteQuery<
39+
V4MultiAccountTransactionsResponse,
40+
Error,
41+
ReturnType<ReturnType<typeof selectConfirmedTransactions>>,
42+
QueryKey
43+
>({
44+
queryKey: queryOptions.queryKey as QueryKey,
45+
queryFn: ({
46+
pageParam,
47+
signal,
48+
}: QueryFunctionContext<QueryKey, string | undefined>) =>
49+
queryOptions.queryFn({ pageParam, signal }),
50+
getNextPageParam: queryOptions.getNextPageParam,
3051
select: selectFn,
3152
enabled: accountAddresses.length > 0 && networks.length > 0,
3253
staleTime: 5 * MINUTE,

app/components/hooks/useNetworksByNamespace/useNetworksByNamespace.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ jest.mock('@metamask/keyring-utils', () => ({}));
1010
jest.mock('@metamask/keyring-api', () => ({}));
1111
jest.mock('@metamask/rpc-errors', () => ({}));
1212
jest.mock('@metamask/network-controller', () => ({}));
13+
jest.mock('@metamask/multichain-network-controller', () => ({
14+
toEvmCaipChainId: jest.fn(
15+
(chainId: string) => `eip155:${parseInt(chainId, 16)}`,
16+
),
17+
}));
1318
jest.mock('@metamask/controller-utils', () => ({
1419
hasProperty: jest.fn(),
1520
toHex: jest.fn(),

app/core/apiClient.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { createApiPlatformClient } from '@metamask/core-backend';
22
import Engine from './Engine';
3-
import ReactQueryService from './ReactQueryService/ReactQueryService';
43

54
let apiClient: ReturnType<typeof createApiPlatformClient> | undefined;
65

@@ -15,7 +14,6 @@ export const getApiClient = () => {
1514
return undefined;
1615
}
1716
},
18-
queryClient: ReactQueryService.queryClient,
1917
});
2018
}
2119

app/selectors/multichainAccounts/accountTreeController.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {
1717
AccountGroupObject,
1818
AccountTreeControllerState,
1919
} from '@metamask/account-tree-controller';
20-
import { CaipAccountId } from '@metamask/utils';
20+
import { CaipAccountId, CaipChainId } from '@metamask/utils';
2121
import { InternalAccount } from '@metamask/keyring-internal-api';
2222
import { isEvmAccountType } from '@metamask/keyring-api';
2323
import { AccountGroupWithInternalAccounts } from './accounts.type';

0 commit comments

Comments
 (0)