From adf206c99bd57c1933da151ac8313e923206d461 Mon Sep 17 00:00:00 2001 From: Wukong Sun Date: Wed, 9 Sep 2026 20:50:13 +0800 Subject: [PATCH] fix: mf-6820 hide robinhood chain from red packet --- .../components/ConditionSettings.tsx | 3 +++ .../hooks/useRedPacketSupportedChains.ts | 17 +++++++++++++++++ .../SiteAdaptor/views/CreateTokenRedPacket.tsx | 5 ++++- packages/plugins/RedPacket/src/constants.ts | 7 +++++++ 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 packages/plugins/RedPacket/src/SiteAdaptor/hooks/useRedPacketSupportedChains.ts diff --git a/packages/plugins/RedPacket/src/SiteAdaptor/components/ConditionSettings.tsx b/packages/plugins/RedPacket/src/SiteAdaptor/components/ConditionSettings.tsx index e9bd8fec890..32637456f7c 100644 --- a/packages/plugins/RedPacket/src/SiteAdaptor/components/ConditionSettings.tsx +++ b/packages/plugins/RedPacket/src/SiteAdaptor/components/ConditionSettings.tsx @@ -9,6 +9,7 @@ import type { ChainId, SchemaType } from '@masknet/web3-shared-evm' import { ClickAwayListener, InputBase, Typography, type PopperProps } from '@mui/material' import { useState, type HTMLProps } from 'react' import { ConditionType, useRedPacket } from '../contexts/RedPacketContext.js' +import { useRedPacketSupportedChains } from '../hooks/useRedPacketSupportedChains.js' const useStyles = makeStyles()((theme) => { return { @@ -137,6 +138,7 @@ export function ConditionSettings(props: HTMLProps) { useRedPacket() const [anchorEl, setAnchorEl] = useState() const { chainId } = useChainContext() + const chains = useRedPacketSupportedChains() return ( setAnchorEl(null)}> @@ -259,6 +261,7 @@ export function ConditionSettings(props: HTMLProps) { selectedTokens: requiredTokens, pluginID: NetworkPluginID.PLUGIN_EVM, chainId, + chains, multiple: true, maxTokens: 4, }) diff --git a/packages/plugins/RedPacket/src/SiteAdaptor/hooks/useRedPacketSupportedChains.ts b/packages/plugins/RedPacket/src/SiteAdaptor/hooks/useRedPacketSupportedChains.ts new file mode 100644 index 00000000000..488159cb575 --- /dev/null +++ b/packages/plugins/RedPacket/src/SiteAdaptor/hooks/useRedPacketSupportedChains.ts @@ -0,0 +1,17 @@ +import { NetworkPluginID } from '@masknet/shared-base' +import { useNetworks } from '@masknet/web3-hooks-base' +import type { ChainId } from '@masknet/web3-shared-evm' +import { useMemo } from 'react' +import { RED_PACKET_UNSUPPORTED_CHAINS } from '../../constants.js' + +/** Chain ids offered in the red packet token pickers. */ +export function useRedPacketSupportedChains(): ChainId[] { + const networks = useNetworks(NetworkPluginID.PLUGIN_EVM, true) + return useMemo( + () => + networks + .map((network) => network.chainId) + .filter((chainId) => !RED_PACKET_UNSUPPORTED_CHAINS.includes(chainId)), + [networks], + ) +} diff --git a/packages/plugins/RedPacket/src/SiteAdaptor/views/CreateTokenRedPacket.tsx b/packages/plugins/RedPacket/src/SiteAdaptor/views/CreateTokenRedPacket.tsx index e5a4ba71b31..e1ed667bfd1 100644 --- a/packages/plugins/RedPacket/src/SiteAdaptor/views/CreateTokenRedPacket.tsx +++ b/packages/plugins/RedPacket/src/SiteAdaptor/views/CreateTokenRedPacket.tsx @@ -37,6 +37,7 @@ import { PreviewRedPacket } from '../components/PreviewRedPacket.js' import { useRedPacket } from '../contexts/RedPacketContext.js' import { useCreateParams } from '../hooks/useCreateCallback.js' import { useDefaultCreateGas } from '../hooks/useDefaultCreateGas.js' +import { useRedPacketSupportedChains } from '../hooks/useRedPacketSupportedChains.js' import { ThemePicker } from '../components/ThemePicker.js' const useStyles = makeStyles()((theme) => ({ @@ -168,6 +169,7 @@ export function CreateTokenRedPacket() { // context const { pluginID } = useEnvironmentContext() const { HAPPY_RED_PACKET_ADDRESS_V4 } = useRedPacketConstants(chainId) + const chains = useRedPacketSupportedChains() // #region select token const nativeTokenPrice = useNativeTokenPrice(NetworkPluginID.PLUGIN_EVM, { chainId }).data || 0 @@ -178,13 +180,14 @@ export function CreateTokenRedPacket() { selectedTokens: token ? [token] : [], chainId, pluginID: NetworkPluginID.PLUGIN_EVM, + chains, }) if (!picked || Array.isArray(picked)) return if (chainId !== picked.chainId) { setChainId(picked.chainId as ChainId) } setToken(picked as FungibleToken) - }, [token?.address, chainId]) + }, [token?.address, chainId, chains]) // #endregion // shares diff --git a/packages/plugins/RedPacket/src/constants.ts b/packages/plugins/RedPacket/src/constants.ts index 1a6cb55b524..e5b129c13d6 100644 --- a/packages/plugins/RedPacket/src/constants.ts +++ b/packages/plugins/RedPacket/src/constants.ts @@ -1,5 +1,6 @@ import { PluginID } from '@masknet/shared-base' import { FireflyRedPacketAPI } from '@masknet/web3-providers/types' +import { ChainId } from '@masknet/web3-shared-evm' /** * !! This ID is used to identify the stored plugin data. Change it will cause data lost. @@ -12,6 +13,12 @@ export const RED_PACKET_MAX_SHARES = 500 export const SOL_REDPACKET_MAX_SHARES = 200 export const SOL_REDPACKET_CREATE_DEFAULT_GAS = '10000000' export const DEFAULT_DURATION = 60 * 60 * 24 // 24 hours +/** + * Chains hidden from the red packet token pickers. + * The Robinhood chain is not claimable yet (the backend does not support claiming), + * so creating a lucky drop there is disabled until it is. + */ +export const RED_PACKET_UNSUPPORTED_CHAINS = [ChainId.Robinhood] export const enum RoutePaths { Create = '/create', CreateTokenRedPacket = '/create/token',