From 4c37448c977fd33a1abaf47bde1533632deeb302 Mon Sep 17 00:00:00 2001 From: Nidhi Kumari Date: Tue, 1 Aug 2023 23:51:51 +0530 Subject: [PATCH] Added IPFS toggle (#20172) * added ipfs toggle * added placeholder valur * fixed snapshot * updated tests * updated spec file * hide input if toggle is disabled * updated e2e tests for nft image * fixed view-ercc-1155 spec * updated e2e tests for nfts * added ipfs toggle modal * updated UI for ipfs * updated tests * updated classname * added placeholder image * lint fix * removed prop ipfsEnabled and used with selector * fixed ui for ipfs toggle * updated test * updated test to handle cases * nit fix * ensure default image height match nft image --- app/_locales/en/messages.json | 13 ++++ app/images/default_nft.png | Bin 0 -> 81157 bytes test/e2e/nft/erc721-interaction.spec.js | 6 +- test/e2e/nft/import-erc1155.spec.js | 2 +- test/e2e/nft/import-nft.spec.js | 2 +- test/e2e/nft/remove-erc1155.spec.js | 2 +- test/e2e/nft/remove-nft.spec.js | 2 +- test/e2e/nft/send-nft.spec.js | 2 +- test/e2e/nft/view-erc1155-details.spec.js | 4 +- test/e2e/nft/view-nft-details.spec.js | 4 +- .../nft-default-image.test.js.snap | 41 ++-------- .../app/nft-default-image/index.scss | 15 ++-- .../nft-default-image/nft-default-image.js | 51 +++++-------- .../nft-default-image.stories.js | 11 --- .../nft-default-image.test.js | 58 +++++---------- .../nft-default-image/toggle-ipfs-modal.js | 70 ++++++++++++++++++ .../__snapshots__/nft-details.test.js.snap | 4 +- ui/components/app/nft-details/nft-details.js | 4 +- ui/components/app/nfts-items/nfts-items.js | 13 +++- .../app/nfts-items/nfts-items.test.js | 8 +- ui/components/multichain/nft-item/nft-item.js | 41 +++++++--- .../multichain/nft-item/nft-item.test.js | 29 ++++++-- ui/ducks/app/app.ts | 15 ++++ ui/pages/routes/routes.component.js | 8 ++ ui/pages/routes/routes.container.js | 3 + .../__snapshots__/security-tab.test.js.snap | 49 ++++++++++++ .../security-tab/security-tab.component.js | 43 ++++++++--- ui/store/actionConstants.ts | 2 + ui/store/actions.ts | 11 +++ 29 files changed, 341 insertions(+), 172 deletions(-) create mode 100644 app/images/default_nft.png create mode 100644 ui/components/app/nft-default-image/toggle-ipfs-modal.js diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 4ab689719..2a51f008d 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -2054,6 +2054,16 @@ "invalidSeedPhraseCaseSensitive": { "message": "Invalid input! Secret Recovery Phrase is case sensitive." }, + "ipfsToggleModalDescriptionOne": { + "message": "We use third-party services to show images of your NFTs stored on IPFS, display information related to ENS addresses entered in your browser's address bar, and fetch icons for different tokens. Your IP address may be exposed to these services when you’re using them." + }, + "ipfsToggleModalDescriptionTwo": { + "message": "Selecting Confirm turns on IPFS resolution. You can turn it off in $1 at any time.", + "description": "$1 is the method to turn off ipfs" + }, + "ipfsToggleModalSettings": { + "message": "Settings > Security and privacy" + }, "jazzAndBlockies": { "message": "Jazzicons and Blockies are two different styles of unique icons that help you identify an account at a glance." }, @@ -3821,6 +3831,9 @@ "showMore": { "message": "Show more" }, + "showNft": { + "message": "Show NFT" + }, "showPermissions": { "message": "Show permissions" }, diff --git a/app/images/default_nft.png b/app/images/default_nft.png new file mode 100644 index 0000000000000000000000000000000000000000..a398aeba55251739e08ea047ad29566d3b396aff GIT binary patch literal 81157 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

+21O&!m==8}mIpXe1Z@vU+BlxrG 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 L(o)39TZR80p

