optimize settings store

This commit is contained in:
jeffvli
2026-01-02 03:13:17 -08:00
parent 0cfc4119ba
commit a66c67e86d
72 changed files with 479 additions and 354 deletions
@@ -1,7 +1,7 @@
import { closeAllModals, openModal } from '@mantine/modals';
import { useQueryClient } from '@tanstack/react-query';
import isElectron from 'is-electron';
import { useCallback, useState } from 'react';
import { memo, useCallback, useState } from 'react';
import { useTranslation } from 'react-i18next';
import {
@@ -14,7 +14,7 @@ import { toast } from '/@/shared/components/toast/toast';
const browser = isElectron() ? window.api.browser : null;
export const CacheSettings = () => {
export const CacheSettings = memo(() => {
const [isClearing, setIsClearing] = useState(false);
const queryClient = useQueryClient();
const { t } = useTranslation();
@@ -115,4 +115,4 @@ export const CacheSettings = () => {
)}
</>
);
};
});
@@ -1,4 +1,5 @@
import isElectron from 'is-electron';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
import {
@@ -16,7 +17,7 @@ import { Select } from '/@/shared/components/select/select';
import { Switch } from '/@/shared/components/switch/switch';
import { TextInput } from '/@/shared/components/text-input/text-input';
export const DiscordSettings = () => {
export const DiscordSettings = memo(() => {
const { t } = useTranslation();
const settings = useDiscordSettings();
const generalSettings = useGeneralSettings();
@@ -30,7 +31,6 @@ export const DiscordSettings = () => {
onChange={(e) => {
setSettings({
discord: {
...settings,
enabled: e.currentTarget.checked,
},
});
@@ -58,7 +58,6 @@ export const DiscordSettings = () => {
onBlur={(e) => {
setSettings({
discord: {
...settings,
clientId: e.currentTarget.value,
},
});
@@ -84,7 +83,6 @@ export const DiscordSettings = () => {
onChange={(e) => {
setSettings({
discord: {
...settings,
showPaused: e.currentTarget.checked,
},
});
@@ -107,7 +105,6 @@ export const DiscordSettings = () => {
onChange={(e) => {
setSettings({
discord: {
...settings,
showAsListening: e.currentTarget.checked,
},
});
@@ -150,7 +147,6 @@ export const DiscordSettings = () => {
if (!e) return;
setSettings({
discord: {
...settings,
displayType: e as DiscordDisplayType,
},
});
@@ -195,7 +191,6 @@ export const DiscordSettings = () => {
if (!e) return;
setSettings({
discord: {
...settings,
linkType: e as DiscordLinkType,
},
});
@@ -222,7 +217,6 @@ export const DiscordSettings = () => {
onChange={(e) => {
setSettings({
discord: {
...settings,
showServerImage: e.currentTarget.checked,
},
});
@@ -248,7 +242,6 @@ export const DiscordSettings = () => {
onBlur={(e) => {
setSettings({
general: {
...generalSettings,
lastfmApiKey: e.currentTarget.value,
},
});
@@ -274,4 +267,4 @@ export const DiscordSettings = () => {
title={t('page.setting.discord', { postProcess: 'sentenceCase' })}
/>
);
};
});
@@ -1,4 +1,5 @@
import isElectron from 'is-electron';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
import {
@@ -17,7 +18,7 @@ const PASSWORD_SETTINGS: { label: string; value: string }[] = [
{ label: 'KDE 6 (kwallet6)', value: 'kwallet6' },
];
export const PasswordSettings = () => {
export const PasswordSettings = memo(() => {
const { t } = useTranslation();
const settings = useGeneralSettings();
const { setSettings } = useSettingsStoreActions();
@@ -53,4 +54,4 @@ export const PasswordSettings = () => {
];
return <SettingsSection divider={false} options={updateOptions} />;
};
});
@@ -1,5 +1,6 @@
import isElectron from 'is-electron';
import debounce from 'lodash/debounce';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
import { SettingsSection } from '/@/renderer/features/settings/components/settings-section';
@@ -12,7 +13,7 @@ import { toast } from '/@/shared/components/toast/toast';
const remote = isElectron() ? window.api.remote : null;
export const RemoteSettings = () => {
export const RemoteSettings = memo(() => {
const { t } = useTranslation();
const settings = useRemoteSettings();
const { setSettings } = useSettingsStoreActions();
@@ -25,7 +26,6 @@ export const RemoteSettings = () => {
if (errorMsg === null) {
setSettings({
remote: {
...settings,
enabled,
},
});
@@ -44,7 +44,6 @@ export const RemoteSettings = () => {
if (!errorMsg) {
setSettings({
remote: {
...settings,
port,
},
});
@@ -115,7 +114,6 @@ export const RemoteSettings = () => {
remote!.updateUsername(username);
setSettings({
remote: {
...settings,
username,
},
});
@@ -139,7 +137,6 @@ export const RemoteSettings = () => {
remote!.updatePassword(password);
setSettings({
remote: {
...settings,
password,
},
});
@@ -161,4 +158,4 @@ export const RemoteSettings = () => {
title={t('page.setting.remote', { postProcess: 'sentenceCase' })}
/>
);
};
});
@@ -1,4 +1,5 @@
import isElectron from 'is-electron';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
import {
@@ -13,10 +14,10 @@ const localSettings = isElectron() ? window.api.localSettings : null;
const utils = isElectron() ? window.api.utils : null;
function disableAutoUpdates(): boolean {
return !isElectron() || utils?.disableAutoUpdates();
return Boolean(!isElectron() || utils?.disableAutoUpdates());
}
export const UpdateSettings = () => {
export const UpdateSettings = memo(() => {
const { t } = useTranslation();
const settings = useWindowSettings();
const { setSettings } = useSettingsStoreActions();
@@ -49,7 +50,6 @@ export const UpdateSettings = () => {
localSettings?.set('release_channel', value);
setSettings({
window: {
...settings,
releaseChannel: value as 'beta' | 'latest',
},
});
@@ -74,7 +74,6 @@ export const UpdateSettings = () => {
localSettings?.set('disable_auto_updates', e.currentTarget.checked);
setSettings({
window: {
...settings,
disableAutoUpdate: e.currentTarget.checked,
},
});
@@ -96,4 +95,4 @@ export const UpdateSettings = () => {
title={t('page.setting.updates', { postProcess: 'sentenceCase' })}
/>
);
};
});
@@ -1,4 +1,5 @@
import isElectron from 'is-electron';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
import {
@@ -20,7 +21,7 @@ const WINDOW_BAR_OPTIONS = [
const localSettings = isElectron() ? window.api.localSettings : null;
export const WindowSettings = () => {
export const WindowSettings = memo(() => {
const { t } = useTranslation();
const settings = useWindowSettings();
const { setSettings } = useSettingsStoreActions();
@@ -50,7 +51,6 @@ export const WindowSettings = () => {
localSettings?.set('window_window_bar_style', e as Platform);
setSettings({
window: {
...settings,
windowBarStyle: e as Platform,
},
});
@@ -77,7 +77,6 @@ export const WindowSettings = () => {
if (e.currentTarget.checked) {
setSettings({
window: {
...settings,
tray: true,
},
});
@@ -88,7 +87,6 @@ export const WindowSettings = () => {
setSettings({
window: {
...settings,
exitToTray: false,
minimizeToTray: false,
startMinimized: false,
@@ -120,7 +118,6 @@ export const WindowSettings = () => {
localSettings?.set('window_minimize_to_tray', e.currentTarget.checked);
setSettings({
window: {
...settings,
minimizeToTray: e.currentTarget.checked,
},
});
@@ -145,7 +142,6 @@ export const WindowSettings = () => {
localSettings?.set('window_exit_to_tray', e.currentTarget.checked);
setSettings({
window: {
...settings,
exitToTray: e.currentTarget.checked,
},
});
@@ -170,7 +166,6 @@ export const WindowSettings = () => {
localSettings?.set('window_start_minimized', e.currentTarget.checked);
setSettings({
window: {
...settings,
startMinimized: e.currentTarget.checked,
},
});
@@ -198,7 +193,6 @@ export const WindowSettings = () => {
);
setSettings({
window: {
...settings,
preventSleepOnPlayback: e.currentTarget.checked,
},
});
@@ -220,4 +214,4 @@ export const WindowSettings = () => {
title={t('page.setting.application', { postProcess: 'sentenceCase' })}
/>
);
};
});
@@ -1,4 +1,5 @@
import isElectron from 'is-electron';
import { memo } from 'react';
import { Fragment } from 'react/jsx-runtime';
import { DiscordSettings } from '/@/renderer/features/settings/components/window/discord-settings';
@@ -17,7 +18,7 @@ const sections = [
{ component: PasswordSettings, hidden: !utils?.isLinux(), key: 'password' },
];
export const WindowTab = () => {
export const WindowTab = memo(() => {
return (
<Stack gap="md">
{sections.map(({ component: Section, hidden, key }, index) => (
@@ -28,4 +29,4 @@ export const WindowTab = () => {
))}
</Stack>
);
};
});