Queue.js 1.4 KB

1234567891011121314151617181920212223242526272829303132
  1. import { Link } from 'react-router5'
  2. import './Queue.css';
  3. import {slugify, formatDuration} from 'src/utils';
  4. export default function Queue({queue, dispatch}) {
  5. return (
  6. <aside className="Queue">
  7. <h2>Queue</h2>
  8. <table><tbody>
  9. {queue.items.map((track, i) => (
  10. <tr key={i} className={ i === queue.pos ? "Queue-active" : "" }>
  11. <td>{i+1}</td>
  12. <td>{track.title}</td>
  13. <td>{(track.album_artist || track.artist) && <Link routeName="artist" routeParams={{artist: slugify(track.album_artist || track.artist)}}>{track.artist}</Link>}</td>
  14. <td>{track.year}</td>
  15. <td>{track.album && <Link routeName="album" routeParams={{artist: slugify(track.album_artist || track.artist), album: slugify(track.album)}}>{track.album}</Link>}</td>
  16. <td>{track.no}</td>
  17. <td>{track.bit_rate} kbps</td>
  18. <td>{formatDuration(track.duration)}</td>
  19. <td>
  20. <button onClick={() => dispatch({type:'QUEUE_PLAY', payload: i})}>
  21. <svg><use href="#control-play" /></svg>
  22. </button>
  23. <button onClick={() => dispatch({type:'QUEUE_DELETE', payload: i})}>
  24. <svg><use href="#control-del" /></svg>
  25. </button>
  26. </td>
  27. </tr>))}
  28. </tbody></table>
  29. </aside>
  30. );
  31. }