import clsx from 'clsx'; import { AnimatePresence, LayoutGroup, motion } from 'motion/react'; import React, { MouseEvent } from 'react'; import { useTranslation } from 'react-i18next'; import { generatePath, Link } from 'react-router'; import styles from './mobile-playerbar.module.css'; import { ContextMenuController } from '/@/renderer/features/context-menu/context-menu-controller'; import { MainPlayButton, PlayerButton } from '/@/renderer/features/player/components/player-button'; import { usePlayer } from '/@/renderer/features/player/context/player-context'; import { AppRoute } from '/@/renderer/router/routes'; import { useFullScreenPlayerStore, useFullScreenPlayerStoreActions, usePlayerSong, usePlayerStatus, useSetFullScreenPlayerStore, } from '/@/renderer/store'; import { ActionIcon } from '/@/shared/components/action-icon/action-icon'; import { Group } from '/@/shared/components/group/group'; import { Icon } from '/@/shared/components/icon/icon'; import { Image } from '/@/shared/components/image/image'; import { Separator } from '/@/shared/components/separator/separator'; import { Text } from '/@/shared/components/text/text'; import { Tooltip } from '/@/shared/components/tooltip/tooltip'; import { PlaybackSelectors } from '/@/shared/constants/playback-selectors'; import { LibraryItem } from '/@/shared/types/domain-types'; import { PlayerStatus } from '/@/shared/types/types'; export const MobilePlayerbar = () => { const { t } = useTranslation(); const { expanded: isFullScreenPlayerExpanded } = useFullScreenPlayerStore(); const setFullScreenPlayerStore = useSetFullScreenPlayerStore(); const { setStore } = useFullScreenPlayerStoreActions(); const currentSong = usePlayerSong(); const status = usePlayerStatus(); const { mediaNext, mediaPrevious, mediaTogglePlayPause } = usePlayer(); const title = currentSong?.name; const artists = currentSong?.artists; const isSongDefined = Boolean(currentSong?.id); const handleToggleFullScreenPlayer = (e?: KeyboardEvent | MouseEvent) => { e?.stopPropagation(); // Set active tab to player when opening fullscreen player setStore({ activeTab: 'player' }); setFullScreenPlayerStore({ expanded: !isFullScreenPlayerExpanded }); }; const handleToggleContextMenu = (e: MouseEvent) => { e.preventDefault(); e.stopPropagation(); if (!currentSong) { return; } ContextMenuController.call({ cmd: { items: [currentSong], type: LibraryItem.SONG }, event: e as MouseEvent, }); }; const stopPropagation = (e?: MouseEvent) => e?.stopPropagation(); return (
{currentSong?.imageUrl && (
)}
{title || '—'} {isSongDefined && ( )}
{artists?.map((artist, index) => ( {index > 0 && } {artist.name || '—'} ))}
{currentSong?.album || '—'}
} onClick={(e) => { e.stopPropagation(); mediaPrevious(); }} tooltip={{ label: t('player.previous', { postProcess: 'sentenceCase' }), openDelay: 0, }} variant="tertiary" /> { e.stopPropagation(); mediaTogglePlayPause(); }} /> } onClick={(e) => { e.stopPropagation(); mediaNext(); }} tooltip={{ label: t('player.next', { postProcess: 'sentenceCase' }), openDelay: 0, }} variant="tertiary" />
); };