From 1b824d38037b3d2f56a1d18061cd73e6bb62d4ea Mon Sep 17 00:00:00 2001 From: unclebill Date: Mon, 28 Mar 2022 11:14:58 +0800 Subject: [PATCH 1/3] fix(tip): hide tip button when evm is not actived --- packages/mask/src/plugins/EVM/constants.ts | 6 +++--- .../mask/src/plugins/NextID/SNSAdaptor/index.tsx | 5 +++-- .../src/plugins/NextID/components/NextIdPage.tsx | 7 +++++-- packages/mask/src/settings/settings.ts | 10 +++++----- .../twitter.com/injection/PostActions/index.tsx | 15 ++++++++++++--- .../injection/Tip/ProfileTipButton.tsx | 3 +++ pnpm-lock.yaml | 2 +- 7 files changed, 32 insertions(+), 16 deletions(-) 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..254c00e3f4cf 100644 --- a/packages/mask/src/plugins/NextID/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/NextID/SNSAdaptor/index.tsx @@ -1,4 +1,4 @@ -import type { Plugin } from '@masknet/plugin-infra' +import { NetworkPluginID, Plugin, usePluginIDContext } from '@masknet/plugin-infra' import { EMPTY_LIST } from '@masknet/shared-base' import { base } from '../base' import { PLUGIN_ID } from '../constants' @@ -29,7 +29,8 @@ const sns: Plugin.SNSAdaptor.Definition = { ) }, PostActions() { - if (!Flags.next_id_tip_enabled) return null + const pluginId = usePluginIDContext() + if (!Flags.next_id_tip_enabled || pluginId !== NetworkPluginID.PLUGIN_EVM) return null return ( diff --git a/packages/mask/src/plugins/NextID/components/NextIdPage.tsx b/packages/mask/src/plugins/NextID/components/NextIdPage.tsx index 12a63395ffb9..605c71cc22ee 100644 --- a/packages/mask/src/plugins/NextID/components/NextIdPage.tsx +++ b/packages/mask/src/plugins/NextID/components/NextIdPage.tsx @@ -1,3 +1,4 @@ +import { NetworkPluginID, usePluginIDContext } from '@masknet/plugin-infra' import { NextIDPlatform } from '@masknet/shared-base' import { makeStyles } from '@masknet/theme' import { queryExistedBindingByPersona, queryIsBound } from '@masknet/web3-providers' @@ -58,12 +59,14 @@ 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 pluginId = usePluginIDContext() + const tipable = !isOwn && pluginId === NetworkPluginID.PLUGIN_EVM const personaActionButton = useMemo(() => { if (!personaConnectStatus.action) return null @@ -149,7 +152,7 @@ export function NextIdPage({ personaList }: NextIDPageProps) { {bindings.proofs.map((x) => ( { + if (!postInfo.actionsElement) return + const isEvm = newPluginId === NetworkPluginID.PLUGIN_EVM + postInfo.actionsElement.after.style.display = isEvm ? '' : 'none' + }) const injector = createPostActionsInjector() - return injector(current, signal) + return injector(postInfo, signal) } diff --git a/packages/mask/src/social-network-adaptor/twitter.com/injection/Tip/ProfileTipButton.tsx b/packages/mask/src/social-network-adaptor/twitter.com/injection/Tip/ProfileTipButton.tsx index 625e3b3a6297..aee8e0a4409a 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/injection/Tip/ProfileTipButton.tsx +++ b/packages/mask/src/social-network-adaptor/twitter.com/injection/Tip/ProfileTipButton.tsx @@ -1,4 +1,5 @@ import { MutationObserverWatcher } from '@dimensiondev/holoflows-kit' +import { NetworkPluginID, usePluginIDContext } from '@masknet/plugin-infra' import { makeStyles } from '@masknet/theme' import { useEffect, useState } from 'react' import { useCurrentVisitingIdentity } from '../../../../components/DataSource/useActivatedUI' @@ -49,6 +50,7 @@ const useStyles = makeStyles()((theme, props) => ({ function OpenTipDialog() { const [style, setStyle] = useState({ size: 34, fontSize: 14, marginBottom: 11 }) const visitingPersona = useCurrentVisitingIdentity() + const pluginId = usePluginIDContext() const setStyleFromEditProfileSelector = () => { const menuButton = menuButtonSelector().evaluate() @@ -66,5 +68,6 @@ function OpenTipDialog() { useLocationChange(setStyleFromEditProfileSelector) const { classes } = useStyles(style) + if (pluginId !== NetworkPluginID.PLUGIN_EVM) return null return } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba3bf1deb364..b326e96f76f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24350,7 +24350,7 @@ packages: safe-buffer: 5.2.1 tough-cookie: 2.5.0 tunnel-agent: 0.6.0 - uuid: 3.3.2 + uuid: 3.4.0 dev: false /require-directory/2.1.1: From 3f66c76116bcc60d759ca35fe7dde4b8f617f68c Mon Sep 17 00:00:00 2001 From: unclebill Date: Wed, 30 Mar 2022 14:18:57 +0800 Subject: [PATCH 2/3] fix: check requirement instead --- .../InjectedComponents/ProfileTabContent.tsx | 28 +++++++++++-------- .../src/plugins/NextID/SNSAdaptor/index.tsx | 11 ++++---- packages/mask/src/plugins/NextID/base.ts | 6 ++++ .../plugins/NextID/components/NextIdPage.tsx | 4 +-- .../injection/PostActions/index.tsx | 11 +------- .../injection/Tip/ProfileTipButton.tsx | 3 -- packages/plugin-infra/src/hooks/index.ts | 1 + .../src/hooks/useAvailablePlugins.ts | 17 +++++++++++ .../src/utils/createInjectHooksRenderer.tsx | 24 ++++++++-------- 9 files changed, 60 insertions(+), 45 deletions(-) create mode 100644 packages/plugin-infra/src/hooks/useAvailablePlugins.ts diff --git a/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx b/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx index f5e1e51182cf..d3b0e6becc54 100644 --- a/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx +++ b/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx @@ -1,18 +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, + useAvailabilePlugins, +} 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 { 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 { MaskMessages, useI18N } from '../../utils' 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) => { @@ -37,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) @@ -56,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 = useAvailabilePlugins(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/NextID/SNSAdaptor/index.tsx b/packages/mask/src/plugins/NextID/SNSAdaptor/index.tsx index 254c00e3f4cf..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 { NetworkPluginID, Plugin, usePluginIDContext } from '@masknet/plugin-infra' +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, @@ -29,8 +29,7 @@ const sns: Plugin.SNSAdaptor.Definition = { ) }, PostActions() { - const pluginId = usePluginIDContext() - if (!Flags.next_id_tip_enabled || pluginId !== NetworkPluginID.PLUGIN_EVM) return null + if (!Flags.next_id_tip_enabled) return null return ( diff --git a/packages/mask/src/plugins/NextID/base.ts b/packages/mask/src/plugins/NextID/base.ts index 14d2791bcfce..9531eecaecbd 100644 --- a/packages/mask/src/plugins/NextID/base.ts +++ b/packages/mask/src/plugins/NextID/base.ts @@ -31,6 +31,12 @@ export const base: Plugin.Shared.Definition = { ChainId.Conflux, ], }, + [NetworkPluginID.PLUGIN_SOLANA]: { + supportedChainIds: [], + }, + [NetworkPluginID.PLUGIN_FLOW]: { + supportedChainIds: [], + }, }, }, experimentalMark: true, diff --git a/packages/mask/src/plugins/NextID/components/NextIdPage.tsx b/packages/mask/src/plugins/NextID/components/NextIdPage.tsx index 605c71cc22ee..71ea2b7c97ff 100644 --- a/packages/mask/src/plugins/NextID/components/NextIdPage.tsx +++ b/packages/mask/src/plugins/NextID/components/NextIdPage.tsx @@ -1,4 +1,3 @@ -import { NetworkPluginID, usePluginIDContext } from '@masknet/plugin-infra' import { NextIDPlatform } from '@masknet/shared-base' import { makeStyles } from '@masknet/theme' import { queryExistedBindingByPersona, queryIsBound } from '@masknet/web3-providers' @@ -65,8 +64,7 @@ export function NextIdPage({ personaList }: NextIDPageProps) { const [unbindAddress, setUnBindAddress] = useState() const platform = activatedSocialNetworkUI.configuration.nextIDConfig?.platform as NextIDPlatform const isOwn = currentProfileIdentifier.identifier.toText() === visitingPersonaIdentifier.identifier.toText() - const pluginId = usePluginIDContext() - const tipable = !isOwn && pluginId === NetworkPluginID.PLUGIN_EVM + const tipable = !isOwn const personaActionButton = useMemo(() => { if (!personaConnectStatus.action) return null diff --git a/packages/mask/src/social-network-adaptor/twitter.com/injection/PostActions/index.tsx b/packages/mask/src/social-network-adaptor/twitter.com/injection/PostActions/index.tsx index dd83221b9d7b..637903840779 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/injection/PostActions/index.tsx +++ b/packages/mask/src/social-network-adaptor/twitter.com/injection/PostActions/index.tsx @@ -1,18 +1,9 @@ -import { NetworkPluginID, PostInfo } from '@masknet/plugin-infra' +import type { PostInfo } from '@masknet/plugin-infra' import { Flags } from '../../../../../shared' -import { pluginIDSettings } from '../../../../settings/settings' import { createPostActionsInjector } from '../../../../social-network/defaults/inject/PostActions' export function injectPostActionsAtTwitter(signal: AbortSignal, postInfo: PostInfo) { if (!Flags.post_actions_enabled) return - if (pluginIDSettings.value !== NetworkPluginID.PLUGIN_EVM && postInfo.actionsElement) { - postInfo.actionsElement.after.style.display = 'none' - } - pluginIDSettings.addListener((newPluginId) => { - if (!postInfo.actionsElement) return - const isEvm = newPluginId === NetworkPluginID.PLUGIN_EVM - postInfo.actionsElement.after.style.display = isEvm ? '' : 'none' - }) const injector = createPostActionsInjector() return injector(postInfo, signal) } diff --git a/packages/mask/src/social-network-adaptor/twitter.com/injection/Tip/ProfileTipButton.tsx b/packages/mask/src/social-network-adaptor/twitter.com/injection/Tip/ProfileTipButton.tsx index aee8e0a4409a..625e3b3a6297 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/injection/Tip/ProfileTipButton.tsx +++ b/packages/mask/src/social-network-adaptor/twitter.com/injection/Tip/ProfileTipButton.tsx @@ -1,5 +1,4 @@ import { MutationObserverWatcher } from '@dimensiondev/holoflows-kit' -import { NetworkPluginID, usePluginIDContext } from '@masknet/plugin-infra' import { makeStyles } from '@masknet/theme' import { useEffect, useState } from 'react' import { useCurrentVisitingIdentity } from '../../../../components/DataSource/useActivatedUI' @@ -50,7 +49,6 @@ const useStyles = makeStyles()((theme, props) => ({ function OpenTipDialog() { const [style, setStyle] = useState({ size: 34, fontSize: 14, marginBottom: 11 }) const visitingPersona = useCurrentVisitingIdentity() - const pluginId = usePluginIDContext() const setStyleFromEditProfileSelector = () => { const menuButton = menuButtonSelector().evaluate() @@ -68,6 +66,5 @@ function OpenTipDialog() { useLocationChange(setStyleFromEditProfileSelector) const { classes } = useStyles(style) - if (pluginId !== NetworkPluginID.PLUGIN_EVM) return null return } diff --git a/packages/plugin-infra/src/hooks/index.ts b/packages/plugin-infra/src/hooks/index.ts index e9272b78222b..9ebf21266102 100644 --- a/packages/plugin-infra/src/hooks/index.ts +++ b/packages/plugin-infra/src/hooks/index.ts @@ -2,6 +2,7 @@ export * from './useActivatedPlugin' export * from './useActivatedPluginWeb3UI' export * from './useActivatedPluginWeb3State' export * from './useAllPluginsWeb3State' +export * from './useAvailablePlugins' export * from './useLookupDomain' export * from './useReverseAddress' export * from './useI18N' diff --git a/packages/plugin-infra/src/hooks/useAvailablePlugins.ts b/packages/plugin-infra/src/hooks/useAvailablePlugins.ts new file mode 100644 index 000000000000..6f07a5265575 --- /dev/null +++ b/packages/plugin-infra/src/hooks/useAvailablePlugins.ts @@ -0,0 +1,17 @@ +import { useChainId, usePluginIDContext } from '../web3' +import type { NetworkPluginID } from '../web3-types' +import type { Plugin } from '../types' + +type HasRequirement = { enableRequirement: Plugin.Shared.Definition['enableRequirement'] } + +function checkPluginAvailable(plugin: T, pluginId: NetworkPluginID, chainId: number) { + const supportedChainIds = plugin.enableRequirement.web3?.[pluginId]?.supportedChainIds + if (!supportedChainIds) return true + return supportedChainIds.includes(chainId) +} + +export function useAvailabilePlugins(plugins: T[]) { + const networkPluginId = usePluginIDContext() + const chainId = useChainId(networkPluginId) + return plugins.filter((plugin) => checkPluginAvailable(plugin, networkPluginId, chainId)) +} diff --git a/packages/plugin-infra/src/utils/createInjectHooksRenderer.tsx b/packages/plugin-infra/src/utils/createInjectHooksRenderer.tsx index 2da5547361b3..77caace79de0 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, useAvailabilePlugins, usePluginI18NField } from '../hooks' import { PluginWrapperMethodsContext } from '../hooks/usePluginWrapper' +import type { Plugin } from '../types' type Inject = Plugin.InjectUI type Raw = Plugin.InjectUIRaw @@ -43,15 +43,15 @@ export function createInjectHooksRenderer ( - - - - - - )) + const allPlugins = usePlugins() + const availabilePlugins = useAvailabilePlugins(allPlugins) as PluginDefinition[] + const all = availabilePlugins.filter(pickInjectorHook).map((plugin) => ( + + + + + + )) return <>{all} } return memo(function PluginsInjectionHookRenderErrorBoundary(props: PropsType) { From 44ebb89ab9313d4a1a27c3b72d5849911e0bdfeb Mon Sep 17 00:00:00 2001 From: unclebill Date: Wed, 30 Mar 2022 16:39:50 +0800 Subject: [PATCH 3/3] fixup! fix: check requirement instead --- .../InjectedComponents/ProfileTabContent.tsx | 4 ++-- .../plugin-infra/src/hooks/useAvailablePlugins.ts | 12 ++++++++---- .../src/utils/createInjectHooksRenderer.tsx | 6 +++--- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx b/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx index d3b0e6becc54..fa30e0d04506 100644 --- a/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx +++ b/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx @@ -3,7 +3,7 @@ import { Plugin, PluginId, useActivatedPluginsSNSAdaptor, - useAvailabilePlugins, + useAvailablePlugins, } from '@masknet/plugin-infra' import { EMPTY_LIST, NextIDPlatform } from '@masknet/shared-base' import { makeStyles, useStylesExtends } from '@masknet/theme' @@ -62,7 +62,7 @@ export function ProfileTabContent(props: ProfileTabContentProps) { personaList.findIndex((persona) => persona?.persona === currentConnectedPersona?.publicHexKey) === -1 const activatedPlugins = useActivatedPluginsSNSAdaptor('any') - const tabs = useAvailabilePlugins(activatedPlugins) + 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/plugin-infra/src/hooks/useAvailablePlugins.ts b/packages/plugin-infra/src/hooks/useAvailablePlugins.ts index 6f07a5265575..725d706628d4 100644 --- a/packages/plugin-infra/src/hooks/useAvailablePlugins.ts +++ b/packages/plugin-infra/src/hooks/useAvailablePlugins.ts @@ -1,17 +1,21 @@ +import { useMemo } from 'react' +import type { Plugin } from '../types' import { useChainId, usePluginIDContext } from '../web3' import type { NetworkPluginID } from '../web3-types' -import type { Plugin } from '../types' type HasRequirement = { enableRequirement: Plugin.Shared.Definition['enableRequirement'] } -function checkPluginAvailable(plugin: T, pluginId: NetworkPluginID, chainId: number) { +function checkPluginAvailable(plugin: HasRequirement, pluginId: NetworkPluginID, chainId: number) { const supportedChainIds = plugin.enableRequirement.web3?.[pluginId]?.supportedChainIds if (!supportedChainIds) return true return supportedChainIds.includes(chainId) } -export function useAvailabilePlugins(plugins: T[]) { +export function useAvailablePlugins(plugins: T[]) { const networkPluginId = usePluginIDContext() const chainId = useChainId(networkPluginId) - return plugins.filter((plugin) => checkPluginAvailable(plugin, networkPluginId, chainId)) + 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 77caace79de0..1e68250fbe85 100644 --- a/packages/plugin-infra/src/utils/createInjectHooksRenderer.tsx +++ b/packages/plugin-infra/src/utils/createInjectHooksRenderer.tsx @@ -1,7 +1,7 @@ import { ErrorBoundary } from '@masknet/shared-base-ui' import { ShadowRootIsolation } from '@masknet/theme' import { createContext, memo, useContext, useEffect, useRef, useState } from 'react' -import { PluginWrapperComponent, PluginWrapperMethods, useAvailabilePlugins, usePluginI18NField } from '../hooks' +import { PluginWrapperComponent, PluginWrapperMethods, useAvailablePlugins, usePluginI18NField } from '../hooks' import { PluginWrapperMethodsContext } from '../hooks/usePluginWrapper' import type { Plugin } from '../types' @@ -44,8 +44,8 @@ export function createInjectHooksRenderer ( + const availablePlugins = useAvailablePlugins(allPlugins) as PluginDefinition[] + const all = availablePlugins.filter(pickInjectorHook).map((plugin) => (