diff --git a/src/App.tsx b/src/App.tsx index 68f8e2b8..4a3b401c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -20,7 +20,7 @@ import { WebUIUpdateChecker } from '@/features/app-updates/components/WebUIUpdat import { ServerUpdateChecker } from '@/features/app-updates/components/ServerUpdateChecker.tsx'; import { lazyLoadFallback } from '@/features/core/utils/LazyLoad.tsx'; import { ErrorBoundary } from '@/features/core/components/feedback/ErrorBoundary.tsx'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { AppRoutes } from '@/features/core/AppRoute.constants.ts'; diff --git a/src/features/chapter/components/ChapterList.tsx b/src/features/chapter/components/ChapterList.tsx index 874733e2..18f21a85 100644 --- a/src/features/chapter/components/ChapterList.tsx +++ b/src/features/chapter/components/ChapterList.tsx @@ -36,7 +36,7 @@ import { ChapterActionMenuItems } from '@/features/chapter/components/actions/Ch import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { LoadingPlaceholder } from '@/features/core/components/feedback/LoadingPlaceholder.tsx'; import { GET_CHAPTERS_MANGA } from '@/lib/graphql/queries/ChapterQuery.ts'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { useResizeObserver } from '@/features/core/hooks/useResizeObserver.tsx'; import { MediaQuery } from '@/features/core/utils/MediaQuery.tsx'; import { shouldForwardProp } from '@/features/core/utils/ShouldForwardProp.ts'; diff --git a/src/features/core/components/tabs/TabsMenu.tsx b/src/features/core/components/tabs/TabsMenu.tsx index a8960fd4..d201adc3 100644 --- a/src/features/core/components/tabs/TabsMenu.tsx +++ b/src/features/core/components/tabs/TabsMenu.tsx @@ -9,7 +9,7 @@ import Tabs, { TabsProps } from '@mui/material/Tabs'; import { styled } from '@mui/material/styles'; import { ForwardedRef, forwardRef } from 'react'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; const StyledTabsMenu = styled(Tabs)(({ theme }) => ({ display: 'flex', diff --git a/src/features/core/components/virtuoso/StyledGroupedVirtuoso.tsx b/src/features/core/components/virtuoso/StyledGroupedVirtuoso.tsx index 23577005..f4a85a32 100644 --- a/src/features/core/components/virtuoso/StyledGroupedVirtuoso.tsx +++ b/src/features/core/components/virtuoso/StyledGroupedVirtuoso.tsx @@ -9,7 +9,7 @@ import { ContextProp, TopItemListProps } from 'react-virtuoso'; import { ComponentProps, useMemo } from 'react'; import Box from '@mui/material/Box'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { GroupedVirtuosoPersisted } from '@/lib/virtuoso/Component/GroupedVirtuosoPersisted.tsx'; const StickyVirtuosoHeaderWithOffset = diff --git a/src/features/core/contexts/AppContext.tsx b/src/features/core/contexts/AppContext.tsx index ea477400..728ee667 100644 --- a/src/features/core/contexts/AppContext.tsx +++ b/src/features/core/contexts/AppContext.tsx @@ -12,13 +12,13 @@ import { BrowserRouter as Router } from 'react-router-dom'; import { QueryParamProvider } from 'use-query-params'; import { ReactRouter6Adapter } from 'use-query-params/adapters/react-router-6'; import { SnackbarProvider } from 'notistack'; -import { NavBarContextProvider } from '@/features/navigation-bar/contexts/NavBarContextProvider.tsx'; -import { ActiveDeviceContextProvider } from '@/features/device/contexts/DeviceContext.tsx'; +import { ActiveDeviceContextProvider } from '@/features/device/DeviceContext.tsx'; import { ReaderContextProvider } from '@/features/reader/contexts/ReaderContextProvider.tsx'; -import { AppHotkeysProvider } from '@/features/hotkeys/contexts/AppHotkeysProvider.tsx'; +import { AppHotkeysProvider } from '@/features/hotkeys/AppHotkeysProvider.tsx'; import { SnackbarWithDescription } from '@/features/core/components/feedback/SnackbarWithDescription.tsx'; -import { AppPageHistoryContextProvider } from '@/features/core/contexts/AppPageHistoryContextProvider.tsx'; -import { AppThemeContextProvider } from '@/features/theme/contexts/AppThemeContextProvider.tsx'; +import { AppPageHistoryContextProvider } from '@/features/core/contexts/AppPageHistoryContext.tsx'; +import { AppThemeContextProvider } from '@/features/theme/AppThemeContext.tsx'; +import { NavBarContextProvider } from '@/features/navigation-bar/NavbarContext.tsx'; interface Props { children: React.ReactNode; diff --git a/src/features/core/contexts/AppPageHistoryContext.tsx b/src/features/core/contexts/AppPageHistoryContext.tsx index 1c087693..6c94c802 100644 --- a/src/features/core/contexts/AppPageHistoryContext.tsx +++ b/src/features/core/contexts/AppPageHistoryContext.tsx @@ -7,7 +7,14 @@ */ import { createContext, useContext } from 'react'; +import { useHistory } from '@/features/core/hooks/useHistory.ts'; export const AppPageHistoryContext = createContext([]); export const useAppPageHistoryContext = () => useContext(AppPageHistoryContext); + +export const AppPageHistoryContextProvider = ({ children }: { children: React.ReactNode }) => { + const history = useHistory(); + + return {children}; +}; diff --git a/src/features/core/contexts/AppPageHistoryContextProvider.tsx b/src/features/core/contexts/AppPageHistoryContextProvider.tsx deleted file mode 100644 index a118f869..00000000 --- a/src/features/core/contexts/AppPageHistoryContextProvider.tsx +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - */ - -import React from 'react'; -import { AppPageHistoryContext } from '@/features/core/contexts/AppPageHistoryContext.tsx'; -import { useHistory } from '@/features/core/hooks/useHistory.ts'; - -export const AppPageHistoryContextProvider = ({ children }: { children: React.ReactNode }) => { - const history = useHistory(); - - return {children}; -}; diff --git a/src/features/core/utils/MediaQuery.tsx b/src/features/core/utils/MediaQuery.tsx index b839623f..5ad34cd4 100644 --- a/src/features/core/utils/MediaQuery.tsx +++ b/src/features/core/utils/MediaQuery.tsx @@ -10,7 +10,7 @@ import useMediaQuery from '@mui/material/useMediaQuery'; import { Breakpoint, SxProps, Theme } from '@mui/material/styles'; import { useCallback, useState } from 'react'; import { getCurrentTheme } from '@/features/theme/services/ThemeCreator.ts'; -import { ThemeMode } from '@/features/theme/contexts/AppThemeContext.tsx'; +import { ThemeMode } from '@/features/theme/AppThemeContext.tsx'; import { useResizeObserver } from '@/features/core/hooks/useResizeObserver.tsx'; export class MediaQuery { diff --git a/src/features/device/contexts/DeviceContext.tsx b/src/features/device/DeviceContext.tsx similarity index 100% rename from src/features/device/contexts/DeviceContext.tsx rename to src/features/device/DeviceContext.tsx diff --git a/src/features/device/screens/DeviceSetting.tsx b/src/features/device/screens/DeviceSetting.tsx index 248e51ac..25765a48 100644 --- a/src/features/device/screens/DeviceSetting.tsx +++ b/src/features/device/screens/DeviceSetting.tsx @@ -17,7 +17,7 @@ import { } from '@/features/settings/services/ServerSettingsMetadata.ts'; import { makeToast } from '@/features/core/utils/Toast.ts'; import { MutableListSetting } from '@/features/core/components/settings/MutableListSetting.tsx'; -import { useDeviceContext } from '@/features/device/contexts/DeviceContext.tsx'; +import { useDeviceContext } from '@/features/device/DeviceContext.tsx'; import { Select } from '@/features/core/components/inputs/Select.tsx'; import { LoadingPlaceholder } from '@/features/core/components/feedback/LoadingPlaceholder.tsx'; import { EmptyViewAbsoluteCentered } from '@/features/core/components/feedback/EmptyViewAbsoluteCentered.tsx'; diff --git a/src/features/hotkeys/contexts/AppHotkeysProvider.tsx b/src/features/hotkeys/AppHotkeysProvider.tsx similarity index 100% rename from src/features/hotkeys/contexts/AppHotkeysProvider.tsx rename to src/features/hotkeys/AppHotkeysProvider.tsx diff --git a/src/features/manga/components/MangaGrid.tsx b/src/features/manga/components/MangaGrid.tsx index 1b26ed82..37d3f5e4 100644 --- a/src/features/manga/components/MangaGrid.tsx +++ b/src/features/manga/components/MangaGrid.tsx @@ -28,7 +28,7 @@ import { DEFAULT_FULL_FAB_HEIGHT } from '@/features/core/components/buttons/Styl import { MangaCardProps } from '@/features/manga/Manga.types.ts'; import { MangaType } from '@/lib/graphql/generated/graphql.ts'; import { useResizeObserver } from '@/features/core/hooks/useResizeObserver.tsx'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { GridLayout } from '@/features/core/Core.types.ts'; import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; import { VirtuosoGridPersisted } from '@/lib/virtuoso/Component/VirtuosoGridPersisted.tsx'; diff --git a/src/features/manga/components/details/Thumbnail.tsx b/src/features/manga/components/details/Thumbnail.tsx index 815a13bf..71134ca6 100644 --- a/src/features/manga/components/details/Thumbnail.tsx +++ b/src/features/manga/components/details/Thumbnail.tsx @@ -18,7 +18,7 @@ import { Mangas } from '@/features/manga/services/Mangas.ts'; import { SpinnerImage } from '@/features/core/components/SpinnerImage.tsx'; import { MANGA_COVER_ASPECT_RATIO } from '@/features/manga/Manga.constants.ts'; import { MangaThumbnailInfo } from '@/features/manga/Manga.types.ts'; -import { TAppThemeContext, useAppThemeContext } from '@/features/theme/contexts/AppThemeContext.tsx'; +import { TAppThemeContext, useAppThemeContext } from '@/features/theme/AppThemeContext.tsx'; export const Thumbnail = ({ manga, diff --git a/src/features/migration/screens/Migration.tsx b/src/features/migration/screens/Migration.tsx index 933b7cf2..74d3200e 100644 --- a/src/features/migration/screens/Migration.tsx +++ b/src/features/migration/screens/Migration.tsx @@ -29,7 +29,7 @@ import { useMetadataServerSettings, } from '@/features/settings/services/ServerSettingsMetadata.ts'; import { makeToast } from '@/features/core/utils/Toast.ts'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; const getMigratableSources = ( diff --git a/src/features/navigation-bar/contexts/NavBarContextProvider.tsx b/src/features/navigation-bar/NavbarContext.tsx similarity index 74% rename from src/features/navigation-bar/contexts/NavBarContextProvider.tsx rename to src/features/navigation-bar/NavbarContext.tsx index 698e0957..9b95f3f3 100644 --- a/src/features/navigation-bar/contexts/NavBarContextProvider.tsx +++ b/src/features/navigation-bar/NavbarContext.tsx @@ -6,10 +6,30 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import React, { useCallback, useMemo, useState } from 'react'; -import { NavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import React, { useContext, useCallback, useMemo, useState } from 'react'; +import { INavbarOverride, NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { useLocalStorage } from '@/features/core/hooks/useStorage.tsx'; -import { INavbarOverride } from '@/features/navigation-bar/NavigationBar.types.ts'; + +export const NavBarContext = React.createContext({ + title: 'Suwayomi', + setTitle: (): void => {}, + appBarHeight: 0, + setAppBarHeight: (): void => {}, + action:
, + setAction: (): void => {}, + override: { status: false, value:
}, + setOverride: (): void => {}, + isCollapsed: false, + setIsCollapsed: (): void => {}, + navBarWidth: 0, + setNavBarWidth: (): void => {}, + readerNavBarWidth: 0, + setReaderNavBarWidth: (): void => {}, + bottomBarHeight: 0, + setBottomBarHeight: (): void => {}, +}); + +export const useNavBarContext = () => useContext(NavBarContext); interface IProps { children: React.ReactNode; diff --git a/src/features/navigation-bar/components/DefaultNavBar.tsx b/src/features/navigation-bar/components/DefaultNavBar.tsx index 700da095..bc63bc83 100644 --- a/src/features/navigation-bar/components/DefaultNavBar.tsx +++ b/src/features/navigation-bar/components/DefaultNavBar.tsx @@ -23,7 +23,7 @@ import { MediaQuery } from '@/features/core/utils/MediaQuery.tsx'; import { DesktopSideBar } from '@/features/navigation-bar/components/DesktopSideBar.tsx'; import { useResizeObserver } from '@/features/core/hooks/useResizeObserver.tsx'; import { MobileBottomBar } from '@/features/navigation-bar/components/MobileBottomBar.tsx'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; import { NAVIGATION_BAR_ITEMS } from '@/features/navigation-bar/NavigationBar.constants.ts'; import { NavigationBarUtil } from '@/features/navigation-bar/NavigationBar.util.ts'; diff --git a/src/features/navigation-bar/components/DesktopSideBar.tsx b/src/features/navigation-bar/components/DesktopSideBar.tsx index 5cf67d6c..20836f4c 100644 --- a/src/features/navigation-bar/components/DesktopSideBar.tsx +++ b/src/features/navigation-bar/components/DesktopSideBar.tsx @@ -25,7 +25,7 @@ import Typography from '@mui/material/Typography'; import { CustomTooltip } from '@/features/core/components/CustomTooltip.tsx'; import { ListItemLink } from '@/features/core/components/lists/ListItemLink.tsx'; import { useGetOptionForDirection } from '@/features/theme/services/ThemeCreator.ts'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { useResizeObserver } from '@/features/core/hooks/useResizeObserver.tsx'; import { NavbarItem } from '@/features/navigation-bar/NavigationBar.types.ts'; import { TypographyMaxLines } from '@/features/core/components/texts/TypographyMaxLines.tsx'; diff --git a/src/features/navigation-bar/components/MobileBottomBar.tsx b/src/features/navigation-bar/components/MobileBottomBar.tsx index 5de21289..765e63f7 100644 --- a/src/features/navigation-bar/components/MobileBottomBar.tsx +++ b/src/features/navigation-bar/components/MobileBottomBar.tsx @@ -15,7 +15,7 @@ import { useLocation, useNavigate } from 'react-router-dom'; import { useTheme } from '@mui/material/styles'; import Badge from '@mui/material/Badge'; import { useResizeObserver } from '@/features/core/hooks/useResizeObserver.tsx'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { NavbarItem } from '@/features/navigation-bar/NavigationBar.types.ts'; import { StaticAppRoute } from '@/features/core/AppRoute.constants.ts'; diff --git a/src/features/navigation-bar/contexts/NavbarContext.tsx b/src/features/navigation-bar/contexts/NavbarContext.tsx deleted file mode 100644 index 20aa264a..00000000 --- a/src/features/navigation-bar/contexts/NavbarContext.tsx +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - */ - -import React, { useContext } from 'react'; - -import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; - -export const NavBarContext = React.createContext({ - title: 'Suwayomi', - setTitle: (): void => {}, - appBarHeight: 0, - setAppBarHeight: (): void => {}, - action:
, - setAction: (): void => {}, - override: { status: false, value:
}, - setOverride: (): void => {}, - isCollapsed: false, - setIsCollapsed: (): void => {}, - navBarWidth: 0, - setNavBarWidth: (): void => {}, - readerNavBarWidth: 0, - setReaderNavBarWidth: (): void => {}, - bottomBarHeight: 0, - setBottomBarHeight: (): void => {}, -}); - -export const useNavBarContext = () => useContext(NavBarContext); diff --git a/src/features/navigation-bar/hooks/useAppAction.ts b/src/features/navigation-bar/hooks/useAppAction.ts index e0f80755..b0a7af9c 100644 --- a/src/features/navigation-bar/hooks/useAppAction.ts +++ b/src/features/navigation-bar/hooks/useAppAction.ts @@ -7,7 +7,7 @@ */ import { useEffect } from 'react'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; export const useAppAction = (action: NavbarContextType['action'], dependencies: any[] = []) => { diff --git a/src/features/navigation-bar/hooks/useAppTitle.ts b/src/features/navigation-bar/hooks/useAppTitle.ts index bef0ae8d..2b4539d1 100644 --- a/src/features/navigation-bar/hooks/useAppTitle.ts +++ b/src/features/navigation-bar/hooks/useAppTitle.ts @@ -7,7 +7,7 @@ */ import { useLayoutEffect } from 'react'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; export function useAppTitle( diff --git a/src/features/reader/auto-scroll/contexts/ReaderAutoScrollContextProvider.tsx b/src/features/reader/auto-scroll/ReaderAutoScrollContext.tsx similarity index 87% rename from src/features/reader/auto-scroll/contexts/ReaderAutoScrollContextProvider.tsx rename to src/features/reader/auto-scroll/ReaderAutoScrollContext.tsx index 9fdb06a2..d0c57c90 100644 --- a/src/features/reader/auto-scroll/contexts/ReaderAutoScrollContextProvider.tsx +++ b/src/features/reader/auto-scroll/ReaderAutoScrollContext.tsx @@ -6,23 +6,36 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { memo, ReactNode, useCallback, useMemo, useState } from 'react'; +import { createContext, memo, ReactNode, useCallback, useContext, useMemo, useState } from 'react'; import { Direction, useTheme } from '@mui/material/styles'; -import { useAutomaticScrolling } from '@/features/core/hooks/useAutomaticScrolling.ts'; import { IReaderSettings, ReaderScrollAmount, ReadingMode, TReaderAutoScrollContext, } from '@/features/reader/Reader.types.ts'; -import { ReaderAutoScrollContext } from '@/features/reader/auto-scroll/contexts/ReaderAutoScrollContext.tsx'; import { ReaderControls } from '@/features/reader/services/ReaderControls.ts'; -import { isContinuousReadingMode } from '@/features/reader/settings/ReaderSettings.utils.tsx'; -import { withPropsFrom } from '@/features/core/hoc/withPropsFrom.tsx'; -import { ReaderService } from '@/features/reader/services/ReaderService.ts'; -import { CONTINUOUS_READING_MODE_TO_SCROLL_DIRECTION } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { ScrollOffset } from '@/features/core/Core.types.ts'; import { getOptionForDirection } from '@/features/theme/services/ThemeCreator.ts'; +import { isContinuousReadingMode } from '@/features/reader/settings/ReaderSettings.utils.tsx'; +import { useAutomaticScrolling } from '@/features/core/hooks/useAutomaticScrolling.ts'; +import { CONTINUOUS_READING_MODE_TO_SCROLL_DIRECTION } from '@/features/reader/settings/ReaderSettings.constants.tsx'; +import { withPropsFrom } from '@/features/core/hoc/withPropsFrom.tsx'; +import { ReaderService } from '@/features/reader/services/ReaderService.ts'; + +export const ReaderAutoScrollContext = createContext({ + isActive: false, + isPaused: false, + setScrollRef: () => {}, + start: () => {}, + cancel: () => {}, + toggleActive: () => {}, + pause: () => {}, + resume: () => {}, + setDirection: () => {}, +}); + +export const useReaderAutoScrollContext = () => useContext(ReaderAutoScrollContext); const BaseReaderAutoScrollContextProvider = ({ children, diff --git a/src/features/reader/auto-scroll/contexts/ReaderAutoScrollContext.tsx b/src/features/reader/auto-scroll/contexts/ReaderAutoScrollContext.tsx deleted file mode 100644 index 945f1fa1..00000000 --- a/src/features/reader/auto-scroll/contexts/ReaderAutoScrollContext.tsx +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - */ - -import { createContext, useContext } from 'react'; -import { TReaderAutoScrollContext } from '@/features/reader/Reader.types.ts'; - -export const ReaderAutoScrollContext = createContext({ - isActive: false, - isPaused: false, - setScrollRef: () => {}, - start: () => {}, - cancel: () => {}, - toggleActive: () => {}, - pause: () => {}, - resume: () => {}, - setDirection: () => {}, -}); - -export const useReaderAutoScrollContext = () => useContext(ReaderAutoScrollContext); diff --git a/src/features/reader/auto-scroll/settings/quick-setting/ReaderNavBarDesktopAutoScroll.tsx b/src/features/reader/auto-scroll/settings/quick-setting/ReaderNavBarDesktopAutoScroll.tsx index 83818fc6..1e9c0b1a 100644 --- a/src/features/reader/auto-scroll/settings/quick-setting/ReaderNavBarDesktopAutoScroll.tsx +++ b/src/features/reader/auto-scroll/settings/quick-setting/ReaderNavBarDesktopAutoScroll.tsx @@ -14,7 +14,7 @@ import Stack from '@mui/material/Stack'; import TextField from '@mui/material/TextField'; import InputAdornment from '@mui/material/InputAdornment'; import { useRef } from 'react'; -import { useReaderAutoScrollContext } from '@/features/reader/auto-scroll/contexts/ReaderAutoScrollContext.tsx'; +import { useReaderAutoScrollContext } from '@/features/reader/auto-scroll/ReaderAutoScrollContext.tsx'; import { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { AUTO_SCROLL_SPEED } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { coerceIn } from '@/lib/HelperFunctions.ts'; diff --git a/src/features/reader/contexts/ReaderContextProvider.tsx b/src/features/reader/contexts/ReaderContextProvider.tsx index b5e17fde..991f9dc4 100644 --- a/src/features/reader/contexts/ReaderContextProvider.tsx +++ b/src/features/reader/contexts/ReaderContextProvider.tsx @@ -7,12 +7,12 @@ */ import { ReactNode } from 'react'; -import { ReaderTapZoneContextProvider } from '@/features/reader/tap-zones/contexts/ReaderTapZoneContextProvider.tsx'; -import { ReaderProgressBarContextProvider } from '@/features/reader/overlay/progress-bar/contexts/ReaderProgressBarContextProvider.tsx'; -import { ReaderOverlayContextProvider } from '@/features/reader/overlay/contexts/ReaderOverlayContextProvider.tsx'; import { ReaderStateContextProvider } from '@/features/reader/contexts/state/ReaderStateContextProvider.tsx'; -import { ReaderScrollbarContextProvider } from '@/features/reader/contexts/ReaderScrollbarContextProvider.tsx'; -import { ReaderAutoScrollContextProvider } from '@/features/reader/auto-scroll/contexts/ReaderAutoScrollContextProvider.tsx'; +import { ReaderScrollbarContextProvider } from '@/features/reader/contexts/ReaderScrollbarContext.tsx'; +import { ReaderAutoScrollContextProvider } from '@/features/reader/auto-scroll/ReaderAutoScrollContext.tsx'; +import { ReaderOverlayContextProvider } from '@/features/reader/overlay/ReaderOverlayContext.tsx'; +import { ReaderProgressBarContextProvider } from '@/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx'; +import { ReaderTapZoneContextProvider } from '@/features/reader/tap-zones/ReaderTapZoneContext.tsx'; export const ReaderContextProvider = ({ children }: { children?: ReactNode }) => ( diff --git a/src/features/reader/contexts/ReaderScrollbarContext.tsx b/src/features/reader/contexts/ReaderScrollbarContext.tsx index 146f228b..cace617a 100644 --- a/src/features/reader/contexts/ReaderScrollbarContext.tsx +++ b/src/features/reader/contexts/ReaderScrollbarContext.tsx @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { createContext, useContext } from 'react'; +import { createContext, ReactNode, useContext, useMemo, useState } from 'react'; import { TReaderScrollbarContext } from '@/features/reader/Reader.types.ts'; export const ReaderScrollbarContext = createContext({ @@ -17,3 +17,15 @@ export const ReaderScrollbarContext = createContext({ }); export const useReaderScrollbarContext = () => useContext(ReaderScrollbarContext); + +export const ReaderScrollbarContextProvider = ({ children }: { children: ReactNode }) => { + const [scrollbarXSize, setScrollbarXSize] = useState(0); + const [scrollbarYSize, setScrollbarYSize] = useState(0); + + const value = useMemo( + () => ({ scrollbarXSize, setScrollbarXSize, scrollbarYSize, setScrollbarYSize }), + [scrollbarXSize, scrollbarYSize], + ); + + return {children}; +}; diff --git a/src/features/reader/contexts/ReaderScrollbarContextProvider.tsx b/src/features/reader/contexts/ReaderScrollbarContextProvider.tsx deleted file mode 100644 index 8b9bfb44..00000000 --- a/src/features/reader/contexts/ReaderScrollbarContextProvider.tsx +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - */ - -import { ReactNode, useMemo, useState } from 'react'; -import { ReaderScrollbarContext } from '@/features/reader/contexts/ReaderScrollbarContext.tsx'; - -export const ReaderScrollbarContextProvider = ({ children }: { children: ReactNode }) => { - const [scrollbarXSize, setScrollbarXSize] = useState(0); - const [scrollbarYSize, setScrollbarYSize] = useState(0); - - const value = useMemo( - () => ({ scrollbarXSize, setScrollbarXSize, scrollbarYSize, setScrollbarYSize }), - [scrollbarXSize, scrollbarYSize], - ); - - return {children}; -}; diff --git a/src/features/reader/contexts/state/ReaderStateChaptersContext.tsx b/src/features/reader/contexts/state/ReaderStateChaptersContext.tsx index 3e224445..610b7dc9 100644 --- a/src/features/reader/contexts/state/ReaderStateChaptersContext.tsx +++ b/src/features/reader/contexts/state/ReaderStateChaptersContext.tsx @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { createContext, useContext } from 'react'; +import { createContext, ReactNode, useContext, useMemo, useState } from 'react'; import { ReaderStateChapters } from '@/features/reader/Reader.types.ts'; export const READER_STATE_CHAPTERS_DEFAULTS: Omit = { @@ -30,3 +30,18 @@ export const ReaderStateChaptersContext = createContext({ }); export const useReaderStateChaptersContext = () => useContext(ReaderStateChaptersContext); + +export const ReaderStateChaptersContextProvider = ({ children }: { children: ReactNode }) => { + const [state, setState] = + useState>(READER_STATE_CHAPTERS_DEFAULTS); + + const value = useMemo( + () => ({ + ...state, + setReaderStateChapters: setState, + }), + [state], + ); + + return {children}; +}; diff --git a/src/features/reader/contexts/state/ReaderStateChaptersContextProvider.tsx b/src/features/reader/contexts/state/ReaderStateChaptersContextProvider.tsx deleted file mode 100644 index c08d595b..00000000 --- a/src/features/reader/contexts/state/ReaderStateChaptersContextProvider.tsx +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - */ - -import { ReactNode, useMemo, useState } from 'react'; -import { - READER_STATE_CHAPTERS_DEFAULTS, - ReaderStateChaptersContext, -} from '@/features/reader/contexts/state/ReaderStateChaptersContext.tsx'; -import { ReaderStateChapters } from '@/features/reader/Reader.types.ts'; - -export const ReaderStateChaptersContextProvider = ({ children }: { children: ReactNode }) => { - const [state, setState] = - useState>(READER_STATE_CHAPTERS_DEFAULTS); - - const value = useMemo( - () => ({ - ...state, - setReaderStateChapters: setState, - }), - [state], - ); - - return {children}; -}; diff --git a/src/features/reader/contexts/state/ReaderStateContextProvider.tsx b/src/features/reader/contexts/state/ReaderStateContextProvider.tsx index c61a0a9f..766a9692 100644 --- a/src/features/reader/contexts/state/ReaderStateContextProvider.tsx +++ b/src/features/reader/contexts/state/ReaderStateContextProvider.tsx @@ -7,10 +7,10 @@ */ import { ReactNode } from 'react'; -import { ReaderStatePagesContextProvider } from '@/features/reader/contexts/state/ReaderStatePagesContextProvider.tsx'; -import { ReaderStateChaptersContextProvider } from '@/features/reader/contexts/state/ReaderStateChaptersContextProvider.tsx'; -import { ReaderStateMangaContextProvider } from '@/features/reader/contexts/state/ReaderStateMangaContextProvider.tsx'; -import { ReaderStateSettingsContextProvider } from '@/features/reader/contexts/state/ReaderStateSettingsContextProvider.tsx'; +import { ReaderStateChaptersContextProvider } from '@/features/reader/contexts/state/ReaderStateChaptersContext.tsx'; +import { ReaderStateMangaContextProvider } from '@/features/reader/contexts/state/ReaderStateMangaContext.tsx'; +import { ReaderStatePagesContextProvider } from '@/features/reader/contexts/state/ReaderStatePagesContext.tsx'; +import { ReaderStateSettingsContextProvider } from '@/features/reader/contexts/state/ReaderStateSettingsContext.tsx'; export const ReaderStateContextProvider = ({ children }: { children: ReactNode }) => ( diff --git a/src/features/reader/contexts/state/ReaderStateMangaContext.tsx b/src/features/reader/contexts/state/ReaderStateMangaContext.tsx index 6f1942d8..33c70211 100644 --- a/src/features/reader/contexts/state/ReaderStateMangaContext.tsx +++ b/src/features/reader/contexts/state/ReaderStateMangaContext.tsx @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { createContext, useContext } from 'react'; +import { createContext, ReactNode, useContext, useMemo, useState } from 'react'; import { TReaderStateMangaContext } from '@/features/reader/Reader.types.ts'; export const ReaderStateMangaContext = createContext({ @@ -15,3 +15,11 @@ export const ReaderStateMangaContext = createContext({ }); export const useReaderStateMangaContext = () => useContext(ReaderStateMangaContext); + +export const ReaderStateMangaContextProvider = ({ children }: { children: ReactNode }) => { + const [manga, setManga] = useState(); + + const value = useMemo(() => ({ manga, setManga }), [manga]); + + return {children}; +}; diff --git a/src/features/reader/contexts/state/ReaderStateMangaContextProvider.tsx b/src/features/reader/contexts/state/ReaderStateMangaContextProvider.tsx deleted file mode 100644 index 51f7c53c..00000000 --- a/src/features/reader/contexts/state/ReaderStateMangaContextProvider.tsx +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - */ - -import { ReactNode, useMemo, useState } from 'react'; -import { ReaderStateMangaContext } from '@/features/reader/contexts/state/ReaderStateMangaContext.tsx'; -import { TReaderStateMangaContext } from '@/features/reader/Reader.types.ts'; - -export const ReaderStateMangaContextProvider = ({ children }: { children: ReactNode }) => { - const [manga, setManga] = useState(); - - const value = useMemo(() => ({ manga, setManga }), [manga]); - - return {children}; -}; diff --git a/src/features/reader/contexts/state/ReaderStatePagesContext.tsx b/src/features/reader/contexts/state/ReaderStatePagesContext.tsx index d8396903..2367785c 100644 --- a/src/features/reader/contexts/state/ReaderStatePagesContext.tsx +++ b/src/features/reader/contexts/state/ReaderStatePagesContext.tsx @@ -6,9 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { createContext, useContext } from 'react'; +import { createContext, ReactNode, useContext, useMemo, useState } from 'react'; import { ReaderStatePages } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; import { ReaderTransitionPageMode } from '@/features/reader/Reader.types.ts'; +import { READER_STATE_PAGES_DEFAULTS } from '@/features/reader/ReaderContext.constants.ts'; export const ReaderStatePagesContext = createContext({ totalPages: 0, @@ -30,3 +31,59 @@ export const ReaderStatePagesContext = createContext({ }); export const userReaderStatePagesContext = () => useContext(ReaderStatePagesContext); + +export const ReaderStatePagesContextProvider = ({ children }: { children: ReactNode }) => { + const [totalPages, setTotalPages] = useState( + READER_STATE_PAGES_DEFAULTS.totalPages, + ); + const [currentPageIndex, setCurrentPageIndex] = useState( + READER_STATE_PAGES_DEFAULTS.currentPageIndex, + ); + const [pageToScrollToIndex, setPageToScrollToIndex] = useState( + READER_STATE_PAGES_DEFAULTS.pageToScrollToIndex, + ); + const [pageUrls, setPageUrls] = useState(READER_STATE_PAGES_DEFAULTS.pageUrls); + const [pageLoadStates, setPageLoadStates] = useState( + READER_STATE_PAGES_DEFAULTS.pageLoadStates, + ); + const [pages, setPages] = useState(READER_STATE_PAGES_DEFAULTS.pages); + const [transitionPageMode, setTransitionPageMode] = useState( + READER_STATE_PAGES_DEFAULTS.transitionPageMode, + ); + const [retryFailedPagesKeyPrefix, setRetryFailedPagesKeyPrefix] = useState< + ReaderStatePages['retryFailedPagesKeyPrefix'] + >(READER_STATE_PAGES_DEFAULTS.retryFailedPagesKeyPrefix); + + const value = useMemo( + () => ({ + totalPages, + setTotalPages, + currentPageIndex, + setCurrentPageIndex, + pageToScrollToIndex, + setPageToScrollToIndex, + pageUrls, + setPageUrls, + pageLoadStates, + setPageLoadStates, + pages, + setPages, + transitionPageMode, + setTransitionPageMode, + retryFailedPagesKeyPrefix, + setRetryFailedPagesKeyPrefix, + }), + [ + totalPages, + pages, + currentPageIndex, + pageToScrollToIndex, + pageUrls, + pageLoadStates, + transitionPageMode, + retryFailedPagesKeyPrefix, + ], + ); + + return {children}; +}; diff --git a/src/features/reader/contexts/state/ReaderStatePagesContextProvider.tsx b/src/features/reader/contexts/state/ReaderStatePagesContextProvider.tsx deleted file mode 100644 index af85fbb9..00000000 --- a/src/features/reader/contexts/state/ReaderStatePagesContextProvider.tsx +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - */ - -import { ReactNode, useMemo, useState } from 'react'; -import { ReaderStatePagesContext } from '@/features/reader/contexts/state/ReaderStatePagesContext.tsx'; -import { ReaderStatePages } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; -import { READER_STATE_PAGES_DEFAULTS } from '@/features/reader/ReaderContext.constants.ts'; - -export const ReaderStatePagesContextProvider = ({ children }: { children: ReactNode }) => { - const [totalPages, setTotalPages] = useState( - READER_STATE_PAGES_DEFAULTS.totalPages, - ); - const [currentPageIndex, setCurrentPageIndex] = useState( - READER_STATE_PAGES_DEFAULTS.currentPageIndex, - ); - const [pageToScrollToIndex, setPageToScrollToIndex] = useState( - READER_STATE_PAGES_DEFAULTS.pageToScrollToIndex, - ); - const [pageUrls, setPageUrls] = useState(READER_STATE_PAGES_DEFAULTS.pageUrls); - const [pageLoadStates, setPageLoadStates] = useState( - READER_STATE_PAGES_DEFAULTS.pageLoadStates, - ); - const [pages, setPages] = useState(READER_STATE_PAGES_DEFAULTS.pages); - const [transitionPageMode, setTransitionPageMode] = useState( - READER_STATE_PAGES_DEFAULTS.transitionPageMode, - ); - const [retryFailedPagesKeyPrefix, setRetryFailedPagesKeyPrefix] = useState< - ReaderStatePages['retryFailedPagesKeyPrefix'] - >(READER_STATE_PAGES_DEFAULTS.retryFailedPagesKeyPrefix); - - const value = useMemo( - () => ({ - totalPages, - setTotalPages, - currentPageIndex, - setCurrentPageIndex, - pageToScrollToIndex, - setPageToScrollToIndex, - pageUrls, - setPageUrls, - pageLoadStates, - setPageLoadStates, - pages, - setPages, - transitionPageMode, - setTransitionPageMode, - retryFailedPagesKeyPrefix, - setRetryFailedPagesKeyPrefix, - }), - [ - totalPages, - pages, - currentPageIndex, - pageToScrollToIndex, - pageUrls, - pageLoadStates, - transitionPageMode, - retryFailedPagesKeyPrefix, - ], - ); - - return {children}; -}; diff --git a/src/features/reader/contexts/state/ReaderStateSettingsContext.tsx b/src/features/reader/contexts/state/ReaderStateSettingsContext.tsx index da457c1d..e9b6e7da 100644 --- a/src/features/reader/contexts/state/ReaderStateSettingsContext.tsx +++ b/src/features/reader/contexts/state/ReaderStateSettingsContext.tsx @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { createContext, useContext } from 'react'; +import { createContext, ReactNode, useContext, useMemo, useState } from 'react'; import { TReaderStateSettingsContext } from '@/features/reader/Reader.types.ts'; import { DEFAULT_READER_SETTINGS_WITH_DEFAULT_FLAG } from '@/features/reader/settings/ReaderSettingsMetadata.ts'; @@ -16,3 +16,13 @@ export const ReaderStateSettingsContext = createContext useContext(ReaderStateSettingsContext); + +export const ReaderStateSettingsContextProvider = ({ children }: { children: ReactNode }) => { + const [settings, setSettings] = useState( + DEFAULT_READER_SETTINGS_WITH_DEFAULT_FLAG, + ); + + const value = useMemo(() => ({ settings, setSettings }), [settings]); + + return {children}; +}; diff --git a/src/features/reader/contexts/state/ReaderStateSettingsContextProvider.tsx b/src/features/reader/contexts/state/ReaderStateSettingsContextProvider.tsx deleted file mode 100644 index 2c37606f..00000000 --- a/src/features/reader/contexts/state/ReaderStateSettingsContextProvider.tsx +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - */ - -import { ReactNode, useMemo, useState } from 'react'; -import { ReaderStateSettingsContext } from '@/features/reader/contexts/state/ReaderStateSettingsContext.tsx'; -import { DEFAULT_READER_SETTINGS_WITH_DEFAULT_FLAG } from '@/features/reader/settings/ReaderSettingsMetadata.ts'; -import { TReaderStateSettingsContext } from '@/features/reader/Reader.types.ts'; - -export const ReaderStateSettingsContextProvider = ({ children }: { children: ReactNode }) => { - const [settings, setSettings] = useState( - DEFAULT_READER_SETTINGS_WITH_DEFAULT_FLAG, - ); - - const value = useMemo(() => ({ settings, setSettings }), [settings]); - - return {children}; -}; diff --git a/src/features/reader/filters/ReaderRGBAFilter.tsx b/src/features/reader/filters/ReaderRGBAFilter.tsx index f2883a02..5feda54d 100644 --- a/src/features/reader/filters/ReaderRGBAFilter.tsx +++ b/src/features/reader/filters/ReaderRGBAFilter.tsx @@ -8,7 +8,7 @@ import Box from '@mui/material/Box'; import { ReaderService } from '@/features/reader/services/ReaderService.ts'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { withPropsFrom } from '@/features/core/hoc/withPropsFrom.tsx'; import { IReaderSettings } from '@/features/reader/Reader.types.ts'; diff --git a/src/features/reader/hotkeys/ReaderHotkeys.tsx b/src/features/reader/hotkeys/ReaderHotkeys.tsx index 6481212c..cda5db23 100644 --- a/src/features/reader/hotkeys/ReaderHotkeys.tsx +++ b/src/features/reader/hotkeys/ReaderHotkeys.tsx @@ -12,7 +12,7 @@ import { useTheme } from '@mui/material/styles'; import { HOTKEY_SCOPES } from '@/features/hotkeys/Hotkeys.constants.ts'; import { ReaderService } from '@/features/reader/services/ReaderService.ts'; import { IReaderSettings, ReaderHotkey } from '@/features/reader/Reader.types.ts'; -import { useReaderOverlayContext } from '@/features/reader/overlay/contexts/ReaderOverlayContext.tsx'; +import { useReaderOverlayContext } from '@/features/reader/overlay/ReaderOverlayContext.tsx'; import { getNextRotationValue } from '@/features/core/utils/ValueRotationButton.utils.ts'; import { AUTO_SCROLL_SPEED, @@ -27,8 +27,8 @@ import { ReaderControls } from '@/features/reader/services/ReaderControls.ts'; import { ScrollOffset } from '@/features/core/Core.types.ts'; import { getOptionForDirection } from '@/features/theme/services/ThemeCreator.ts'; import { FALLBACK_MANGA } from '@/features/manga/Manga.constants.ts'; -import { useReaderAutoScrollContext } from '@/features/reader/auto-scroll/contexts/ReaderAutoScrollContext.tsx'; -import { useReaderTapZoneContext } from '@/features/reader/tap-zones/contexts/ReaderTapZoneContext.tsx'; +import { useReaderAutoScrollContext } from '@/features/reader/auto-scroll/ReaderAutoScrollContext.tsx'; +import { useReaderTapZoneContext } from '@/features/reader/tap-zones/ReaderTapZoneContext.tsx'; const useHotkeys = (...args: Parameters): ReturnType => { const [keys, callback, options, dependencies] = args; diff --git a/src/features/reader/overlay/contexts/ReaderOverlayContextProvider.tsx b/src/features/reader/overlay/ReaderOverlayContext.tsx similarity index 60% rename from src/features/reader/overlay/contexts/ReaderOverlayContextProvider.tsx rename to src/features/reader/overlay/ReaderOverlayContext.tsx index 9d2a7813..f7030019 100644 --- a/src/features/reader/overlay/contexts/ReaderOverlayContextProvider.tsx +++ b/src/features/reader/overlay/ReaderOverlayContext.tsx @@ -6,8 +6,15 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ReactNode, useMemo, useState } from 'react'; -import { ReaderOverlayContext } from '@/features/reader/overlay/contexts/ReaderOverlayContext.tsx'; +import { createContext, useContext, ReactNode, useMemo, useState } from 'react'; +import { TReaderOverlayContext } from '@/features/reader/overlay/ReaderOverlay.types.ts'; + +export const ReaderOverlayContext = createContext({ + isVisible: false, + setIsVisible: () => {}, +}); + +export const useReaderOverlayContext = () => useContext(ReaderOverlayContext); export const ReaderOverlayContextProvider = ({ children }: { children: ReactNode }) => { const [isVisible, setIsVisible] = useState(false); diff --git a/src/features/reader/overlay/components/ReaderPageNumber.tsx b/src/features/reader/overlay/components/ReaderPageNumber.tsx index 7e66f454..14fed272 100644 --- a/src/features/reader/overlay/components/ReaderPageNumber.tsx +++ b/src/features/reader/overlay/components/ReaderPageNumber.tsx @@ -19,8 +19,8 @@ import { } from '@/features/reader/Reader.types.ts'; import { userReaderStatePagesContext } from '@/features/reader/contexts/state/ReaderStatePagesContext.tsx'; import { getPage } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; -import { useReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/contexts/ReaderProgressBarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; +import { useReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx'; import { useReaderScrollbarContext } from '@/features/reader/contexts/ReaderScrollbarContext.tsx'; import { reverseString } from '@/util/Strings.ts'; import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; diff --git a/src/features/reader/overlay/contexts/ReaderOverlayContext.tsx b/src/features/reader/overlay/contexts/ReaderOverlayContext.tsx deleted file mode 100644 index dd4cbe82..00000000 --- a/src/features/reader/overlay/contexts/ReaderOverlayContext.tsx +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - */ - -import { createContext, useContext } from 'react'; -import { TReaderOverlayContext } from '@/features/reader/overlay/ReaderOverlay.types.ts'; - -export const ReaderOverlayContext = createContext({ - isVisible: false, - setIsVisible: () => {}, -}); - -export const useReaderOverlayContext = () => useContext(ReaderOverlayContext); diff --git a/src/features/reader/overlay/navigation/desktop/ReaderNavBarDesktop.tsx b/src/features/reader/overlay/navigation/desktop/ReaderNavBarDesktop.tsx index 89c2ca9b..95b2afc1 100644 --- a/src/features/reader/overlay/navigation/desktop/ReaderNavBarDesktop.tsx +++ b/src/features/reader/overlay/navigation/desktop/ReaderNavBarDesktop.tsx @@ -22,7 +22,7 @@ import { ReaderNavBarDesktopPageNavigation } from '@/features/reader/overlay/nav import { ReaderNavBarDesktopChapterNavigation } from '@/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopChapterNavigation.tsx'; import { ReaderNavBarDesktopQuickSettings } from '@/features/reader/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopQuickSettings.tsx'; import { ReaderNavBarDesktopActions } from '@/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopActions.tsx'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { useResizeObserver } from '@/features/core/hooks/useResizeObserver.tsx'; import { useReaderStateMangaContext } from '@/features/reader/contexts/state/ReaderStateMangaContext.tsx'; import { userReaderStatePagesContext } from '@/features/reader/contexts/state/ReaderStatePagesContext.tsx'; diff --git a/src/features/reader/overlay/navigation/mobile/quick-settings/ReaderBottomBarMobileQuickSettings.tsx b/src/features/reader/overlay/navigation/mobile/quick-settings/ReaderBottomBarMobileQuickSettings.tsx index f25fef21..d1a1a2fb 100644 --- a/src/features/reader/overlay/navigation/mobile/quick-settings/ReaderBottomBarMobileQuickSettings.tsx +++ b/src/features/reader/overlay/navigation/mobile/quick-settings/ReaderBottomBarMobileQuickSettings.tsx @@ -23,7 +23,7 @@ import { withPropsFrom } from '@/features/core/hoc/withPropsFrom.tsx'; import { FALLBACK_MANGA } from '@/features/manga/Manga.constants.ts'; import { ReaderSettingAutoScroll } from '@/features/reader/auto-scroll/settings/ReaderSettingAutoScroll.tsx'; import { CheckboxInput } from '@/features/core/components/inputs/CheckboxInput.tsx'; -import { useReaderAutoScrollContext } from '@/features/reader/auto-scroll/contexts/ReaderAutoScrollContext.tsx'; +import { useReaderAutoScrollContext } from '@/features/reader/auto-scroll/ReaderAutoScrollContext.tsx'; const BaseReaderBottomBarMobileQuickSettings = ({ manga, diff --git a/src/features/reader/overlay/progress-bar/ReaderProgressBar.tsx b/src/features/reader/overlay/progress-bar/ReaderProgressBar.tsx index 7f11e425..5fe6bd2e 100644 --- a/src/features/reader/overlay/progress-bar/ReaderProgressBar.tsx +++ b/src/features/reader/overlay/progress-bar/ReaderProgressBar.tsx @@ -32,7 +32,7 @@ import { ReaderProgressBarSlotsActionArea } from '@/features/reader/overlay/prog import { ReaderService } from '@/features/reader/services/ReaderService.ts'; import { ReaderControls } from '@/features/reader/services/ReaderControls.ts'; import { withPropsFrom } from '@/features/core/hoc/withPropsFrom.tsx'; -import { useReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/contexts/ReaderProgressBarContext.tsx'; +import { useReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx'; import { ReaderProgressBarSlotWrapper } from '@/features/reader/overlay/progress-bar/components/ReaderProgressBarSlotWrapper.tsx'; import { userReaderStatePagesContext } from '@/features/reader/contexts/state/ReaderStatePagesContext.tsx'; import { useResizeObserver } from '@/features/core/hooks/useResizeObserver.tsx'; diff --git a/src/features/reader/overlay/progress-bar/contexts/ReaderProgressBarContextProvider.tsx b/src/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx similarity index 60% rename from src/features/reader/overlay/progress-bar/contexts/ReaderProgressBarContextProvider.tsx rename to src/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx index 97ed6b84..dcfaaa31 100644 --- a/src/features/reader/overlay/progress-bar/contexts/ReaderProgressBarContextProvider.tsx +++ b/src/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx @@ -6,8 +6,17 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ReactNode, useMemo, useState } from 'react'; -import { ReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/contexts/ReaderProgressBarContext.tsx'; +import { createContext, useContext, ReactNode, useMemo, useState } from 'react'; +import { TReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; + +export const ReaderProgressBarContext = createContext({ + isMaximized: false, + setIsMaximized: () => undefined, + isDragging: false, + setIsDragging: () => undefined, +}); + +export const useReaderProgressBarContext = () => useContext(ReaderProgressBarContext); export const ReaderProgressBarContextProvider = ({ children }: { children: ReactNode }) => { const [isMaximized, setIsMaximized] = useState(false); diff --git a/src/features/reader/overlay/progress-bar/contexts/ReaderProgressBarContext.tsx b/src/features/reader/overlay/progress-bar/contexts/ReaderProgressBarContext.tsx deleted file mode 100644 index 772e6f16..00000000 --- a/src/features/reader/overlay/progress-bar/contexts/ReaderProgressBarContext.tsx +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - */ - -import { createContext, useContext } from 'react'; -import { TReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; - -export const ReaderProgressBarContext = createContext({ - isMaximized: false, - setIsMaximized: () => undefined, - isDragging: false, - setIsDragging: () => undefined, -}); - -export const useReaderProgressBarContext = () => useContext(ReaderProgressBarContext); diff --git a/src/features/reader/overlay/progress-bar/desktop/StandardReaderProgressBar.tsx b/src/features/reader/overlay/progress-bar/desktop/StandardReaderProgressBar.tsx index 78024394..1dd9e67d 100644 --- a/src/features/reader/overlay/progress-bar/desktop/StandardReaderProgressBar.tsx +++ b/src/features/reader/overlay/progress-bar/desktop/StandardReaderProgressBar.tsx @@ -21,8 +21,8 @@ import { } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { withPropsFrom } from '@/features/core/hoc/withPropsFrom.tsx'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; -import { useReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/contexts/ReaderProgressBarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; +import { useReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx'; import { useReaderScrollbarContext } from '@/features/reader/contexts/ReaderScrollbarContext.tsx'; import { ReaderProgressBarSlotDesktop } from '@/features/reader/overlay/progress-bar/desktop/components/ReaderProgressBarSlotDesktop.tsx'; import { useResizeObserver } from '@/features/core/hooks/useResizeObserver.tsx'; diff --git a/src/features/reader/overlay/progress-bar/mobile/MobileReaderProgressBar.tsx b/src/features/reader/overlay/progress-bar/mobile/MobileReaderProgressBar.tsx index ac696f39..a28ffd5e 100644 --- a/src/features/reader/overlay/progress-bar/mobile/MobileReaderProgressBar.tsx +++ b/src/features/reader/overlay/progress-bar/mobile/MobileReaderProgressBar.tsx @@ -29,8 +29,8 @@ import { TReaderScrollbarContext, } from '@/features/reader/Reader.types.ts'; import { ReaderProgressBarDirectionWrapper } from '@/features/reader/overlay/progress-bar/components/ReaderProgressBarDirectionWrapper.tsx'; -import { useReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/contexts/ReaderProgressBarContext.tsx'; -import { useReaderOverlayContext } from '@/features/reader/overlay/contexts/ReaderOverlayContext.tsx'; +import { useReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx'; +import { useReaderOverlayContext } from '@/features/reader/overlay/ReaderOverlayContext.tsx'; import { withPropsFrom } from '@/features/core/hoc/withPropsFrom.tsx'; import { TReaderOverlayContext } from '@/features/reader/overlay/ReaderOverlay.types.ts'; import { diff --git a/src/features/reader/screens/Reader.tsx b/src/features/reader/screens/Reader.tsx index e41695f2..eb76d694 100644 --- a/src/features/reader/screens/Reader.tsx +++ b/src/features/reader/screens/Reader.tsx @@ -11,7 +11,7 @@ import { memo, useEffect, useLayoutEffect, useRef, useState } from 'react'; import { useParams } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { useDefaultReaderSettings } from '@/features/reader/settings/ReaderSettingsMetadata.ts'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { ReaderOverlay } from '@/features/reader/overlay/ReaderOverlay.tsx'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { GetChaptersReaderQuery, GetMangaReaderQuery } from '@/lib/graphql/generated/graphql.ts'; @@ -22,7 +22,7 @@ import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts' import { userReaderStatePagesContext } from '@/features/reader/contexts/state/ReaderStatePagesContext.tsx'; import { GET_CHAPTERS_READER } from '@/lib/graphql/queries/ChapterQuery.ts'; import { TapZoneLayout } from '@/features/reader/tap-zones/TapZoneLayout.tsx'; -import { useReaderOverlayContext } from '@/features/reader/overlay/contexts/ReaderOverlayContext.tsx'; +import { useReaderOverlayContext } from '@/features/reader/overlay/ReaderOverlayContext.tsx'; import { ReaderRGBAFilter } from '@/features/reader/filters/ReaderRGBAFilter.tsx'; import { useReaderStateSettingsContext } from '@/features/reader/contexts/state/ReaderStateSettingsContext.tsx'; import { useReaderStateMangaContext } from '@/features/reader/contexts/state/ReaderStateMangaContext.tsx'; @@ -44,9 +44,9 @@ import { TReaderOverlayContext } from '@/features/reader/overlay/ReaderOverlay.t import { ReaderStatePages } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; import { withPropsFrom } from '@/features/core/hoc/withPropsFrom.tsx'; import { useReaderStateChaptersContext } from '@/features/reader/contexts/state/ReaderStateChaptersContext.tsx'; -import { useReaderAutoScrollContext } from '@/features/reader/auto-scroll/contexts/ReaderAutoScrollContext.tsx'; +import { useReaderAutoScrollContext } from '@/features/reader/auto-scroll/ReaderAutoScrollContext.tsx'; import { TReaderTapZoneContext } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; -import { useReaderTapZoneContext } from '@/features/reader/tap-zones/contexts/ReaderTapZoneContext.tsx'; +import { useReaderTapZoneContext } from '@/features/reader/tap-zones/ReaderTapZoneContext.tsx'; import { useReaderResetStates } from '@/features/reader/hooks/useReaderResetStates.ts'; import { useReaderSetSettingsState } from '@/features/reader/hooks/useReaderSetSettingsState.ts'; import { useReaderShowSettingPreviewOnChange } from '@/features/reader/hooks/useReaderShowSettingPreviewOnChange.ts'; diff --git a/src/features/reader/services/ReaderControls.ts b/src/features/reader/services/ReaderControls.ts index 07ba9d94..395099ab 100644 --- a/src/features/reader/services/ReaderControls.ts +++ b/src/features/reader/services/ReaderControls.ts @@ -36,8 +36,8 @@ import { isEndOfPageInViewport, isPageInViewport, } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx'; -import { useReaderOverlayContext } from '@/features/reader/overlay/contexts/ReaderOverlayContext.tsx'; -import { useReaderTapZoneContext } from '@/features/reader/tap-zones/contexts/ReaderTapZoneContext.tsx'; +import { useReaderOverlayContext } from '@/features/reader/overlay/ReaderOverlayContext.tsx'; +import { useReaderTapZoneContext } from '@/features/reader/tap-zones/ReaderTapZoneContext.tsx'; import { TapZoneRegionType, TReaderTapZoneContext } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; import { ReaderTapZoneService } from '@/features/reader/tap-zones/ReaderTapZoneService.ts'; import { isContinuousReadingMode } from '@/features/reader/settings/ReaderSettings.utils.tsx'; diff --git a/src/features/reader/settings/components/ReaderSettingsTabs.tsx b/src/features/reader/settings/components/ReaderSettingsTabs.tsx index 3f9224a6..ccc3e633 100644 --- a/src/features/reader/settings/components/ReaderSettingsTabs.tsx +++ b/src/features/reader/settings/components/ReaderSettingsTabs.tsx @@ -13,7 +13,7 @@ import { TabsMenu } from '@/features/core/components/tabs/TabsMenu.tsx'; import { ReaderService } from '@/features/reader/services/ReaderService.ts'; import { MediaQuery } from '@/features/core/utils/MediaQuery.tsx'; import { IReaderSettings, IReaderSettingsWithDefaultFlag } from '@/features/reader/Reader.types.ts'; -import { useReaderTapZoneContext } from '@/features/reader/tap-zones/contexts/ReaderTapZoneContext.tsx'; +import { useReaderTapZoneContext } from '@/features/reader/tap-zones/ReaderTapZoneContext.tsx'; import { applyStyles } from '@/features/core/utils/ApplyStyles.ts'; import { READER_SETTING_TABS, ReaderSettingTab } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { TabPanel } from '@/features/core/components/tabs/TabPanel.tsx'; diff --git a/src/features/reader/tap-zones/contexts/ReaderTapZoneContextProvider.tsx b/src/features/reader/tap-zones/ReaderTapZoneContext.tsx similarity index 60% rename from src/features/reader/tap-zones/contexts/ReaderTapZoneContextProvider.tsx rename to src/features/reader/tap-zones/ReaderTapZoneContext.tsx index bcd5c6f2..0d879964 100644 --- a/src/features/reader/tap-zones/contexts/ReaderTapZoneContextProvider.tsx +++ b/src/features/reader/tap-zones/ReaderTapZoneContext.tsx @@ -6,8 +6,15 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ReactNode, useMemo, useState } from 'react'; -import { ReaderTapZoneContext } from '@/features/reader/tap-zones/contexts/ReaderTapZoneContext.tsx'; +import { createContext, useContext, ReactNode, useMemo, useState } from 'react'; +import { TReaderTapZoneContext } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; + +export const ReaderTapZoneContext = createContext({ + showPreview: false, + setShowPreview: () => undefined, +}); + +export const useReaderTapZoneContext = () => useContext(ReaderTapZoneContext); export const ReaderTapZoneContextProvider = ({ children }: { children: ReactNode }) => { const [showPreview, setShowPreview] = useState(false); diff --git a/src/features/reader/tap-zones/TapZoneLayout.tsx b/src/features/reader/tap-zones/TapZoneLayout.tsx index 12d01ded..1e0ea686 100644 --- a/src/features/reader/tap-zones/TapZoneLayout.tsx +++ b/src/features/reader/tap-zones/TapZoneLayout.tsx @@ -9,9 +9,9 @@ import Box from '@mui/material/Box'; import { useCallback, useLayoutEffect, useState } from 'react'; import { useTheme } from '@mui/material/styles'; -import { useReaderTapZoneContext } from '@/features/reader/tap-zones/contexts/ReaderTapZoneContext.tsx'; +import { useReaderTapZoneContext } from '@/features/reader/tap-zones/ReaderTapZoneContext.tsx'; import { ReaderTapZoneService } from '@/features/reader/tap-zones/ReaderTapZoneService.ts'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { useResizeObserver } from '@/features/core/hooks/useResizeObserver.tsx'; import { ReaderService } from '@/features/reader/services/ReaderService.ts'; import { IReaderSettings, ReadingDirection } from '@/features/reader/Reader.types.ts'; diff --git a/src/features/reader/tap-zones/contexts/ReaderTapZoneContext.tsx b/src/features/reader/tap-zones/contexts/ReaderTapZoneContext.tsx deleted file mode 100644 index 47f929f3..00000000 --- a/src/features/reader/tap-zones/contexts/ReaderTapZoneContext.tsx +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - */ - -import { createContext, useContext } from 'react'; -import { TReaderTapZoneContext } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; - -export const ReaderTapZoneContext = createContext({ - showPreview: false, - setShowPreview: () => undefined, -}); - -export const useReaderTapZoneContext = () => useContext(ReaderTapZoneContext); diff --git a/src/features/reader/viewer/ReaderViewer.tsx b/src/features/reader/viewer/ReaderViewer.tsx index b755301b..b88777ce 100644 --- a/src/features/reader/viewer/ReaderViewer.tsx +++ b/src/features/reader/viewer/ReaderViewer.tsx @@ -42,14 +42,14 @@ import { shouldApplyReaderWidth, } from '@/features/reader/settings/ReaderSettings.utils.tsx'; import { useMouseDragScroll } from '@/features/core/hooks/useMouseDragScroll.tsx'; -import { useReaderOverlayContext } from '@/features/reader/overlay/contexts/ReaderOverlayContext.tsx'; +import { useReaderOverlayContext } from '@/features/reader/overlay/ReaderOverlayContext.tsx'; import { applyStyles } from '@/features/core/utils/ApplyStyles.ts'; import { TReaderOverlayContext } from '@/features/reader/overlay/ReaderOverlay.types.ts'; import { ReaderStatePages } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; import { withPropsFrom } from '@/features/core/hoc/withPropsFrom.tsx'; -import { useReaderAutoScrollContext } from '@/features/reader/auto-scroll/contexts/ReaderAutoScrollContext.tsx'; +import { useReaderAutoScrollContext } from '@/features/reader/auto-scroll/ReaderAutoScrollContext.tsx'; import { TReaderTapZoneContext } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; -import { useReaderTapZoneContext } from '@/features/reader/tap-zones/contexts/ReaderTapZoneContext.tsx'; +import { useReaderTapZoneContext } from '@/features/reader/tap-zones/ReaderTapZoneContext.tsx'; import { useReaderAutoScroll } from '@/features/reader/auto-scroll/hooks/useReaderAutoScroll.ts'; import { useReaderHideOverlayOnUserScroll } from '@/features/reader/overlay/hooks/useReaderHideOverlayOnUserScroll.ts'; import { useReaderHorizontalModeInvertXYScrolling } from '@/features/reader/viewer/hooks/useReaderHorizontalModeInvertXYScrolling.ts'; @@ -64,7 +64,7 @@ import { getReaderChapterViewResumeMode, } from '@/features/reader/Reader.utils.ts'; import { coerceIn, noOp } from '@/lib/HelperFunctions.ts'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { useReaderPreserveScrollPosition } from '@/features/reader/viewer/hooks/useReaderPreserveScrollPosition.ts'; diff --git a/src/features/reader/viewer/components/ReaderTransitionPage.tsx b/src/features/reader/viewer/components/ReaderTransitionPage.tsx index 8efcc689..87d38b06 100644 --- a/src/features/reader/viewer/components/ReaderTransitionPage.tsx +++ b/src/features/reader/viewer/components/ReaderTransitionPage.tsx @@ -29,7 +29,7 @@ import { isContinuousReadingMode, isContinuousVerticalReadingMode, } from '@/features/reader/settings/ReaderSettings.utils.tsx'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { AppRoutes } from '@/features/core/AppRoute.constants.ts'; import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { withPropsFrom } from '@/features/core/hoc/withPropsFrom.tsx'; diff --git a/src/features/settings/Settings.constants.ts b/src/features/settings/Settings.constants.ts index dbbd935d..76507e9d 100644 --- a/src/features/settings/Settings.constants.ts +++ b/src/features/settings/Settings.constants.ts @@ -11,7 +11,7 @@ import { DEFAULT_SORT_SETTINGS } from '@/features/migration/Migration.constants. import { GlobalUpdateSkipEntriesSettings, MetadataServerSettings } from '@/features/settings/Settings.types.ts'; import { GridLayout } from '@/features/core/Core.types.ts'; import { getDefaultLanguages } from '@/features/core/utils/Languages.ts'; -import { ThemeMode } from '@/features/theme/contexts/AppThemeContext.tsx'; +import { ThemeMode } from '@/features/theme/AppThemeContext.tsx'; import { SelectSettingValue, SelectSettingValueDisplayInfo, diff --git a/src/features/settings/screens/Appearance.tsx b/src/features/settings/screens/Appearance.tsx index f7b6560e..f4393af3 100644 --- a/src/features/settings/screens/Appearance.tsx +++ b/src/features/settings/screens/Appearance.tsx @@ -15,7 +15,7 @@ import ListSubheader from '@mui/material/ListSubheader'; import Switch from '@mui/material/Switch'; import Link from '@mui/material/Link'; import { useColorScheme } from '@mui/material/styles'; -import { ThemeMode, useAppThemeContext } from '@/features/theme/contexts/AppThemeContext.tsx'; +import { ThemeMode, useAppThemeContext } from '@/features/theme/AppThemeContext.tsx'; import { Select } from '@/features/core/components/inputs/Select.tsx'; import { MediaQuery } from '@/features/core/utils/MediaQuery.tsx'; import { NumberSetting } from '@/features/core/components/settings/NumberSetting.tsx'; diff --git a/src/features/source/screens/SourceMangas.tsx b/src/features/source/screens/SourceMangas.tsx index d13a56b7..f31bb62e 100644 --- a/src/features/source/screens/SourceMangas.tsx +++ b/src/features/source/screens/SourceMangas.tsx @@ -55,7 +55,7 @@ import { AppRoutes } from '@/features/core/AppRoute.constants.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { Sources } from '@/features/source/services/Sources.ts'; import { useAppTitleAndAction } from '@/features/navigation-bar/hooks/useAppTitleAndAction.ts'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { VirtuosoUtil } from '@/lib/virtuoso/Virtuoso.util.tsx'; const DEFAULT_SOURCE: SourceIdInfo = { id: '-1' }; diff --git a/src/features/theme/AppTheme.types.ts b/src/features/theme/AppTheme.types.ts index 1500a6fd..99052e76 100644 --- a/src/features/theme/AppTheme.types.ts +++ b/src/features/theme/AppTheme.types.ts @@ -7,7 +7,7 @@ */ import { AppTheme, AppThemes } from '@/features/theme/services/AppThemes.ts'; -import { ThemeMode } from '@/features/theme/contexts/AppThemeContext.tsx'; +import { ThemeMode } from '@/features/theme/AppThemeContext.tsx'; export type MetadataThemeSettings = { appTheme: AppThemes; diff --git a/src/features/theme/contexts/AppThemeContextProvider.tsx b/src/features/theme/AppThemeContext.tsx similarity index 78% rename from src/features/theme/contexts/AppThemeContextProvider.tsx rename to src/features/theme/AppThemeContext.tsx index cb9e8878..bfcd0c7e 100644 --- a/src/features/theme/contexts/AppThemeContextProvider.tsx +++ b/src/features/theme/AppThemeContext.tsx @@ -6,24 +6,57 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ReactNode, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'; +import React, { ReactNode, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'; +import { Palette } from '@vibrant/color'; +import { FastAverageColorResult } from 'fast-average-color'; +import { useTranslation } from 'react-i18next'; import { Direction, ThemeProvider } from '@mui/material/styles'; import { CacheProvider } from '@emotion/react'; -import { useTranslation } from 'react-i18next'; -import { AppThemeContext, TAppThemeContext, ThemeMode } from '@/features/theme/contexts/AppThemeContext.tsx'; -import { DIRECTION_TO_CACHE } from '@/features/theme/ThemeDirectionCache.ts'; +import { AppTheme, AppThemes, getTheme } from '@/features/theme/services/AppThemes.ts'; import { createUpdateMetadataServerSettings, useMetadataServerSettings, } from '@/features/settings/services/ServerSettingsMetadata.ts'; +import { useLocalStorage } from '@/features/core/hooks/useStorage.tsx'; +import { MUI_THEME_MODE_KEY } from '@/lib/mui/MUI.constants.ts'; import { MediaQuery } from '@/features/core/utils/MediaQuery.tsx'; -import { AppTheme, getTheme } from '@/features/theme/services/AppThemes.ts'; -import { createAndSetTheme } from '@/features/theme/services/ThemeCreator.ts'; import { makeToast } from '@/features/core/utils/Toast.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; -import { useLocalStorage } from '@/features/core/hooks/useStorage.tsx'; +import { createAndSetTheme } from '@/features/theme/services/ThemeCreator.ts'; import { AppStorage } from '@/lib/storage/AppStorage.ts'; -import { MUI_THEME_MODE_KEY } from '@/lib/mui/MUI.constants.ts'; +import { DIRECTION_TO_CACHE } from '@/features/theme/ThemeDirectionCache.ts'; + +export enum ThemeMode { + SYSTEM = 'system', + DARK = 'dark', + LIGHT = 'light', +} + +export type TAppThemeContext = { + appTheme: AppThemes; + setAppTheme: (theme: AppThemes) => void; + themeMode: ThemeMode; + setThemeMode: (mode: ThemeMode) => void; + shouldUsePureBlackMode: boolean; + setShouldUsePureBlackMode: (value: boolean) => void; + dynamicColor: (NonNullableProperties & { average: FastAverageColorResult }) | null; + setDynamicColor: React.Dispatch< + React.SetStateAction<(NonNullableProperties & { average: FastAverageColorResult }) | null> + >; +}; + +export const AppThemeContext = React.createContext({ + appTheme: 'default', + setAppTheme: (): void => {}, + themeMode: ThemeMode.SYSTEM, + setThemeMode: (): void => {}, + shouldUsePureBlackMode: false, + setShouldUsePureBlackMode: (): void => {}, + dynamicColor: null, + setDynamicColor: (): void => {}, +}); + +export const useAppThemeContext = () => useContext(AppThemeContext); export const AppThemeContextProvider = ({ children }: { children: ReactNode }) => { const { t, i18n } = useTranslation(); diff --git a/src/features/theme/components/ThemePreview.tsx b/src/features/theme/components/ThemePreview.tsx index 7a6a4ea2..0634b7e5 100644 --- a/src/features/theme/components/ThemePreview.tsx +++ b/src/features/theme/components/ThemePreview.tsx @@ -19,7 +19,7 @@ import IconButton from '@mui/material/IconButton'; import EditIcon from '@mui/icons-material/Edit'; import { bindDialog, usePopupState } from 'material-ui-popup-state/hooks'; import { CustomTooltip } from '@/features/core/components/CustomTooltip.tsx'; -import { useAppThemeContext } from '@/features/theme/contexts/AppThemeContext.tsx'; +import { useAppThemeContext } from '@/features/theme/AppThemeContext.tsx'; import { AppTheme, hasMissingFonts, loadThemeFonts } from '@/features/theme/services/AppThemes.ts'; import { createTheme } from '@/features/theme/services/ThemeCreator.ts'; import { ThemeCreationDialog } from '@/features/theme/components/CreateThemeDialog.tsx'; diff --git a/src/features/theme/contexts/AppThemeContext.tsx b/src/features/theme/contexts/AppThemeContext.tsx deleted file mode 100644 index 453b1862..00000000 --- a/src/features/theme/contexts/AppThemeContext.tsx +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) Contributors to the Suwayomi project - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - */ - -import React, { useContext } from 'react'; -import { Palette } from '@vibrant/color'; -import { FastAverageColorResult } from 'fast-average-color'; -import { AppThemes } from '@/features/theme/services/AppThemes.ts'; - -export enum ThemeMode { - SYSTEM = 'system', - DARK = 'dark', - LIGHT = 'light', -} - -export type TAppThemeContext = { - appTheme: AppThemes; - setAppTheme: (theme: AppThemes) => void; - themeMode: ThemeMode; - setThemeMode: (mode: ThemeMode) => void; - shouldUsePureBlackMode: boolean; - setShouldUsePureBlackMode: (value: boolean) => void; - dynamicColor: (NonNullableProperties & { average: FastAverageColorResult }) | null; - setDynamicColor: React.Dispatch< - React.SetStateAction<(NonNullableProperties & { average: FastAverageColorResult }) | null> - >; -}; - -export const AppThemeContext = React.createContext({ - appTheme: 'default', - setAppTheme: (): void => {}, - themeMode: ThemeMode.SYSTEM, - setThemeMode: (): void => {}, - shouldUsePureBlackMode: false, - setShouldUsePureBlackMode: (): void => {}, - dynamicColor: null, - setDynamicColor: (): void => {}, -}); - -export const useAppThemeContext = () => useContext(AppThemeContext); diff --git a/src/features/theme/services/ThemeCreator.ts b/src/features/theme/services/ThemeCreator.ts index 2ef8655d..610f04d2 100644 --- a/src/features/theme/services/ThemeCreator.ts +++ b/src/features/theme/services/ThemeCreator.ts @@ -22,7 +22,7 @@ import { deepmerge } from '@mui/utils'; // eslint-disable-next-line no-restricted-imports import { PaletteBackgroundChannel } from '@mui/material/styles/createThemeWithVars'; import { Palette } from '@vibrant/color'; -import { TAppThemeContext, ThemeMode } from '@/features/theme/contexts/AppThemeContext.tsx'; +import { TAppThemeContext, ThemeMode } from '@/features/theme/AppThemeContext.tsx'; import { MediaQuery } from '@/features/core/utils/MediaQuery.tsx'; import { AppTheme, loadThemeFonts } from '@/features/theme/services/AppThemes.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; diff --git a/src/features/updates/screens/Updates.tsx b/src/features/updates/screens/Updates.tsx index c0759837..59ff8e18 100644 --- a/src/features/updates/screens/Updates.tsx +++ b/src/features/updates/screens/Updates.tsx @@ -21,7 +21,7 @@ import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts' import { VirtuosoUtil } from '@/lib/virtuoso/Virtuoso.util.tsx'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { ChapterUpdateCard } from '@/features/updates/components/ChapterUpdateCard.tsx'; -import { useNavBarContext } from '@/features/navigation-bar/contexts/NavbarContext.tsx'; +import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { Chapters } from '@/features/chapter/services/Chapters.ts'; import { useAppTitleAndAction } from '@/features/navigation-bar/hooks/useAppTitleAndAction.ts'; import { GROUPED_VIRTUOSO_Z_INDEX } from '@/lib/virtuoso/Virtuoso.constants.ts';