Album.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import logo from './logo.svg';
  2. import { Link } from 'react-router5'
  3. import {formatDuration, slugify} from './utils';
  4. import {getTracks, request} from './Api';
  5. export function fetchTracks(album_id, type, dispatch) {
  6. const {url, options} = getTracks(album_id);
  7. request(url, options)
  8. .then(payload => dispatch({type, payload: {tracks: payload}}))
  9. .catch(e => console.log(e))
  10. }
  11. export default function Album({album, showArtist, showType, dispatch}) {
  12. const artist = slugify(album.artist);
  13. return (
  14. <div>
  15. {showArtist && (<h3><Link routeName="artist" routeParams={{artist}}>{album.artist}</Link></h3>)}
  16. {showType && (<h4>{album.type}</h4>)}
  17. <div className="Album">
  18. <img src={album.cover || logo} alt={album.album} />
  19. <span className="Album-year">{album.year}</span>
  20. <span className="Album-country">{album.country}</span>
  21. <span className="Album-tracks">{album.track_count}&nbsp;@&nbsp;{formatDuration(album.total_duration)}</span>
  22. <span className="Album-title"><Link routeName='album' routeParams={{artist, album: slugify(album.album)}}>{album.album}</Link></span>
  23. <span className="Album-publisher">{album.publisher}</span>
  24. <span className="Album-genre">{album.genre}</span>
  25. <div className="Album-actions">
  26. <button onClick={(e)=>fetchTracks(album.id, 'ALBUM_PLAY', dispatch)}>
  27. <svg viewBox="0 0 24 24"><g><path d="M8 5v14l11-7z"/></g></svg>
  28. </button>
  29. <button onClick={(e)=>fetchTracks(album.id, 'ALBUM_ENQUEUE', dispatch)}>
  30. <svg viewBox="0 0 24 24"><g><path d="M10 6h4v4h4v4h-4v4h-4v-4h-4v-4h4z"/></g></svg>
  31. </button>
  32. </div>
  33. </div>
  34. </div>
  35. )
  36. }