From e4d217f3aaf533a48fb6359b6760d47037f4db50 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Fri, 30 May 2025 15:10:48 +0800 Subject: [PATCH] config: add theme mode options in the library page (#1283) --- .../app/library/components/SettingsMenu.tsx | 21 +++++++++++++++++++ .../src/app/reader/components/ViewMenu.tsx | 4 +--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/apps/readest-app/src/app/library/components/SettingsMenu.tsx b/apps/readest-app/src/app/library/components/SettingsMenu.tsx index 0c4aeaf5..f212b380 100644 --- a/apps/readest-app/src/app/library/components/SettingsMenu.tsx +++ b/apps/readest-app/src/app/library/components/SettingsMenu.tsx @@ -4,12 +4,15 @@ import { useRouter } from 'next/navigation'; import { PiUserCircle } from 'react-icons/pi'; import { PiUserCircleCheck } from 'react-icons/pi'; import { MdCheck } from 'react-icons/md'; +import { TbSunMoon } from 'react-icons/tb'; +import { BiMoon, BiSun } from 'react-icons/bi'; import { setAboutDialogVisible } from '@/components/AboutWindow'; import { isTauriAppPlatform, isWebAppPlatform } from '@/services/environment'; import { DOWNLOAD_READEST_URL } from '@/services/constants'; import { useAuth } from '@/context/AuthContext'; import { useEnv } from '@/context/EnvContext'; +import { useThemeStore } from '@/store/themeStore'; import { useSettingsStore } from '@/store/settingsStore'; import { useTranslation } from '@/hooks/useTranslation'; import { useResponsiveSize } from '@/hooks/useResponsiveSize'; @@ -31,6 +34,7 @@ const SettingsMenu: React.FC = ({ setIsDropdownOpen }) => { const router = useRouter(); const { envConfig, appService } = useEnv(); const { token, user } = useAuth(); + const { themeMode, setThemeMode } = useThemeStore(); const { settings, setSettings, saveSettings } = useSettingsStore(); const [quotas, setQuotas] = React.useState([]); const [isAutoUpload, setIsAutoUpload] = useState(settings.autoUpload); @@ -48,6 +52,7 @@ const SettingsMenu: React.FC = ({ setIsDropdownOpen }) => { setAboutDialogVisible(true); setIsDropdownOpen?.(false); }; + const downloadReadest = () => { window.open(DOWNLOAD_READEST_URL, '_blank'); setIsDropdownOpen?.(false); @@ -63,6 +68,11 @@ const SettingsMenu: React.FC = ({ setIsDropdownOpen }) => { setIsDropdownOpen?.(false); }; + const cycleThemeMode = () => { + const nextMode = themeMode === 'auto' ? 'light' : themeMode === 'light' ? 'dark' : 'auto'; + setThemeMode(nextMode); + }; + const handleReloadPage = () => { window.location.reload(); setIsDropdownOpen?.(false); @@ -225,6 +235,17 @@ const SettingsMenu: React.FC = ({ setIsDropdownOpen }) => { Icon={isScreenWakeLock ? MdCheck : undefined} onClick={toggleScreenWakeLock} /> +
{isWebAppPlatform() && } diff --git a/apps/readest-app/src/app/reader/components/ViewMenu.tsx b/apps/readest-app/src/app/reader/components/ViewMenu.tsx index fab01669..258bbbb2 100644 --- a/apps/readest-app/src/app/reader/components/ViewMenu.tsx +++ b/apps/readest-app/src/app/reader/components/ViewMenu.tsx @@ -10,7 +10,6 @@ import { useEnv } from '@/context/EnvContext'; import { useThemeStore } from '@/store/themeStore'; import { useReaderStore } from '@/store/readerStore'; import { useTranslation } from '@/hooks/useTranslation'; -import { ThemeMode } from '@/styles/themes'; import { getStyles } from '@/utils/style'; import { getMaxInlineSize } from '@/utils/config'; import { tauriHandleToggleFullScreen } from '@/utils/window'; @@ -51,8 +50,7 @@ const ViewMenu: React.FC = ({ }; const cycleThemeMode = () => { - const nextMode: ThemeMode = - themeMode === 'auto' ? 'light' : themeMode === 'light' ? 'dark' : 'auto'; + const nextMode = themeMode === 'auto' ? 'light' : themeMode === 'light' ? 'dark' : 'auto'; setThemeMode(nextMode); };