Extract logic from "Reader" into hooks
This commit is contained in:
62
src/modules/reader/hooks/useReaderSetSettingsState.ts
Normal file
62
src/modules/reader/hooks/useReaderSetSettingsState.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* 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 { useEffect } from 'react';
|
||||
import {
|
||||
getReaderSettings,
|
||||
getReaderSettingsFor,
|
||||
useDefaultReaderSettings,
|
||||
} from '@/modules/reader/services/ReaderSettingsMetadata.ts';
|
||||
import { isAutoWebtoonMode } from '@/modules/reader/utils/ReaderSettings.utils.tsx';
|
||||
import { ReadingMode, TReaderStateSettingsContext } from '@/modules/reader/types/Reader.types.ts';
|
||||
import { GetMangaReaderQuery } from '@/lib/graphql/generated/graphql.ts';
|
||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||
|
||||
export const useReaderSetSettingsState = (
|
||||
mangaResponse: ReturnType<typeof requestManager.useGetManga<GetMangaReaderQuery>>,
|
||||
defaultSettingsResponse: ReturnType<typeof useDefaultReaderSettings>['request'],
|
||||
defaultSettings: ReturnType<typeof useDefaultReaderSettings>['settings'],
|
||||
defaultSettingsMetadata: ReturnType<typeof useDefaultReaderSettings>['metadata'],
|
||||
setSettings: TReaderStateSettingsContext['setSettings'],
|
||||
setAreSettingsSet: (areSet: boolean) => void,
|
||||
) => {
|
||||
useEffect(() => {
|
||||
const mangaFromResponse = mangaResponse.data?.manga;
|
||||
if (!mangaFromResponse || defaultSettingsResponse.loading || defaultSettingsResponse.error) {
|
||||
return;
|
||||
}
|
||||
|
||||
const settingsWithDefaultProfileFallback = getReaderSettingsFor(mangaFromResponse, defaultSettings);
|
||||
|
||||
const shouldUseWebtoonMode = isAutoWebtoonMode(
|
||||
mangaFromResponse,
|
||||
settingsWithDefaultProfileFallback.shouldUseAutoWebtoonMode,
|
||||
settingsWithDefaultProfileFallback.readingMode,
|
||||
);
|
||||
|
||||
const defaultSettingsWithAutoReadingMode = {
|
||||
...defaultSettings,
|
||||
readingMode: shouldUseWebtoonMode ? ReadingMode.WEBTOON : defaultSettings.readingMode,
|
||||
};
|
||||
|
||||
const profile = shouldUseWebtoonMode
|
||||
? ReadingMode.WEBTOON
|
||||
: settingsWithDefaultProfileFallback.readingMode.value;
|
||||
const profileSettings = getReaderSettings(
|
||||
'global',
|
||||
{ meta: defaultSettingsMetadata! },
|
||||
defaultSettingsWithAutoReadingMode,
|
||||
undefined,
|
||||
profile,
|
||||
);
|
||||
|
||||
const finalSettings = getReaderSettingsFor(mangaFromResponse, profileSettings);
|
||||
setSettings(finalSettings);
|
||||
setAreSettingsSet(true);
|
||||
}, [mangaResponse.data?.manga, defaultSettings]);
|
||||
};
|
||||
Reference in New Issue
Block a user