@@ -1,6 +1,7 @@
|
||||
import type { Theme } from "@/modules/auth/types/auth.types";
|
||||
import { create } from "zustand";
|
||||
import { persist } from "zustand/middleware";
|
||||
import { applyTheme, getSavedTheme, getCurrentTheme } from "@/modules/theme-changer/utils/apply.theme";
|
||||
|
||||
interface ThemeState {
|
||||
theme: Theme;
|
||||
@@ -10,26 +11,20 @@ interface ThemeState {
|
||||
|
||||
export const useThemeStore = create<ThemeState>()(
|
||||
persist(
|
||||
(set) => ({
|
||||
theme: "dark",
|
||||
(set, get) => ({
|
||||
theme: "dark" as Theme,
|
||||
toggleTheme: () => {
|
||||
set((state) => {
|
||||
const newTheme = state.theme === "dark" ? "light" : "dark";
|
||||
// Применяем класс к documentElement
|
||||
if (newTheme === "dark") {
|
||||
document.documentElement.classList.add("dark");
|
||||
} else {
|
||||
document.documentElement.classList.remove("dark");
|
||||
}
|
||||
return { theme: newTheme };
|
||||
});
|
||||
const currentTheme = getCurrentTheme();
|
||||
const newThemeType = currentTheme === "dark" || currentTheme === "nightowl" || currentTheme === "sunset" || currentTheme === "forest" || currentTheme === "ocean" || currentTheme === "coffee"
|
||||
? "light"
|
||||
: "dark";
|
||||
// Переключаемся между light и dark базовыми темами
|
||||
const newTheme = newThemeType === "dark" ? "dark" : "light";
|
||||
applyTheme(newTheme);
|
||||
set({ theme: newTheme as Theme });
|
||||
},
|
||||
setTheme: (theme: Theme) => {
|
||||
if (theme === "dark") {
|
||||
document.documentElement.classList.add("dark");
|
||||
} else {
|
||||
document.documentElement.classList.remove("dark");
|
||||
}
|
||||
applyTheme(theme);
|
||||
set({ theme });
|
||||
},
|
||||
}),
|
||||
@@ -38,17 +33,3 @@ export const useThemeStore = create<ThemeState>()(
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
// Инициализация темы при загрузке
|
||||
if (typeof window !== "undefined") {
|
||||
const storedTheme = localStorage.getItem("theme-storage");
|
||||
if (storedTheme) {
|
||||
const { state } = JSON.parse(storedTheme);
|
||||
if (state.theme === "dark") {
|
||||
document.documentElement.classList.add("dark");
|
||||
}
|
||||
} else {
|
||||
// По умолчанию dark
|
||||
document.documentElement.classList.add("dark");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user