Disable disallowed settings (#461)

This commit is contained in:
schroda
2023-11-19 00:10:30 +01:00
committed by GitHub
parent eda682d9ab
commit 1fd9b4e744
6 changed files with 80 additions and 85 deletions

View File

@@ -33,6 +33,7 @@ type BaseProps = {
valueUnit: string; valueUnit: string;
handleUpdate: (value: number) => void; handleUpdate: (value: number) => void;
showSlider?: never; showSlider?: never;
disabled?: boolean;
}; };
type PropsWithSlider = Omit<BaseProps, 'defaultValue' | 'minValue' | 'maxValue' | 'showSlider'> & type PropsWithSlider = Omit<BaseProps, 'defaultValue' | 'minValue' | 'maxValue' | 'showSlider'> &
@@ -53,6 +54,7 @@ export const NumberSetting = ({
valueUnit, valueUnit,
handleUpdate, handleUpdate,
showSlider, showSlider,
disabled = false,
}: Props) => { }: Props) => {
const { t } = useTranslation(); const { t } = useTranslation();
@@ -94,7 +96,7 @@ export const NumberSetting = ({
return ( return (
<> <>
<ListItemButton onClick={() => setIsDialogOpen(true)}> <ListItemButton disabled={disabled} onClick={() => setIsDialogOpen(true)}>
{settingIcon ? <ListItemIcon>{settingIcon}</ListItemIcon> : null} {settingIcon ? <ListItemIcon>{settingIcon}</ListItemIcon> : null}
<ListItemText <ListItemText
primary={settingTitle} primary={settingTitle}

View File

@@ -24,6 +24,7 @@ export const TextSetting = ({
handleChange, handleChange,
isPassword = false, isPassword = false,
placeholder = '', placeholder = '',
disabled = false,
}: { }: {
settingName: string; settingName: string;
dialogDescription?: string; dialogDescription?: string;
@@ -31,6 +32,7 @@ export const TextSetting = ({
handleChange: (value: string) => void; handleChange: (value: string) => void;
isPassword?: boolean; isPassword?: boolean;
placeholder?: string; placeholder?: string;
disabled?: boolean;
}) => { }) => {
const { t } = useTranslation(); const { t } = useTranslation();
@@ -64,7 +66,7 @@ export const TextSetting = ({
return ( return (
<> <>
<ListItemButton onClick={() => setIsDialogOpen(true)}> <ListItemButton disabled={disabled} onClick={() => setIsDialogOpen(true)}>
<ListItemText <ListItemText
primary={settingName} primary={settingName}
secondary={isPassword ? value?.replace(/./g, '*') : value ?? t('global.label.loading')} secondary={isPassword ? value?.replace(/./g, '*') : value ?? t('global.label.loading')}

View File

@@ -46,27 +46,26 @@ export const DownloadAheadSetting = () => {
/> />
</ListItemSecondaryAction> </ListItemSecondaryAction>
</ListItem> </ListItem>
{shouldDownloadAhead ? ( <NumberSetting
<NumberSetting settingTitle={t('download.settings.download_ahead.label.unread_chapters_to_download')}
settingTitle={t('download.settings.download_ahead.label.unread_chapters_to_download')} settingValue={
settingValue={ downloadAheadLimit !== undefined
downloadAheadLimit ? t('download.settings.download_ahead.label.value', {
? t('download.settings.download_ahead.label.value', { chapters: downloadAheadLimit,
chapters: downloadAheadLimit, count: downloadAheadLimit,
count: downloadAheadLimit, })
}) : undefined
: undefined }
} value={downloadAheadLimit ?? DEFAULT_LIMIT}
value={downloadAheadLimit} minValue={MIN_LIMIT}
minValue={MIN_LIMIT} maxValue={MAX_LIMIT}
maxValue={MAX_LIMIT} defaultValue={DEFAULT_LIMIT}
defaultValue={DEFAULT_LIMIT} showSlider
showSlider dialogTitle={t('download.settings.download_ahead.label.unread_chapters_to_download')}
dialogTitle={t('download.settings.download_ahead.label.unread_chapters_to_download')} valueUnit={t('chapter.title')}
valueUnit={t('chapter.title')} handleUpdate={updateSetting}
handleUpdate={updateSetting} disabled={!shouldDownloadAhead}
/> />
) : null}
</List> </List>
); );
}; };

View File

@@ -42,26 +42,25 @@ export const GlobalUpdateSettingsInterval = () => {
<Switch edge="end" checked={doAutoUpdates} onChange={(e) => setDoAutoUpdates(e.target.checked)} /> <Switch edge="end" checked={doAutoUpdates} onChange={(e) => setDoAutoUpdates(e.target.checked)} />
</ListItemSecondaryAction> </ListItemSecondaryAction>
</ListItem> </ListItem>
{doAutoUpdates ? ( <NumberSetting
<NumberSetting settingTitle={t('library.settings.global_update.auto_update.interval.label.title')}
settingTitle={t('library.settings.global_update.auto_update.interval.label.title')} settingValue={
settingValue={ autoUpdateIntervalHours !== undefined
autoUpdateIntervalHours ? t('library.settings.global_update.auto_update.interval.label.value', {
? t('library.settings.global_update.auto_update.interval.label.value', { hours: autoUpdateIntervalHours,
hours: autoUpdateIntervalHours, })
}) : undefined
: undefined }
} value={autoUpdateIntervalHours ?? DEFAULT_INTERVAL_HOURS}
value={autoUpdateIntervalHours} minValue={MIN_INTERVAL_HOURS}
minValue={MIN_INTERVAL_HOURS} maxValue={MAX_INTERVAL_HOURS}
maxValue={MAX_INTERVAL_HOURS} defaultValue={DEFAULT_INTERVAL_HOURS}
defaultValue={DEFAULT_INTERVAL_HOURS} showSlider
showSlider dialogTitle={t('library.settings.global_update.auto_update.interval.label.title')}
dialogTitle={t('library.settings.global_update.auto_update.interval.label.title')} valueUnit={t('global.time.hour_short')}
valueUnit={t('global.time.hour_short')} handleUpdate={updateSetting}
handleUpdate={updateSetting} disabled={!doAutoUpdates}
/> />
) : null}
</List> </List>
); );
}; };

View File

@@ -92,20 +92,17 @@ export const DownloadSettings = () => {
/> />
</ListItemSecondaryAction> </ListItemSecondaryAction>
</ListItem> </ListItem>
{downloadSettings?.autoDownloadNewChapters ? ( <ListItem disabled={!downloadSettings?.autoDownloadNewChapters}>
<ListItem> <ListItemText primary={t('download.settings.auto_download.label.ignore_with_unread_chapters')} />
<ListItemText <ListItemSecondaryAction>
primary={t('download.settings.auto_download.label.ignore_with_unread_chapters')} <Switch
edge="end"
checked={!!downloadSettings?.excludeEntryWithUnreadChapters}
onChange={(e) => updateSetting('excludeEntryWithUnreadChapters', e.target.checked)}
disabled={!downloadSettings?.autoDownloadNewChapters}
/> />
<ListItemSecondaryAction> </ListItemSecondaryAction>
<Switch </ListItem>
edge="end"
checked={downloadSettings.excludeEntryWithUnreadChapters}
onChange={(e) => updateSetting('excludeEntryWithUnreadChapters', e.target.checked)}
/>
</ListItemSecondaryAction>
</ListItem>
) : null}
</List> </List>
<List <List
subheader={ subheader={

View File

@@ -175,20 +175,18 @@ export const ServerSettings = () => {
/> />
</ListItemSecondaryAction> </ListItemSecondaryAction>
</ListItem> </ListItem>
{!!serverSettings?.socksProxyEnabled && ( <TextSetting
<> settingName={t('settings.server.socks_proxy.label.host')}
<TextSetting value={serverSettings?.socksProxyHost}
settingName={t('settings.server.socks_proxy.label.host')} handleChange={(proxyHost) => updateSetting('socksProxyHost', proxyHost)}
value={serverSettings.socksProxyHost} disabled={!serverSettings?.socksProxyEnabled}
handleChange={(proxyHost) => updateSetting('socksProxyHost', proxyHost)} />
/> <TextSetting
<TextSetting settingName={t('settings.server.socks_proxy.label.port')}
settingName={t('settings.server.socks_proxy.label.port')} value={serverSettings?.socksProxyPort}
value={serverSettings.socksProxyPort} handleChange={(proxyPort) => updateSetting('socksProxyPort', proxyPort)}
handleChange={(proxyPort) => updateSetting('socksProxyPort', proxyPort)} disabled={!serverSettings?.socksProxyEnabled}
/> />
</>
)}
</List> </List>
<List <List
subheader={ subheader={
@@ -207,21 +205,19 @@ export const ServerSettings = () => {
/> />
</ListItemSecondaryAction> </ListItemSecondaryAction>
</ListItem> </ListItem>
{!!serverSettings?.basicAuthEnabled && ( <TextSetting
<> settingName={t('settings.server.auth.basic.label.username')}
<TextSetting value={serverSettings?.basicAuthUsername}
settingName={t('settings.server.auth.basic.label.username')} handleChange={(authUsername) => updateSetting('basicAuthUsername', authUsername)}
value={serverSettings?.basicAuthUsername} disabled={!serverSettings?.basicAuthEnabled}
handleChange={(authUsername) => updateSetting('basicAuthUsername', authUsername)} />
/> <TextSetting
<TextSetting settingName={t('settings.server.auth.basic.label.password')}
settingName={t('settings.server.auth.basic.label.password')} value={serverSettings?.basicAuthPassword}
value={serverSettings?.basicAuthPassword} isPassword
isPassword handleChange={(authPassword) => updateSetting('basicAuthPassword', authPassword)}
handleChange={(authPassword) => updateSetting('basicAuthPassword', authPassword)} disabled={!serverSettings?.basicAuthEnabled}
/> />
</>
)}
</List> </List>
<List <List
subheader={ subheader={