Show active setting in reader desktop nav bar

This commit is contained in:
schroda
2024-12-13 16:38:41 +01:00
parent 33910cc89d
commit feacfe70f1
9 changed files with 57 additions and 12 deletions

View File

@@ -395,7 +395,7 @@
"label": { "label": {
"advanced": "Advanced", "advanced": "Advanced",
"are_you_sure": "Are you sure?", "are_you_sure": "Are you sure?",
"footnote": "{{text}}*", "asterisk": "*",
"auto": "Auto", "auto": "Auto",
"both": "Both", "both": "Both",
"bottom": "Bottom", "bottom": "Bottom",
@@ -410,6 +410,7 @@
"display": "Display", "display": "Display",
"filter": "Filter", "filter": "Filter",
"finished": "Finished", "finished": "Finished",
"footnote": "{{value}}<0>$t(global.label.asterisk)</0>",
"general": "General", "general": "General",
"github": "GitHub", "github": "GitHub",
"hidden": "Hidden", "hidden": "Hidden",
@@ -903,7 +904,6 @@
"width": "Fit width" "width": "Fit width"
}, },
"profiles": { "profiles": {
"default_value": "$t(global.label.default) ({{profile}})",
"description": "Profiles are used to define the default reader settings which then can be used for series and reading modes", "description": "Profiles are used to define the default reader settings which then can be used for series and reading modes",
"placeholder": "Comics | length: 16, chars: letters, numbers, -, _" "placeholder": "Comics | length: 16, chars: letters, numbers, -, _"
}, },
@@ -1116,6 +1116,7 @@
"title": "Clear server cache" "title": "Clear server cache"
} }
}, },
"default_value": "{{value}}<0>($t(global.label.default))</0>",
"device": { "device": {
"active_device": { "active_device": {
"label": { "label": {

View File

@@ -33,7 +33,6 @@ export type ValueToDisplayData<Value extends string | number> = Record<Value, Di
export interface MultiValueButtonBaseProps<Value extends string | number> { export interface MultiValueButtonBaseProps<Value extends string | number> {
tooltip?: string; tooltip?: string;
defaultText?: string;
value: Value; value: Value;
defaultValue?: Value; defaultValue?: Value;
values: Value[]; values: Value[];

View File

@@ -0,0 +1,34 @@
/*
* 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 Stack from '@mui/material/Stack';
import Typography from '@mui/material/Typography';
import { Trans, useTranslation } from 'react-i18next';
import { TranslationKey } from '@/Base.types.ts';
/**
* Expects a translation key of format "{{value}}<0>superscript</0>"
* @param i18nKey
* @param value
* @constructor
*/
export const Superscript = ({ i18nKey, value }: { i18nKey: TranslationKey; value: string }) => {
const { t } = useTranslation();
return (
<Stack sx={{ flexDirection: 'row', gap: 0.25 }}>
<Trans
t={t}
// the type of "key" causes tsc error: "TS2590: Expression produces a union type that is too complex to represent"
i18nKey={i18nKey as any}
values={{ value }}
components={[<Typography variant="caption" sx={{ fontSize: 'x-small', opacity: 0.75 }} />]}
/>
</Stack>
);
};

View File

@@ -11,6 +11,7 @@ import { useTranslation } from 'react-i18next';
import Button from '@mui/material/Button'; import Button from '@mui/material/Button';
import Tooltip from '@mui/material/Tooltip'; import Tooltip from '@mui/material/Tooltip';
import { MultiValueButtonProps } from '@/modules/core/Core.types.ts'; import { MultiValueButtonProps } from '@/modules/core/Core.types.ts';
import { Superscript } from '@/modules/core/components/Superscript.tsx';
export const ButtonSelect = <Value extends string | number>({ export const ButtonSelect = <Value extends string | number>({
value, value,
@@ -36,8 +37,6 @@ export const ButtonSelect = <Value extends string | number>({
const text = valueToDisplayData[displayValue].isTitleString const text = valueToDisplayData[displayValue].isTitleString
? valueToDisplayData[displayValue].title ? valueToDisplayData[displayValue].title
: t(valueToDisplayData[displayValue].title); : t(valueToDisplayData[displayValue].title);
const defaultValueText = t('global.label.footnote', { text });
const finalText = isDefault ? defaultValueText : text;
return ( return (
<Tooltip key={displayValue} title={isDefault ? t('reader.settings.active_setting') : ''}> <Tooltip key={displayValue} title={isDefault ? t('reader.settings.active_setting') : ''}>
@@ -46,7 +45,7 @@ export const ButtonSelect = <Value extends string | number>({
variant={displayValue === value ? 'contained' : 'outlined'} variant={displayValue === value ? 'contained' : 'outlined'}
startIcon={valueToDisplayData[displayValue].icon} startIcon={valueToDisplayData[displayValue].icon}
> >
{finalText} {isDefault ? <Superscript i18nKey="global.label.footnote" value={text} /> : text}
</Button> </Button>
</Tooltip> </Tooltip>
); );

View File

@@ -12,11 +12,12 @@ import Button from '@mui/material/Button';
import Tooltip from '@mui/material/Tooltip'; import Tooltip from '@mui/material/Tooltip';
import { MultiValueButtonProps } from '@/modules/core/Core.types.ts'; import { MultiValueButtonProps } from '@/modules/core/Core.types.ts';
import { getNextRotationValue } from '@/modules/core/utils/ValueRotationButton.utils.ts'; import { getNextRotationValue } from '@/modules/core/utils/ValueRotationButton.utils.ts';
import { Superscript } from '@/modules/core/components/Superscript.tsx';
export const ValueRotationButton = <Value extends string | number>({ export const ValueRotationButton = <Value extends string | number>({
tooltip, tooltip,
defaultText,
value, value,
defaultValue,
values, values,
setValue, setValue,
valueToDisplayData, valueToDisplayData,
@@ -45,7 +46,18 @@ export const ValueRotationButton = <Value extends string | number>({
startIcon={defaultIcon} startIcon={defaultIcon}
size="large" size="large"
> >
{defaultText ?? t('global.label.default')} {defaultValue === undefined ? (
t('global.label.default')
) : (
<Superscript
i18nKey="settings.default_value"
value={
valueToDisplayData[defaultValue].isTitleString
? valueToDisplayData[defaultValue].title
: t(valueToDisplayData[defaultValue].title)
}
/>
)}
</Button> </Button>
) : ( ) : (
<Button <Button

View File

@@ -44,6 +44,7 @@ export const ReaderNavBarDesktopPageScale = ({
{...buttonSelectInputProps} {...buttonSelectInputProps}
tooltip={t('reader.settings.page_scale.title')} tooltip={t('reader.settings.page_scale.title')}
value={pageScaleMode.isDefault ? undefined : pageScaleMode.value} value={pageScaleMode.isDefault ? undefined : pageScaleMode.value}
defaultValue={pageScaleMode.isDefault ? pageScaleMode.value : undefined}
values={READER_PAGE_SCALE_MODE_VALUES} values={READER_PAGE_SCALE_MODE_VALUES}
setValue={(value) => updateSetting('pageScaleMode', value)} setValue={(value) => updateSetting('pageScaleMode', value)}
valueToDisplayData={PAGE_SCALE_VALUE_TO_DISPLAY_DATA} valueToDisplayData={PAGE_SCALE_VALUE_TO_DISPLAY_DATA}

View File

@@ -16,7 +16,6 @@ import {
getReaderProfile, getReaderProfile,
getValidReaderProfile, getValidReaderProfile,
} from '@/modules/reader/utils/ReaderSettings.utils.tsx'; } from '@/modules/reader/utils/ReaderSettings.utils.tsx';
import { DEFAULT_READER_PROFILE } from '@/modules/reader/constants/ReaderSettings.constants.tsx';
export const ReaderNavBarDesktopProfile = ({ export const ReaderNavBarDesktopProfile = ({
defaultProfile, defaultProfile,
@@ -37,10 +36,8 @@ export const ReaderNavBarDesktopProfile = ({
<ValueRotationButton <ValueRotationButton
{...buttonSelectInputProps} {...buttonSelectInputProps}
tooltip={t('global.label.profile_one')} tooltip={t('global.label.profile_one')}
defaultText={t('reader.settings.profiles.default_value', {
profile: activeProfile === DEFAULT_READER_PROFILE ? t('global.label.standard') : activeProfile,
})}
value={defaultProfile.isDefault ? undefined : getValidReaderProfile(defaultProfile.value, profiles)} value={defaultProfile.isDefault ? undefined : getValidReaderProfile(defaultProfile.value, profiles)}
defaultValue={defaultProfile.isDefault ? activeProfile : undefined}
values={profiles} values={profiles}
setValue={updateSetting} setValue={updateSetting}
valueToDisplayData={createProfileValueToDisplayData(profiles, true)} valueToDisplayData={createProfileValueToDisplayData(profiles, true)}

View File

@@ -30,6 +30,7 @@ export const ReaderNavBarDesktopReadingDirection = ({
{...buttonSelectInputProps} {...buttonSelectInputProps}
tooltip={t('reader.settings.label.reading_direction')} tooltip={t('reader.settings.label.reading_direction')}
value={readingDirection.isDefault ? undefined : readingDirection.value} value={readingDirection.isDefault ? undefined : readingDirection.value}
defaultValue={readingDirection.isDefault ? readingDirection.value : undefined}
values={READING_DIRECTION_VALUES} values={READING_DIRECTION_VALUES}
setValue={setReadingDirection} setValue={setReadingDirection}
valueToDisplayData={READING_DIRECTION_VALUE_TO_DISPLAY_DATA} valueToDisplayData={READING_DIRECTION_VALUE_TO_DISPLAY_DATA}

View File

@@ -30,6 +30,7 @@ export const ReaderNavBarDesktopReadingMode = ({
{...buttonSelectInputProps} {...buttonSelectInputProps}
tooltip={t('reader.settings.label.reading_mode')} tooltip={t('reader.settings.label.reading_mode')}
value={readingMode.isDefault ? undefined : readingMode.value} value={readingMode.isDefault ? undefined : readingMode.value}
defaultValue={readingMode.isDefault ? readingMode.value : undefined}
values={READING_MODE_VALUES} values={READING_MODE_VALUES}
setValue={setReadingMode} setValue={setReadingMode}
valueToDisplayData={READING_MODE_VALUE_TO_DISPLAY_DATA} valueToDisplayData={READING_MODE_VALUE_TO_DISPLAY_DATA}