Merge pull request 'refactor how client settings are saved and loaded' (#32) from client-settings-refactor into main
All checks were successful
ci/woodpecker/push/build-and-publish Pipeline was successful

Reviewed-on: #32
Reviewed-by: SauceyRed <saucey@saucey.red>
This commit is contained in:
Twig 2025-07-12 19:59:41 +00:00
commit d18f00d1c0
4 changed files with 49 additions and 13 deletions

18
app.vue
View file

@ -8,6 +8,7 @@
<script lang="ts" setup>
import ContextMenu from '~/components/ContextMenu.vue';
import { render } from 'vue';
import settingLoad from './utils/settingLoad';
const banner = useState("banner", () => false);
@ -43,21 +44,14 @@ function contextMenuHandler(e: MouseEvent) {
//]);
}
let currentTheme = "dark" // default theme
const savedTheme = localStorage.getItem("selectedTheme");
if (savedTheme) {
currentTheme = savedTheme;
}
const currentTheme = settingLoad("selectedThemeId") ?? "dark"
const baseURL = useRuntimeConfig().app.baseURL;
useHead({
link: [
{
rel: "stylesheet",
href: `${baseURL}themes/${currentTheme}.css`
}
]
link: [{
rel: "stylesheet",
href: `${baseURL}themes/${currentTheme}.css`
}]
})
</script>

View file

@ -26,6 +26,8 @@
</template>
<script lang="ts" setup>
import settingSave from '~/utils/settingSave';
const runtimeConfig = useRuntimeConfig()
const defaultThemes = runtimeConfig.public.defaultThemes
const baseURL = runtimeConfig.app.baseURL;
@ -46,7 +48,7 @@ function changeTheme(id: string, url: string) {
return;
}
localStorage.setItem("selectedTheme", id);
settingSave("selectedThemeId", id)
// if the theme didn't originally load for some reason, create it
if (!themeLinkElement) {

19
utils/settingLoad.ts Normal file
View file

@ -0,0 +1,19 @@
export default (key: string): any => {
let clientSettingsItem: string | null = localStorage.getItem("clientSettings")
if (typeof clientSettingsItem != "string") {
clientSettingsItem = "{}"
}
let clientSettings: { [key: string]: any } = {}
try {
clientSettings = JSON.parse(clientSettingsItem)
} catch {
clientSettings = {}
}
if (typeof clientSettings !== "object") {
clientSettings = {}
}
return clientSettings[key]
}

21
utils/settingSave.ts Normal file
View file

@ -0,0 +1,21 @@
export default (key: string, value: any): void => {
let clientSettingsItem: string | null = localStorage.getItem("clientSettings")
if (typeof clientSettingsItem != "string") {
clientSettingsItem = "{}"
}
let clientSettings: { [key: string]: any } = {}
try {
clientSettings = JSON.parse(clientSettingsItem)
} catch {
clientSettings = {}
}
if (typeof clientSettings !== "object") {
clientSettings = {}
}
clientSettings[key] = value
localStorage.setItem("clientSettings", JSON.stringify(clientSettings))
}