import classNames from 'classnames'; import React, { useState, useRef, useEffect, ReactNode } from 'react'; import { FaPlay, FaVolumeUp, FaVolumeOff } from 'react-icons/fa'; import { getDisplayTitle, PlaylistItem } from '../api/player'; export enum PlayState { NotPlaying, Playing, Paused, } export interface SongRowProps { song: PlaylistItem; auxControl?: ReactNode; playState: PlayState; onDelete: () => void; onPlay: () => void; } const SongRow: React.FC = ({ song, auxControl, playState, onDelete, onPlay }) => { const [showDeleteConfirm, setShowDeleteConfirm] = useState(false); const buttonRef = useRef(null); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (buttonRef.current && !buttonRef.current.contains(event.target as Node)) { setShowDeleteConfirm(false); } }; if (showDeleteConfirm) { document.addEventListener('click', handleClickOutside); } return () => { document.removeEventListener('click', handleClickOutside); }; }, [showDeleteConfirm]); const displayTitle = getDisplayTitle(song); return (
{ displayTitle ? (
{displayTitle}
{song.filename}
) : (
{song.filename}
) }
{auxControl}
); }; export default SongRow;