summaryrefslogtreecommitdiff
path: root/frontend/src/tabs-hook.tsx
diff options
context:
space:
mode:
authorAAGaming <aagaming@riseup.net>2024-07-18 01:20:29 -0400
committerAAGaming <aagaming@riseup.net>2024-08-03 14:04:19 -0400
commit88e7919a12fd56b297e73afb3fb05483f5893f4d (patch)
tree4b6920d6f8675e6d6de8f2de0df4b4477746a879 /frontend/src/tabs-hook.tsx
parent28c7254ef6952d9504472ebcbb05238b50aa6086 (diff)
downloaddecky-loader-88e7919a12fd56b297e73afb3fb05483f5893f4d.tar.gz
decky-loader-88e7919a12fd56b297e73afb3fb05483f5893f4d.zip
implement new toaster hook
this also supports the notification list and probably also desktop toasts (UI wip, read location enum prop from toast component probably)
Diffstat (limited to 'frontend/src/tabs-hook.tsx')
-rw-r--r--frontend/src/tabs-hook.tsx41
1 files changed, 26 insertions, 15 deletions
diff --git a/frontend/src/tabs-hook.tsx b/frontend/src/tabs-hook.tsx
index dbf6ca35..34b5f592 100644
--- a/frontend/src/tabs-hook.tsx
+++ b/frontend/src/tabs-hook.tsx
@@ -1,5 +1,14 @@
// TabsHook for versions after the Desktop merge
-import { ErrorBoundary, Patch, QuickAccessTab, afterPatch, createReactTreePatcher, findInReactTree, findModuleByExport, getReactRoot, setReactPatcherLoggingEnabled, sleep } from '@decky/ui';
+import {
+ ErrorBoundary,
+ Patch,
+ QuickAccessTab,
+ afterPatch,
+ createReactTreePatcher,
+ findInReactTree,
+ findModuleByExport,
+ getReactRoot,
+} from '@decky/ui';
import { QuickAccessVisibleStateProvider } from './components/QuickAccessVisibleState';
import Logger from './logger';
@@ -20,9 +29,7 @@ interface Tab {
class TabsHook extends Logger {
// private keys = 7;
tabs: Tab[] = [];
- private qAMRoot?: any;
private qamPatch?: Patch;
- private cachedTabs: any;
constructor() {
super('TabsHook');
@@ -34,25 +41,29 @@ class TabsHook extends Logger {
init() {
// TODO patch the "embedded" renderer in this module too (seems to be for VR? unsure)
- const qamModule = findModuleByExport(e => e?.type?.toString()?.includes("QuickAccessMenuBrowserView"));
- const qamRenderer = Object.values(qamModule).find((e: any) => e?.type?.toString()?.includes("QuickAccessMenuBrowserView"))
+ const qamModule = findModuleByExport((e) => e?.type?.toString()?.includes('QuickAccessMenuBrowserView'));
+ const qamRenderer = Object.values(qamModule).find((e: any) =>
+ e?.type?.toString()?.includes('QuickAccessMenuBrowserView'),
+ );
- const patchHandler = createReactTreePatcher([
- tree => findInReactTree(tree, node => node?.props?.onFocusNavDeactivated)
- ], (args, ret) => {
- this.log("qam render", args, ret);
- const tabs = findInReactTree(ret, (x) => x?.props?.tabs);
- this.render(tabs.props.tabs, args[0].visible);
- return ret;
- }, "TabsHook");
+ const patchHandler = createReactTreePatcher(
+ [(tree) => findInReactTree(tree, (node) => node?.props?.onFocusNavDeactivated)],
+ (args, ret) => {
+ this.log('qam render', args, ret);
+ const tabs = findInReactTree(ret, (x) => x?.props?.tabs);
+ this.render(tabs.props.tabs, args[0].visible);
+ return ret;
+ },
+ 'TabsHook',
+ );
- this.qamPatch = afterPatch(qamRenderer, "type", patchHandler);
+ this.qamPatch = afterPatch(qamRenderer, 'type', patchHandler);
// Patch already rendered qam
const root = getReactRoot(document.getElementById('root') as any);
const qamNode = root && findInReactTree(root, (n: any) => n.elementType == qamRenderer); // need elementType, because type is actually mobx wrapper
if (qamNode) {
- this.debug("qamNode", qamNode);
+ this.debug('qamNode', qamNode);
// Only affects this fiber node so we don't need to unpatch here
qamNode.type = qamNode.elementType.type;
if (qamNode?.alternate) {