Skip to content

Commit f8751e3

Browse files
committed
enhance setApprovalForAll confirmation flow
1 parent 2d3f856 commit f8751e3

File tree

11 files changed

+63
-3
lines changed

11 files changed

+63
-3
lines changed

app/_locales/en/messages.json

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

shared/constants/transaction.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import { MESSAGE_TYPE } from './app';
1515
* to ensure that the receiver is an address capable of handling with the token being sent.
1616
* @property {'approve'} TOKEN_METHOD_APPROVE - A token transaction requesting an
1717
* allowance of the token to spend on behalf of the user
18+
* @property {'setapprovalforall'} TOKEN_METHOD_SET_APPROVAL_FOR_ALL - A token transaction requesting an
19+
* allowance of all of a user's token to spend on behalf of the user
1820
* @property {'incoming'} INCOMING - An incoming (deposit) transaction
1921
* @property {'simpleSend'} SIMPLE_SEND - A transaction sending a network's native asset to a recipient
2022
* @property {'contractInteraction'} CONTRACT_INTERACTION - A transaction that is
@@ -66,6 +68,7 @@ export const TRANSACTION_TYPES = {
6668
TOKEN_METHOD_SAFE_TRANSFER_FROM: 'safetransferfrom',
6769
TOKEN_METHOD_TRANSFER: 'transfer',
6870
TOKEN_METHOD_TRANSFER_FROM: 'transferfrom',
71+
TOKEN_METHOD_SET_APPROVAL_FOR_ALL: 'setapprovalforall',
6972
};
7073

7174
/**

shared/modules/transaction.utils.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { readAddressAsContract } from './contract-utils';
88
import { isEqualCaseInsensitive } from './string-utils';
99

1010
/**
11-
* @typedef { 'transfer' | 'approve' | 'transferfrom' | 'contractInteraction'| 'simpleSend' } InferrableTransactionTypes
11+
* @typedef { 'transfer' | 'approve' | 'setapprovalforall' | 'transferfrom' | 'contractInteraction'| 'simpleSend' } InferrableTransactionTypes
1212
*/
1313

