/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format */ import React, {useCallback, useMemo} from 'react'; import {Label, ToggleButton, SmallText, styled, Layout} from '../../ui'; import {useDispatch, useStore} from '../../utils/useStore'; import {switchPlugin} from '../../reducers/pluginManager'; import {isPluginEnabled} from '../../reducers/connections'; import {theme} from 'flipper-plugin'; import {PluginDefinition} from '../../plugin'; const Waiting = styled(Layout.Container)({ width: '100%', height: '100%', flexGrow: 1, alignItems: 'center', justifyContent: 'center', textAlign: 'center', }); export default function PluginInfo() { const pluginId = useStore((state) => state.connections.selectedPlugin); const enabledPlugins = useStore((state) => state.connections.enabledPlugins); const enabledDevicePlugins = useStore( (state) => state.connections.enabledDevicePlugins, ); const activeClient = useStore((state) => state.connections.activeClient); const clientPlugins = useStore((state) => state.plugins.clientPlugins); const devicePlugins = useStore((state) => state.plugins.devicePlugins); const selectedClientId = activeClient?.id ?? null; const selectedApp = activeClient?.query.app ?? null; const disabledPlugin = useMemo( () => pluginId && !isPluginEnabled( enabledPlugins, enabledDevicePlugins, selectedClientId, pluginId, ) ? clientPlugins.get(pluginId) ?? devicePlugins.get(pluginId) : undefined, [ pluginId, enabledPlugins, enabledDevicePlugins, selectedClientId, clientPlugins, devicePlugins, ], ); return disabledPlugin ? ( ) : null; } function PluginEnabler({ plugin, selectedApp, }: { plugin: PluginDefinition; selectedApp: string | null; }) { const dispatch = useDispatch(); const enablePlugin = useCallback(() => { dispatch(switchPlugin({plugin, selectedApp: selectedApp ?? undefined})); }, [dispatch, plugin, selectedApp]); return ( Click to enable this plugin ); }