36 lines
1006 B
JavaScript
36 lines
1006 B
JavaScript
import { Constants, createLocalStorageStore } from "@budibase/frontend-core"
|
|
|
|
export const getThemeStore = () => {
|
|
const themeElement = document.documentElement
|
|
|
|
const initialValue = {
|
|
theme: "darkest",
|
|
}
|
|
const store = createLocalStorageStore("bb-theme", initialValue)
|
|
|
|
// Update theme class when store changes
|
|
store.subscribe(state => {
|
|
// Handle any old local storage values - this can be removed after the update
|
|
if (state.darkMode !== undefined) {
|
|
store.set(initialValue)
|
|
return
|
|
}
|
|
|
|
// Update global class names to use the new theme and remove others
|
|
Constants.Themes.forEach(option => {
|
|
themeElement.classList.toggle(
|
|
`spectrum--${option.class}`,
|
|
option.class === state.theme
|
|
)
|
|
})
|
|
|
|
// Add base theme if required
|
|
const selectedTheme = Constants.Themes.find(x => x.class === state.theme)
|
|
if (selectedTheme?.base) {
|
|
themeElement.classList.add(`spectrum--${selectedTheme.base}`)
|
|
}
|
|
})
|
|
|
|
return store
|
|
}
|