Make active reading mode default settings editable in reader

This commit is contained in:
schroda
2024-12-30 14:52:09 +01:00
parent 6bf3e297ef
commit 6ca6864035
5 changed files with 127 additions and 86 deletions

View File

@@ -940,6 +940,7 @@
"ltr": "Left to right", "ltr": "Left to right",
"rtl": "Right to left" "rtl": "Right to left"
}, },
"source_series": "Series settings",
"tap_zones": { "tap_zones": {
"edge": "Edge", "edge": "Edge",
"invert": "Invert tap zones", "invert": "Invert tap zones",

View File

@@ -87,7 +87,6 @@ const BaseReaderSettingsTabs = ({
return ( return (
<TabPanel key={id} index={id} currentIndex={activeTab}> <TabPanel key={id} index={id} currentIndex={activeTab}>
<ReaderDefaultLayoutSettings <ReaderDefaultLayoutSettings
settings={settings}
updateSetting={(...args) => updateSetting(...args)} updateSetting={(...args) => updateSetting(...args)}
/> />
</TabPanel> </TabPanel>
@@ -102,6 +101,7 @@ const BaseReaderSettingsTabs = ({
setShowPreview={setShowPreview!} setShowPreview={setShowPreview!}
isDefaultable={!areDefaultSettings} isDefaultable={!areDefaultSettings}
onDefault={(...args) => deleteSetting?.(...args)} onDefault={(...args) => deleteSetting?.(...args)}
isSeriesMode
/> />
</TabPanel> </TabPanel>
); );

View File

@@ -16,27 +16,35 @@ import {
READING_MODE_VALUES, READING_MODE_VALUES,
} from '@/modules/reader/constants/ReaderSettings.constants.tsx'; } from '@/modules/reader/constants/ReaderSettings.constants.tsx';
import { ReaderSettingReadingMode } from '@/modules/reader/components/settings/layout/ReaderSettingReadingMode.tsx'; import { ReaderSettingReadingMode } from '@/modules/reader/components/settings/layout/ReaderSettingReadingMode.tsx';
import { IReaderSettingsWithDefaultFlag, ReadingMode } from '@/modules/reader/types/Reader.types.ts';
export const ReaderDefaultLayoutSettings = ( export const ReaderDefaultLayoutSettings = ({
props: Omit<ComponentProps<typeof ReaderLayoutSettings>, 'setShowPreview'>, profiles = READING_MODE_VALUES,
) => { readingMode,
const { settings, updateSetting } = props; ...props
}: Omit<ComponentProps<typeof ReaderLayoutSettings>, 'setShowPreview' | 'settings'> & {
profiles?: ReadingMode[];
readingMode?: IReaderSettingsWithDefaultFlag['readingMode'];
}) => {
const { updateSetting, isSeriesMode } = props;
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
<Stack sx={{ gap: 2, pb: 2 }}> <Stack sx={{ gap: 2, pb: Number(!isSeriesMode) * 2 }}>
{readingMode !== undefined && (
<Stack sx={{ pt: 2, px: 2 }}> <Stack sx={{ pt: 2, px: 2 }}>
<ReaderSettingReadingMode <ReaderSettingReadingMode
readingMode={settings.readingMode} readingMode={readingMode}
setReadingMode={(value) => updateSetting('readingMode', value)} setReadingMode={(value) => updateSetting('readingMode', value)}
/> />
</Stack> </Stack>
{READING_MODE_VALUES.map((readingMode) => ( )}
{profiles.map((profile) => (
<ReaderSettingProfileSettings <ReaderSettingProfileSettings
key={readingMode} key={profile}
profile={readingMode} profile={profile}
title={t(READING_MODE_VALUE_TO_DISPLAY_DATA[readingMode].title)} title={t(READING_MODE_VALUE_TO_DISPLAY_DATA[profile].title)}
{...props} {...props}
/> />
))} ))}

View File

@@ -7,6 +7,9 @@
*/ */
import Stack from '@mui/material/Stack'; import Stack from '@mui/material/Stack';
import Typography from '@mui/material/Typography';
import Divider from '@mui/material/Divider';
import { useTranslation } from 'react-i18next';
import { ReaderSettingReadingMode } from '@/modules/reader/components/settings/layout/ReaderSettingReadingMode.tsx'; import { ReaderSettingReadingMode } from '@/modules/reader/components/settings/layout/ReaderSettingReadingMode.tsx';
import { ReaderSettingReadingDirection } from '@/modules/reader/components/settings/layout/ReaderSettingReadingDirection.tsx'; import { ReaderSettingReadingDirection } from '@/modules/reader/components/settings/layout/ReaderSettingReadingDirection.tsx';
import { ReaderSettingTapZoneLayout } from '@/modules/reader/components/settings/layout/ReaderSettingTapZoneLayout.tsx'; import { ReaderSettingTapZoneLayout } from '@/modules/reader/components/settings/layout/ReaderSettingTapZoneLayout.tsx';
@@ -18,6 +21,7 @@ import { ReaderSettingPageGap } from '@/modules/reader/components/settings/layou
import { ReaderSettingWidth } from '@/modules/reader/components/settings/layout/ReaderSettingWidth.tsx'; import { ReaderSettingWidth } from '@/modules/reader/components/settings/layout/ReaderSettingWidth.tsx';
import { DefaultSettingFootnote } from '@/modules/reader/components/settings/DefaultSettingFootnote.tsx'; import { DefaultSettingFootnote } from '@/modules/reader/components/settings/DefaultSettingFootnote.tsx';
import { TReaderTapZoneContext } from '@/modules/reader/types/TapZoneLayout.types.ts'; import { TReaderTapZoneContext } from '@/modules/reader/types/TapZoneLayout.types.ts';
import { ReaderDefaultLayoutSettings } from '@/modules/reader/components/settings/layout/ReaderDefaultLayoutSettings.tsx';
export const ReaderLayoutSettings = ({ export const ReaderLayoutSettings = ({
setShowPreview, setShowPreview,
@@ -25,18 +29,26 @@ export const ReaderLayoutSettings = ({
updateSetting, updateSetting,
isDefaultable, isDefaultable,
onDefault, onDefault,
isSeriesMode,
}: ReaderSettingsTypeProps & { }: ReaderSettingsTypeProps & {
setShowPreview: TReaderTapZoneContext['setShowPreview']; setShowPreview: TReaderTapZoneContext['setShowPreview'];
}) => ( isSeriesMode?: boolean;
}) => {
const { t } = useTranslation();
return (
<Stack sx={{ gap: 2 }}> <Stack sx={{ gap: 2 }}>
<DefaultSettingFootnote areDefaultSettings={!isDefaultable} /> <DefaultSettingFootnote areDefaultSettings={!isDefaultable} />
{isDefaultable && ( {isSeriesMode && (
<>
<Typography>{t('reader.settings.source_series')}</Typography>
<ReaderSettingReadingMode <ReaderSettingReadingMode
readingMode={settings.readingMode} readingMode={settings.readingMode}
setReadingMode={(value) => updateSetting('readingMode', value)} setReadingMode={(value) => updateSetting('readingMode', value)}
isDefaultable={isDefaultable} isDefaultable={isDefaultable}
onDefault={() => onDefault?.('readingMode')} onDefault={() => onDefault?.('readingMode')}
/> />
</>
)} )}
<ReaderSettingPageGap <ReaderSettingPageGap
pageGap={settings.pageGap} pageGap={settings.pageGap}
@@ -93,5 +105,16 @@ export const ReaderLayoutSettings = ({
onDefault={() => onDefault?.('readerWidth')} onDefault={() => onDefault?.('readerWidth')}
updateSetting={(...args) => updateSetting(...args)} updateSetting={(...args) => updateSetting(...args)}
/> />
{isSeriesMode && (
<>
<Divider />
<ReaderDefaultLayoutSettings
profiles={[settings.readingMode.value]}
updateSetting={updateSetting}
isSeriesMode={isSeriesMode}
/>
</>
)}
</Stack> </Stack>
); );
};

View File

@@ -9,6 +9,7 @@
import Stack from '@mui/material/Stack'; import Stack from '@mui/material/Stack';
import ListSubheader from '@mui/material/ListSubheader'; import ListSubheader from '@mui/material/ListSubheader';
import { ComponentProps, useMemo } from 'react'; import { ComponentProps, useMemo } from 'react';
import Typography from '@mui/material/Typography';
import { ReaderLayoutSettings } from '@/modules/reader/components/settings/layout/ReaderLayoutSettings.tsx'; import { ReaderLayoutSettings } from '@/modules/reader/components/settings/layout/ReaderLayoutSettings.tsx';
import { useDefaultReaderSettingsWithDefaultFlag } from '@/modules/reader/services/ReaderSettingsMetadata.ts'; import { useDefaultReaderSettingsWithDefaultFlag } from '@/modules/reader/services/ReaderSettingsMetadata.ts';
import { ReadingMode } from '@/modules/reader/types/Reader.types.ts'; import { ReadingMode } from '@/modules/reader/types/Reader.types.ts';
@@ -17,8 +18,12 @@ export const ReaderSettingProfileSettings = ({
profile, profile,
title, title,
updateSetting, updateSetting,
isSeriesMode,
...props ...props
}: Pick<ComponentProps<typeof ReaderLayoutSettings>, 'updateSetting'> & { profile: ReadingMode; title: string }) => { }: Pick<ComponentProps<typeof ReaderLayoutSettings>, 'updateSetting' | 'isSeriesMode'> & {
profile: ReadingMode;
title: string;
}) => {
const { settings } = useDefaultReaderSettingsWithDefaultFlag(profile); const { settings } = useDefaultReaderSettingsWithDefaultFlag(profile);
const adjustedSettings = useMemo( const adjustedSettings = useMemo(
@@ -34,10 +39,14 @@ export const ReaderSettingProfileSettings = ({
return ( return (
<Stack sx={{ gap: 2 }}> <Stack sx={{ gap: 2 }}>
{!isSeriesMode ? (
<ListSubheader component="div" id={`${profile}-settings`}> <ListSubheader component="div" id={`${profile}-settings`}>
{title} {title}
</ListSubheader> </ListSubheader>
<Stack sx={{ px: 2 }}> ) : (
<Typography>{title}</Typography>
)}
<Stack sx={{ px: Number(!isSeriesMode) * 2 }}>
<ReaderLayoutSettings <ReaderLayoutSettings
{...props} {...props}
setShowPreview={() => {}} setShowPreview={() => {}}