diff --git a/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx b/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx index 53966a9a2460..fa30e0d04506 100644 --- a/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx +++ b/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx @@ -1,17 +1,24 @@ -import { useEffect, useMemo, useState } from 'react' -import { useUpdateEffect } from 'react-use' -import { first } from 'lodash-unified' -import { NextIDPlatform, EMPTY_LIST } from '@masknet/shared-base' -import { Box, CircularProgress } from '@mui/material' +import { + createInjectHooksRenderer, + Plugin, + PluginId, + useActivatedPluginsSNSAdaptor, + useAvailablePlugins, +} from '@masknet/plugin-infra' +import { EMPTY_LIST, NextIDPlatform } from '@masknet/shared-base' import { makeStyles, useStylesExtends } from '@masknet/theme' import { useAddressNames } from '@masknet/web3-shared-evm' -import { createInjectHooksRenderer, useActivatedPluginsSNSAdaptor, Plugin, PluginId } from '@masknet/plugin-infra' -import { PageTab } from '../InjectedComponents/PageTab' -import { MaskMessages, useI18N, useLocationChange } from '../../utils' +import { Box, CircularProgress } from '@mui/material' +import { first } from 'lodash-unified' +import { useEffect, useMemo, useState } from 'react' +import { useUpdateEffect } from 'react-use' +import { activatedSocialNetworkUI } from '../../social-network' +import { MaskMessages } from '../../utils' +import { useLocationChange } from '../../utils/hooks/useLocationChange' import { useCurrentVisitingIdentity, useLastRecognizedIdentity } from '../DataSource/useActivatedUI' import { useNextIDBoundByPlatform } from '../DataSource/useNextID' import { usePersonaConnectStatus } from '../DataSource/usePersonaConnectStatus' -import { activatedSocialNetworkUI } from '../../social-network' +import { PageTab } from '../InjectedComponents/PageTab' function getTabContent(tabId: string) { return createInjectHooksRenderer(useActivatedPluginsSNSAdaptor.visibility.useAnyMode, (x) => { @@ -36,7 +43,6 @@ const useStyles = makeStyles()((theme) => ({ export interface ProfileTabContentProps extends withClasses<'text' | 'button' | 'root'> {} export function ProfileTabContent(props: ProfileTabContentProps) { - const { t } = useI18N() const classes = useStylesExtends(useStyles(), props) const [hidden, setHidden] = useState(true) @@ -55,7 +61,8 @@ export function ProfileTabContent(props: ProfileTabContentProps) { currentIdentity.identifier.userId === identity.identifier.userId && personaList.findIndex((persona) => persona?.persona === currentConnectedPersona?.publicHexKey) === -1 - const tabs = useActivatedPluginsSNSAdaptor('any') + const activatedPlugins = useActivatedPluginsSNSAdaptor('any') + const tabs = useAvailablePlugins(activatedPlugins) .flatMap((x) => x.ProfileTabs?.map((y) => ({ ...y, pluginID: x.ID })) ?? []) .filter((z) => z.Utils?.shouldDisplay?.(identity, addressNames) ?? true) .sort((a, z) => { diff --git a/packages/mask/src/plugins/EVM/constants.ts b/packages/mask/src/plugins/EVM/constants.ts index 2c17f3d96cbf..2a508a0600db 100644 --- a/packages/mask/src/plugins/EVM/constants.ts +++ b/packages/mask/src/plugins/EVM/constants.ts @@ -1,8 +1,8 @@ -import { PluginId, Web3Plugin } from '@masknet/plugin-infra' +import { NetworkPluginID, Web3Plugin } from '@masknet/plugin-infra' import { ChainId, NetworkType, ProviderType } from '@masknet/web3-shared-evm' -export const PLUGIN_ID = PluginId.EVM -export const PLUGIN_META_KEY = `${PluginId.EVM}:1` +export const PLUGIN_ID = NetworkPluginID.PLUGIN_EVM +export const PLUGIN_META_KEY = `${PLUGIN_ID}:1` export const PLUGIN_NAME = 'EVM' export const PLUGIN_ICON = '\u039E' export const PLUGIN_DESCRIPTION = '' diff --git a/packages/mask/src/plugins/NextID/SNSAdaptor/index.tsx b/packages/mask/src/plugins/NextID/SNSAdaptor/index.tsx index 139ece72debe..c888a6006157 100644 --- a/packages/mask/src/plugins/NextID/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/NextID/SNSAdaptor/index.tsx @@ -1,11 +1,11 @@ import type { Plugin } from '@masknet/plugin-infra' import { EMPTY_LIST } from '@masknet/shared-base' +import { Flags } from '../../../../shared' import { base } from '../base' -import { PLUGIN_ID } from '../constants' import { NextIdPage } from '../components/NextIdPage' -import { RootContext } from '../contexts' import { PostTipButton, TipTaskManager } from '../components/Tip' -import { Flags } from '../../../../shared' +import { PLUGIN_ID } from '../constants' +import { RootContext } from '../contexts' const sns: Plugin.SNSAdaptor.Definition = { ...base, diff --git a/packages/mask/src/plugins/NextID/components/NextIdPage.tsx b/packages/mask/src/plugins/NextID/components/NextIdPage.tsx index 96d7281e1ce5..24232623a75b 100644 --- a/packages/mask/src/plugins/NextID/components/NextIdPage.tsx +++ b/packages/mask/src/plugins/NextID/components/NextIdPage.tsx @@ -58,12 +58,13 @@ export function NextIdPage({ personaList }: NextIDPageProps) { const currentProfileIdentifier = useLastRecognizedIdentity() const visitingPersonaIdentifier = useCurrentVisitingIdentity() const personaConnectStatus = usePersonaConnectStatus() - const { reset, isVerified, action } = useNextIDConnectStatus() + const { reset, isVerified } = useNextIDConnectStatus() const [openBindDialog, toggleBindDialog] = useState(false) const [unbindAddress, setUnBindAddress] = useState() const platform = activatedSocialNetworkUI.configuration.nextIDConfig?.platform as NextIDPlatform const isOwn = currentProfileIdentifier.identifier.toText() === visitingPersonaIdentifier.identifier.toText() + const tipable = !isOwn const personaActionButton = useMemo(() => { if (!personaConnectStatus.action) return null @@ -153,7 +154,7 @@ export function NextIdPage({ personaList }: NextIDPageProps) { {bindings.proofs.map((x) => ( (plugins: T[]) { + const networkPluginId = useCurrentWeb3NetworkPluginID() + const chainId = useChainId(networkPluginId) + return useMemo( + () => plugins.filter((plugin) => checkPluginAvailable(plugin, networkPluginId, chainId)), + [plugins, networkPluginId, chainId], + ) +} diff --git a/packages/plugin-infra/src/utils/createInjectHooksRenderer.tsx b/packages/plugin-infra/src/utils/createInjectHooksRenderer.tsx index aed1e0f4c2bc..fe3a8ea00cb8 100644 --- a/packages/plugin-infra/src/utils/createInjectHooksRenderer.tsx +++ b/packages/plugin-infra/src/utils/createInjectHooksRenderer.tsx @@ -1,9 +1,9 @@ -import { useEffect, useState, useRef, memo, createContext, useContext } from 'react' import { ErrorBoundary } from '@masknet/shared-base-ui' import { ShadowRootIsolation } from '@masknet/theme' -import type { Plugin } from '../types' -import { usePluginI18NField, PluginWrapperComponent, PluginWrapperMethods } from '../hooks' +import { createContext, memo, useContext, useEffect, useRef, useState } from 'react' +import { PluginWrapperComponent, PluginWrapperMethods, useAvailablePlugins, usePluginI18NField } from '../hooks' import { PluginWrapperMethodsContext } from '../hooks/usePluginWrapper' +import type { Plugin } from '../types' type Inject = Plugin.InjectUI type Raw = Plugin.InjectUIRaw @@ -47,15 +47,15 @@ export function createInjectHooksRenderer ( - - - - - - )) + const allPlugins = usePlugins() + const availablePlugins = useAvailablePlugins(allPlugins) as PluginDefinition[] + const all = availablePlugins.filter(pickInjectorHook).map((plugin) => ( + + + + + + )) return <>{all} } return memo(function PluginsInjectionHookRenderErrorBoundary(props: PropsType) {