diff --git a/apps/mobile/app/screens/settings/settings-data.tsx b/apps/mobile/app/screens/settings/settings-data.tsx index 9080d3dc5..ec6280db5 100644 --- a/apps/mobile/app/screens/settings/settings-data.tsx +++ b/apps/mobile/app/screens/settings/settings-data.tsx @@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +import { ThemeDark, ThemePitchBlack } from "@notesnook/theme"; import notifee from "@notifee/react-native"; - import dayjs from "dayjs"; import React from "react"; import { Linking, Platform } from "react-native"; @@ -51,10 +51,9 @@ import PremiumService from "../../services/premium"; import SettingsService from "../../services/settings"; import Sync from "../../services/sync"; import { clearAllStores } from "../../stores"; -import { useSettingStore } from "../../stores/use-setting-store"; +import { useThemeStore } from "../../stores/use-theme-store"; import { useUserStore } from "../../stores/use-user-store"; import { AndroidModule } from "../../utils"; -import { getColorScheme, toggleDarkMode } from "../../utils/color-scheme/utils"; import { SUBSCRIPTION_STATUS } from "../../utils/constants"; import { eCloseSheet, @@ -70,7 +69,6 @@ import { useDragState } from "./editor/state"; import { verifyUser } from "./functions"; import { SettingSection } from "./types"; import { getTimeLeft } from "./user-section"; - type User = any; export const settingsGroups: SettingSection[] = [ @@ -488,26 +486,31 @@ export const settingsGroups: SettingSection[] = [ type: "switch", name: "Dark mode", description: "Strain your eyes no more at night", - property: "theme", + property: "colorScheme", icon: "brightness-6", modifer: () => { - toggleDarkMode(); + useThemeStore.getState().setColorScheme(); }, - getter: () => useSettingStore.getState().settings.theme.dark + getter: () => useThemeStore.getState().colorScheme === "dark" }, { id: "pitch-black", type: "switch", name: "Pitch black", description: "Save battery on device with amoled screen at night.", - property: "pitchBlack", + property: "darkTheme", modifer: () => { - SettingsService.set({ - pitchBlack: !SettingsService.get().pitchBlack - }); - getColorScheme(); + useThemeStore + .getState() + .setDarkTheme( + useThemeStore.getState().darkTheme.id === ThemePitchBlack.id + ? ThemeDark + : ThemePitchBlack + ); }, - icon: "brightness-1" + icon: "brightness-1", + getter: () => + useThemeStore.getState().darkTheme.id === ThemePitchBlack.id } ] }, diff --git a/apps/mobile/app/stores/use-theme-store.ts b/apps/mobile/app/stores/use-theme-store.ts index fde44e71f..49e3b8239 100644 --- a/apps/mobile/app/stores/use-theme-store.ts +++ b/apps/mobile/app/stores/use-theme-store.ts @@ -19,20 +19,20 @@ along with this program. If not, see . import { Appearance } from "react-native"; import create, { State } from "zustand"; -import { useThemeColors, ThemeType } from "@notesnook/theme"; +import { useThemeColors, ThemeDefinition } from "@notesnook/theme"; import SettingsService from "../services/settings"; export interface ThemeStore extends State { colors: Partial>; - lightTheme: ThemeType; - darkTheme: ThemeType; + lightTheme: ThemeDefinition; + darkTheme: ThemeDefinition; colorScheme: "dark" | "light"; setColors: (colors: ReturnType) => void; - setDarkTheme: (theme: ThemeType) => void; - setLightTheme: (theme: ThemeType) => void; - setColorScheme: (colorScheme: "dark" | "light") => void; + setDarkTheme: (theme: ThemeDefinition) => void; + setLightTheme: (theme: ThemeDefinition) => void; + setColorScheme: (colorScheme?: "dark" | "light") => void; } -export const useThemeStore = create((set) => ({ +export const useThemeStore = create((set, get) => ({ colors: SettingsService.get().lighTheme.scopes["base"], lightTheme: SettingsService.get().lighTheme, darkTheme: SettingsService.get().darkTheme, @@ -43,17 +43,27 @@ export const useThemeStore = create((set) => ({ // TODO //set({ colors }); }, - setDarkTheme: (darkTheme: ThemeType) => { + setDarkTheme: (darkTheme) => { set({ darkTheme }); + SettingsService.setProperty("darkTheme", darkTheme); }, - setLightTheme: (lightTheme: ThemeType) => { + setLightTheme: (lightTheme) => { set({ lightTheme }); + SettingsService.setProperty("lighTheme", lightTheme); }, - setColorScheme: (colorScheme: "dark" | "light") => { - set({ colorScheme }); - if (!SettingsService.get().useSystemTheme) { + setColorScheme: (colorScheme) => { + const nextColorScheme = + colorScheme === undefined + ? get().colorScheme === "dark" + ? "light" + : "dark" + : colorScheme; + set({ + colorScheme: nextColorScheme + }); + if (!SettingsService.getProperty("useSystemTheme")) { SettingsService.set({ - colorScheme: colorScheme + colorScheme: nextColorScheme }); } }