import { ButtonItem, ErrorBoundary, Focusable, PanelSection, PanelSectionRow } from '@decky/ui'; import { FC, useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { FaEyeSlash } from 'react-icons/fa'; import { Plugin } from '../plugin'; import { useDeckyState } from './DeckyState'; import NotificationBadge from './NotificationBadge'; import { useQuickAccessVisible } from './QuickAccessVisibleState'; import TitleView from './TitleView'; const PluginView: FC = () => { const { hiddenPlugins } = useDeckyState(); const { plugins, updates, activePlugin, pluginOrder, setActivePlugin, closeActivePlugin } = useDeckyState(); const visible = useQuickAccessVisible(); const { t } = useTranslation(); const [pluginList, setPluginList] = useState( plugins.sort((a, b) => pluginOrder.indexOf(a.name) - pluginOrder.indexOf(b.name)), ); useEffect(() => { setPluginList(plugins.sort((a, b) => pluginOrder.indexOf(a.name) - pluginOrder.indexOf(b.name))); console.log('updating PluginView after changes'); }, [plugins, pluginOrder]); if (activePlugin) { return (
{(visible || activePlugin.alwaysRender) && activePlugin.content}
); } return ( <>
{pluginList .filter((p) => p.content) .filter(({ name }) => !hiddenPlugins.includes(name)) .map(({ name, icon }) => ( setActivePlugin(name)}>
{icon}
{name}
))} {hiddenPlugins.length > 0 && (
{t('PluginView.hidden', { count: hiddenPlugins.length })}
)}
); }; export default PluginView;