-
- NFT Name - -
- # - 123 -
-
+ /> `; exports[`NFT Default Image should match snapshot with missing clickable prop 1`] = `
-
- NFT Name - -
- # - 123 -
-
+ />
`; exports[`NFT Default Image should render with no props 1`] = `
-
- [unknownCollection] - -
- # -
-
+ />
`; diff --git a/ui/components/app/nft-default-image/index.scss b/ui/components/app/nft-default-image/index.scss index e76dbec41..a75286299 100644 --- a/ui/components/app/nft-default-image/index.scss +++ b/ui/components/app/nft-default-image/index.scss @@ -1,17 +1,12 @@ .nft-default { padding-top: 100%; position: relative; + background-image: url('/images/default_nft.png'); + background-size: cover; + background-repeat: no-repeat; - &--clickable { - cursor: pointer; - } - - &__text { - overflow: hidden; + &__button { position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: calc(100% - 32px); + bottom: 16px; } } diff --git a/ui/components/app/nft-default-image/nft-default-image.js b/ui/components/app/nft-default-image/nft-default-image.js index 54c5d688d..9d70df63f 100644 --- a/ui/components/app/nft-default-image/nft-default-image.js +++ b/ui/components/app/nft-default-image/nft-default-image.js @@ -1,27 +1,23 @@ import React from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; +import { useDispatch, useSelector } from 'react-redux'; import { Display, AlignItems, - BlockSize, JustifyContent, - TextVariant, BorderRadius, - TextAlign, - BackgroundColor, } from '../../../helpers/constants/design-system'; import { useI18nContext } from '../../../hooks/useI18nContext'; -import { Text } from '../../component-library'; -import Box from '../../ui/box/box'; +import { ButtonLink, Box } from '../../component-library'; +import { showIpfsModal } from '../../../store/actions'; +import { getIpfsGateway } from '../../../selectors'; -export default function NftDefaultImage({ - name, - tokenId, - className, - clickable = false, -}) { +export default function NftDefaultImage({ className, clickable }) { const t = useI18nContext(); + const dispatch = useDispatch(); + const isIpfsEnabled = useSelector(getIpfsGateway); + return ( - - {name ?? t('unknownCollection')}
#{tokenId} -
+ {!isIpfsEnabled && ( + { + e.stopPropagation(); + dispatch(showIpfsModal()); + }} + > + {t('show')} + + )}
); } NftDefaultImage.propTypes = { - /** - * The name of the NFT collection if not supplied will default to "Unnamed collection" - */ - name: PropTypes.string, - /** - * The token id of the nft - */ - tokenId: PropTypes.string, /** * Controls the css class for the cursor hover */ diff --git a/ui/components/app/nft-default-image/nft-default-image.stories.js b/ui/components/app/nft-default-image/nft-default-image.stories.js index 3f83fcf95..02959ebef 100644 --- a/ui/components/app/nft-default-image/nft-default-image.stories.js +++ b/ui/components/app/nft-default-image/nft-default-image.stories.js @@ -5,21 +5,10 @@ export default { title: 'Components/App/NftDefaultImage', argTypes: { - name: { - control: 'text', - }, - tokenId: { - control: 'text', - }, clickable: { control: 'boolean', }, }, - args: { - name: null, - tokenId: '12345', - clickable: true, - }, }; export const DefaultStory = (args) => ( diff --git a/ui/components/app/nft-default-image/nft-default-image.test.js b/ui/components/app/nft-default-image/nft-default-image.test.js index 3077f68de..f66044bdf 100644 --- a/ui/components/app/nft-default-image/nft-default-image.test.js +++ b/ui/components/app/nft-default-image/nft-default-image.test.js @@ -1,72 +1,54 @@ import React from 'react'; +import configureStore from 'redux-mock-store'; import { renderWithProvider } from '../../../../test/lib/render-helpers'; +import mockState from '../../../../test/data/mock-state.json'; import NftDefaultImage from '.'; describe('NFT Default Image', () => { + const mockShowIpfsModal = jest.fn(); + jest.mock('../../../store/actions.ts', () => ({ + showIpfsModal: () => mockShowIpfsModal, + })); + + const store = configureStore()(mockState); + it('should render with no props', () => { - const { container } = renderWithProvider(); + const { container } = renderWithProvider(, store); expect(container).toMatchSnapshot(); }); it('should match snapshot with all provided props', () => { const props = { - name: 'NFT Name', - tokenId: '123', - clickable: true, + clickable: false, }; - const { container } = renderWithProvider(); + const { container } = renderWithProvider( + , + store, + ); expect(container).toMatchSnapshot(); }); it('should match snapshot with missing clickable prop', () => { - const props = { - name: 'NFT Name', - tokenId: '123', - }; - - const { container } = renderWithProvider(); + const { container } = renderWithProvider(, store); expect(container).toMatchSnapshot(); }); - it('should render NFT name', () => { - const props = { - name: 'NFT Name', - }; - - const { queryByText } = renderWithProvider(); - - const nftElement = queryByText(`${props.name} #`); - - expect(nftElement).toBeInTheDocument(); - }); - - it('should render NFT name and tokenId', () => { - const props = { - name: 'NFT Name', - tokenId: '123', - }; - - const { queryByText } = renderWithProvider(); - - const nftElement = queryByText(`${props.name} #${props.tokenId}`); - - expect(nftElement).toBeInTheDocument(); - }); - it('does not render component with clickable class when clickable is false', () => { const { container } = renderWithProvider( - , + , + store, ); expect(container.firstChild).not.toHaveClass('nft-default--clickable'); }); it('renders component with clickable class when clickable is true', () => { const { container } = renderWithProvider( - , + , + store, ); expect(container.firstChild).toHaveClass('nft-default--clickable'); }); diff --git a/ui/components/app/nft-default-image/toggle-ipfs-modal.js b/ui/components/app/nft-default-image/toggle-ipfs-modal.js new file mode 100644 index 000000000..1dc120771 --- /dev/null +++ b/ui/components/app/nft-default-image/toggle-ipfs-modal.js @@ -0,0 +1,70 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { useDispatch } from 'react-redux'; +import { + Box, + ButtonPrimary, + Modal, + ModalContent, + ModalHeader, + ModalOverlay, + Text, +} from '../../component-library'; +import { useI18nContext } from '../../../hooks/useI18nContext'; +import { hideIpfsModal, setIpfsGateway } from '../../../store/actions'; +import { IPFS_DEFAULT_GATEWAY_URL } from '../../../../shared/constants/network'; +import { + Size, + TextColor, + TextVariant, +} from '../../../helpers/constants/design-system'; + +export const ToggleIpfsModal = ({ onClose }) => { + const t = useI18nContext(); + const dispatch = useDispatch(); + + return ( + + + + {t('showNft')} + + + {t('ipfsToggleModalDescriptionOne')} + + + {t('ipfsToggleModalDescriptionTwo', [ + + {t('ipfsToggleModalSettings')}, + , + ])} + + + { + dispatch(setIpfsGateway(IPFS_DEFAULT_GATEWAY_URL)); + dispatch(hideIpfsModal()); + }} + size={Size.LG} + > + {t('confirm')} + + + + ); +}; + +ToggleIpfsModal.propTypes = { + onClose: PropTypes.func.isRequired, +}; diff --git a/ui/components/app/nft-details/__snapshots__/nft-details.test.js.snap b/ui/components/app/nft-details/__snapshots__/nft-details.test.js.snap index 6ce126fef..643500500 100644 --- a/ui/components/app/nft-details/__snapshots__/nft-details.test.js.snap +++ b/ui/components/app/nft-details/__snapshots__/nft-details.test.js.snap @@ -56,7 +56,7 @@ exports[`NFT Details should match minimal props and state snapshot 1`] = ` alt="MUNK #1 1" class="mm-box nft-item__item nft-item__item-image mm-box--display-block mm-box--justify-content-center" data-testid="nft-image" - src="https://bafybeiclzx7zfjvuiuwobn5ip3ogc236bjqfjzoblumf4pau4ep6dqramu.ipfs.dweb.link" + src="ipfs://QmTSZUNt8AKyDabkyXXXP4oHWDnaVXgNdXoJGEyaYzLbeL" />

