Album.js 1.7 KB

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