SongItem.jsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import React, { Component } from "react";
  2. import PropTypes from "prop-types";
  3. import { connect } from "react-redux";
  4. import io from "io";
  5. @connect(state => ({
  6. station: {
  7. stationId: state.station.info.get("id"),
  8. },
  9. }))
  10. export default class SongItem extends Component {
  11. constructor(props) {
  12. super(props);
  13. }
  14. deleteSong = (songId) => {
  15. io.getSocket((socket) => {
  16. socket.emit("stations.removeFromQueue", this.props.station.stationId, songId, (data) => {
  17. if (data.status === "success") this.messages.clearAddSuccess("Successfully removed song.");
  18. else this.messages.clearAddError("Failed to remove song.", data.message);
  19. });
  20. });
  21. };
  22. isOwner = () => {
  23. if (this.props.loggedIn) {
  24. if (this.props.user.role === "admin") return true;
  25. if (this.props.user.userId === this.props.station.owner) return true;
  26. }
  27. return false;
  28. };
  29. render() {
  30. const { song } = this.props;
  31. const showRequestedBy = (song.requestedByUsername && song.requestedByUsername !== "Unknown");
  32. const showDelete = (this.isOwner());
  33. return (
  34. <li>
  35. <div className="left">
  36. <img src={ song.thumbnail } onError={function(e) {e.target.src="/assets/images/notes.png"}}/>
  37. </div>
  38. <div className="right">
  39. <span className="duration">{ song.duration }</span>
  40. <p className="title">{ song.title }</p>
  41. <span className="title-artists-spacing"/>
  42. <p className="artists">{ song.artists.join(", ") }</p>
  43. {
  44. (showRequestedBy) ?
  45. <span>
  46. <span>Requested by: </span>
  47. <a href={`/u/${ song.requestedByUsername }`}>{ song.requestedByUsername }</a>
  48. </span> : null
  49. }
  50. {
  51. (showDelete)
  52. ? <i onClick={ () => { this.deleteSong(song.songId) } }>Delete</i>
  53. : null
  54. }
  55. </div>
  56. </li>
  57. );
  58. }
  59. }