import React, { useCallback, VFC } from 'react'; import { Icon } from '~/components/common/Icon'; import { PlayerState } from '~/constants/player'; import { IFile } from '~/types'; import { PlayerProgress } from '~/types/player'; import { path } from '~/utils/ramda'; import styles from './styles.module.scss'; interface Props { progress: PlayerProgress; status: PlayerState; file?: IFile; playerPlay: () => void; playerPause: () => void; playerSeek: (pos: number) => void; playerStop: () => void; } const PlayerBar: VFC = ({ status, playerPlay, playerPause, playerSeek, playerStop, progress, file, }) => { const onClick = useCallback(() => { if (status === PlayerState.PLAYING) return playerPause(); return playerPlay(); }, [playerPlay, playerPause, status]); const onSeek = useCallback( (event) => { event.stopPropagation(); const { clientX, target } = event; const { left, width } = target.getBoundingClientRect(); playerSeek(((clientX - left) / width) * 100); }, [playerSeek], ); if (status === PlayerState.UNSET) return null; const metadata: IFile['metadata'] = path(['metadata'], file); const title = metadata && (metadata.title || [metadata.id3artist, metadata.id3title].filter((el) => !!el).join(' - ')); return (
{status === PlayerState.PLAYING ? ( ) : ( )}
{title}
); }; export { PlayerBar };