Skip to content

Commit 03ce4c4

Browse files
authored
refactor(dashboard): improve tx summary (#94)
# Description of change - removes the redundant Extended Transaction on favor of transaction summary which holds the same data - refactors Transaction Details layout ## Links to any relevant issues port of the iotaledger/iota#11187
1 parent b6b59b8 commit 03ce4c4

16 files changed

Lines changed: 92 additions & 244 deletions

File tree

apps/core/src/hooks/useGetTransaction.ts

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import { useIotaClient } from '@iota/dapp-kit';
66
import { type IotaTransactionBlockResponse } from '@iota/iota-sdk/client';
77
import { type UseQueryResult, useQuery } from '@tanstack/react-query';
8-
import { useTransactionSummary } from './useTransactionSummary';
98

109
export function useGetTransaction(
1110
transactionId: string,
@@ -30,22 +29,3 @@ export function useGetTransaction(
3029
initialData: queryOptions?.initialData,
3130
});
3231
}
33-
34-
export function useGetTransactionWithSummary(
35-
transactionDigest: string,
36-
currentAddress: string,
37-
initialData?: IotaTransactionBlockResponse,
38-
recognizedPackagesList: string[] = [],
39-
) {
40-
const txResponse = useGetTransaction(transactionDigest, { retry: 8, initialData });
41-
42-
const { data: transaction } = txResponse;
43-
44-
const summary = useTransactionSummary({
45-
transaction,
46-
currentAddress,
47-
recognizedPackagesList,
48-
});
49-
50-
return { summary, ...txResponse };
51-
}
Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,6 @@
11
// Copyright (c) 2024 IOTA Stiftung
22
// SPDX-License-Identifier: Apache-2.0
33

4-
import { IotaTransactionBlockResponse } from '@iota/iota-sdk/client';
5-
6-
export interface ExtendedTransaction {
7-
action: TransactionAction;
8-
timestamp?: number;
9-
state: TransactionState;
10-
raw: IotaTransactionBlockResponse;
11-
}
12-
134
export enum TransactionAction {
145
Send = 'Send',
156
Receive = 'Receive',
@@ -22,9 +13,3 @@ export enum TransactionAction {
2213
Migration = 'Migration',
2314
PersonalMessage = 'Personal Message',
2415
}
25-
26-
export enum TransactionState {
27-
Successful = 'successful',
28-
Failed = 'failed',
29-
Pending = 'pending',
30-
}

apps/wallet-dashboard/components/dialogs/TransactionDialog.tsx

Lines changed: 0 additions & 77 deletions
This file was deleted.

apps/wallet-dashboard/components/dialogs/assets/AssetDialog.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import {
1919
import { DetailsView, SendView, KioskDetailsView } from './views';
2020
import { getNetwork, IotaObjectData, IotaTransactionBlockResponse } from '@iota/iota-sdk/client';
2121
import { AssetsDialogView } from './constants';
22-
import { TransactionDetailsView } from '../send-token';
22+
import { TransactionDetailsLayout } from '../transaction';
2323
import { DialogLayout } from '../layout';
2424
import { ampli } from '@/lib/utils/analytics';
2525
import { shouldResolveInputAsName } from '@iota/core/utils/validation/names';
@@ -161,7 +161,7 @@ export function AssetDialog({ onClose, asset, refetchAssets }: AssetsDialogProps
161161
)}
162162

163163
{view === AssetsDialogView.TransactionDetails && !!digest ? (
164-
<TransactionDetailsView digest={digest} onClose={onOpenChange} />
164+
<TransactionDetailsLayout digest={digest} onClose={onOpenChange} />
165165
) : null}
166166
</>
167167
</DialogLayout>

apps/wallet-dashboard/components/dialogs/migration/MigrationDialog.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import { IotaObjectData } from '@iota/iota-sdk/client';
77
import { useMigrationTransaction } from '@/hooks/useMigrationTransaction';
88
import { Dialog } from '@iota/apps-ui-kit';
99
import { GAS_BALANCE_TOO_LOW_ID, GAS_BUDGET_ERROR_MESSAGES, toast } from '@iota/core';
10-
import { TransactionDialogView } from '../TransactionDialog';
10+
import { TransactionDetailsLayout } from '../transaction/TransactionDetailsLayout';
11+
import { DialogLayout } from '../layout';
1112
import { MigrationDialogView } from './enums';
1213
import { ConfirmMigrationView } from './views';
1314
import { ampli } from '@/lib/utils/analytics';
@@ -114,7 +115,9 @@ export function MigrationDialog({
114115
/>
115116
)}
116117
{view === MigrationDialogView.TransactionDetails && (
117-
<TransactionDialogView txDigest={txDigest} onClose={handleClose} />
118+
<DialogLayout>
119+
<TransactionDetailsLayout digest={txDigest} onClose={handleClose} />
120+
</DialogLayout>
118121
)}
119122
</Dialog>
120123
);

