From 445bb3fec89db0cf2c36580d73b02257e28ac6e1 Mon Sep 17 00:00:00 2001 From: guanbinrui <52657989+guanbinrui@users.noreply.github.com> Date: Wed, 24 Jul 2024 11:26:10 +0800 Subject: [PATCH] [Release] Hotfix 2.26.4 => 2.26.5 (patch) (#11703) * chore: bump version to 2.26.5 * fix: fw-6308 celo icon doesn't show in collectible card, enable zora (#11704) * fix: fw-6308 celo icon doesn't show in collectible card * fix: enable zora for simplehash * fix: disable celo for simplehash (#11705) * fix: lazy load calendar data (#11706) --------- Co-authored-by: Wukong Sun --- cspell.json | 1 + package.json | 2 +- packages/mask/.webpack/config.ts | 2 +- .../src/SiteAdaptor/CalendarContent.tsx | 9 ++++--- .../src/SiteAdaptor/components/DatePicker.tsx | 6 ++--- .../Calendar/src/hooks/useEventList.tsx | 9 ++++--- .../AssetsManagement/ChainRuntimeProvider.tsx | 17 +++++++++---- .../src/UI/components/NetworkIcon/index.tsx | 13 ++++++++-- .../web3-providers/src/SimpleHash/helpers.ts | 9 +++++-- packages/web3-shared/evm/src/assets/zora.png | Bin 0 -> 4967 bytes .../web3-shared/evm/src/constants/chains.json | 24 ++++++++++++++++++ .../evm/src/constants/descriptors.ts | 14 +++++++++- packages/web3-shared/evm/src/types/index.ts | 3 +++ 13 files changed, 88 insertions(+), 21 deletions(-) create mode 100644 packages/web3-shared/evm/src/assets/zora.png diff --git a/cspell.json b/cspell.json index a344509ed9ea..77e36629540a 100644 --- a/cspell.json +++ b/cspell.json @@ -35,6 +35,7 @@ "arweave", "astar", "astarexchange", + "astria", "attrace", "avalanche", "avax", diff --git a/package.json b/package.json index a9cb9eca555e..2ac060cca035 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "yarn": ">=999.0.0", "npm": ">=999.0.0" }, - "version": "2.26.4", + "version": "2.26.5", "private": true, "license": "AGPL-3.0-or-later", "scripts": { diff --git a/packages/mask/.webpack/config.ts b/packages/mask/.webpack/config.ts index be8a6eb21a63..242c058a6ac0 100644 --- a/packages/mask/.webpack/config.ts +++ b/packages/mask/.webpack/config.ts @@ -324,7 +324,7 @@ export async function createConfiguration(_inputFlags: BuildFlags): Promise { switch (currentTab) { case 'news': diff --git a/packages/plugins/Calendar/src/SiteAdaptor/components/DatePicker.tsx b/packages/plugins/Calendar/src/SiteAdaptor/components/DatePicker.tsx index de5ad07328af..9a84b6a491d3 100644 --- a/packages/plugins/Calendar/src/SiteAdaptor/components/DatePicker.tsx +++ b/packages/plugins/Calendar/src/SiteAdaptor/components/DatePicker.tsx @@ -90,9 +90,9 @@ export function DatePicker({ selectedDate, setSelectedDate, open, setOpen, curre const startingDayOfWeek = monthStart.getDay() const daysInMonth = endOfMonth(currentDate).getDate() const daysInPrevMonth = endOfMonth(addMonths(currentDate, -1)).getDate() - const { data: eventList } = useEventList(monthStart) - const { data: newsList } = useNewsList(monthStart) - const { data: nftList } = useNFTList(monthStart) + const { data: eventList } = useEventList(monthStart, currentTab === 'event') + const { data: newsList } = useNewsList(monthStart, currentTab === 'news') + const { data: nftList } = useNFTList(monthStart, currentTab === 'nfts') const list = useMemo(() => { switch (currentTab) { case 'news': diff --git a/packages/plugins/Calendar/src/hooks/useEventList.tsx b/packages/plugins/Calendar/src/hooks/useEventList.tsx index 1f83cf3f0bc1..5445c3c7fba6 100644 --- a/packages/plugins/Calendar/src/hooks/useEventList.tsx +++ b/packages/plugins/Calendar/src/hooks/useEventList.tsx @@ -5,10 +5,11 @@ import { EMPTY_OBJECT } from '@masknet/shared-base' import type { UseQueryResult } from '@tanstack/react-query' import { addDays } from 'date-fns/esm' -export function useNewsList(date: Date): UseQueryResult { +export function useNewsList(date: Date, enabled = true): UseQueryResult { const startTime = startOfMonth(date).getTime() / 1000 const endTime = Math.floor(addDays(date, 45).getTime() / 1000) return useQuery({ + enabled, queryKey: ['newsList', startTime, endTime], queryFn: async () => Calendar.getNewsList(startTime, endTime), select(data) { @@ -24,10 +25,11 @@ export function useNewsList(date: Date): UseQueryResult { }) } -export function useEventList(date: Date) { +export function useEventList(date: Date, enabled = true) { const startTime = startOfMonth(date).getTime() / 1000 const endTime = Math.floor(addDays(date, 45).getTime() / 1000) return useQuery({ + enabled, queryKey: ['eventList', startTime, endTime], queryFn: async () => Calendar.getEventList(startTime, endTime), select(data) { @@ -43,10 +45,11 @@ export function useEventList(date: Date) { }) } -export function useNFTList(date: Date) { +export function useNFTList(date: Date, enabled = true) { const startTime = startOfMonth(date).getTime() / 1000 const endTime = Math.floor(endOfMonth(date).getTime() / 1000) return useQuery({ + enabled, queryKey: ['nftList', startTime, endTime], queryFn: async () => Calendar.getNFTList(startTime, endTime), select(data) { diff --git a/packages/shared/src/UI/components/AssetsManagement/ChainRuntimeProvider.tsx b/packages/shared/src/UI/components/AssetsManagement/ChainRuntimeProvider.tsx index 0c90d0afac9a..ac98c24a1408 100644 --- a/packages/shared/src/UI/components/AssetsManagement/ChainRuntimeProvider.tsx +++ b/packages/shared/src/UI/components/AssetsManagement/ChainRuntimeProvider.tsx @@ -1,6 +1,6 @@ import { EMPTY_LIST, NetworkPluginID } from '@masknet/shared-base' import type { Web3Helper } from '@masknet/web3-helpers' -import { ChainId } from '@masknet/web3-shared-evm' +import { CHAIN_DESCRIPTORS, ChainId, type NetworkType, type SchemaType } from '@masknet/web3-shared-evm' import { ChainId as FlowChainId } from '@masknet/web3-shared-flow' import { noop, sortBy } from 'lodash-es' import { ChainId as SolanaChainId } from '@masknet/web3-shared-solana' @@ -33,7 +33,8 @@ const ChainRuntimeContext = createContext({ networks: EMPTY_LIST, }) -// https://docs.simplehash.com/reference/chains +// https://docs.simplehash.com/reference/chains +// sync `resolveChainId` and `ChainNameMap` in `web3-providers/src/SimpleHash/helpers.ts` const SimpleHashSupportedChains: Record = { [NetworkPluginID.PLUGIN_EVM]: [ ChainId.Mainnet, @@ -45,6 +46,7 @@ const SimpleHashSupportedChains: Record = { ChainId.Avalanche, ChainId.xDai, ChainId.Scroll, + ChainId.Zora, ], [NetworkPluginID.PLUGIN_SOLANA]: [SolanaChainId.Mainnet], [NetworkPluginID.PLUGIN_FLOW]: [FlowChainId.Mainnet], @@ -64,10 +66,15 @@ export const ChainRuntimeProvider = memo { const supported = SimpleHashSupportedChains[pluginID] - return sortBy( - allNetworks.filter((x) => (x.network === 'mainnet' || x.isCustomized) && supported.includes(x.chainId)), - (x) => supported.indexOf(x.chainId), + const networks = allNetworks.filter( + (x) => (x.network === 'mainnet' || x.isCustomized) && supported.includes(x.chainId), ) + // hard-coded for Zora + if (pluginID === NetworkPluginID.PLUGIN_EVM) { + const zora = CHAIN_DESCRIPTORS.find((x) => x.chainId === ChainId.Zora) + if (zora) networks.push(zora as ReasonableNetwork) + } + return sortBy(networks, (x) => supported.indexOf(x.chainId)) }, [allNetworks, pluginID]) const currentChainId = chainId ?? defaultChainId ?? (networks.length === 1 ? networks[0].chainId : chainId) diff --git a/packages/shared/src/UI/components/NetworkIcon/index.tsx b/packages/shared/src/UI/components/NetworkIcon/index.tsx index be17e96d322b..d4087e702a63 100644 --- a/packages/shared/src/UI/components/NetworkIcon/index.tsx +++ b/packages/shared/src/UI/components/NetworkIcon/index.tsx @@ -1,10 +1,13 @@ import type { Web3Helper } from '@masknet/web3-helpers' import { useNetwork } from '@masknet/web3-hooks-base' -import type { NetworkPluginID } from '@masknet/shared-base' +import { NetworkPluginID } from '@masknet/shared-base' import { ImageIcon, type ImageIconProps } from '../ImageIcon/index.js' import { ChainIcon } from '../index.js' import { memo } from 'react' import type { ReasonableNetwork } from '@masknet/web3-shared-base' +import { CHAIN_DESCRIPTORS as EVM_CHAIN_DESCRIPTORS } from '@masknet/web3-shared-evm' +import { CHAIN_DESCRIPTORS as SOLANA_CHAIN_DESCRIPTORS } from '@masknet/web3-shared-solana' +import { CHAIN_DESCRIPTORS as FLOW_CHAIN_DESCRIPTORS } from '@masknet/web3-shared-flow' export interface NetworkIconProps extends ImageIconProps { pluginID: NetworkPluginID @@ -16,11 +19,17 @@ export interface NetworkIconProps extends ImageIconProps { network?: ReasonableNetwork } +const descriptorsMap = { + [NetworkPluginID.PLUGIN_EVM]: EVM_CHAIN_DESCRIPTORS, + [NetworkPluginID.PLUGIN_SOLANA]: SOLANA_CHAIN_DESCRIPTORS, + [NetworkPluginID.PLUGIN_FLOW]: FLOW_CHAIN_DESCRIPTORS, +} as const + export const NetworkIcon = memo(function NetworkIcon(props: NetworkIconProps) { const { pluginID, chainId, icon, network: expectedNetwork, ...rest } = props const fallbackNetwork = useNetwork(pluginID, chainId) const network = expectedNetwork || fallbackNetwork - const iconUrl = network?.iconUrl || icon + const iconUrl = network?.iconUrl || icon || descriptorsMap[pluginID].find((x) => x.chainId === chainId)?.iconUrl if (iconUrl && !network?.isCustomized) return return ( diff --git a/packages/web3-providers/src/SimpleHash/helpers.ts b/packages/web3-providers/src/SimpleHash/helpers.ts index 7f25702c322f..d16f30fa1086 100644 --- a/packages/web3-providers/src/SimpleHash/helpers.ts +++ b/packages/web3-providers/src/SimpleHash/helpers.ts @@ -140,7 +140,7 @@ export function createNonFungibleCollection( } } -export const resolveChainId: (chainId: string) => ChainId | undefined = memoize(function resolveChainId( +export const resolveChainId: (chain: string) => ChainId | undefined = memoize(function resolveChainId( chain: string, ): ChainId | undefined { // Some of the `chainResolver.chainId()` results do not match. @@ -165,6 +165,10 @@ export const resolveChainId: (chainId: string) => ChainId | undefined = memoize( return ChainId.Scroll case 'celo': return ChainId.Celo + case 'zora': + return ChainId.Zora + case 'fantom': + return ChainId.Fantom default: return undefined } @@ -181,7 +185,8 @@ const ChainNameMap: Record> = { [ChainId.xDai]: 'gnosis', [ChainId.Base]: 'base', [ChainId.Scroll]: 'scroll', - [ChainId.Celo]: 'celo', + [ChainId.Zora]: 'zora', + [ChainId.Fantom]: 'fantom', }, [NetworkPluginID.PLUGIN_SOLANA]: { [SolanaChainId.Mainnet]: 'solana', diff --git a/packages/web3-shared/evm/src/assets/zora.png b/packages/web3-shared/evm/src/assets/zora.png new file mode 100644 index 0000000000000000000000000000000000000000..14b013c70ea627b3bd4652f65051eb640f9393d7 GIT binary patch literal 4967 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 E2er$t#sB~S literal 0 HcmV?d00001 diff --git a/packages/web3-shared/evm/src/constants/chains.json b/packages/web3-shared/evm/src/constants/chains.json index 8e4718038d7d..4f1e7e56aca5 100644 --- a/packages/web3-shared/evm/src/constants/chains.json +++ b/packages/web3-shared/evm/src/constants/chains.json @@ -1328,5 +1328,29 @@ "url": "https://explorer.emerald.oasis.dev/" } ] + }, + { + "chainId": 7777777, + "name": "Zora", + "type": "Zora", + "network": "mainnet", + "features": [], + "nativeCurrency": { + "chainId": 42262, + "name": "Ether", + "symbol": "ETH", + "decimals": 18, + "logoURL": "https://imagedelivery.net/PCnTHRkdRhGodr0AWBAvMA/Assets/blockchains/ethereum/info/logo.png/quality=85" + }, + "defaultGasLimit": "90000", + "minGasLimit": "21000", + "infoURL": "https://zora.co/", + "shortName": "Zora", + "explorers": [ + { + "name": "Zora Superscan", + "url": "https://zora.superscan.network/" + } + ] } ] diff --git a/packages/web3-shared/evm/src/constants/descriptors.ts b/packages/web3-shared/evm/src/constants/descriptors.ts index 6fe3dc1361a9..9a2be4cdcd35 100644 --- a/packages/web3-shared/evm/src/constants/descriptors.ts +++ b/packages/web3-shared/evm/src/constants/descriptors.ts @@ -195,7 +195,7 @@ export const NETWORK_DESCRIPTORS: ReadonlyArray> = CHAINS.map((x) => { diff --git a/packages/web3-shared/evm/src/types/index.ts b/packages/web3-shared/evm/src/types/index.ts index 333f34891f42..9da7984f0166 100644 --- a/packages/web3-shared/evm/src/types/index.ts +++ b/packages/web3-shared/evm/src/types/index.ts @@ -149,6 +149,8 @@ export enum ChainId { /** BitTorrent Chain Mainnet */ BitTorrent = 199, + Zora = 7777777, + // For any chains not supported yet. Invalid = 0, } @@ -311,6 +313,7 @@ export enum NetworkType { Scroll = 'Scroll', Moonbeam = 'Moonbeam', XLayer = 'XLayer', + Zora = 'Zora', CustomNetwork = 'CustomNetwork', }