mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-08 04:50:12 +02:00
104 lines
3.8 KiB
TypeScript
104 lines
3.8 KiB
TypeScript
import isElectron from 'is-electron';
|
|
import { memo } from 'react';
|
|
import { useTranslation } from 'react-i18next';
|
|
|
|
import {
|
|
SettingOption,
|
|
SettingsSection,
|
|
} from '/@/renderer/features/settings/components/settings-section';
|
|
import { useSettingsStoreActions, useWindowSettings } from '/@/renderer/store';
|
|
import { Select } from '/@/shared/components/select/select';
|
|
import { Switch } from '/@/shared/components/switch/switch';
|
|
|
|
const localSettings = isElectron() ? window.api.localSettings : null;
|
|
const utils = isElectron() ? window.api.utils : null;
|
|
|
|
function disableAutoUpdates(): boolean {
|
|
return Boolean(!isElectron() || utils?.disableAutoUpdates());
|
|
}
|
|
|
|
export const UpdateSettings = memo(() => {
|
|
const { t } = useTranslation();
|
|
const settings = useWindowSettings();
|
|
const { setSettings } = useSettingsStoreActions();
|
|
|
|
const updateOptions: SettingOption[] = [
|
|
{
|
|
control: (
|
|
<Select
|
|
data={[
|
|
{
|
|
label: t('setting.releaseChannel', {
|
|
context: 'optionLatest',
|
|
postProcess: 'titleCase',
|
|
}),
|
|
value: 'latest',
|
|
},
|
|
{
|
|
label: t('setting.releaseChannel', {
|
|
context: 'optionBeta',
|
|
postProcess: 'titleCase',
|
|
}),
|
|
value: 'beta',
|
|
},
|
|
{
|
|
label: t('setting.releaseChannel', {
|
|
context: 'optionAlpha',
|
|
postProcess: 'titleCase',
|
|
}),
|
|
value: 'alpha',
|
|
},
|
|
]}
|
|
defaultValue={settings.releaseChannel || 'latest'}
|
|
onChange={(value) => {
|
|
if (!value) return;
|
|
localSettings?.set('release_channel', value);
|
|
setSettings({
|
|
window: {
|
|
releaseChannel: value as 'alpha' | 'beta' | 'latest',
|
|
},
|
|
});
|
|
}}
|
|
/>
|
|
),
|
|
description: t('setting.releaseChannel', {
|
|
context: 'description',
|
|
postProcess: 'sentenceCase',
|
|
}),
|
|
isHidden: disableAutoUpdates(),
|
|
title: t('setting.releaseChannel', { postProcess: 'sentenceCase' }),
|
|
},
|
|
{
|
|
control: (
|
|
<Switch
|
|
aria-label="Disable automatic updates"
|
|
defaultChecked={settings.disableAutoUpdate}
|
|
disabled={disableAutoUpdates()}
|
|
onChange={(e) => {
|
|
if (!e) return;
|
|
localSettings?.set('disable_auto_updates', e.currentTarget.checked);
|
|
setSettings({
|
|
window: {
|
|
disableAutoUpdate: e.currentTarget.checked,
|
|
},
|
|
});
|
|
}}
|
|
/>
|
|
),
|
|
description: t('setting.disableAutomaticUpdates', {
|
|
context: 'description',
|
|
postProcess: 'sentenceCase',
|
|
}),
|
|
isHidden: disableAutoUpdates(),
|
|
title: t('setting.disableAutomaticUpdates', { postProcess: 'sentenceCase' }),
|
|
},
|
|
];
|
|
|
|
return (
|
|
<SettingsSection
|
|
options={updateOptions}
|
|
title={t('page.setting.updates', { postProcess: 'sentenceCase' })}
|
|
/>
|
|
);
|
|
});
|