From 580cd9b3d9c2c09f19bfdc01d5556f82eef84e85 Mon Sep 17 00:00:00 2001 From: sethburkart123 Date: Tue, 17 Sep 2024 17:36:21 +1000 Subject: [PATCH] refactor: Update store page header styling, add search functionality, and improve theme management --- src/seqta/ui/themes/downloadTheme.ts | 4 +- .../components/store/ThemeModal.svelte | 101 ++++++++++++++---- src/svelte-interface/pages/store.svelte | 34 ++++-- tailwind.config.js | 3 + 4 files changed, 112 insertions(+), 30 deletions(-) diff --git a/src/seqta/ui/themes/downloadTheme.ts b/src/seqta/ui/themes/downloadTheme.ts index 32e72eed..630cb624 100644 --- a/src/seqta/ui/themes/downloadTheme.ts +++ b/src/seqta/ui/themes/downloadTheme.ts @@ -31,13 +31,13 @@ export const InstallTheme = async (themeData: ThemeContent) => { blob: base64ToBlob(image.data) })); - let availableThemes = await localforage.getItem('availableThemes') as string[]; + let availableThemes = await localforage.getItem('customThemes') as string[]; if (availableThemes && !availableThemes.includes(themeData.id)) { availableThemes.push(themeData.id); } else if (!availableThemes) { availableThemes = [themeData.id]; } - await localforage.setItem('availableThemes', availableThemes); + await localforage.setItem('customThemes', availableThemes); await localforage.setItem(themeData.id, { ...themeData, diff --git a/src/svelte-interface/components/store/ThemeModal.svelte b/src/svelte-interface/components/store/ThemeModal.svelte index 8350ca94..28cb904a 100644 --- a/src/svelte-interface/components/store/ThemeModal.svelte +++ b/src/svelte-interface/components/store/ThemeModal.svelte @@ -1,19 +1,61 @@ -
-
+
hideModal()} onkeydown={() => hideModal()} role="button" tabindex="-1" transition:fade> + +
e.stopPropagation()} + onkeydown={(e) => e.stopPropagation()} + >
-

@@ -24,22 +66,43 @@ {theme.description}

{#if currentThemes.includes(theme.id)} - {:else} - {/if} + +
+ +

+ Similar Themes +

+
+ {#each getRelatedThemes() as relatedTheme (relatedTheme.id)} + + {/each} +
diff --git a/src/svelte-interface/pages/store.svelte b/src/svelte-interface/pages/store.svelte index 642d6125..41d5f133 100644 --- a/src/svelte-interface/pages/store.svelte +++ b/src/svelte-interface/pages/store.svelte @@ -12,6 +12,8 @@ import { StoreDownloadTheme } from '@/seqta/ui/themes/downloadTheme' import { setTheme } from '@/seqta/ui/themes/setTheme' import Header from '../components/store/Header.svelte' + import { deleteTheme } from '@/seqta/ui/themes/deleteTheme' + import { getAvailableThemes } from '@/seqta/ui/themes/getAvailableThemes' // State variables let searchTerm = $state(''); @@ -20,8 +22,14 @@ let loading = $state(true); let darkMode = $state(false); let displayTheme = $state(null); + let currentThemes = $state([]); - const setDisplayTheme = (theme: Theme) => { + const fetchCurrentThemes = async () => { + const themes = await getAvailableThemes(); + currentThemes = themes.themes.filter(theme => theme !== null).map(theme => theme.id); + }; + + const setDisplayTheme = (theme: Theme | null) => { displayTheme = theme; }; @@ -50,7 +58,8 @@ // On mount onMount(async () => { await fetchThemes(); - + await fetchCurrentThemes(); + darkMode = (await browser.storage.local.get('DarkMode')).DarkMode === 'true'; darkMode = $settingsState.DarkMode; @@ -83,14 +92,21 @@ {#if displayTheme} - displayTheme = null} onInstall={() => { - StoreDownloadTheme({themeContent: displayTheme as Theme}).then(() => { - setTheme((displayTheme as Theme).id); - displayTheme = null; - }); - }} onRemove={() => {}} /> + { + if (displayTheme) { + await StoreDownloadTheme({themeContent: displayTheme}) + // @ts-ignore + setTheme(displayTheme.id); + await fetchCurrentThemes(); + } + }} onRemove={async () => { + if (displayTheme?.id) { + console.log('deleting theme', displayTheme.id); + deleteTheme(displayTheme.id) + await fetchCurrentThemes(); + } + }} /> {/if} - {/if}
diff --git a/tailwind.config.js b/tailwind.config.js index fe161f23..67df1fdf 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -39,6 +39,9 @@ export default { fontFamily: { "IconFamily": "IconFamily" }, + animation: { + 'spin-fast': 'spin 0.4s linear infinite', + }, aspectRatio: { "theme": "5 / 1" }