Files
My-KOPKB/fe/src/stores/theme.ts
T
ISMAIL MASSERAN 94ecbe5887 first init
2026-06-08 11:37:14 +08:00

77 lines
1.8 KiB
TypeScript

import { defineStore } from 'pinia'
import EnigmaSideMenu from '@/themes/Enigma/SideMenu'
export const themes = [
{
name: 'enigma',
layout: 'side-menu',
component: EnigmaSideMenu,
},
] as const
export type Themes = (typeof themes)[number]
interface ThemeState {
themeValue: {
name: Themes['name']
layout: Themes['layout']
}
}
export const getTheme = (search?: { name: Themes['name']; layout: Themes['layout'] }) => {
const searchValues =
search === undefined
? {
name: localStorage.getItem('theme'),
layout: localStorage.getItem('layout'),
}
: search
return (
themes.filter((item, key) => {
return item.name === searchValues.name && item.layout === searchValues.layout
})[0] || themes[0]
)
}
export const useThemeStore = defineStore('theme', {
state: (): ThemeState => ({
themeValue: {
name: localStorage.getItem('theme') === null ? themes[0].name : getTheme().name,
layout: localStorage.getItem('layout') === null ? themes[0].layout : getTheme().layout,
},
}),
getters: {
theme(state) {
if (localStorage.getItem('theme') === null) {
localStorage.setItem('theme', 'enigma')
}
if (localStorage.getItem('layout') === null) {
localStorage.setItem('layout', 'side-menu')
}
return state.themeValue
},
},
actions: {
// Theme
setTheme(theme: Themes['name']) {
this.themeValue = {
name: theme,
layout: this.themeValue.layout,
}
localStorage.setItem('theme', theme)
},
// Layout
setLayout(layout: Themes['layout']) {
this.themeValue = {
name: this.themeValue.name,
layout: layout,
}
localStorage.setItem('layout', layout)
},
},
})