Skip to content

Commit 2e98805

Browse files
fix: Remove multiple overlapping spinners
1 parent c564383 commit 2e98805

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
@@ -23,26 +23,42 @@ export const useTokenValues = (transactionMeta: TransactionMeta) => {
2323
const decodedResponse = useDecodedTransactionData();
2424
const { value, pending } = decodedResponse;
2525

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

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

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

4763
const [exchangeRate, setExchangeRate] = useState<Numeric | undefined>();
4864
const fetchExchangeRate = async () => {
@@ -70,7 +86,7 @@ export const useTokenValues = (transactionMeta: TransactionMeta) => {
7086
decodedTransferValue: toNonScientificString(decodedTransferValue),
7187
displayTransferValue,
7288
fiatDisplayValue,
73-
pending,
89+
pending: pending || isDecodedTransferValuePending,
7490
};
7591
};
7692

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,
@@ -174,6 +178,9 @@ export default class Routes extends Component {
174178
currentExtensionPopupId: PropTypes.number,
175179
useRequestQueue: PropTypes.bool,
176180
clearEditedNetwork: PropTypes.func.isRequired,
181+
oldestPendingApproval: PropTypes.object.isRequired,
182+
pendingApprovals: PropTypes.arrayOf(PropTypes.object).isRequired,
183+
transactionsMetadata: PropTypes.arrayOf(PropTypes.object).isRequired,
177184
///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps)
178185
isShowKeyringSnapRemovalResultModal: PropTypes.bool.isRequired,
179186
hideShowKeyringSnapRemovalResultModal: PropTypes.func.isRequired,
@@ -419,6 +426,9 @@ export default class Routes extends Component {
419426
clearSwitchedNetworkDetails,
420427
clearEditedNetwork,
421428
privacyMode,
429+
oldestPendingApproval,
430+
pendingApprovals,
431+
transactionsMetadata,
422432
///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps)
423433
isShowKeyringSnapRemovalResultModal,
424434
hideShowKeyringSnapRemovalResultModal,
@@ -454,7 +464,28 @@ export default class Routes extends Component {
454464
isUnlocked &&
455465
!shouldShowSeedPhraseReminder;
456466

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

459490
///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps)
460491
isLoadingShown =
@@ -464,7 +495,11 @@ export default class Routes extends Component {
464495
(confirmation) =>
465496
confirmation.type ===
466497
SNAP_MANAGE_ACCOUNTS_CONFIRMATION_TYPES.showSnapAccountRedirect,
467-
);
498+
) &&
499+
// In the redesigned screens, we hide the general loading spinner and the
500+
// loading states are on a component by component basis.
501+
!isCorrectApprovalType &&
502+
!isCorrectDeveloperTransactionType;
468503
///: END:ONLY_INCLUDE_IF
469504

470505
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,
@@ -114,6 +121,9 @@ function mapStateToProps(state) {
114121
selectSwitchedNetworkNeverShowMessage(state),
115122
currentExtensionPopupId: state.metamask.currentExtensionPopupId,
116123
useRequestQueue: getUseRequestQueue(state),
124+
oldestPendingApproval,
125+
pendingApprovals,
126+
transactionsMetadata,
117127
///: BEGIN:ONLY_INCLUDE_IF(keyring-snaps)
118128
isShowKeyringSnapRemovalResultModal:
119129
state.appState.showKeyringRemovalSnapModal,

0 commit comments

Comments
 (0)