Skip to content

Commit 26a6d24

Browse files
fix: show activity correctly
1 parent e3d9822 commit 26a6d24

File tree

4 files changed

+89
-69
lines changed

4 files changed

+89
-69
lines changed

packages/scaffold/src/partials/w3m-account-activity/index.tsx

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -107,24 +107,23 @@ export function AccountActivity({ style }: Props) {
107107
getTransactionListItemProps(transaction);
108108
const hasMultipleTransfers = transfers?.length > 2;
109109

110+
// Show only the first transfer
110111
if (hasMultipleTransfers) {
111-
return transfers.map((transfer, index) => {
112-
const description = TransactionUtil.getTransferDescription(transfer);
112+
const description = TransactionUtil.getTransferDescription(transfers[0]);
113113

114-
return (
115-
<ListTransaction
116-
key={`${transaction.id}@${description}`}
117-
date={date}
118-
type={type}
119-
descriptions={[description]}
120-
status={status}
121-
images={[images[index]] as TransactionImage[]}
122-
networkSrc={networkImage}
123-
style={styles.transactionItem}
124-
isAllNFT={isAllNFT}
125-
/>
126-
);
127-
});
114+
return (
115+
<ListTransaction
116+
key={`${transaction.id}@${description}`}
117+
date={date}
118+
type={type}
119+
descriptions={[description]}
120+
status={status}
121+
images={[images[0]] as TransactionImage[]}
122+
networkSrc={networkImage}
123+
style={styles.transactionItem}
124+
isAllNFT={isAllNFT}
125+
/>
126+
);
128127
}
129128

130129
return (

packages/scaffold/src/views/w3m-account-default-view/components/auth-buttons.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export function AuthButtons({
3333
</Text>
3434
</ListSocial>
3535
) : (
36-
<ListItem icon={'mail'} onPress={onPress} chevron testID="button-email" style={style}>
36+
<ListItem icon="mail" onPress={onPress} chevron testID="button-email" style={style}>
3737
<Text color="fg-100" numberOfLines={1} ellipsizeMode="tail">
3838
{text}
3939
</Text>

packages/ui/src/utils/TransactionUtil.ts

Lines changed: 72 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import { DateUtil } from '@reown/appkit-common-react-native';
22
import type {
33
TransactionTransfer,
44
Transaction,
5-
TransactionImage
5+
TransactionImage,
6+
TransactionMetadata
67
} from '@reown/appkit-common-react-native';
78
import type { TransactionType } from './TypesUtil';
89
import { UiUtil } from './UiUtil';
@@ -24,20 +25,22 @@ export const TransactionUtil = {
2425
},
2526

2627
getTransactionImages(transfers: TransactionTransfer[]): TransactionImage[] {
27-
const [transfer, secondTransfer] = transfers;
28-
const isAllNFT = Boolean(transfer) && transfers?.every(item => Boolean(item.nft_info));
28+
const isAllNFT = Boolean(transfers[0]) && transfers?.every(item => Boolean(item.nft_info));
2929
const haveMultipleTransfers = transfers?.length > 1;
3030
const haveTwoTransfers = transfers?.length === 2;
3131

3232
if (haveTwoTransfers && !isAllNFT) {
33-
return [this.getTransactionImage(transfer), this.getTransactionImage(secondTransfer)];
33+
const first = transfers.find(t => t?.direction === 'out');
34+
const second = transfers.find(t => t?.direction === 'in');
35+
36+
return [this.getTransactionImage(first), this.getTransactionImage(second)];
3437
}
3538

3639
if (haveMultipleTransfers) {
3740
return transfers.map(item => this.getTransactionImage(item));
3841
}
3942

40-
return [this.getTransactionImage(transfer)];
43+
return [this.getTransactionImage(transfers[0])];
4144
},
4245

4346
getTransactionImage(transfer?: TransactionTransfer): TransactionImage {
@@ -72,66 +75,83 @@ export const TransactionUtil = {
7275
},
7376

7477
getTransactionDescriptions(transaction: Transaction) {
75-
const type = transaction?.metadata?.operationType as TransactionType;
78+
if (!transaction.metadata) {
79+
return ['Unknown transaction'];
80+
}
7681

82+
const type = transaction?.metadata?.operationType as TransactionType;
7783
const transfers = transaction?.transfers;
78-
const haveTransfer = transaction?.transfers?.length > 0;
79-
const haveMultipleTransfers = transaction?.transfers?.length > 1;
80-
const isSendOrReceive = type === 'send' || type === 'receive';
81-
const isFungible =
82-
haveTransfer && transfers?.every(transfer => Boolean(transfer?.fungible_info));
83-
const [firstTransfer, secondTransfer] = transfers;
84-
85-
let firstDescription = this.getTransferDescription(firstTransfer);
86-
let secondDescription = this.getTransferDescription(secondTransfer);
87-
88-
if (!haveTransfer) {
89-
if (isSendOrReceive && isFungible) {
90-
firstDescription = UiUtil.getTruncateString({
91-
string: transaction?.metadata.sentFrom,
92-
charsStart: 4,
93-
charsEnd: 6,
94-
truncate: 'middle'
95-
});
96-
secondDescription = UiUtil.getTruncateString({
97-
string: transaction?.metadata.sentTo,
98-
charsStart: 4,
99-
charsEnd: 6,
100-
truncate: 'middle'
101-
});
102-
103-
return [firstDescription, secondDescription];
104-
}
105-
106-
return [transaction.metadata.status];
84+
85+
// Early return for trade transactions
86+
if (type === 'trade') {
87+
return this.getTradeDescriptions(transfers);
10788
}
10889

109-
if (haveMultipleTransfers) {
110-
return transfers.map(item => this.getTransferDescription(item));
90+
// Handle multiple transfers
91+
if (transfers.length > 1) {
92+
return transfers.map(transfer => this.getTransferDescription(transfer));
11193
}
11294

113-
let prefix = '';
114-
if (plusTypes.includes(type)) {
115-
prefix = '+';
116-
} else if (minusTypes.includes(type)) {
117-
prefix = '-';
95+
// Handle single transfer
96+
if (transfers.length === 1) {
97+
return [this.formatSingleTransfer(transfers[0]!, type, transaction.metadata)];
11898
}
11999

120-
firstDescription = prefix.concat(firstDescription);
100+
return [transaction.metadata.status];
101+
},
102+
103+
isSendReceiveTransaction(type: TransactionType): boolean {
104+
return type === 'send' || type === 'receive';
105+
},
106+
107+
hasFungibleTransfers(transfers: TransactionTransfer[]): boolean {
108+
return transfers.every(transfer => Boolean(transfer?.fungible_info));
109+
},
110+
111+
getSendReceiveDescriptions(metadata: TransactionMetadata): string[] {
112+
return [this.truncateAddress(metadata.sentFrom), this.truncateAddress(metadata.sentTo)];
113+
},
114+
115+
truncateAddress(address: string): string {
116+
return UiUtil.getTruncateString({
117+
string: address,
118+
charsStart: 4,
119+
charsEnd: 6,
120+
truncate: 'middle'
121+
});
122+
},
121123

122-
if (isSendOrReceive) {
124+
formatSingleTransfer(
125+
transfer: TransactionTransfer,
126+
type: TransactionType,
127+
metadata: TransactionMetadata
128+
): string {
129+
const prefix = this.getPrefix(type);
130+
let description = prefix.concat(this.getTransferDescription(transfer));
131+
132+
if (this.isSendReceiveTransaction(type)) {
123133
const isSend = type === 'send';
124-
const address = UiUtil.getTruncateString({
125-
string: isSend ? transaction.metadata.sentTo : transaction.metadata.sentFrom,
126-
charsStart: 4,
127-
charsEnd: 4,
128-
truncate: 'middle'
129-
});
134+
135+
const address = this.truncateAddress(isSend ? metadata.sentTo : metadata.sentFrom);
130136
const arrow = isSend ? '→' : '←';
131-
firstDescription = firstDescription.concat(` ${arrow} ${address}`);
137+
description = description.concat(` ${arrow} ${address}`);
132138
}
133139

134-
return [firstDescription];
140+
return description;
141+
},
142+
143+
getPrefix(type: TransactionType): string {
144+
if (plusTypes.includes(type)) return '+';
145+
if (minusTypes.includes(type)) return '-';
146+
147+
return '';
148+
},
149+
150+
getTradeDescriptions(transfers: TransactionTransfer[]): string[] {
151+
const outTransfer = transfers.find(transfer => transfer?.direction === 'out');
152+
const inTransfer = transfers.find(transfer => transfer?.direction === 'in');
153+
154+
return [this.getTransferDescription(outTransfer), this.getTransferDescription(inTransfer)];
135155
},
136156

137157
getTransferDescription(transfer?: TransactionTransfer) {

packages/wallet/src/AppKitAuthWebview.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ function _AuthWebview() {
139139
provider.onNotConnected(() => {
140140
ConnectorController.setAuthLoading(false);
141141
ModalController.setLoading(false);
142+
ConnectionController.setConnectedSocialProvider(undefined);
142143
if (ConnectorController.state.connectedConnector === 'AUTH') {
143144
ConnectionController.disconnect();
144145
}

0 commit comments

Comments
 (0)