1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Merge pull request #17057 from MetaMask/Version-v10.23.2

This commit is contained in:
Brad Decker 2022-12-22 17:47:13 -05:00 committed by GitHub
commit 14a004c623
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 54 additions and 13 deletions

View File

@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
## [10.23.2]
### Fixed
- Improve performance on signature request screens ([#17052](https://github.com/MetaMask/metamask-extension/pull/17052))
## [10.23.1] ## [10.23.1]
### Fixed ### Fixed
- Fix incorrectly displaying "New Contract" instead of the recipient address, on the header from the Confirmation page ([#16961](https://github.com/MetaMask/metamask-extension/pull/16961)) - Fix incorrectly displaying "New Contract" instead of the recipient address, on the header from the Confirmation page ([#16961](https://github.com/MetaMask/metamask-extension/pull/16961))
@ -3340,7 +3344,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Uncategorized ### Uncategorized
- Added the ability to restore accounts from seed words. - Added the ability to restore accounts from seed words.
[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.23.1...HEAD [Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.23.2...HEAD
[10.23.2]: https://github.com/MetaMask/metamask-extension/compare/v10.23.1...v10.23.2
[10.23.1]: https://github.com/MetaMask/metamask-extension/compare/v10.23.0...v10.23.1 [10.23.1]: https://github.com/MetaMask/metamask-extension/compare/v10.23.0...v10.23.1
[10.23.0]: https://github.com/MetaMask/metamask-extension/compare/v10.22.3...v10.23.0 [10.23.0]: https://github.com/MetaMask/metamask-extension/compare/v10.22.3...v10.23.0
[10.22.3]: https://github.com/MetaMask/metamask-extension/compare/v10.22.2...v10.22.3 [10.22.3]: https://github.com/MetaMask/metamask-extension/compare/v10.22.2...v10.22.3

View File

@ -1,6 +1,6 @@
{ {
"name": "metamask-crx", "name": "metamask-crx",
"version": "10.23.1", "version": "10.23.2",
"private": true, "private": true,
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -1,7 +1,11 @@
import React from 'react'; import React, { memo } from 'react';
import { useSelector } from 'react-redux'; import { useSelector } from 'react-redux';
import { isEqual } from 'lodash';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { getMetaMaskIdentities, getAccountName } from '../../../../selectors'; import {
getMemoizedMetaMaskIdentities,
getAccountName,
} from '../../../../selectors';
import Address from '../../transaction-decoding/components/decoding/address'; import Address from '../../transaction-decoding/components/decoding/address';
import { import {
isValidHexAddress, isValidHexAddress,
@ -16,15 +20,15 @@ import {
TYPOGRAPHY, TYPOGRAPHY,
} from '../../../../helpers/constants/design-system'; } from '../../../../helpers/constants/design-system';
export default function SignatureRequestData({ data }) { function SignatureRequestData({ data }) {
const identities = useSelector(getMetaMaskIdentities); const identities = useSelector(getMemoizedMetaMaskIdentities);
return ( return (
<Box className="signature-request-data__node"> <Box className="signature-request-data__node">
{Object.entries(data).map(([label, value], i) => ( {Object.entries(data).map(([label, value], i) => (
<Box <Box
className="signature-request-data__node" className="signature-request-data__node"
key={i} key={`${label}-${i}`}
paddingLeft={2} paddingLeft={2}
display={ display={
typeof value !== 'object' || value === null ? DISPLAY.FLEX : null typeof value !== 'object' || value === null ? DISPLAY.FLEX : null
@ -77,3 +81,7 @@ export default function SignatureRequestData({ data }) {
SignatureRequestData.propTypes = { SignatureRequestData.propTypes = {
data: PropTypes.oneOfType([PropTypes.object, PropTypes.array]).isRequired, data: PropTypes.oneOfType([PropTypes.object, PropTypes.array]).isRequired,
}; };
export default memo(SignatureRequestData, (prevProps, nextProps) => {
return isEqual(prevProps.data, nextProps.data);
});

View File

@ -1,4 +1,5 @@
import React, { PureComponent } from 'react'; import React, { PureComponent } from 'react';
import { memoize } from 'lodash';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Identicon from '../../ui/identicon'; import Identicon from '../../ui/identicon';
import LedgerInstructionField from '../ledger-instruction-field'; import LedgerInstructionField from '../ledger-instruction-field';
@ -61,6 +62,12 @@ export default class SignatureRequest extends PureComponent {
)}`; )}`;
} }
memoizedParseMessage = memoize((data) => {
const { message, domain = {}, primaryType, types } = JSON.parse(data);
const sanitizedMessage = sanitizeMessage(message, primaryType, types);
return { sanitizedMessage, domain };
});
render() { render() {
const { const {
fromAccount, fromAccount,
@ -74,8 +81,8 @@ export default class SignatureRequest extends PureComponent {
hardwareWalletRequiresConnection, hardwareWalletRequiresConnection,
} = this.props; } = this.props;
const { address: fromAddress } = fromAccount; const { address: fromAddress } = fromAccount;
const { message, domain = {}, primaryType, types } = JSON.parse(data);
const { trackEvent } = this.context; const { trackEvent } = this.context;
const { sanitizedMessage, domain } = this.memoizedParseMessage(data);
const onSign = (event) => { const onSign = (event) => {
sign(event); sign(event);
@ -139,7 +146,7 @@ export default class SignatureRequest extends PureComponent {
</div> </div>
) : null} ) : null}
<Message <Message
data={sanitizeMessage(message, primaryType, types)} data={sanitizedMessage}
onMessageScrolled={() => this.setState({ hasScrolledMessage: true })} onMessageScrolled={() => this.setState({ hasScrolledMessage: true })}
setMessageRootRef={this.setMessageRootRef.bind(this)} setMessageRootRef={this.setMessageRootRef.bind(this)}
messageRootRef={this.messageRootRef} messageRootRef={this.messageRootRef}

View File

@ -6,8 +6,8 @@ import { shortenAddress } from '../../../../../../helpers/utils/util';
import Identicon from '../../../../../ui/identicon'; import Identicon from '../../../../../ui/identicon';
import { useI18nContext } from '../../../../../../hooks/useI18nContext'; import { useI18nContext } from '../../../../../../hooks/useI18nContext';
import { import {
getMetadataContractName, getMemoizedMetadataContractName,
getAddressBook, getMemoizedAddressBook,
} from '../../../../../../selectors'; } from '../../../../../../selectors';
import NicknamePopovers from '../../../../modals/nickname-popovers'; import NicknamePopovers from '../../../../modals/nickname-popovers';
@ -21,14 +21,14 @@ const Address = ({
const t = useI18nContext(); const t = useI18nContext();
const [showNicknamePopovers, setShowNicknamePopovers] = useState(false); const [showNicknamePopovers, setShowNicknamePopovers] = useState(false);
const addressBook = useSelector(getAddressBook); const addressBook = useSelector(getMemoizedAddressBook);
const addressBookEntryObject = addressBook.find( const addressBookEntryObject = addressBook.find(
(entry) => (entry) =>
entry.address.toLowerCase() === checksummedRecipientAddress.toLowerCase(), entry.address.toLowerCase() === checksummedRecipientAddress.toLowerCase(),
); );
const recipientNickname = addressBookEntryObject?.name; const recipientNickname = addressBookEntryObject?.name;
const recipientMetadataName = useSelector((state) => const recipientMetadataName = useSelector((state) =>
getMetadataContractName(state, checksummedRecipientAddress), getMemoizedMetadataContractName(state, checksummedRecipientAddress),
); );
const recipientToRender = addressOnly const recipientToRender = addressOnly

View File

@ -804,6 +804,27 @@ export function getShowWhatsNewPopup(state) {
const createDeepEqualSelector = createSelectorCreator(defaultMemoize, isEqual); const createDeepEqualSelector = createSelectorCreator(defaultMemoize, isEqual);
export const getMemoizedMetaMaskIdentities = createDeepEqualSelector(
getMetaMaskIdentities,
(identities) => identities,
);
export const getMemoizedAddressBook = createDeepEqualSelector(
getAddressBook,
(addressBook) => addressBook,
);
export const getMemoizedMetadataContractName = createDeepEqualSelector(
getTokenList,
(_tokenList, address) => address,
(tokenList, address) => {
const entry = Object.values(tokenList).find((identity) =>
isEqualCaseInsensitive(identity.address, toChecksumHexAddress(address)),
);
return entry && entry.name !== '' ? entry.name : '';
},
);
export const getUnapprovedTransactions = (state) => export const getUnapprovedTransactions = (state) =>
state.metamask.unapprovedTxs; state.metamask.unapprovedTxs;