diff --git a/frontend/src/components/PluginView.tsx b/frontend/src/components/PluginView.tsx
index 0d0a52cf..2ae0b555 100644
--- a/frontend/src/components/PluginView.tsx
+++ b/frontend/src/components/PluginView.tsx
@@ -1,5 +1,6 @@
import {
ButtonItem,
+ Focusable,
PanelSection,
PanelSectionRow,
joinClassNames,
@@ -10,38 +11,47 @@ import { VFC } from 'react';
import { useDeckyState } from './DeckyState';
import NotificationBadge from './NotificationBadge';
+import { useQuickAccessVisible } from './QuickAccessVisibleState';
+import TitleView from './TitleView';
const PluginView: VFC = () => {
- const { plugins, updates, activePlugin, setActivePlugin } = useDeckyState();
+ const { plugins, updates, activePlugin, setActivePlugin, closeActivePlugin } = useDeckyState();
+ const visible = useQuickAccessVisible();
if (activePlugin) {
return (
-
- {activePlugin.content}
-
+
+
+
+ {visible && activePlugin.content}
+
+
);
}
return (
-
-
- {plugins
- .filter((p) => p.content)
- .map(({ name, icon }) => (
-
- setActivePlugin(name)}>
-
-
-
- ))}
-
-
+ <>
+
+
+
+ {plugins
+ .filter((p) => p.content)
+ .map(({ name, icon }) => (
+
+ setActivePlugin(name)}>
+
+
+
+ ))}
+
+
+ >
);
};
diff --git a/frontend/src/components/QuickAccessVisibleState.tsx b/frontend/src/components/QuickAccessVisibleState.tsx
new file mode 100644
index 00000000..b5ee3b98
--- /dev/null
+++ b/frontend/src/components/QuickAccessVisibleState.tsx
@@ -0,0 +1,13 @@
+import { FC, createContext, useContext } from 'react';
+
+const QuickAccessVisibleState = createContext(true);
+
+export const useQuickAccessVisible = () => useContext(QuickAccessVisibleState);
+
+interface Props {
+ visible: boolean;
+}
+
+export const QuickAccessVisibleStateProvider: FC = ({ children, visible }) => {
+ return {children};
+};
diff --git a/frontend/src/plugin-loader.tsx b/frontend/src/plugin-loader.tsx
index a1414b3a..6eee9bc0 100644
--- a/frontend/src/plugin-loader.tsx
+++ b/frontend/src/plugin-loader.tsx
@@ -17,7 +17,6 @@ import { deinitFilepickerPatches, initFilepickerPatches } from './components/mod
import PluginInstallModal from './components/modals/PluginInstallModal';
import NotificationBadge from './components/NotificationBadge';
import PluginView from './components/PluginView';
-import TitleView from './components/TitleView';
import WithSuspense from './components/WithSuspense';
import Logger from './logger';
import { Plugin } from './plugin';
@@ -64,7 +63,6 @@ class PluginLoader extends Logger {
title: null,
content: (
-
),
diff --git a/frontend/src/tabs-hook.ts b/frontend/src/tabs-hook.tsx
similarity index 91%
rename from frontend/src/tabs-hook.ts
rename to frontend/src/tabs-hook.tsx
index e75e043d..c5072e27 100644
--- a/frontend/src/tabs-hook.ts
+++ b/frontend/src/tabs-hook.tsx
@@ -1,6 +1,7 @@
import { Patch, QuickAccessTab, afterPatch, sleep } from 'decky-frontend-lib';
import { memo } from 'react';
+import { QuickAccessVisibleStateProvider } from './components/QuickAccessVisibleState';
import Logger from './logger';
declare global {
@@ -83,17 +84,17 @@ class TabsHook extends Logger {
if (ret) {
if (!newQATabRenderer) {
this.tabRenderer = ret.props.children[1].children.type;
- newQATabRenderer = (...args: any) => {
+ newQATabRenderer = (...qamArgs: any[]) => {
const oFilter = Array.prototype.filter;
Array.prototype.filter = function (...args: any[]) {
if (isTabsArray(this)) {
- self.render(this);
+ self.render(this, qamArgs[0].visible);
}
// @ts-ignore
return oFilter.call(this, ...args);
};
// TODO remove array hack entirely and use this instead const tabs = ret.props.children.props.children[0].props.children[1].props.children[0].props.children[0].props.tabs
- const ret = this.tabRenderer(...args);
+ const ret = this.tabRenderer(...qamArgs);
Array.prototype.filter = oFilter;
return ret;
};
@@ -135,13 +136,13 @@ class TabsHook extends Logger {
this.tabs = this.tabs.filter((tab) => tab.id !== id);
}
- render(existingTabs: any[]) {
+ render(existingTabs: any[], visible: boolean) {
for (const { title, icon, content, id } of this.tabs) {
existingTabs.push({
key: id,
title,
tab: icon,
- panel: content,
+ panel: {content},
});
}
}