|
@@ -0,0 +1,217 @@
|
|
|
+import React, { useState, useEffect } from "react";
|
|
|
+import {
|
|
|
+ getPlaylist,
|
|
|
+ setTrack,
|
|
|
+ setCurrentTrack,
|
|
|
+ oneTrackFind,
|
|
|
+ actionSetTrack,
|
|
|
+} from "../actions/playerActions";
|
|
|
+// import { getPlaylist } from "../actions/playerActions";
|
|
|
+import { connect } from "react-redux";
|
|
|
+import * as actions from "../constants/actions/index";
|
|
|
+import Player from "./Player";
|
|
|
+import Library from "./Library";
|
|
|
+import store from "../store";
|
|
|
+
|
|
|
+import { Spin } from "antd";
|
|
|
+
|
|
|
+import Header from "./Header";
|
|
|
+import Footer from "./Footer";
|
|
|
+
|
|
|
+import "../styles/library.css";
|
|
|
+import "../styles/playlists.css";
|
|
|
+
|
|
|
+const Playlist = ({
|
|
|
+ actionOneTrackFind,
|
|
|
+ actionSetTrack,
|
|
|
+ state,
|
|
|
+ getPlaylist,
|
|
|
+ setTrack,
|
|
|
+ playlists = [],
|
|
|
+ // track,
|
|
|
+ playlistitem,
|
|
|
+ highlighted,
|
|
|
+ setCurrentTrack,
|
|
|
+ currentTrack,
|
|
|
+ oneTrackFind,
|
|
|
+}) => {
|
|
|
+ const [getTrack, setGetTrack] = useState([]);
|
|
|
+ console.log(state.player.playlists);
|
|
|
+ const Track = ({ track, dispatch }) => {
|
|
|
+ //выводм по треку из плейлиста
|
|
|
+ // const setTrack = ()=>{
|
|
|
+
|
|
|
+ // }
|
|
|
+ // dispatch(setTrack(track));
|
|
|
+ // let artist = "";
|
|
|
+ // let album = "";
|
|
|
+ // if (track.id3) {
|
|
|
+ // if (track.id3.artist && track.id3.album) {
|
|
|
+ // artist = track.id3.artist;
|
|
|
+ // album = track.id3.album;
|
|
|
+ // } else {
|
|
|
+ // }
|
|
|
+ // } else {
|
|
|
+ // }
|
|
|
+ const [addTrack, setAddTrack] = useState()
|
|
|
+ const [prevTrack, setPrevTrack] = useState()
|
|
|
+ return(
|
|
|
+ <>
|
|
|
+ {track.id3 ? (
|
|
|
+ track.id3.artist && track.id3.album ? (
|
|
|
+ <li onClick={(e) =>
|
|
|
+ setAddTrack(track.url)
|
|
|
+ // setCurrentTrack(e.target.id)
|
|
|
+ }>
|
|
|
+ <span>{track.id3.artist}</span>
|
|
|
+ <span>{track.id3.album}</span>
|
|
|
+ </li>
|
|
|
+ ) : (
|
|
|
+ ""
|
|
|
+ )
|
|
|
+ ) : (
|
|
|
+ ""
|
|
|
+ )}
|
|
|
+ {setPrevTrack(addTrack)}
|
|
|
+ {addTrack? <Player turl={addTrack} /> : <Player turl={prevTrack} />}
|
|
|
+ </>
|
|
|
+ );
|
|
|
+ };
|
|
|
+
|
|
|
+ const Tracks = ({
|
|
|
+ playlistsItem,
|
|
|
+ highlighted,
|
|
|
+ actionSetTrack,
|
|
|
+ actionOneTrackFind,
|
|
|
+ }) => {
|
|
|
+ //выводм по плейлисту из общего плейлиста(хранилища)
|
|
|
+ const { _id, name, tracks, trackIndex } = playlistsItem;
|
|
|
+ let arr =
|
|
|
+ playlistsItem && playlistsItem.tracks
|
|
|
+ ? playlistsItem.tracks.filter(
|
|
|
+ (track) => track.id3 && track.id3.artist && track.id3.album
|
|
|
+ )
|
|
|
+ : [];
|
|
|
+ // setGetTrack(arr);
|
|
|
+ // {
|
|
|
+ // if (track.id3 && track.id3.artist && track.id3.album) {
|
|
|
+ // return true; //оставляем в массиве
|
|
|
+ // } else {
|
|
|
+ // return false; //удалаяем из массива
|
|
|
+ // }
|
|
|
+ // })
|
|
|
+ // [];
|
|
|
+ return (
|
|
|
+ <>
|
|
|
+ {arr.length > 0 ? (
|
|
|
+ <li
|
|
|
+ id={_id}
|
|
|
+ onMouseEnter={
|
|
|
+ (e) => {
|
|
|
+ console.dir(e.target);
|
|
|
+ return actionOneTrackFind(e.target.id);
|
|
|
+ }
|
|
|
+ // console.log(e.target.id);
|
|
|
+
|
|
|
+ // return store.dispatch(actionSetTrack(, e.target.firstChild.data, e.target.id))
|
|
|
+ }
|
|
|
+ className={highlighted ? "highlighted" : null}
|
|
|
+ // onClick={(e) => setCurrentTrack(trackIndex)}
|
|
|
+ // onClick={() => {
|
|
|
+ // }}
|
|
|
+ >
|
|
|
+ {name}
|
|
|
+ <ul
|
|
|
+ className="playlist_item"
|
|
|
+ // onMouseOver={(e)=> {
|
|
|
+ // // console.dir(e.target);
|
|
|
+ // return actionOneTrackFind(e.target.parentElement.id)
|
|
|
+ // }}
|
|
|
+ // onMouseOver={(e)=> actionOneTrackFind(e.target.id)
|
|
|
+ >
|
|
|
+ {playlistsItem.tracks
|
|
|
+ ? arr.map((track) => <Track track={track} />)
|
|
|
+ : ""}
|
|
|
+ </ul>
|
|
|
+ </li>
|
|
|
+ ) : (
|
|
|
+ ""
|
|
|
+ )}
|
|
|
+ </>
|
|
|
+ );
|
|
|
+ };
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ getPlaylist && getPlaylist();
|
|
|
+ }, []);
|
|
|
+ console.log(playlists);
|
|
|
+ useEffect(() => {
|
|
|
+ setTrack && setTrack();
|
|
|
+ }, []);
|
|
|
+ return (
|
|
|
+ <div className="wrapper">
|
|
|
+ <Header />
|
|
|
+ {!playlists.length && (
|
|
|
+ <div className="container">
|
|
|
+ <Spin size="large" />
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
+ <div className="main">
|
|
|
+ <div className="trackList">
|
|
|
+ <ul className="playlists">
|
|
|
+ {/* onClick={(item)=>{item.tracks}} */}
|
|
|
+ {playlists.map((playlistsItem) =>
|
|
|
+ playlistsItem &&
|
|
|
+ playlistsItem.tracks &&
|
|
|
+ playlistsItem.tracks.length > 0 ? (
|
|
|
+ <Tracks
|
|
|
+ playlistsItem={playlistsItem}
|
|
|
+ actionOneTrackFind={actionOneTrackFind}
|
|
|
+ />
|
|
|
+ ) : (
|
|
|
+ ""
|
|
|
+ )
|
|
|
+ )}
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ {/* <Player track={getTrack} /> */}
|
|
|
+ {/* <Player playlist={playlist} /> */}
|
|
|
+ {/* <Player playlist={tracks} /> */}
|
|
|
+ <Footer />
|
|
|
+ </div>
|
|
|
+ );
|
|
|
+};
|
|
|
+
|
|
|
+const mapDispatchToProps = (dispatch) => ({
|
|
|
+ getPlaylist: () => dispatch(getPlaylist()),
|
|
|
+ // oneTrackFind: ()=> dispatch(oneTrackFind()),
|
|
|
+ actionOneTrackFind: oneTrackFind,
|
|
|
+
|
|
|
+ // setTrack: () => dispatch(setTrack),
|
|
|
+});
|
|
|
+
|
|
|
+const mapDispatchToProps2 = {
|
|
|
+ getPlaylist: getPlaylist,
|
|
|
+ actionOneTrackFind: oneTrackFind,
|
|
|
+};
|
|
|
+
|
|
|
+const mapStateToProps = (state) => ({
|
|
|
+ playlists: state && state.player && state.player.playlists,
|
|
|
+ state: state,
|
|
|
+ // track: state.player.track,
|
|
|
+ // login: (state.auth.data.data && state.auth.data.data.sub.login) || "",
|
|
|
+});
|
|
|
+
|
|
|
+// const mapStateToProps = (state) => ({
|
|
|
+// tracks: state.player.tracks,
|
|
|
+// currentTrack: state.player.currentTrack,
|
|
|
+// login: (state.auth.data.data && state.auth.data.data.sub.login) || "",
|
|
|
+// });
|
|
|
+
|
|
|
+// const mapDispatchToProps = (dispatch) => ({
|
|
|
+// getPlaylist: () => dispatch(getPlaylist()),
|
|
|
+// setCurrentTrack: (trackIndex) => dispatch(setCurrentTrack(trackIndex)),
|
|
|
+// });
|
|
|
+
|
|
|
+export default connect(mapStateToProps, mapDispatchToProps2)(Playlist);
|