diff --git a/packages/mask/src/plugins/Avatar/Application/NFTAvatarsDialog.tsx b/packages/mask/src/plugins/Avatar/Application/NFTAvatarsDialog.tsx index 16f7941a6fbe..49b24cad0ed1 100644 --- a/packages/mask/src/plugins/Avatar/Application/NFTAvatarsDialog.tsx +++ b/packages/mask/src/plugins/Avatar/Application/NFTAvatarsDialog.tsx @@ -25,6 +25,7 @@ const useStyles = makeStyles()((theme) => ({ backgroundColor: theme.palette.mode === 'dark' ? 'rgba(250, 250, 250, 0.2)' : 'rgba(0, 0, 0, 0.2)', backgroundClip: 'padding-box', }, + overflow: 'hidden', }, })) enum CreateNFTAvatarStep { diff --git a/packages/mask/src/plugins/Avatar/Application/NFTListDialog.tsx b/packages/mask/src/plugins/Avatar/Application/NFTListDialog.tsx index 86428ec9f627..0886e9f120ad 100644 --- a/packages/mask/src/plugins/Avatar/Application/NFTListDialog.tsx +++ b/packages/mask/src/plugins/Avatar/Application/NFTListDialog.tsx @@ -103,11 +103,11 @@ export function NFTListDialog(props: NFTListDialogProps) { const { classes } = useStyles() const currentPluginId = useCurrentWeb3NetworkPluginID() const account = useAccount(currentPluginId) - const currentChainId = useChainId<'all'>(currentPluginId) - const [chainId, setChainId] = useState(currentChainId as ChainId) + const currentChainId = useChainId(currentPluginId) + const [chainId, setChainId] = useState((currentChainId ?? ChainId.Mainnet) as ChainId) const [open_, setOpen_] = useState(false) const [selectedAccount, setSelectedAccount] = useState(account ?? wallets?.[0]?.identity ?? '') - const [selectedPluginId, setSelectedPluginId] = useState(currentPluginId) + const [selectedPluginId, setSelectedPluginId] = useState(currentPluginId ?? NetworkPluginID.PLUGIN_EVM) const [selectedToken, setSelectedToken] = useState(tokenInfo) const [disabled, setDisabled] = useState(false) const t = useI18N() @@ -237,7 +237,7 @@ export function NFTListDialog(props: NFTListDialogProps) { selectedPluginId === NetworkPluginID.PLUGIN_SOLANA ? (x) => x.tokenId : (x) => x.contract?.address.toLowerCase() + x.tokenId, - ) + ).filter((x) => x.chainId === chainId) const NoNFTList = () => { if (!collectibles.length && !loadFinish && !loadError) { diff --git a/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTImage.tsx b/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTImage.tsx index b786a878fb94..f5fbb2c7762f 100644 --- a/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTImage.tsx +++ b/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTImage.tsx @@ -7,7 +7,7 @@ import type { AllChainsNonFungibleToken } from '../types' const useStyles = makeStyles()((theme) => ({ imgBackground: { position: 'relative', - padding: 4, + padding: 6, borderRadius: '100%', display: 'flex', alignItems: 'center', @@ -15,8 +15,8 @@ const useStyles = makeStyles()((theme) => ({ }, icon: { position: 'absolute', - top: 2, - right: 2, + top: 8, + right: 13, width: 20, height: 20, color: theme.palette.primary.main, diff --git a/packages/mask/src/plugins/Avatar/Services/storage.ts b/packages/mask/src/plugins/Avatar/Services/storage.ts index 21c02284070d..fa0421514975 100644 --- a/packages/mask/src/plugins/Avatar/Services/storage.ts +++ b/packages/mask/src/plugins/Avatar/Services/storage.ts @@ -22,7 +22,6 @@ export async function saveAvatar(account: string, network: EnhanceableSite, avat await setAddress(network, avatar.userId, avatar.pluginId ?? NetworkPluginID.PLUGIN_EVM, account) await NFTAvatarStorage(network).set(avatar.userId, { ...avatar, - address: avatar.pluginId === NetworkPluginID.PLUGIN_SOLANA ? avatar.tokenId : avatar.address, sign, }) diff --git a/packages/mask/src/plugins/Avatar/hooks/save/useSave.ts b/packages/mask/src/plugins/Avatar/hooks/save/useSave.ts index f380a2624c8a..45ccdef3da8d 100644 --- a/packages/mask/src/plugins/Avatar/hooks/save/useSave.ts +++ b/packages/mask/src/plugins/Avatar/hooks/save/useSave.ts @@ -24,8 +24,7 @@ export function useSave(pluginId: NetworkPluginID, chainId: ChainId) { persona: ECKeyIdentifier, proof: BindingProof, ) => { - if (pluginId === NetworkPluginID.PLUGIN_SOLANA && !token.tokenId) return - if (pluginId !== NetworkPluginID.PLUGIN_SOLANA && (!token.contract?.address || !token.tokenId)) return + if (!token.contract?.address || !token.tokenId) return const info: NextIDAvatarMeta = { pluginId, nickname: data.nickname, diff --git a/packages/mask/src/plugins/Avatar/hooks/useNFT.ts b/packages/mask/src/plugins/Avatar/hooks/useNFT.ts index 2b24a3d80fd7..d5c5c3c9b604 100644 --- a/packages/mask/src/plugins/Avatar/hooks/useNFT.ts +++ b/packages/mask/src/plugins/Avatar/hooks/useNFT.ts @@ -22,9 +22,9 @@ export function useNFT( chainId, }) return { - amount: asset?.price?.[CurrencyType.NATIVE] ?? '0', + amount: asset?.price?.[CurrencyType.USD] ?? '0', name: asset?.contract?.name ?? '', - symbol: asset?.contract?.symbol ?? 'ETH', + symbol: asset?.payment_tokens?.[0].symbol ?? 'ETH', image: asset?.metadata?.imageURL ?? '', owner: asset?.owner?.address ?? asset?.ownerId ?? '', slug: asset?.collection?.slug ?? '', diff --git a/packages/mask/src/plugins/Avatar/utils/index.ts b/packages/mask/src/plugins/Avatar/utils/index.ts index 8766c899284a..00d4f5c18f2f 100644 --- a/packages/mask/src/plugins/Avatar/utils/index.ts +++ b/packages/mask/src/plugins/Avatar/utils/index.ts @@ -59,11 +59,9 @@ export function formatPrice(amount: string, symbol: string) { export function formatText(name: string, tokenId: string) { const _name = name.replace(/#\d*/, '').trim() - let token = tokenId - if (tokenId.length > 10) { - token = tokenId.slice(0, 6) + '...' + tokenId.slice(-4) - } - return `${_name} #${token}` + const __name = `${_name} #${tokenId}` + if (__name.length > 35) return `${__name.slice(0, 35)}...` + return __name } export function formatTokenId(symbol: string, tokenId: string) { diff --git a/packages/mask/src/social-network-adaptor/twitter.com/ui-provider.ts b/packages/mask/src/social-network-adaptor/twitter.com/ui-provider.ts index bc9174c4d2b4..8db5eb98b6c2 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/ui-provider.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/ui-provider.ts @@ -57,6 +57,9 @@ const useInjectedDialogClassesOverwriteTwitter = makeStyles()((theme) => { display: 'block !important', margin: 12, }, + '&::-webkit-scrollbar': { + display: 'none', + }, }, dialogTitle: { display: 'grid', diff --git a/packages/plugin-infra/src/web3-helpers/index.ts b/packages/plugin-infra/src/web3-helpers/index.ts index b0eb1e1cd1f9..e6139a76b455 100644 --- a/packages/plugin-infra/src/web3-helpers/index.ts +++ b/packages/plugin-infra/src/web3-helpers/index.ts @@ -206,8 +206,7 @@ export declare namespace Web3Helper { export type Web3HubAll = Hub< Definition[NetworkPluginID]['ChainId'], Definition[NetworkPluginID]['SchemaType'], - Definition[NetworkPluginID]['GasOption'], - Definition[NetworkPluginID]['Transaction'] + Definition[NetworkPluginID]['GasOption'] > export type Web3StateAll = Web3Plugin.ObjectCapabilities.Capabilities< diff --git a/packages/plugins/EVM/src/state/Hub/hub.ts b/packages/plugins/EVM/src/state/Hub/hub.ts index 9fd4a6219b44..5a95c60fafc9 100644 --- a/packages/plugins/EVM/src/state/Hub/hub.ts +++ b/packages/plugins/EVM/src/state/Hub/hub.ts @@ -117,7 +117,9 @@ class Hub implements EVM_Hub { [SourceType.Alchemy_EVM]: Alchemy_EVM, } const predicate = createPredicate(Object.keys(providers) as Array) - const filteredProviders = predicate(sourceType) ? [providers[sourceType]] : [Alchemy_EVM, OpenSea, Rarible] + const defaultProviders = + options?.chainId === ChainId.Mainnet ? [OpenSea, Alchemy_EVM, Rarible] : [Alchemy_EVM, OpenSea, Rarible] + const filteredProviders = predicate(sourceType) ? [providers[sourceType]] : defaultProviders return attemptUntil( filteredProviders.map((x) => () => x.getAsset(address, tokenId, options)), undefined, diff --git a/packages/web3-providers/src/alchemy/index.ts b/packages/web3-providers/src/alchemy/index.ts index 602abd2d4dfa..d62d6b98908b 100644 --- a/packages/web3-providers/src/alchemy/index.ts +++ b/packages/web3-providers/src/alchemy/index.ts @@ -237,11 +237,7 @@ function createNFTAsset_EVM( slug: '', description: metaDataResponse.description, }, - link: resolveOpenSeaLink( - metaDataResponse?.contract?.address, - Number.parseInt(metaDataResponse.id?.tokenId, 16).toString(), - chainId, - ), + link: resolveOpenSeaLink(metaDataResponse?.contract?.address, metaDataResponse.id?.tokenId, chainId), owner: { address: first(ownersResponse?.owners), }, diff --git a/packages/web3-providers/src/opensea/index.ts b/packages/web3-providers/src/opensea/index.ts index b59961621531..d7d980903e41 100644 --- a/packages/web3-providers/src/opensea/index.ts +++ b/packages/web3-providers/src/opensea/index.ts @@ -29,7 +29,7 @@ import type { OpenSeaCustomAccount, OpenSeaResponse, } from './types' -import { getOrderUSDPrice, toImage } from './utils' +import { getOrderUnitPrice, getOrderUSDPrice, toImage } from './utils' import { OPENSEA_ACCOUNT_URL, OPENSEA_API_URL } from './constants' async function fetchFromOpenSea(url: string, chainId: ChainId, apiKey?: string) { @@ -123,7 +123,7 @@ function createNFTAsset(chainId: ChainId, asset: OpenSeaResponse): NonFungibleAs ) return { ...createNFTToken(chainId, asset), - link: asset.opensea_link, + link: asset.opensea_link ?? asset.permalink, payment_tokens: orderTokens.concat(offerTokens), auction: isAfter(Date.parse(`${asset.endTime ?? ''}Z`), Date.now()) ? { @@ -148,6 +148,13 @@ function createNFTAsset(chainId: ChainId, asset: OpenSeaResponse): NonFungibleAs type: x.trait_type, value: x.value, })), + price: { + [CurrencyType.USD]: getOrderUnitPrice( + asset.last_sale?.total_price, + asset.last_sale?.payment_token.decimals, + asset.last_sale?.quantity ?? '1', + )?.toString(), + }, orders: asset.orders ?.sort((a, z) => new BigNumber(getOrderUSDPrice(z.current_price, z.payment_token_contract?.usd_price) ?? 0) diff --git a/packages/web3-providers/src/opensea/types.ts b/packages/web3-providers/src/opensea/types.ts index 809d645187e2..3fb28974f5c4 100644 --- a/packages/web3-providers/src/opensea/types.ts +++ b/packages/web3-providers/src/opensea/types.ts @@ -60,6 +60,7 @@ export interface AssetEvent { payment_token: { decimals: number } + quantity: string } export interface OpenSeaAssetContract extends OpenSeaFees { @@ -166,6 +167,7 @@ export interface OpenSeaResponse extends Asset { }> creator: OpenSeaCustomAccount endTime: string + permalink: string } interface Transaction {