From 47bc910a8482d3d2cc882e28e862ca5ad61063b6 Mon Sep 17 00:00:00 2001
From: Jonas Dellinger <jonas@dellinger.dev>
Date: Wed, 7 Jun 2023 07:35:05 +0200
Subject: Add functionality to hide plugins from quick access menu (#468)

---
 frontend/src/hidden-plugins-service.tsx | 34 +++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)
 create mode 100644 frontend/src/hidden-plugins-service.tsx

(limited to 'frontend/src/hidden-plugins-service.tsx')

diff --git a/frontend/src/hidden-plugins-service.tsx b/frontend/src/hidden-plugins-service.tsx
new file mode 100644
index 00000000..0501c453
--- /dev/null
+++ b/frontend/src/hidden-plugins-service.tsx
@@ -0,0 +1,34 @@
+import { DeckyState } from './components/DeckyState';
+import { getSetting, setSetting } from './utils/settings';
+
+/**
+ * A Service class for managing the state and actions related to the hidden plugins feature
+ *
+ * It's mostly responsible for sending setting updates to the server and keeping the local state in sync.
+ */
+export class HiddenPluginsService {
+  constructor(private deckyState: DeckyState) {}
+
+  init() {
+    getSetting<string[]>('hiddenPlugins', []).then((hiddenPlugins) => {
+      this.deckyState.setHiddenPlugins(hiddenPlugins);
+    });
+  }
+
+  /**
+   * Sends the new hidden plugins list to the server and persists it locally in the decky state
+   *
+   * @param hiddenPlugins The new list of hidden plugins
+   */
+  async update(hiddenPlugins: string[]) {
+    await setSetting('hiddenPlugins', hiddenPlugins);
+    this.deckyState.setHiddenPlugins(hiddenPlugins);
+  }
+
+  /**
+   * Refreshes the state of hidden plugins in the local state
+   */
+  async invalidate() {
+    this.deckyState.setHiddenPlugins(await getSetting('hiddenPlugins', []));
+  }
+}
-- 
cgit v1.2.3

