import { useTranslation } from 'react-i18next'; import styles from './center-controls.module.css'; import { MainPlayButton, PlayerButton } from '/@/renderer/features/player/components/player-button'; import { PlayerbarSlider } from '/@/renderer/features/player/components/playerbar-slider'; import { openShuffleAllModal } from '/@/renderer/features/player/components/shuffle-all-modal'; import { usePlayer } from '/@/renderer/features/player/context/player-context'; import { usePlayerRepeat, usePlayerShuffle, usePlayerSong, usePlayerStatus, useSettingsStore, } from '/@/renderer/store'; import { Icon } from '/@/shared/components/icon/icon'; import { PlayerRepeat, PlayerShuffle, PlayerStatus } from '/@/shared/types/types'; export const CenterControls = () => { const skip = useSettingsStore((state) => state.general.skipButtons); return ( <>
{skip?.enabled && } {skip?.enabled && }
); }; const StopButton = () => { const { t } = useTranslation(); const buttonSize = useSettingsStore((state) => state.general.buttonSize); const { mediaStop } = usePlayer(); return ( } onClick={mediaStop} tooltip={{ label: t('player.stop', { postProcess: 'sentenceCase' }), openDelay: 0, }} variant="tertiary" /> ); }; const ShuffleButton = () => { const { t } = useTranslation(); const buttonSize = useSettingsStore((state) => state.general.buttonSize); const shuffle = usePlayerShuffle(); const { toggleShuffle } = usePlayer(); return ( } isActive={shuffle !== PlayerShuffle.NONE} onClick={toggleShuffle} tooltip={{ label: shuffle === PlayerShuffle.NONE ? t('player.shuffle', { context: 'off', postProcess: 'sentenceCase', }) : t('player.shuffle', { postProcess: 'sentenceCase' }), openDelay: 0, }} variant="tertiary" /> ); }; const PreviousButton = () => { const { t } = useTranslation(); const buttonSize = useSettingsStore((state) => state.general.buttonSize); const { mediaPrevious } = usePlayer(); return ( } onClick={mediaPrevious} tooltip={{ label: t('player.previous', { postProcess: 'sentenceCase' }), openDelay: 0, }} variant="secondary" /> ); }; const SkipBackwardButton = () => { const { t } = useTranslation(); const buttonSize = useSettingsStore((state) => state.general.buttonSize); const { mediaSkipBackward } = usePlayer(); return ( } onClick={mediaSkipBackward} tooltip={{ label: t('player.skip', { context: 'back', postProcess: 'sentenceCase', }), openDelay: 0, }} variant="secondary" /> ); }; const CenterPlayButton = () => { const currentSong = usePlayerSong(); const status = usePlayerStatus(); const { mediaTogglePlayPause } = usePlayer(); return ( ); }; const SkipForwardButton = () => { const { t } = useTranslation(); const buttonSize = useSettingsStore((state) => state.general.buttonSize); const { mediaSkipForward } = usePlayer(); return ( } onClick={mediaSkipForward} tooltip={{ label: t('player.skip', { context: 'forward', postProcess: 'sentenceCase', }), openDelay: 0, }} variant="secondary" /> ); }; const NextButton = () => { const { t } = useTranslation(); const buttonSize = useSettingsStore((state) => state.general.buttonSize); const { mediaNext } = usePlayer(); return ( } onClick={mediaNext} tooltip={{ label: t('player.next', { postProcess: 'sentenceCase' }), openDelay: 0, }} variant="secondary" /> ); }; const RepeatButton = () => { const { t } = useTranslation(); const buttonSize = useSettingsStore((state) => state.general.buttonSize); const repeat = usePlayerRepeat(); const { toggleRepeat } = usePlayer(); return ( ) : ( ) } isActive={repeat !== PlayerRepeat.NONE} onClick={toggleRepeat} tooltip={{ label: `${ repeat === PlayerRepeat.NONE ? t('player.repeat', { context: 'off', postProcess: 'sentenceCase', }) : repeat === PlayerRepeat.ALL ? t('player.repeat', { context: 'all', postProcess: 'sentenceCase', }) : t('player.repeat', { context: 'one', postProcess: 'sentenceCase', }) }`, openDelay: 0, }} variant="tertiary" /> ); }; const ShuffleAllButton = () => { const { t } = useTranslation(); const buttonSize = useSettingsStore((state) => state.general.buttonSize); return ( } onClick={() => openShuffleAllModal()} tooltip={{ label: t('form.shuffleAll.title', { postProcess: 'sentenceCase' }), openDelay: 0, }} variant="tertiary" /> ); };