diff --git a/source/ts/single-page-application.ts b/source/ts/single-page-application.ts index 0ed542d..1ddba76 100644 --- a/source/ts/single-page-application.ts +++ b/source/ts/single-page-application.ts @@ -9,11 +9,11 @@ import {Router} from 'preact-router'; import HomePage from './pages/home.js'; import NotFoundPage from './pages/not-found.js'; import ReleasePage from './pages/release.js'; -import {themeContext, themes} from './utilities/themes.js'; +import {getThemeByCssClass, themeContext} from './utilities/themes.js'; -const savedTheme = window.localStorage.getItem('theme'); -const activeTheme = - themes.find((theme) => theme.cssClass === savedTheme) ?? themes[0]; +const activeTheme = getThemeByCssClass( + window.localStorage.getItem('theme') ?? '', +); document.body.classList.value = activeTheme.cssClass; diff --git a/source/ts/utilities/themes.ts b/source/ts/utilities/themes.ts index 6eec3bb..0a750f0 100644 --- a/source/ts/utilities/themes.ts +++ b/source/ts/utilities/themes.ts @@ -17,3 +17,12 @@ export const themes: Theme[] = [ ]; export const themeContext = createContext(themes[0]); + +export function getThemeByCssClass(cssClass: string): Theme { + return themes.find((theme) => theme.cssClass === cssClass) ?? themes[0]; +} + +export function setTheme(theme: Theme): void { + document.body.classList.value = theme.cssClass; + window.localStorage.setItem('theme', theme.cssClass); +}