From 4b923c1dc70eaa4a3ca58d9e9f3218785b2fe919 Mon Sep 17 00:00:00 2001
From: marios <marios8543@gmail.com>
Date: Thu, 26 May 2022 04:00:18 +0300
Subject: display overhaul, compatibility with legacy plugins, fixes

---
 frontend/src/components/PluginView.tsx | 40 ++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)
 create mode 100644 frontend/src/components/PluginView.tsx

(limited to 'frontend/src/components/PluginView.tsx')

diff --git a/frontend/src/components/PluginView.tsx b/frontend/src/components/PluginView.tsx
new file mode 100644
index 00000000..27cb386a
--- /dev/null
+++ b/frontend/src/components/PluginView.tsx
@@ -0,0 +1,40 @@
+import { Button } from "decky-frontend-lib";
+import React from "react"
+
+class PluginView extends React.Component<{}, { runningPlugin: string, plugins: Array<any> }> {
+    constructor() {
+        super({});
+        this.state = {
+            plugins: [],
+            runningPlugin: ""
+        }
+    }
+
+    componentDidMount() {
+        window.__DeckyEvLoop.addEventListener("pluginClose", (_) => { this.setState({ runningPlugin: "", plugins: this.state.plugins }) });
+        window.__DeckyEvLoop.addEventListener("setPlugins", (ev) => { console.log(ev); this.setState({ plugins: ev.data, runningPlugin: this.state.runningPlugin }) });
+    }
+
+    private openPlugin(name: string) {
+        const ev = new Event("pluginOpen");
+        ev.data = name;
+        window.__DeckyEvLoop.dispatchEvent(ev);
+        this.setState({ runningPlugin: name, plugins: this.state.plugins })
+    }
+
+    render() {
+        if (this.state.runningPlugin) {
+            return this.state.plugins.find(x => x.name == this.state.runningPlugin).content;
+        }
+        else {
+            let buttons = [];
+            for (const plugin of this.state.plugins) {
+                buttons.push(<Button layout="below" onClick={(_) => this.openPlugin(plugin.name)}>{plugin.icon}{plugin.name}</Button>)
+            }
+            if (buttons.length == 0) return <div className='staticClasses.Text'>No plugins...</div>;
+            return buttons;
+        }
+    }
+}
+
+export default PluginView;
\ No newline at end of file
-- 
cgit v1.2.3

