Skip to content

Commit e48a72a

Browse files
fix: Remove multiple overlapping spinners
1 parent 572496a commit e48a72a

File tree

7 files changed

+87
-25
lines changed

7 files changed

+87
-25
lines changed

ui/pages/confirmations/components/confirm/info/hooks/use-token-values.ts

+35-19
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,42 @@ export const useTokenValues = (transactionMeta: TransactionMeta) => {
2222
const decodedResponse = useDecodedTransactionData();
2323
const { value, pending } = decodedResponse;
2424

25-
const decodedTransferValue = useMemo(() => {
26-
if (!value || !decimals) {
27-
return 0;
28-
}
25+
const { decodedTransferValue, isDecodedTransferValuePending } =
26+
useMemo(() => {
27+
if (!value) {
28+
return {
29+
decodedTransferValue: 0,
30+
isDecodedTransferValuePending: false,
31+
};
32+
}
2933

30-
const paramIndex = value.data[0].params.findIndex(
31-
(param) =>
32-
param.value !== undefined &&
33-
!isHexString(param.value) &&
34-
param.value.length === undefined &&
35-
!isBoolean(param.value),
36-
);
37-
if (paramIndex === -1) {
38-
return 0;
39-
}
34+
if (!decimals) {
35+
return { decodedTransferValue: 0, isDecodedTransferValuePending: true };
36+
}
4037

41-
return new BigNumber(value.data[0].params[paramIndex].value.toString())
42-
.dividedBy(new BigNumber(10).pow(Number(decimals)))
43-
.toNumber();
44-
}, [value, decimals]);
38+
const paramIndex = value.data[0].params.findIndex(
39+
(param) =>
40+
param.value !== undefined &&
41+
!isHexString(param.value) &&
42+
param.value.length === undefined &&
43+
!isBoolean(param.value),
44+
);
45+
if (paramIndex === -1) {
46+
return {
47+
decodedTransferValue: 0,
48+
isDecodedTransferValuePending: false,
49+
};
50+
}
51+
52+
return {
53+
decodedTransferValue: new BigNumber(
54+
value.data[0].params[paramIndex].value.toString(),
55+
)
56+
.dividedBy(new BigNumber(10).pow(Number(decimals)))
57+
.toNumber(),
58+
isDecodedTransferValuePending: false,
59+
};
60+
}, [value, decimals]);
4561

4662
const [exchangeRate, setExchangeRate] = useState<Numeric | undefined>();
4763
const fetchExchangeRate = async () => {
@@ -69,7 +85,7 @@ export const useTokenValues = (transactionMeta: TransactionMeta) => {
6985
decodedTransferValue: toNonScientificString(decodedTransferValue),
7086
displayTransferValue,
7187
fiatDisplayValue,
72-
pending,
88+
pending: pending || isDecodedTransferValuePending,
7389
};
7490
};
7591

ui/pages/confirmations/components/confirm/info/shared/confirm-loader/__snapshots__/confirm-loader.test.tsx.snap

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
exports[`<ConfirmLoader /> renders component 1`] = `
44
<div>
55
<div
6-
class="mm-box mm-box--display-flex mm-box--justify-content-center mm-box--align-items-center"
6+
class="mm-box mm-box--padding-top-4 mm-box--padding-bottom-4 mm-box--display-flex mm-box--justify-content-center mm-box--align-items-center"
77
>
88
<svg
99
class="preloader__icon"

ui/pages/confirmations/components/confirm/info/shared/confirm-loader/confirm-loader.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ export const ConfirmLoader = () => {
1313
display={Display.Flex}
1414
justifyContent={JustifyContent.center}
1515
alignItems={AlignItems.center}
16+
paddingTop={4}
17+
paddingBottom={4}
1618
>
1719
<Preloader size={20} />
1820
</Box>

ui/pages/confirmations/components/confirm/info/shared/send-heading/__snapshots__/send-heading.test.tsx.snap

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
exports[`<SendHeading /> renders component 1`] = `
44
<div>
55
<div
6-
class="mm-box mm-box--display-flex mm-box--justify-content-center mm-box--align-items-center"
6+
class="mm-box mm-box--padding-top-4 mm-box--padding-bottom-4 mm-box--display-flex mm-box--justify-content-center mm-box--align-items-center"
77
>
88
<svg
99
class="preloader__icon"

ui/pages/confirmations/components/confirm/info/token-transfer/transaction-flow-section.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import {
2121
} from '../../../../../../helpers/constants/design-system';
2222
import { useConfirmContext } from '../../../../context/confirm';
2323
import { useDecodedTransactionData } from '../hooks/useDecodedTransactionData';
24-
import { ConfirmLoader } from '../shared/confirm-loader/confirm-loader';
2524

2625
export const TransactionFlowSection = () => {
2726
const { currentConfirmation: transactionMeta } =
@@ -39,7 +38,7 @@ export const TransactionFlowSection = () => {
3938
addresses?.[addresses.length - 1].value;
4039

4140
if (pending) {
42-
return <ConfirmLoader />;
41+
return null;
4342
}
4443

4544
const { chainId } = transactionMeta;

ui/pages/routes/routes.component.js

+37-2
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ import NetworkConfirmationPopover from '../../components/multichain/network-list
114114
import NftFullImage from '../../components/app/assets/nfts/nft-details/nft-full-image';
115115
import CrossChainSwap from '../bridge';
116116
import { ToastMaster } from '../../components/app/toast-master/toast-master';
117+
import {
118+
REDESIGN_APPROVAL_TYPES,
119+
REDESIGN_DEV_TRANSACTION_TYPES,
120+
} from '../confirmations/utils';
117121
import {
118122
getConnectingLabel,
119123
hideAppHeader,
@@ -173,6 +177,9 @@ export default class Routes extends Component {
173177
currentExtensionPopupId: PropTypes.number,
174178
useRequestQueue: PropTypes.bool,
175179
clearEditedNetwork: PropTypes.func.isRequired,
180+
oldestPendingApproval: PropTypes.object.isRequired,
181+
pendingApprovals: PropTypes.arrayOf(PropTypes.object).isRequired,
182+
transactionsMetadata: PropTypes.arrayOf(PropTypes.object).isRequired,
176183
///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps)
177184
isShowKeyringSnapRemovalResultModal: PropTypes.bool.isRequired,
178185
hideShowKeyringSnapRemovalResultModal: PropTypes.func.isRequired,
@@ -417,6 +424,9 @@ export default class Routes extends Component {
417424
switchedNetworkDetails,
418425
clearSwitchedNetworkDetails,
419426
clearEditedNetwork,
427+
oldestPendingApproval,
428+
pendingApprovals,
429+
transactionsMetadata,
420430
///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps)
421431
isShowKeyringSnapRemovalResultModal,
422432
hideShowKeyringSnapRemovalResultModal,
@@ -452,7 +462,28 @@ export default class Routes extends Component {
452462
isUnlocked &&
453463
!shouldShowSeedPhraseReminder;
454464

455-
let isLoadingShown = isLoading && completedOnboarding;
465+
const paramsConfirmationId = location.pathname.split(
466+
'/confirm-transaction/',
467+
)[1];
468+
const confirmationId = paramsConfirmationId ?? oldestPendingApproval?.id;
469+
const pendingApproval = pendingApprovals.find(
470+
(approval) => approval.id === confirmationId,
471+
);
472+
const isCorrectApprovalType = REDESIGN_APPROVAL_TYPES.includes(
473+
pendingApproval?.type,
474+
);
475+
const isCorrectDeveloperTransactionType =
476+
REDESIGN_DEV_TRANSACTION_TYPES.includes(
477+
transactionsMetadata[confirmationId]?.type,
478+
);
479+
480+
let isLoadingShown =
481+
isLoading &&
482+
completedOnboarding &&
483+
// In the redesigned screens, we hide the general loading spinner and the
484+
// loading states are on a component by component basis.
485+
!isCorrectApprovalType &&
486+
!isCorrectDeveloperTransactionType;
456487

457488
///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps)
458489
isLoadingShown =
@@ -462,7 +493,11 @@ export default class Routes extends Component {
462493
(confirmation) =>
463494
confirmation.type ===
464495
SNAP_MANAGE_ACCOUNTS_CONFIRMATION_TYPES.showSnapAccountRedirect,
465-
);
496+
) &&
497+
// In the redesigned screens, we hide the general loading spinner and the
498+
// loading states are on a component by component basis.
499+
!isCorrectApprovalType &&
500+
!isCorrectDeveloperTransactionType;
466501
///: END:ONLY_INCLUDE_IF
467502

468503
return (

ui/pages/routes/routes.container.js

+10
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ import {
2222
getNumberOfAllUnapprovedTransactionsAndMessages,
2323
getUseRequestQueue,
2424
getCurrentNetwork,
25+
oldestPendingConfirmationSelector,
26+
getUnapprovedTransactions,
27+
getPendingApprovals,
2528
} from '../../selectors';
2629
import {
2730
lockMetamask,
@@ -69,6 +72,10 @@ function mapStateToProps(state) {
6972
getNetworkToAutomaticallySwitchTo(state);
7073
const switchedNetworkDetails = getSwitchedNetworkDetails(state);
7174

75+
const oldestPendingApproval = oldestPendingConfirmationSelector(state);
76+
const pendingApprovals = getPendingApprovals(state);
77+
const transactionsMetadata = getUnapprovedTransactions(state);
78+
7279
return {
7380
alertOpen,
7481
alertMessage,
@@ -113,6 +120,9 @@ function mapStateToProps(state) {
113120
selectSwitchedNetworkNeverShowMessage(state),
114121
currentExtensionPopupId: state.metamask.currentExtensionPopupId,
115122
useRequestQueue: getUseRequestQueue(state),
123+
oldestPendingApproval,
124+
pendingApprovals,
125+
transactionsMetadata,
116126
///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps)
117127
isShowKeyringSnapRemovalResultModal:
118128
state.appState.showKeyringRemovalSnapModal,

0 commit comments

Comments
 (0)