Library.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import React, { useState, useEffect, Component } from "react";
  2. import { Link } from "react-router-dom";
  3. import { Provider, connect } from "react-redux";
  4. import { createStore, combineReducers, applyMiddleware } from "redux";
  5. import { render } from "react-dom";
  6. import { Spin } from "antd";
  7. import Header from "./Header";
  8. import Footer from "./Footer";
  9. import App from "../App";
  10. import Player from "./Player";
  11. import getGQL from "../utils/getGQL";
  12. import { getTracks, setCurrentTrack } from "../actions/playerActions";
  13. import "../styles/library.css";
  14. const Lib = ({
  15. tracks,
  16. history,
  17. getTracks,
  18. login,
  19. setCurrentTrack,
  20. currentTrack,
  21. // state
  22. }) => {
  23. useEffect(() => {
  24. getTracks && getTracks();
  25. }, []);
  26. const Track = ({ track, highlighted, }) => {
  27. const { originalFileName, url, _id, trackIndex } = track;
  28. return (
  29. <li
  30. className={highlighted ? "highlighted" : null}
  31. onClick={(e) => {
  32. // debugger
  33. setCurrentTrack(trackIndex)}
  34. }
  35. >
  36. <p>
  37. <span>{originalFileName}</span>
  38. <span onClick={() => console.log("TODO action")}>+</span>
  39. </p>
  40. </li>
  41. );
  42. };
  43. const TrackList = ({ playlist, currentTrack }) => {
  44. console.log("playlist in library: ", playlist);
  45. return (
  46. <div className="main">
  47. <div className="trackList">
  48. <ul>
  49. {/* trackIndex это порядковый номер объекта в массиве */}
  50. { playlist.map((track, trackIndex) => (
  51. (track.originalFileName && track.url && track._id !==null)?
  52. <Track
  53. key={trackIndex}
  54. track={{ ...track, trackIndex }}
  55. highlighted={trackIndex === currentTrack}
  56. /> : ''
  57. // console.log(track)
  58. ))}
  59. </ul>
  60. <Player playlist={tracks} />
  61. </div>
  62. </div>
  63. );
  64. };
  65. return (
  66. <div className="wrapper">
  67. <Header login={login}/>
  68. {!tracks.length && (
  69. <div className="container">
  70. <Spin size="large" />
  71. </div>
  72. )}
  73. <TrackList playlist={tracks} currentTrack={currentTrack} />
  74. <Footer />
  75. </div>
  76. );
  77. };
  78. const mapStateToProps = (state) => ({
  79. tracks: state.player.tracks,
  80. currentTrack: state.player.currentTrack,
  81. login: (state.auth.data.data && state.auth.data.data.sub.login) || "",
  82. });
  83. const mapDispatchToProps = (dispatch) => ({
  84. getTracks: ()=>setTimeout(() => dispatch(getTracks()), 2000),
  85. setCurrentTrack: (trackIndex) => dispatch(setCurrentTrack(trackIndex)),
  86. });
  87. // export default connect(mapStateToProps, mapDispatchToProps)(Main);
  88. export default connect(mapStateToProps, mapDispatchToProps)(Lib);