1414
/**
@@ -150,6 +150,7 @@ export async function determineTransactionType(txParams, query) {
150150

151151
const tokenMethodName = [
152152
TRANSACTION_TYPES.TOKEN_METHOD_APPROVE,
153+
TRANSACTION_TYPES.TOKEN_METHOD_SET_APPROVAL_FOR_ALL,
153154
TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER,
154155
TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER_FROM,
155156
TRANSACTION_TYPES.TOKEN_METHOD_SAFE_TRANSFER_FROM,
@@ -181,6 +182,7 @@ export async function determineTransactionType(txParams, query) {
181182

182183
const INFERRABLE_TRANSACTION_TYPES = [
183184
TRANSACTION_TYPES.TOKEN_METHOD_APPROVE,
185+
TRANSACTION_TYPES.TOKEN_METHOD_SET_APPROVAL_FOR_ALL,
184186
TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER,
185187
TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER_FROM,
186188
TRANSACTION_TYPES.CONTRACT_INTERACTION,
@@ -220,6 +222,7 @@ export async function determineTransactionAssetType(
220222
// method to get the asset type.
221223
const isTokenMethod = [
222224
TRANSACTION_TYPES.TOKEN_METHOD_APPROVE,
225+
TRANSACTION_TYPES.TOKEN_METHOD_SET_APPROVAL_FOR_ALL,
223226
TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER,
224227
TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER_FROM,
225228
].find((methodName) => methodName === inferrableType);

ui/components/app/confirm-page-container/confirm-page-container-content/confirm-page-container-summary/confirm-page-container-summary.component.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ const ConfirmPageContainerSummary = (props) => {
5353
contractAddress =
5454
transactionType === TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER ||
5555
transactionType === TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER_FROM ||
56-
transactionType === TRANSACTION_TYPES.TOKEN_METHOD_SAFE_TRANSFER_FROM
56+
transactionType === TRANSACTION_TYPES.TOKEN_METHOD_SAFE_TRANSFER_FROM ||
57+
transactionType === TRANSACTION_TYPES.SET_APPROVAL_FOR_ALL
5758
? tokenAddress
5859
: toAddress;
5960
}

ui/components/app/transaction-list-item-details/transaction-list-item-details.component.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,10 @@ export default class TransactionListItemDetails extends PureComponent {
251251
<div className="transaction-list-item-details__cards-container">
252252
<TransactionBreakdown
253253
nonce={transactionGroup.initialTransaction.txParams.nonce}
254-
isTokenApprove={type === TRANSACTION_TYPES.TOKEN_METHOD_APPROVE}
254+
isTokenApprove={
255+
type === TRANSACTION_TYPES.TOKEN_METHOD_APPROVE ||
256+
type === TRANSACTION_TYPES.TOKEN_METHOD_SET_APPROVAL_FOR_ALL
257+
}
255258
transaction={transaction}
256259
primaryCurrency={primaryCurrency}
257260
className="transaction-list-item-details__transaction-breakdown"

ui/helpers/constants/routes.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ const CONFIRM_SEND_ETHER_PATH = '/send-ether';
8888
const CONFIRM_SEND_TOKEN_PATH = '/send-token';
8989
const CONFIRM_DEPLOY_CONTRACT_PATH = '/deploy-contract';
9090
const CONFIRM_APPROVE_PATH = '/approve';
91+
const CONFIRM_SET_APPROVAL_FOR_ALL_PATH = '/set-approval-for-all';
9192
const CONFIRM_TRANSFER_FROM_PATH = '/transfer-from';
9293
const CONFIRM_SAFE_TRANSFER_FROM_PATH = '/safe-transfer-from';
9394
const CONFIRM_TOKEN_METHOD_PATH = '/token-method';
@@ -141,6 +142,7 @@ const PATH_NAME_MAP = {
141142
[`${CONFIRM_TRANSACTION_ROUTE}/:id${CONFIRM_SEND_TOKEN_PATH}`]: 'Confirm Send Token Transaction Page',
142143
[`${CONFIRM_TRANSACTION_ROUTE}/:id${CONFIRM_DEPLOY_CONTRACT_PATH}`]: 'Confirm Deploy Contract Transaction Page',
143144
[`${CONFIRM_TRANSACTION_ROUTE}/:id${CONFIRM_APPROVE_PATH}`]: 'Confirm Approve Transaction Page',
145+
[`${CONFIRM_TRANSACTION_ROUTE}/:id${CONFIRM_SET_APPROVAL_FOR_ALL_PATH}`]: 'Confirm Set Approval For All Transaction Page',
144146
[`${CONFIRM_TRANSACTION_ROUTE}/:id${CONFIRM_TRANSFER_FROM_PATH}`]: 'Confirm Transfer From Transaction Page',
145147
[`${CONFIRM_TRANSACTION_ROUTE}/:id${CONFIRM_SAFE_TRANSFER_FROM_PATH}`]: 'Confirm Safe Transfer From Transaction Page',
146148
[`${CONFIRM_TRANSACTION_ROUTE}/:id${SIGNATURE_REQUEST_PATH}`]: 'Signature Request Page',
@@ -202,6 +204,7 @@ export {
202204
CONFIRM_SEND_TOKEN_PATH,
203205
CONFIRM_DEPLOY_CONTRACT_PATH,
204206
CONFIRM_APPROVE_PATH,
207+
CONFIRM_SET_APPROVAL_FOR_ALL_PATH,
205208
CONFIRM_TRANSFER_FROM_PATH,
206209
CONFIRM_SAFE_TRANSFER_FROM_PATH,
207210
CONFIRM_TOKEN_METHOD_PATH,

ui/helpers/constants/transactions.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export const PRIORITY_STATUS_HASH = {
1717

1818
export const TOKEN_CATEGORY_HASH = {
1919
[TRANSACTION_TYPES.TOKEN_METHOD_APPROVE]: true,
20+
[TRANSACTION_TYPES.TOKEN_METHOD_SET_APPROVAL_FOR_ALL]: true,
2021
[TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER]: true,
2122
[TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER_FROM]: true,
2223
};

ui/helpers/utils/transactions.util.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ export function isTokenMethodAction(type) {
116116
return [
117117
TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER,
118118
TRANSACTION_TYPES.TOKEN_METHOD_APPROVE,
119+
TRANSACTION_TYPES.SET_APPROVAL_FOR_ALL,
119120
TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER_FROM,
120121
TRANSACTION_TYPES.TOKEN_METHOD_SAFE_TRANSFER_FROM,
121122
].includes(type);
@@ -217,6 +218,9 @@ export function getTransactionTypeTitle(t, type, nativeCurrency = 'ETH') {
217218
case TRANSACTION_TYPES.TOKEN_METHOD_APPROVE: {
218219
return t('approve');
219220
}
221+
case TRANSACTION_TYPES.SET_APPROVAL_FOR_ALL: {
222+
return t('setApprovalForAll');
223+
}
220224
case TRANSACTION_TYPES.SIMPLE_SEND: {
221225
return t('sendingNativeAsset', [nativeCurrency]);
222226
}

ui/hooks/useTransactionDisplayData.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,12 @@ export function useTransactionDisplayData(transactionGroup) {
222222
title = t('approveSpendLimit', [token?.symbol || t('token')]);
223223
subtitle = origin;
224224
subtitleContainsOrigin = true;
225+
} else if (type === TRANSACTION_TYPES.TOKEN_METHOD_SET_APPROVAL_FOR_ALL) {
226+
category = TRANSACTION_GROUP_CATEGORIES.APPROVAL;
227+
prefix = '';
228+
title = t('setApprovalForAllTitle', [token?.symbol || t('token')]);
229+
subtitle = origin;
230+
subtitleContainsOrigin = true;
225231
} else if (type === TRANSACTION_TYPES.CONTRACT_INTERACTION) {
226232
category = TRANSACTION_GROUP_CATEGORIES.INTERACTION;
227233
const transactionTypeTitle = getTransactionTypeTitle(t, type);

ui/pages/confirm-transaction-switch/confirm-transaction-switch.component.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
DECRYPT_MESSAGE_REQUEST_PATH,
1515
ENCRYPTION_PUBLIC_KEY_REQUEST_PATH,
1616
CONFIRM_SAFE_TRANSFER_FROM_PATH,
17+
CONFIRM_SET_APPROVAL_FOR_ALL_PATH,
1718
} from '../../helpers/constants/routes';
1819
import { MESSAGE_TYPE } from '../../../shared/constants/app';
1920
import { TRANSACTION_TYPES } from '../../../shared/constants/transaction';
@@ -47,6 +48,10 @@ export default class ConfirmTransactionSwitch extends Component {
4748
const pathname = `${CONFIRM_TRANSACTION_ROUTE}/${id}${CONFIRM_APPROVE_PATH}`;
4849
return <Redirect to={{ pathname }} />;
4950
}
51+
case TRANSACTION_TYPES.TOKEN_METHOD_SET_APPROVAL_FOR_ALL: {
52+
const pathname = `${CONFIRM_TRANSACTION_ROUTE}/${id}${CONFIRM_SET_APPROVAL_FOR_ALL_PATH}`;
53+
return <Redirect to={{ pathname }} />;
54+
}
5055
case TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER_FROM: {
5156
const pathname = `${CONFIRM_TRANSACTION_ROUTE}/${id}${CONFIRM_TRANSFER_FROM_PATH}`;
5257
return <Redirect to={{ pathname }} />;

0 commit comments

Comments
 (0)