Files
suwayomi-material-you-webui/src/modules/reader/hooks/useReaderSetSettingsState.ts
2025-01-18 22:41:54 +01:00

63 lines
2.6 KiB
TypeScript

/*
* 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]);
};