summaryrefslogtreecommitdiff
path: root/packages/frontend/src/theme-store.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-12-27 14:36:33 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2022-12-27 14:36:33 +0900
commit9384f5399da39e53855beb8e7f8ded1aa56bf72e (patch)
treece5959571a981b9c4047da3c7b3fd080aa44222c /packages/frontend/src/theme-store.ts
parentwip: retention for dashboard (diff)
downloadsharkey-9384f5399da39e53855beb8e7f8ded1aa56bf72e.tar.gz
sharkey-9384f5399da39e53855beb8e7f8ded1aa56bf72e.tar.bz2
sharkey-9384f5399da39e53855beb8e7f8ded1aa56bf72e.zip
rename: client -> frontend
Diffstat (limited to 'packages/frontend/src/theme-store.ts')
-rw-r--r--packages/frontend/src/theme-store.ts34
1 files changed, 34 insertions, 0 deletions
diff --git a/packages/frontend/src/theme-store.ts b/packages/frontend/src/theme-store.ts
new file mode 100644
index 0000000000..fdc92ed793
--- /dev/null
+++ b/packages/frontend/src/theme-store.ts
@@ -0,0 +1,34 @@
+import { api } from '@/os';
+import { $i } from '@/account';
+import { Theme } from './scripts/theme';
+
+const lsCacheKey = $i ? `themes:${$i.id}` : '';
+
+export function getThemes(): Theme[] {
+ return JSON.parse(localStorage.getItem(lsCacheKey) || '[]');
+}
+
+export async function fetchThemes(): Promise<void> {
+ if ($i == null) return;
+
+ try {
+ const themes = await api('i/registry/get', { scope: ['client'], key: 'themes' });
+ localStorage.setItem(lsCacheKey, JSON.stringify(themes));
+ } catch (err) {
+ if (err.code === 'NO_SUCH_KEY') return;
+ throw err;
+ }
+}
+
+export async function addTheme(theme: Theme): Promise<void> {
+ await fetchThemes();
+ const themes = getThemes().concat(theme);
+ await api('i/registry/set', { scope: ['client'], key: 'themes', value: themes });
+ localStorage.setItem(lsCacheKey, JSON.stringify(themes));
+}
+
+export async function removeTheme(theme: Theme): Promise<void> {
+ const themes = getThemes().filter(t => t.id !== theme.id);
+ await api('i/registry/set', { scope: ['client'], key: 'themes', value: themes });
+ localStorage.setItem(lsCacheKey, JSON.stringify(themes));
+}