apps/wallet-dashboard/components/dialogs/send-token/SendTokenDialog.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
// SPDX-License-Identifier: Apache-2.0
33

44
import { useMemo, useState } from 'react';
5-
import { EnterValuesFormView, ReviewValuesFormView, TransactionDetailsView } from './views';
5+
import { EnterValuesFormView, ReviewValuesFormView } from './views';
6+
import { TransactionDetailsLayout } from '../transaction';
67
import { CoinBalance, getNetwork } from '@iota/iota-sdk/client';
78
import {
89
useGetAllCoins,
@@ -176,7 +177,7 @@ function SendTokenDialogBody({
176177
</FormikProvider>
177178

178179
{step === FormStep.TransactionDetails && data?.digest && (
179-
<TransactionDetailsView
180+
<TransactionDetailsLayout
180181
digest={data.digest}
181182
onClose={() => {
182183
setOpen(false);

apps/wallet-dashboard/components/dialogs/send-token/views/TransactionDetailsView.tsx

Lines changed: 0 additions & 47 deletions
This file was deleted.

apps/wallet-dashboard/components/dialogs/send-token/views/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,3 @@
33

44
export * from './EnterValuesFormView';
55
export * from './ReviewValuesFormView';
6-
export * from './TransactionDetailsView';

apps/wallet-dashboard/components/dialogs/staking/StakeDialog.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ import { useCurrentAccount, useIotaClientQuery } from '@iota/dapp-kit';
1717
import { IOTA_TYPE_ARG, parseAmount } from '@iota/iota-sdk/utils';
1818
import { Dialog } from '@iota/apps-ui-kit';
1919
import { DetailsView } from './views';
20-
import { TransactionDialogView } from '../TransactionDialog';
20+
import { TransactionDetailsLayout } from '../transaction/TransactionDetailsLayout';
21+
import { DialogLayout } from '../layout';
2122
import { StakeDialogView } from './enums/view.enums';
2223
import { ampli } from '@/lib/utils/analytics';
2324

@@ -179,7 +180,9 @@ export function StakeDialog({
179180
/>
180181
)}
181182
{view === StakeDialogView.TransactionDetails && (
182-
<TransactionDialogView txDigest={txDigest} onClose={handleClose} />
183+
<DialogLayout>
184+
<TransactionDetailsLayout digest={txDigest} onClose={handleClose} />
185+
</DialogLayout>
183186
)}
184187
</>
185188
</FormikProvider>

apps/wallet-dashboard/components/dialogs/transaction/TransactionDetailsLayout.tsx

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,43 @@
22
// SPDX-License-Identifier: Apache-2.0
33

44
import { ExplorerLink } from '@/components';
5-
import { Header, LoadingIndicator } from '@iota/apps-ui-kit';
5+
import { Header, LoadingIndicator, InfoBox, InfoBoxType, InfoBoxStyle } from '@iota/apps-ui-kit';
6+
import { Warning } from '@iota/apps-ui-icons';
67
import {
78
useTransactionSummary,
9+
useGetTransaction,
810
ViewTxnOnExplorerButton,
911
ExplorerLinkType,
1012
TransactionReceipt,
1113
useRecognizedPackages,
12-
ExtendedTransaction,
1314
OutlinedCopyButton,
1415
} from '@iota/core';
1516
import { useCurrentAccount } from '@iota/dapp-kit';
17+
import { IotaTransactionBlockResponse } from '@iota/iota-sdk/client';
1618
import { DialogLayoutBody, DialogLayoutFooter } from '../layout';
1719
import { trackElementCopied } from '@/lib/utils';
1820
import { useCallback } from 'react';
1921

20-
interface TransactionDialogDetailsProps {
21-
transaction: ExtendedTransaction;
22+
interface TransactionDetailsLayoutProps {
2223
onClose: () => void;
24+
transaction?: IotaTransactionBlockResponse;
25+
digest?: string | null;
2326
}
24-
export function TransactionDetailsLayout({ transaction, onClose }: TransactionDialogDetailsProps) {
25-
const address = useCurrentAccount()?.address ?? '';
2627

28+
export function TransactionDetailsLayout({
29+
onClose,
30+
transaction: txProp,
31+
digest,
32+
}: TransactionDetailsLayoutProps) {
33+
const address = useCurrentAccount()?.address ?? '';
2734
const recognizedPackagesList = useRecognizedPackages();
35+
36+
const { data: fetchedTransaction, isError, error } = useGetTransaction(digest ?? '');
37+
38+
const transaction = txProp ?? fetchedTransaction;
39+
2840
const summary = useTransactionSummary({
29-
transaction: transaction.raw,
41+
transaction,
3042
currentAddress: address,
3143
recognizedPackagesList,
3244
});
@@ -35,14 +47,34 @@ export function TransactionDetailsLayout({ transaction, onClose }: TransactionDi
3547
trackElementCopied('transaction-digest');
3648
}, []);
3749

38-
if (!summary) return <LoadingIndicator />;
50+
if (!txProp && isError) {
51+
return (
52+
<InfoBox
53+
type={InfoBoxType.Error}
54+
title="Error getting transaction info"
55+
supportingText={
56+
error?.message ?? 'An error occurred when getting the transaction info'
57+
}
58+
icon={<Warning />}
59+
style={InfoBoxStyle.Default}
60+
/>
61+
);
62+
}
63+
64+
if (!transaction || !summary) {
65+
return (
66+
<div className="flex h-full w-full justify-center">
67+
<LoadingIndicator />
68+
</div>
69+
);
70+
}
3971

4072
return (
4173
<>
4274
<Header title="Transaction" onClose={onClose} />
4375
<DialogLayoutBody>
4476
<TransactionReceipt
45-
txn={transaction.raw}
77+
txn={transaction}
4678
activeAddress={address}
4779
summary={summary}
4880
renderExplorerLink={ExplorerLink}
@@ -53,14 +85,14 @@ export function TransactionDetailsLayout({ transaction, onClose }: TransactionDi
5385
<div className="flex w-full [&_a]:w-full">
5486
<ExplorerLink
5587
type={ExplorerLinkType.Transaction}
56-
transactionID={transaction.raw.digest}
88+
transactionID={transaction.digest}
5789
>
58-
<ViewTxnOnExplorerButton digest={transaction.raw.digest} />
90+
<ViewTxnOnExplorerButton digest={transaction.digest} />
5991
</ExplorerLink>
6092
</div>
6193
<div className="self-center">
6294
<OutlinedCopyButton
63-
textToCopy={transaction.raw.digest ?? ''}
95+
textToCopy={transaction.digest ?? ''}
6496
onCopySuccess={onCopySuccess}
6597
successMessage="Transaction digest copied to clipboard"
6698
/>

0 commit comments

Comments
 (0)