import { Group } from '@mantine/core'; import { t } from 'i18next'; import isElectron from 'is-electron'; import { useTranslation } from 'react-i18next'; import { NumberInput, Select, Slider, Switch, Tooltip } from '/@/renderer/components'; import { SettingOption, SettingsSection, } from '/@/renderer/features/settings/components/settings-section'; import { GenreTarget, SideQueueType, useGeneralSettings, useSettingsStoreActions, } from '/@/renderer/store/settings.store'; import { Play } from '/@/shared/types/types'; const localSettings = isElectron() ? window.api.localSettings : null; const SIDE_QUEUE_OPTIONS = [ { label: t('setting.sidePlayQueueStyle', { context: 'optionAttached', postProcess: 'sentenceCase', }), value: 'sideQueue', }, { label: t('setting.sidePlayQueueStyle', { context: 'optionDetached', postProcess: 'sentenceCase', }), value: 'sideDrawerQueue', }, ]; export const ControlSettings = () => { const { t } = useTranslation(); const settings = useGeneralSettings(); const { setSettings } = useSettingsStoreActions(); const controlOptions: SettingOption[] = [ { control: ( { if (!e) return; const newVal = e.currentTarget.value ? Math.min(Math.max(Number(e.currentTarget.value), 15), 30) : settings.buttonSize; setSettings({ general: { ...settings, buttonSize: newVal, }, }); }} rightSection="px" width={75} /> ), description: t('setting.buttonSize', { context: 'description', postProcess: 'sentenceCase', }), isHidden: false, title: t('setting.buttonSize', { postProcess: 'sentenceCase' }), }, { control: ( { const newVal = e.currentTarget.value !== '0' ? Math.min(Math.max(Number(e.currentTarget.value), 175), 2500) : null; setSettings({ general: { ...settings, albumArtRes: newVal } }); }} placeholder="0" rightSection="px" value={settings.albumArtRes ?? 0} width={75} /> ), description: t('setting.playerAlbumArtResolution', { context: 'description', postProcess: 'sentenceCase', }), isHidden: false, title: t('setting.playerAlbumArtResolution', { postProcess: 'sentenceCase' }), }, { control: ( setSettings({ general: { ...settings, nativeAspectRatio: e.currentTarget.checked, }, }) } /> ), description: t('setting.imageAspectRatio', { context: 'description', postProcess: 'sentenceCase', }), isHidden: false, title: t('setting.imageAspectRatio', { postProcess: 'sentenceCase' }), }, { control: ( setSettings({ general: { ...settings, skipButtons: { ...settings.skipButtons, enabled: e.currentTarget.checked, }, }, }) } /> ), description: t('setting.showSkipButtons', { context: 'description', postProcess: 'sentenceCase', }), isHidden: false, title: t('setting.showSkipButtons', { postProcess: 'sentenceCase' }), }, { control: ( setSettings({ general: { ...settings, skipButtons: { ...settings.skipButtons, skipBackwardSeconds: e.currentTarget.value ? Number(e.currentTarget.value) : 0, }, }, }) } width={75} /> setSettings({ general: { ...settings, skipButtons: { ...settings.skipButtons, skipForwardSeconds: e.currentTarget.value ? Number(e.currentTarget.value) : 0, }, }, }) } width={75} /> ), description: t('setting.skipDuration', { context: 'description', postProcess: 'sentenceCase', }), isHidden: false, title: t('setting.skipDuration', { postProcess: 'sentenceCase' }), }, { control: ( { setSettings({ general: { ...settings, sideQueueType: e as SideQueueType, }, }); }} /> ), description: t('setting.sidePlayQueueStyle', { context: 'description', postProcess: 'sentenceCase', }), isHidden: false, title: t('setting.sidePlayQueueStyle', { postProcess: 'sentenceCase' }), }, { control: ( { setSettings({ general: { ...settings, showQueueDrawerButton: e.currentTarget.checked, }, }); }} /> ), description: t('setting.sidePlayQueueStyle', { context: 'description', postProcess: 'sentenceCase', }), isHidden: false, title: t('setting.floatingQueueArea', { postProcess: 'sentenceCase' }), }, { control: ( { setSettings({ general: { ...settings, volumeWheelStep: e, }, }); }} w={100} /> ), description: t('setting.volumeWheelStep', { context: 'description', postProcess: 'sentenceCase', }), isHidden: false, title: t('setting.volumeWheelStep', { postProcess: 'sentenceCase' }), }, { control: ( { setSettings({ general: { ...settings, volumeWidth: Number(e.currentTarget.value) }, }); }} placeholder="0" rightSection="px" width={75} /> ), description: t('setting.volumeWidth', { context: 'description', postProcess: 'sentenceCase', }), isHidden: false, title: t('setting.volumeWidth', { postProcess: 'sentenceCase' }), }, { control: ( { localSettings?.set('resume', e.target.checked); setSettings({ general: { ...settings, resume: e.currentTarget.checked, }, }); }} /> ), description: t('setting.savePlayQueue', { context: 'description', postProcess: 'sentenceCase', }), isHidden: !isElectron(), title: t('setting.savePlayQueue', { postProcess: 'sentenceCase' }), }, { control: ( { setSettings({ general: { ...settings, externalLinks: e.currentTarget.checked, }, }); }} /> ), description: t('setting.externalLinks', { context: 'description', postProcess: 'sentenceCase', }), title: t('setting.externalLinks', { postProcess: 'sentenceCase' }), }, { control: ( { setSettings({ general: { ...settings, lastFM: e.currentTarget.checked, }, }); }} /> ), description: t('setting.lastfm', { context: 'description', postProcess: 'sentenceCase', }), isHidden: !settings.externalLinks, title: t('setting.lastfm', { postProcess: 'sentenceCase' }), }, { control: ( { setSettings({ general: { ...settings, musicBrainz: e.currentTarget.checked, }, }); }} /> ), description: t('setting.musicbrainz', { context: 'description', postProcess: 'sentenceCase', }), isHidden: !settings.externalLinks, title: t('setting.musicbrainz', { postProcess: 'sentenceCase' }), }, { control: (