Highlight active settings in reader settings

This commit is contained in:
schroda
2024-12-13 01:52:28 +01:00
parent 66b3757b12
commit 1e57533337
9 changed files with 38 additions and 14 deletions

View File

@@ -395,6 +395,7 @@
"label": { "label": {
"advanced": "Advanced", "advanced": "Advanced",
"are_you_sure": "Are you sure?", "are_you_sure": "Are you sure?",
"footnote": "{{text}}*",
"auto": "Auto", "auto": "Auto",
"both": "Both", "both": "Both",
"bottom": "Bottom", "bottom": "Bottom",
@@ -836,6 +837,7 @@
} }
}, },
"settings": { "settings": {
"active_setting": "Active setting",
"background_color": "Background color", "background_color": "Background color",
"custom_filter": { "custom_filter": {
"brightness": "Custom brightness", "brightness": "Custom brightness",

View File

@@ -35,6 +35,7 @@ export interface MultiValueButtonBaseProps<Value extends string | number> {
tooltip?: string; tooltip?: string;
defaultText?: string; defaultText?: string;
value: Value; value: Value;
defaultValue?: Value;
values: Value[]; values: Value[];
setValue: (value: Value) => void; setValue: (value: Value) => void;
valueToDisplayData: ValueToDisplayData<Value>; valueToDisplayData: ValueToDisplayData<Value>;

View File

@@ -9,11 +9,13 @@
import Stack from '@mui/material/Stack'; import Stack from '@mui/material/Stack';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import Button from '@mui/material/Button'; import Button from '@mui/material/Button';
import Tooltip from '@mui/material/Tooltip';
import { MultiValueButtonProps } from '@/modules/core/Core.types.ts'; import { MultiValueButtonProps } from '@/modules/core/Core.types.ts';
export const ButtonSelect = <Value extends string | number>({ export const ButtonSelect = <Value extends string | number>({
value, value,
values, values,
defaultValue,
setValue, setValue,
valueToDisplayData, valueToDisplayData,
isDefaultable, isDefaultable,
@@ -28,18 +30,27 @@ export const ButtonSelect = <Value extends string | number>({
{t('global.label.default')} {t('global.label.default')}
</Button> </Button>
)} )}
{values.map((displayValue) => ( {values.map((displayValue) => {
<Button const isDefault = value === undefined && displayValue === defaultValue;
key={displayValue}
onClick={() => setValue(displayValue)} const text = valueToDisplayData[displayValue].isTitleString
variant={displayValue === value ? 'contained' : 'outlined'} ? valueToDisplayData[displayValue].title
startIcon={valueToDisplayData[displayValue].icon} : t(valueToDisplayData[displayValue].title);
> const defaultValueText = t('global.label.footnote', { text });
{valueToDisplayData[displayValue].isTitleString const finalText = isDefault ? defaultValueText : text;
? valueToDisplayData[displayValue].title
: t(valueToDisplayData[displayValue].title)} return (
</Button> <Tooltip key={displayValue} title={isDefault ? t('reader.settings.active_setting') : ''}>
))} <Button
onClick={() => setValue(displayValue)}
variant={displayValue === value ? 'contained' : 'outlined'}
startIcon={valueToDisplayData[displayValue].icon}
>
{finalText}
</Button>
</Tooltip>
);
})}
</Stack> </Stack>
); );
}; };

View File

@@ -34,6 +34,7 @@ export const ReaderSettingPageScaleMode = ({
{...buttonSelectInputProps} {...buttonSelectInputProps}
label={t('reader.settings.page_scale.title')} label={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={setPageScaleMode} setValue={setPageScaleMode}
valueToDisplayData={PAGE_SCALE_VALUE_TO_DISPLAY_DATA} valueToDisplayData={PAGE_SCALE_VALUE_TO_DISPLAY_DATA}

View File

@@ -41,6 +41,7 @@ export const ReaderSettingReadingDirection = ({
{...buttonSelectInputProps} {...buttonSelectInputProps}
label={t('reader.settings.label.reading_direction')} label={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={VALUE_TO_DISPLAY_DATA} valueToDisplayData={VALUE_TO_DISPLAY_DATA}

View File

@@ -30,6 +30,7 @@ export const ReaderSettingReadingMode = ({
{...buttonSelectInputProps} {...buttonSelectInputProps}
label={t('reader.settings.label.reading_mode')} label={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}

View File

@@ -89,11 +89,14 @@ export const ReaderSettingTapZoneInvertMode = ({
}) => { }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const tapZonesInvertOption = convertTapZoneInvertModeToOption(tapZoneInvertMode.value);
return ( return (
<ButtonSelectInput <ButtonSelectInput
{...buttonSelectInputProps} {...buttonSelectInputProps}
label={t('reader.settings.tap_zones.invert')} label={t('reader.settings.tap_zones.invert')}
value={tapZoneInvertMode.isDefault ? undefined : convertTapZoneInvertModeToOption(tapZoneInvertMode.value)} value={tapZoneInvertMode.isDefault ? undefined : tapZonesInvertOption}
defaultValue={tapZoneInvertMode.isDefault ? tapZonesInvertOption : undefined}
values={TAP_ZONES_INVERT_OPTION_VALUES} values={TAP_ZONES_INVERT_OPTION_VALUES}
setValue={(value) => setTapZoneInvertMode(TAP_ZONES_INVERT_OPTION_TO_SETTING[value])} setValue={(value) => setTapZoneInvertMode(TAP_ZONES_INVERT_OPTION_TO_SETTING[value])}
valueToDisplayData={VALUE_TO_DISPLAY_DATA} valueToDisplayData={VALUE_TO_DISPLAY_DATA}

View File

@@ -52,6 +52,7 @@ export const ReaderSettingTapZoneLayout = ({
{...buttonSelectInputProps} {...buttonSelectInputProps}
label={t('reader.settings.tap_zones.title')} label={t('reader.settings.tap_zones.title')}
value={tapZoneLayout.isDefault ? undefined : tapZoneLayout.value} value={tapZoneLayout.isDefault ? undefined : tapZoneLayout.value}
defaultValue={tapZoneLayout.isDefault ? tapZoneLayout.value : undefined}
values={READER_TAP_ZONE_LAYOUT_VALUES} values={READER_TAP_ZONE_LAYOUT_VALUES}
setValue={setTapZoneLayout} setValue={setTapZoneLayout}
valueToDisplayData={VALUE_TO_DISPLAY_DATA} valueToDisplayData={VALUE_TO_DISPLAY_DATA}

View File

@@ -26,11 +26,14 @@ export const ReaderSettingProfile = ({
}) => { }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const validReaderProfile = getValidReaderProfile(defaultProfile.value, profiles);
return ( return (
<ButtonSelectInput <ButtonSelectInput
{...buttonSelectInputProps} {...buttonSelectInputProps}
label={t('global.label.profile_one')} label={t('global.label.profile_one')}
value={defaultProfile.isDefault ? undefined : getValidReaderProfile(defaultProfile.value, profiles)} value={defaultProfile.isDefault ? undefined : validReaderProfile}
defaultValue={defaultProfile.isDefault ? validReaderProfile : undefined}
values={profiles} values={profiles}
setValue={updateSetting} setValue={updateSetting}
valueToDisplayData={createProfileValueToDisplayData(profiles)} valueToDisplayData={createProfileValueToDisplayData(profiles)}