Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: NFT Grid View #29445

Merged
merged 103 commits into from
Jan 13, 2025
Merged
Show file tree
Hide file tree
Changes from 102 commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
89ed31d
chore: Update legacy js files to ts
gambinish Dec 3, 2024
96fc653
chore: Convert to typescript, correct infered usages missed my js
gambinish Dec 4, 2024
d54faa0
chore: Update snapshots
gambinish Dec 4, 2024
577ff25
Merge branch 'main' into feat/nft-grid-view-v1
gambinish Dec 4, 2024
c81bcc2
fix: Update snapshot
gambinish Dec 4, 2024
37377cc
fix: Update snapshot
gambinish Dec 4, 2024
eac5823
fix: Remove deprecated styles
gambinish Dec 4, 2024
0adddd1
fix: Cleanup NftItemI type
gambinish Dec 4, 2024
a386f2e
fix: lint
gambinish Dec 4, 2024
111d30e
fix: Continue to consolidate types
gambinish Dec 5, 2024
37ea42e
Merge branch 'main' into feat/nft-grid-view-v1
gambinish Dec 6, 2024
5b02cb6
Merge branch 'feat/nft-grid-view-v1' of github.com:MetaMask/metamask-…
gambinish Dec 6, 2024
2f0503d
fix: Lint nft-items file import order
gambinish Dec 6, 2024
4200923
fix: ts-lint
gambinish Dec 6, 2024
34e4634
refactor: Convert deprecated Menu component to Modal
gambinish Dec 6, 2024
dd29eb6
fix: Tweak typeography
gambinish Dec 6, 2024
9d6a2dd
fix: Lint unused import
gambinish Dec 6, 2024
15b1693
fix: Tweak NftItemProps type
gambinish Dec 6, 2024
8bd7cc6
fix: Attempt another lint fix
gambinish Dec 6, 2024
67c9976
fix: ts-ignore nft-detail string | undefined error
gambinish Dec 6, 2024
7c935f0
fix: Lint file imports
gambinish Dec 6, 2024
d27c8ca
fix: Temporarily skip UI unit tests to see CI green
gambinish Dec 6, 2024
fc863d9
Change nft-list spec to target h4 rathger than h5
gambinish Dec 9, 2024
b8866be
fix: Change e2e selectors for new headings
gambinish Dec 9, 2024
07aa067
fix: ipfs-spec e2e
gambinish Dec 13, 2024
c08737a
fix: ts error
gambinish Dec 13, 2024
1b6dd6a
fix: imageSrc is of type string | undefined
gambinish Dec 13, 2024
f5d6a03
fix: cast to string | undefined
gambinish Dec 13, 2024
71acb67
fix: Another string | undefined cast
gambinish Dec 13, 2024
ca576a2
fix: Another cast
gambinish Dec 13, 2024
b5cbeba
fix: Correctly pass testId to SelectableListItem
gambinish Dec 13, 2024
e85c187
fix: flaky test
gambinish Dec 13, 2024
6de3c78
fix: Update nft-details unit test
gambinish Dec 14, 2024
1a8b10f
fix: lint
gambinish Dec 14, 2024
160f60b
chore: Cleanup comments in test file
gambinish Dec 14, 2024
9f25019
chore: Update unit test suite
gambinish Dec 14, 2024
f983745
Merge branch 'main' into feat/nft-grid-view-v1
gambinish Jan 6, 2025
a83b162
refactor: Init grid view styling
gambinish Jan 6, 2025
7eab478
fix: Lint unused imports
gambinish Jan 6, 2025
40f2779
fix: Lint order
gambinish Jan 6, 2025
b8ce64b
fix: Lint
gambinish Jan 6, 2025
2669c1b
fix: Temporarily comment out asset picker
gambinish Jan 6, 2025
95c9c3d
fix: Lint
gambinish Jan 6, 2025
c11eb09
fix: Lint
gambinish Jan 6, 2025
3671235
fix: use NFT type
gambinish Jan 6, 2025
f80f790
fix: Lint file ordering
gambinish Jan 6, 2025
becc9f1
fix: Unrelated undefined check
gambinish Jan 7, 2025
d0998fc
fix: Lint
gambinish Jan 7, 2025
d3d4e07
fix: Add standardized address for asset-picker-modal
gambinish Jan 7, 2025
e690bb8
fix: Lint scss
gambinish Jan 7, 2025
071840d
fix: Lint scss
gambinish Jan 7, 2025
0f3e5e8
chore: Replace action buttons
gambinish Jan 7, 2025
393e995
Merge branch 'main' into feat/nft-grid-view-v1
gambinish Jan 7, 2025
bb2791f
chore: Add click handler to navigate to nft details
gambinish Jan 7, 2025
66f64e0
feat: Add nft-grid component
gambinish Jan 7, 2025
fce24ff
refactor: Nft tab and Asset Picker should render new NftGrid component
gambinish Jan 7, 2025
cbb71d9
chore: Add click event handlers to nfts grid view
gambinish Jan 7, 2025
eb83dd2
chore: Add previously owned nfts section to nft grid
gambinish Jan 8, 2025
7773f7e
fix: Import nft e2e
gambinish Jan 8, 2025
3b13b64
chore: Remove Previously Owned NFT from jsx
gambinish Jan 8, 2025
70385d5
fix: Collection name no longer present for e2e test to query
gambinish Jan 8, 2025
0ac758a
fix: Remove collection title query from watch nft e2e suite
gambinish Jan 8, 2025
f53d51a
fix: erc721 e2e incorrect selector
gambinish Jan 8, 2025
777d22e
fix: auto-detect-nft spec
gambinish Jan 8, 2025
2632be2
fix: Replace learn more link
gambinish Jan 8, 2025
295a098
fix: Lint
gambinish Jan 8, 2025
85e231d
fix: Lint
gambinish Jan 8, 2025
7fb749c
fix: Add codefencing
gambinish Jan 8, 2025
51789d6
Merge branch 'main' into feat/nft-grid-view-v1
gambinish Jan 8, 2025
b284ab9
chore: Merge main
gambinish Jan 8, 2025
cbe9ed3
fix: Update snapshot
gambinish Jan 8, 2025
447447d
fix: Update unit tests and snapshots
gambinish Jan 8, 2025
3af446b
Merge branch 'main' into feat/nft-grid-view-v1
gambinish Jan 8, 2025
867b881
fix: Update snapshots, fix mock of useNfts
gambinish Jan 9, 2025
f498f46
Merge branch 'feat/nft-grid-view-v1' into feat/nft-grid-view-v2
gambinish Jan 9, 2025
1afe89c
fix: Update flaky unit test
gambinish Jan 9, 2025
d779368
fix: Remove regression to Bridge page
gambinish Jan 9, 2025
dbd2705
fix: Update snapshot after regression fix
gambinish Jan 9, 2025
96675aa
fix: Flakey unit test
gambinish Jan 9, 2025
1cd7f4c
fix: Flakey snapshot
gambinish Jan 9, 2025
90775d1
fix: Remove unused stylesheets
gambinish Jan 9, 2025
9051481
fix: Cleanup
gambinish Jan 9, 2025
08c47b6
fix: Remove scss imports
gambinish Jan 9, 2025
68aaba3
fix: Derive NFT collection name from NFT asset
gambinish Jan 9, 2025
c93a95b
chore: update grid to use design system. ensure detail view rendering…
gambinish Jan 9, 2025
25fe189
fix: Update snapshots
gambinish Jan 9, 2025
f23546a
chore: Update snapshots
gambinish Jan 9, 2025
e8160f9
Merge branch 'main' into feat/nft-grid-view-v2
gambinish Jan 9, 2025
0e6bc29
fix: Add privacy mode to nft grid
gambinish Jan 10, 2025
92b03c3
Merge branch 'main' into feat/nft-grid-view-v2
gambinish Jan 10, 2025
e5269f5
fix: Update snapshot
gambinish Jan 10, 2025
96bb580
Merge branch 'feat/nft-grid-view-v2' of github.com:MetaMask/metamask-…
gambinish Jan 10, 2025
eaf1833
fix: Lint
gambinish Jan 10, 2025
fce3644
fix: Style tweak
gambinish Jan 10, 2025
bb84fe3
fix: Fix border color to be muted
gambinish Jan 10, 2025
c47377e
chore: Remove NftItems components and tests as they are no longer bei…
gambinish Jan 10, 2025
e3ff91c
fix: simplify nullish coalescing
gambinish Jan 10, 2025
06687fb
fix: Remove typecasting
gambinish Jan 10, 2025
dd50a1b
fix: Bug where closing popover redirected to opensea
gambinish Jan 10, 2025
ebb829e
fix: Updates to e2e
gambinish Jan 10, 2025
08e7587
chore: TestDapp NFTs are minted without names, remove this check in e2e
gambinish Jan 10, 2025
1f840e7
Merge branch 'main' into feat/nft-grid-view-v2
gambinish Jan 10, 2025
097a251
fix: Nits
gambinish Jan 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion test/e2e/page-objects/pages/home/nft-list.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class NftListPage {
`Check that NFT item ${nftName} is displayed in NFT tab on homepage`,
);
await this.driver.waitForSelector({
tag: 'h5',
tag: 'p',
text: nftName,
});
}
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/tests/tokens/nft/auto-detect-nft.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ describe('NFT detection', function () {
await homepage.goToNftTab();
const nftListPage = new NFTListPage(driver);
await nftListPage.check_nftNameIsDisplayed(
'ENS: Ethereum Name Service (1)',
'ENS: Ethereum Name Service',
);
await nftListPage.check_nftImageIsDisplayed();
},
Expand Down
11 changes: 0 additions & 11 deletions test/e2e/tests/tokens/nft/erc721-interaction.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@ describe('ERC721 NFTs testdapp interaction', function () {
WINDOW_TITLES.ExtensionInFullScreenView,
);
await clickNestedButton(driver, 'NFTs');
await driver.findElement({ text: 'TestDappNFTs (5)' });
const nftsListItemsFirstCheck = await driver.findElements(
'.nft-item__container',
);
Expand Down Expand Up @@ -167,8 +166,6 @@ describe('ERC721 NFTs testdapp interaction', function () {
WINDOW_TITLES.ExtensionInFullScreenView,
);
await clickNestedButton(driver, 'NFTs');
// Changed this check from 3 to 6, because after mint all nfts has been added to state,
await driver.findElement({ text: 'TestDappNFTs (6)' });
const nftsListItemsFirstCheck = await driver.findElements(
'.nft-item__container',
);
Expand Down Expand Up @@ -202,7 +199,6 @@ describe('ERC721 NFTs testdapp interaction', function () {
WINDOW_TITLES.ExtensionInFullScreenView,
);
await clickNestedButton(driver, 'NFTs');
await driver.findElement({ text: 'TestDappNFTs (6)' });
const nftsListItemsSecondCheck = await driver.findElements(
'.nft-item__container',
);
Expand Down Expand Up @@ -303,7 +299,6 @@ describe('ERC721 NFTs testdapp interaction', function () {
WINDOW_TITLES.ExtensionInFullScreenView,
);
await clickNestedButton(driver, 'NFTs');
await driver.findElement({ text: 'TestDappNFTs (5)' });
const nftsListItemsSecondCheck = await driver.findElements(
'.nft-item__container',
);
Expand Down Expand Up @@ -622,7 +617,6 @@ describe('ERC721 NFTs testdapp interaction', function () {
WINDOW_TITLES.ExtensionInFullScreenView,
);
await clickNestedButton(driver, 'NFTs');
await driver.findElement({ text: 'TestDappNFTs (5)' });
const nftsListItemsFirstCheck = await driver.findElements(
'.nft-item__container',
);
Expand Down Expand Up @@ -704,8 +698,6 @@ describe('ERC721 NFTs testdapp interaction', function () {
WINDOW_TITLES.ExtensionInFullScreenView,
);
await clickNestedButton(driver, 'NFTs');
// Changed this check from 3 to 6, because after mint all nfts has been added to state,
await driver.findElement({ text: 'TestDappNFTs (6)' });
const nftsListItemsFirstCheck = await driver.findElements(
'.nft-item__container',
);
Expand Down Expand Up @@ -738,8 +730,6 @@ describe('ERC721 NFTs testdapp interaction', function () {
await driver.switchToWindowWithTitle(
WINDOW_TITLES.ExtensionInFullScreenView,
);
await clickNestedButton(driver, 'NFTs');
await driver.findElement({ text: 'TestDappNFTs (6)' });
const nftsListItemsSecondCheck = await driver.findElements(
'.nft-item__container',
);
Expand Down Expand Up @@ -834,7 +824,6 @@ describe('ERC721 NFTs testdapp interaction', function () {
WINDOW_TITLES.ExtensionInFullScreenView,
);
await clickNestedButton(driver, 'NFTs');
await driver.findElement({ text: 'TestDappNFTs (5)' });
const nftsListItemsSecondCheck = await driver.findElements(
'.nft-item__container',
);
Expand Down
7 changes: 3 additions & 4 deletions test/e2e/tests/tokens/nft/import-erc1155.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,9 @@ describe('Import ERC1155 NFT', function () {
assert.equal(await newNftNotification.isDisplayed(), true);

// Check the imported ERC1155 and its image are displayed in the ERC1155 tab
const importedERC1155 = await driver.waitForSelector({
css: 'h5',
text: 'Unnamed collection',
});
const importedERC1155 = await driver.findElement(
'[data-testid="nft-item"]',
);
assert.equal(await importedERC1155.isDisplayed(), true);

const importedERC1155Image = await driver.findVisibleElement(
Expand Down
3 changes: 0 additions & 3 deletions test/e2e/tests/tokens/nft/import-nft.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ describe('Import NFT', function () {
const nftList = new NftListPage(driver);
await nftList.importNft(contractAddress, '1');
await nftList.check_successImportNftMessageIsDisplayed();
await nftList.check_nftNameIsDisplayed('TestDappNFTs');
await nftList.check_nftImageIsDisplayed();
},
);
Expand Down Expand Up @@ -60,7 +59,6 @@ describe('Import NFT', function () {
const nftList = new NftListPage(driver);
await nftList.importNft(contractAddress, '1');
await nftList.check_successImportNftMessageIsDisplayed();
await nftList.check_nftNameIsDisplayed('TestDappNFTs');
await nftList.check_nftImageIsDisplayed();

// Create new account with default name Account 2
Expand All @@ -81,7 +79,6 @@ describe('Import NFT', function () {
await accountListPage.switchToAccount('Account 1');
await headerNavbar.check_accountLabel('Account 1');
await homepage.check_localBlockchainBalanceIsDisplayed(ganacheServer);
await nftList.check_nftNameIsDisplayed('TestDappNFTs');
await nftList.check_nftImageIsDisplayed();
},
);
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/tests/tokens/nft/remove-erc1155.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ describe('Remove ERC1155 NFT', function () {

// Open the details page and click remove nft button
await driver.clickElement('[data-testid="account-overview__nfts-tab"]');
await driver.clickElement('[data-testid="nft-image"]');
await driver.clickElement('.nft-item__container');
await driver.clickElement('[data-testid="nft-options__button"]');
await driver.clickElement('[data-testid="nft-item-remove"]');

Expand Down
17 changes: 0 additions & 17 deletions test/e2e/tests/tokens/nft/send-nft.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,14 +76,6 @@ describe('Send NFT', function () {
text: 'Send Test Dapp NFTs',
});
assert.equal(await sendNftItem.isDisplayed(), true);

// Go back to NFTs tab and check the imported NFT is shown as previously owned
await driver.clickElement('[data-testid="account-overview__nfts-tab"]');
const previouslyOwnedNft = await driver.findElement({
css: 'h5',
text: 'Previously Owned',
});
assert.equal(await previouslyOwnedNft.isDisplayed(), true);
},
);
});
Expand Down Expand Up @@ -134,15 +126,6 @@ describe('Send NFT', function () {
text: 'Safe transfer from',
});
assert.equal(await sendNftItem.isDisplayed(), true);

// Go back to NFTs tab and check the imported NFT is shown as previously owned
await driver.clickElement('[data-testid="account-overview__nfts-tab"]');

const previouslyOwnedNft = await driver.findElement({
css: 'h5',
text: 'Previously Owned',
});
assert.equal(await previouslyOwnedNft.isDisplayed(), true);
},
);
});
Expand Down
3 changes: 1 addition & 2 deletions ui/components/app/app-components.scss
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
@import 'alert-system/alert-modal/index';
@import 'alert-system/inline-alert/index';
@import 'import-token/index';
@import 'assets/nfts/nfts-items/index';
@import 'assets/nfts/nfts-tab/index';
@import 'assets/nfts/nft-details/index';
@import 'assets/nfts/nft-default-image/index';
@import 'assets/nfts/nft-options/index';
Expand Down Expand Up @@ -57,6 +55,7 @@
@import 'assets/asset-list/asset-list-control-bar/index';
@import 'assets/asset-list/sort-control/index';
@import 'assets/token-cell/token-cell';
@import 'assets/nfts/nft-grid/index';
@import 'transaction-activity-log/index';
@import 'transaction-breakdown/index';
@import 'transaction-icon/transaction-icon';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
exports[`NFT Default Image should match snapshot with all provided props 1`] = `
<div>
<div
class="mm-box nft-default mm-box--display-flex mm-box--rounded-lg"
class="mm-box nft-default mm-box--display-flex mm-box--justify-content-center mm-box--align-items-center mm-box--rounded-lg"
data-testid="nft-default-image"
tabindex="0"
/>
Expand All @@ -13,7 +13,7 @@ exports[`NFT Default Image should match snapshot with all provided props 1`] = `
exports[`NFT Default Image should match snapshot with missing clickable prop 1`] = `
<div>
<div
class="mm-box nft-default mm-box--display-flex mm-box--rounded-lg"
class="mm-box nft-default mm-box--display-flex mm-box--justify-content-center mm-box--align-items-center mm-box--rounded-lg"
data-testid="nft-default-image"
tabindex="0"
/>
Expand All @@ -23,7 +23,7 @@ exports[`NFT Default Image should match snapshot with missing clickable prop 1`]
exports[`NFT Default Image should render with no props 1`] = `
<div>
<div
class="mm-box nft-default mm-box--display-flex mm-box--rounded-lg"
class="mm-box nft-default mm-box--display-flex mm-box--justify-content-center mm-box--align-items-center mm-box--rounded-lg"
data-testid="nft-default-image"
tabindex="0"
/>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import React from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import { useDispatch } from 'react-redux';
import {
Expand All @@ -12,7 +11,15 @@ import { useI18nContext } from '../../../../../hooks/useI18nContext';
import { ButtonLink, Box } from '../../../../component-library';
import { showIpfsModal } from '../../../../../store/actions';

export default function NftDefaultImage({ className, clickable }) {
type NftDefaultImageProps = {
className: string;
clickable?: boolean;
};

export default function NftDefaultImage({
className,
clickable,
}: NftDefaultImageProps) {
const t = useI18nContext();
const dispatch = useDispatch();

Expand All @@ -21,18 +28,18 @@ export default function NftDefaultImage({ className, clickable }) {
tabIndex={0}
data-testid="nft-default-image"
className={classnames(className, 'nft-default', {
'nft-default--clickable': clickable,
'nft-default--clickable': Boolean(clickable),
})}
display={Display.Flex}
alignItems={AlignItems.Center}
justifyContent={JustifyContent.Center}
alignItems={AlignItems.center}
justifyContent={JustifyContent.center}
borderRadius={BorderRadius.LG}
>
{clickable && (
<ButtonLink
block
className="nft-default__button"
onClick={(e) => {
onClick={(e: { stopPropagation: () => void }) => {
e.stopPropagation();
dispatch(showIpfsModal());
}}
Expand All @@ -43,15 +50,3 @@ export default function NftDefaultImage({ className, clickable }) {
</Box>
);
}

NftDefaultImage.propTypes = {
/**
* Controls the css class for the cursor hover
* It determines if we need to show the button on default image or not
*/
clickable: PropTypes.bool,
/**
* An additional className to apply to the NFT default image
*/
className: PropTypes.string,
};
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,12 @@ exports[`NFT Details should match minimal props and state snapshot 1`] = `
style="mask-image: url('./images/icons/arrow-left.svg');"
/>
</button>
<div>
<div
class="mm-box"
>
<button
aria-label="NFT Options"
class="mm-box mm-button-icon mm-button-icon--size-sm mm-box--display-inline-flex mm-box--justify-content-center mm-box--align-items-center mm-box--color-text-default mm-box--background-color-transparent mm-box--rounded-lg"
class="mm-box mm-button-icon mm-button-icon--size-sm mm-box--display-inline-flex mm-box--justify-content-center mm-box--align-items-center mm-box--color-icon-default mm-box--background-color-transparent mm-box--rounded-lg"
data-testid="nft-options__button"
>
<span
Expand All @@ -43,37 +45,47 @@ exports[`NFT Details should match minimal props and state snapshot 1`] = `
<div
class="mm-box nft-details__nft-item"
>
<button
class="mm-box nft-item__container"
data-testid="nft-item"
<div
class="mm-box nft-item__card"
>
<div
class="mm-box mm-badge-wrapper nft-item__badge-wrapper nft-item__badge-wrapper__clickable mm-box--display-block"
<button
class="mm-box nft-item__container"
data-testid="nft-item"
>
<div
class="mm-box nft-item__default-image nft-default nft-default--clickable mm-box--display-flex mm-box--rounded-lg"
data-testid="nft-default-image"
tabindex="0"
class="mm-box mm-badge-wrapper nft-item__badge-wrapper nft-item__badge-wrapper__clickable mm-box--display-block"
>
<button
class="mm-box mm-text mm-button-base mm-button-base--block nft-default__button mm-button-link mm-button-link--size-auto mm-text--body-md-medium mm-box--padding-0 mm-box--padding-right-0 mm-box--padding-left-0 mm-box--display-inline-flex mm-box--justify-content-center mm-box--align-items-center mm-box--color-primary-default mm-box--background-color-transparent"
<div
class="mm-box nft-item__default-image nft-default nft-default--clickable mm-box--display-flex mm-box--justify-content-center mm-box--align-items-center mm-box--rounded-lg"
data-testid="nft-default-image"
tabindex="0"
>
Show
</button>
</div>
<div
class="mm-box mm-badge-wrapper__badge-container"
style="top: -4px; right: -4px;"
>
<button
class="mm-box mm-text mm-button-base mm-button-base--block nft-default__button mm-button-link mm-button-link--size-auto mm-text--body-md-medium mm-box--padding-0 mm-box--padding-right-0 mm-box--padding-left-0 mm-box--display-inline-flex mm-box--justify-content-center mm-box--align-items-center mm-box--color-primary-default mm-box--background-color-transparent"
>
Show
</button>
</div>
<div
class="mm-box mm-text mm-avatar-base mm-avatar-base--size-sm mm-avatar-network nft-item__network-badge mm-text--body-sm mm-text--text-transform-uppercase mm-box--display-flex mm-box--justify-content-center mm-box--align-items-center mm-box--color-text-default mm-box--background-color-background-alternative mm-box--rounded-md mm-box--border-color-background-default mm-box--border-width-2 box--border-style-solid"
data-testid="nft-network-badge"
class="mm-box mm-badge-wrapper__badge-container"
style="top: -4px; right: -4px;"
>
G
<div
class="mm-box mm-text mm-avatar-base mm-avatar-base--size-sm mm-avatar-network nft-item__network-badge mm-text--body-sm mm-text--text-transform-uppercase mm-box--display-flex mm-box--justify-content-center mm-box--align-items-center mm-box--color-text-default mm-box--background-color-background-alternative mm-box--rounded-md mm-box--border-color-background-default mm-box--border-width-2 box--border-style-solid"
data-testid="nft-network-badge"
>
G
</div>
</div>
</div>
</div>
</button>
</button>
<p
class="mm-box mm-text mm-text--body-sm mm-text--ellipsis mm-box--color-text-default"
/>
<p
class="mm-box mm-text mm-text--body-sm mm-text--ellipsis mm-box--color-text-alternative"
/>
</div>
</div>
</div>
<div
Expand Down
Loading
Loading