|
@@ -1,6 +1,6 @@
|
|
|
import * as action from '../../actions'
|
|
|
|
|
|
-import { useEffect} from 'react';
|
|
|
+import { useEffect, useState} from 'react';
|
|
|
import { connect } from 'react-redux';
|
|
|
import { useDropzone } from 'react-dropzone'
|
|
|
import React, {useCallback} from 'react'
|
|
@@ -20,28 +20,56 @@ const Track = ({track:{url, originalFileName, id3:{title, artist, album}}}) =>
|
|
|
<p>{url}</p>
|
|
|
</div>
|
|
|
</li>
|
|
|
-
|
|
|
-const Playlist = ({playlist}) =>
|
|
|
+//----------------------------------------------------
|
|
|
+const Playlist = ({playlist}) => {
|
|
|
+ return(
|
|
|
<>
|
|
|
<h2>{playlist[0]?.name || 'Playlist'}</h2>
|
|
|
<ul>
|
|
|
{(playlist[0]?.tracks || []).map(track => <Track track={track}/>)}
|
|
|
</ul>
|
|
|
</>
|
|
|
-
|
|
|
+ )
|
|
|
+}
|
|
|
export const PlaylistConnect = connect(state => ({playlist: state.promise.playlistTracks?.payload || []}))(Playlist)
|
|
|
|
|
|
+const PlaylistTrackDropzone = ({playlist, uploadTrack}) => {
|
|
|
+ let [playlistId, setPlaylistId] = useState()
|
|
|
+
|
|
|
+ useEffect(()=> {
|
|
|
+ setPlaylistId(playlist[0]?._id)
|
|
|
+ }, [playlist])
|
|
|
+
|
|
|
+ const onDrop = useCallback(acceptedFiles => {
|
|
|
+ uploadTrack(acceptedFiles[0], playlistId)
|
|
|
+ }, [uploadTrack, playlistId])
|
|
|
+ const {getRootProps, getInputProps, isDragActive} = useDropzone({onDrop})
|
|
|
+
|
|
|
+ return (
|
|
|
+ <div {...getRootProps()} style={isDragActive? {border:'1px solid mediumseagreen'} : {border:'1px solid black'}}>
|
|
|
+ {isDragActive? <small>drag here...</small> : <small>to upload drag track here</small>}
|
|
|
+ <PlaylistConnect />
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+}
|
|
|
+const PlaylistTrackDropzoneConnect = connect(
|
|
|
+ state => ({playlist: state.promise.playlistTracks?.payload || []}),
|
|
|
+ {uploadTrack: action.actionUploadUserTrack}
|
|
|
+ )(PlaylistTrackDropzone)
|
|
|
+
|
|
|
const PlaylistPage = ({match: {params: {_id}}, getTracks}) => {
|
|
|
useEffect(() => { getTracks(_id.substring(1)) }, [_id, getTracks])
|
|
|
- return(<PlaylistConnect />)
|
|
|
+ //return(<PlaylistConnect />)
|
|
|
+ return(<PlaylistTrackDropzoneConnect />)
|
|
|
}
|
|
|
export const PlaylistPageConnect = connect(null, {getTracks: action.actionGetPlaylistById})(PlaylistPage)
|
|
|
+//----------------------------------------------------
|
|
|
|
|
|
const UserTracks = ({user, tracks}) =>
|
|
|
<>
|
|
|
<h2>{ user.login || 'My' } tracks:</h2>
|
|
|
<ul>
|
|
|
- {(tracks || []).map(track => <Track track={track}/>)}
|
|
|
+ {(tracks || []).map(track => <Track track={track}/>).reverse()}
|
|
|
</ul>
|
|
|
</>
|
|
|
|
|
@@ -51,23 +79,24 @@ const UserTracksConnect = connect(state => ({
|
|
|
})
|
|
|
)(UserTracks)
|
|
|
|
|
|
-const UserTracksPage = ({match: {params: {_id}}, getUserTracks}) => {
|
|
|
- useEffect(() => { getUserTracks() },[_id, getUserTracks])
|
|
|
- return(<UserTracksConnect/>)
|
|
|
-}
|
|
|
-export const UserTracksPageConnect = connect(null, {getUserTracks: action.actionGetUserTracks})(UserTracksPage)
|
|
|
-
|
|
|
const UserTracksDropzone = ({onLoad}) => {
|
|
|
const onDrop = useCallback(acceptedFiles => {
|
|
|
onLoad(acceptedFiles[0])
|
|
|
- }, [])
|
|
|
+ }, [onLoad])
|
|
|
const {getRootProps, getInputProps, isDragActive} = useDropzone({onDrop})
|
|
|
|
|
|
return (
|
|
|
- <div {...getRootProps()}>
|
|
|
- <input {...getInputProps()} />
|
|
|
- { isDragActive ? <p>Drop the files here ...</p> : <UserTracksPageConnect /> }
|
|
|
- </div>
|
|
|
+ <div {...getRootProps()} style={isDragActive? {border:'1px solid mediumseagreen'} : {border:'1px solid black'}}>
|
|
|
+ {isDragActive? <small>drag here...</small> : <small>to upload drag track here</small>}
|
|
|
+ <UserTracksConnect />
|
|
|
+ </div>
|
|
|
)
|
|
|
}
|
|
|
-export const UserTrackDropzoneConnect = connect(null, {onLoad: action.actionLoadFile})(UserTracksDropzone)
|
|
|
+export const UserTrackDropzoneConnect = connect(null, {onLoad: action.actionUploadUserTrack})(UserTracksDropzone)
|
|
|
+
|
|
|
+const UserTracksPage = ({match: {params: {_id}}, getUserTracks}) => {
|
|
|
+ useEffect(() => { getUserTracks() },[_id, getUserTracks])
|
|
|
+ //return(<UserTracksConnect/>)
|
|
|
+ return(<UserTrackDropzoneConnect/>)
|
|
|
+}
|
|
|
+export const UserTracksPageConnect = connect(null, {getUserTracks: action.actionGetUserTracks})(UserTracksPage)
|