diff --git a/ui/components/app/nfts-items/nfts-items.js b/ui/components/app/nfts-items/nfts-items.js index 35e498274..ff044f4c2 100644 --- a/ui/components/app/nfts-items/nfts-items.js +++ b/ui/components/app/nfts-items/nfts-items.js @@ -52,6 +52,7 @@ export default function NftsItems({ const chainId = useSelector(getCurrentChainId); const currentChain = useSelector(getCurrentNetwork); const t = useI18nContext(); + const ipfsGateway = useSelector(getIpfsGateway); useEffect(() => { if ( @@ -86,7 +87,6 @@ export default function NftsItems({ dispatch, ]); - const ipfsGateway = useSelector(getIpfsGateway); const history = useHistory(); const renderCollectionImage = (collectionImage, collectionName) => { @@ -169,9 +169,13 @@ export default function NftsItems({ {isExpanded ? ( {nfts.map((nft, i) => { - const { image, address, tokenId, name } = nft; - const nftImage = getAssetImageURL(image, ipfsGateway); + const { image, address, tokenId, name, imageOriginal } = nft; + const nftImage = getAssetImageURL(imageOriginal, ipfsGateway); const nftImageAlt = getNftImageAlt(nft); + const nftImageURL = imageOriginal?.includes('ipfs') + ? nftImage + : image; + const handleImageClick = () => history.push(`${ASSET_ROUTE}/${address}/${tokenId}`); return ( @@ -182,8 +186,9 @@ export default function NftsItems({ className="nfts-items__item-wrapper" > { ); const nftImages = queryAllByTestId('nft-image'); - - fireEvent.click(nftImages[0]); + const nftDefaultImages = queryAllByTestId('nft-default-image'); + if (nftImages.length) { + fireEvent.click(nftImages[0]); + } else { + fireEvent.click(nftDefaultImages[0]); + } const firstNft = nfts[0]; const nftRoute = `/asset/${firstNft.address}/${firstNft.tokenId}`; diff --git a/ui/components/multichain/nft-item/nft-item.js b/ui/components/multichain/nft-item/nft-item.js index a4f60bf01..a0fc767ef 100644 --- a/ui/components/multichain/nft-item/nft-item.js +++ b/ui/components/multichain/nft-item/nft-item.js @@ -15,7 +15,10 @@ import { Display, JustifyContent, } from '../../../helpers/constants/design-system'; -import { getTestNetworkBackgroundColor } from '../../../selectors'; +import { + getIpfsGateway, + getTestNetworkBackgroundColor, +} from '../../../selectors'; export const NftItem = ({ alt, @@ -25,9 +28,12 @@ export const NftItem = ({ networkSrc, tokenId, onClick, - clickable = false, + clickable, + nftImageURL, }) => { const testNetworkBackgroundColor = useSelector(getTestNetworkBackgroundColor); + const isIpfsEnabled = useSelector(getIpfsGateway); + const isIpfsURL = nftImageURL?.includes('ipfs:'); return ( } > - {src ? ( + {isIpfsEnabled ? ( ) : ( - + <> + {isIpfsURL ? ( + + ) : ( + + )} + )} @@ -91,4 +111,5 @@ NftItem.propTypes = { tokenId: PropTypes.string.isRequired, onClick: PropTypes.func, clickable: PropTypes.bool, + nftImageURL: PropTypes.string, }; diff --git a/ui/components/multichain/nft-item/nft-item.test.js b/ui/components/multichain/nft-item/nft-item.test.js index e9b0179b4..45559e177 100644 --- a/ui/components/multichain/nft-item/nft-item.test.js +++ b/ui/components/multichain/nft-item/nft-item.test.js @@ -1,13 +1,28 @@ import React from 'react'; -import configureStore from 'redux-mock-store'; import { fireEvent } from '@testing-library/react'; +import configureStore from '../../../store/store'; import '@testing-library/jest-dom/extend-expect'; import mockState from '../../../../test/data/mock-state.json'; import { renderWithProvider } from '../../../../test/lib/render-helpers'; import { NftItem } from '.'; +const store = configureStore({ + metamask: { + ...mockState.metamask, + }, +}); + +const noIpfsStore = configureStore({ + metamask: { + ...mockState.metamask, + ipfsGateway: '', + }, +}); + describe('NftItem component', () => { - const store = configureStore()(mockState); + jest.mock('../../../store/actions.ts', () => ({ + getTokenStandardAndDetails: jest.fn().mockResolvedValue(), + })); describe('render', () => { const props = { alt: 'Test Alt', @@ -18,6 +33,7 @@ describe('NftItem component', () => { networkSrc: 'test-network-src', tokenId: '1', onClick: jest.fn(), + nftImageURL: '', }; it('renders correctly with an image source', () => { @@ -29,10 +45,13 @@ describe('NftItem component', () => { expect(getByTestId('nft-image')).toHaveAttribute('src', 'test-src'); }); - it('renders correctly with default image when no image source is provided', () => { + it('renders correctly with default image when no ipfs is off and no image is provided', () => { const { getByTestId, queryByTestId } = renderWithProvider( - , - store, + , + noIpfsStore, ); expect(queryByTestId('nft-image')).not.toBeInTheDocument(); diff --git a/ui/ducks/app/app.ts b/ui/ducks/app/app.ts index e2b3a151e..e34edcf2d 100644 --- a/ui/ducks/app/app.ts +++ b/ui/ducks/app/app.ts @@ -27,6 +27,7 @@ interface AppState { } | null; networkDropdownOpen: boolean; importNftsModalOpen: boolean; + showIpfsModalOpen: boolean; accountDetail: { subview?: string; accountExport?: string; @@ -96,6 +97,7 @@ const initialState: AppState = { qrCodeData: null, networkDropdownOpen: false, importNftsModalOpen: false, + showIpfsModalOpen: false, accountDetail: { privateKey: '', }, @@ -176,6 +178,19 @@ export default function reduceApp( ...appState, importNftsModalOpen: false, }; + + case actionConstants.SHOW_IPFS_MODAL_OPEN: + return { + ...appState, + showIpfsModalOpen: true, + }; + + case actionConstants.SHOW_IPFS_MODAL_CLOSE: + return { + ...appState, + showIpfsModalOpen: false, + }; + // alert methods case actionConstants.ALERT_OPEN: return { diff --git a/ui/pages/routes/routes.component.js b/ui/pages/routes/routes.component.js index 59b9bf73f..d6280a79c 100644 --- a/ui/pages/routes/routes.component.js +++ b/ui/pages/routes/routes.component.js @@ -117,6 +117,7 @@ import DeprecatedTestNetworks from '../../components/ui/deprecated-test-networks import NewNetworkInfo from '../../components/ui/new-network-info/new-network-info'; import { ThemeType } from '../../../shared/constants/preferences'; import { Box } from '../../components/component-library'; +import { ToggleIpfsModal } from '../../components/app/nft-default-image/toggle-ipfs-modal'; export default class Routes extends Component { static propTypes = { @@ -159,6 +160,8 @@ export default class Routes extends Component { accountDetailsAddress: PropTypes.string, isImportNftsModalOpen: PropTypes.bool.isRequired, hideImportNftsModal: PropTypes.func.isRequired, + isIpfsModalOpen: PropTypes.bool.isRequired, + hideIpfsModal: PropTypes.func.isRequired, }; static contextTypes = { @@ -515,6 +518,8 @@ export default class Routes extends Component { location, isImportNftsModalOpen, hideImportNftsModal, + isIpfsModalOpen, + hideIpfsModal, } = this.props; const loadMessage = loadingMessage || isNetworkLoading @@ -576,6 +581,9 @@ export default class Routes extends Component { {isImportNftsModalOpen ? ( hideImportNftsModal()} /> ) : null} + {isIpfsModalOpen ? ( + hideIpfsModal()} /> + ) : null} {isLoading ? : null} {!isLoading && isNetworkLoading ? : null} diff --git a/ui/pages/routes/routes.container.js b/ui/pages/routes/routes.container.js index 5f31829d1..03c0e7f46 100644 --- a/ui/pages/routes/routes.container.js +++ b/ui/pages/routes/routes.container.js @@ -16,6 +16,7 @@ import { import { lockMetamask, hideImportNftsModal, + hideIpfsModal, setCurrentCurrency, setLastActiveTime, setMouseUserState, @@ -65,6 +66,7 @@ function mapStateToProps(state) { isNetworkMenuOpen: state.metamask.isNetworkMenuOpen, accountDetailsAddress: state.appState.accountDetailsAddress, isImportNftsModalOpen: state.appState.importNftsModalOpen, + isIpfsModalOpen: state.appState.showIpfsModalOpen, }; } @@ -80,6 +82,7 @@ function mapDispatchToProps(dispatch) { toggleAccountMenu: () => dispatch(toggleAccountMenu()), toggleNetworkMenu: () => dispatch(toggleNetworkMenu()), hideImportNftsModal: () => dispatch(hideImportNftsModal()), + hideIpfsModal: () => dispatch(hideIpfsModal()), }; } diff --git a/ui/pages/settings/security-tab/__snapshots__/security-tab.test.js.snap b/ui/pages/settings/security-tab/__snapshots__/security-tab.test.js.snap index f6d77b174..23cf0907a 100644 --- a/ui/pages/settings/security-tab/__snapshots__/security-tab.test.js.snap +++ b/ui/pages/settings/security-tab/__snapshots__/security-tab.test.js.snap @@ -381,6 +381,55 @@ exports[`Security Tab should match snapshot 1`] = ` The IPFS gateway makes it possible to access and view data hosted by third parties. You can add a custom IPFS gateway or continue using the default.

+
+