|
@@ -7,30 +7,39 @@ import { sortableContainer, sortableElement } from 'react-sortable-hoc';
|
|
import { arrayMoveImmutable } from 'array-move';
|
|
import { arrayMoveImmutable } from 'array-move';
|
|
|
|
|
|
|
|
|
|
-const Track = ({ track, playlist, player, setTrack, playTrack, pauseTrack }) => {
|
|
|
|
- let [_player, setPlayer] = useState(player)
|
|
|
|
|
|
+const Track = ({ track, playlist, player, setTrack, playTrack, pauseTrack, setPlaylist, setIndex }) => {
|
|
|
|
+ let [_player, setPlayer] = useState()
|
|
let [isPlay, setPlay] = useState(true)
|
|
let [isPlay, setPlay] = useState(true)
|
|
|
|
+ //let [_playlist, _setPlaylist] = useState(playlist)
|
|
|
|
|
|
|
|
+ useEffect(() => setPlayer(player), [player])
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
- setPlayer(player)
|
|
|
|
- }, [player])
|
|
|
|
|
|
+ if(playlist?._id === player?.playlist?._id) {
|
|
|
|
+ console.log(playlist?._id, player?.playlist?._id)
|
|
|
|
+ if(_player?.track && _player?.playlist) setIndex(_player?.playlist?.indexOf(_player?.track))
|
|
|
|
+ setPlaylist(playlist)
|
|
|
|
+ console.log('index', _player?.playlistIndex)
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ console.log('changed', playlist)
|
|
|
|
+ }, [playlist, setPlaylist, setIndex])
|
|
|
|
|
|
return (
|
|
return (
|
|
<li style={{ border: '1px solid black', display: 'flex', alignItems: 'center' }}>
|
|
<li style={{ border: '1px solid black', display: 'flex', alignItems: 'center' }}>
|
|
- <div style={{ marginRight: '2%', padding:'2%' }}>
|
|
|
|
-
|
|
|
|
|
|
+ <div style={{ marginRight: '2%', padding: '2%' }}>
|
|
|
|
+
|
|
{isPlay && _player?.isPlaying && _player.track?._id === track._id ?
|
|
{isPlay && _player?.isPlaying && _player.track?._id === track._id ?
|
|
- <button style={{fontSize:'3vh'}} onClick={()=> {pauseTrack(); setPlay(false)}}>{`\u23F8`}</button> :
|
|
|
|
- <button
|
|
|
|
- style={{fontSize:'3vh'}}
|
|
|
|
- onClick={()=> {
|
|
|
|
- if(track?._id !== _player?.track?._id) setTrack(track, playlist)
|
|
|
|
|
|
+ <button style={{ fontSize: '3vh' }} onClick={() => { pauseTrack(); setPlay(false) }}>{`\u23F8`}</button> :
|
|
|
|
+ <button
|
|
|
|
+ style={{ fontSize: '3vh' }}
|
|
|
|
+ onClick={() => {
|
|
|
|
+ if (track?._id !== _player?.track?._id) setTrack(track, playlist)
|
|
playTrack()
|
|
playTrack()
|
|
setPlay(true)
|
|
setPlay(true)
|
|
}}
|
|
}}
|
|
>{`\u23F5`}</button>
|
|
>{`\u23F5`}</button>
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
</div>
|
|
</div>
|
|
<div style={{ textAlign: 'left' }}>
|
|
<div style={{ textAlign: 'left' }}>
|
|
<h5>{track.id3.artist || 'Artist: unknown'}</h5>
|
|
<h5>{track.id3.artist || 'Artist: unknown'}</h5>
|
|
@@ -43,13 +52,15 @@ const Track = ({ track, playlist, player, setTrack, playTrack, pauseTrack }) =>
|
|
const TrackConnect = connect(
|
|
const TrackConnect = connect(
|
|
state => ({
|
|
state => ({
|
|
player: state.player || {},
|
|
player: state.player || {},
|
|
- //playlist: state.playTrack?.payload[0] || {}
|
|
|
|
- }),
|
|
|
|
|
|
+ }),
|
|
{
|
|
{
|
|
setTrack: action.setTrack,
|
|
setTrack: action.setTrack,
|
|
pauseTrack: action.pauseTrack,
|
|
pauseTrack: action.pauseTrack,
|
|
- playTrack: action.playTrack
|
|
|
|
- })(Track)
|
|
|
|
|
|
+ playTrack: action.playTrack,
|
|
|
|
+ setPlaylist: action.setPlaylist,
|
|
|
|
+ setIndex: action.setIndex
|
|
|
|
+ }
|
|
|
|
+)(Track)
|
|
|
|
|
|
const SortableItem = sortableElement(TrackConnect);
|
|
const SortableItem = sortableElement(TrackConnect);
|
|
const SortableContainer = sortableContainer(({ children }) => { return <ul>{children}</ul> });
|
|
const SortableContainer = sortableContainer(({ children }) => { return <ul>{children}</ul> });
|
|
@@ -67,7 +78,7 @@ const Playlist = ({ playlist, updPlaylist }) => {
|
|
<>
|
|
<>
|
|
<h2>{playlist[0]?.name || 'Playlist'}</h2>
|
|
<h2>{playlist[0]?.name || 'Playlist'}</h2>
|
|
<SortableContainer onSortEnd={onSortEnd}>
|
|
<SortableContainer onSortEnd={onSortEnd}>
|
|
- {(_tracks || []).map((track, index) => <SortableItem index={index} track={track} playlist={playlist[0]?.tracks}/>)}
|
|
|
|
|
|
+ {(_tracks || []).map((track, index) => <SortableItem index={index} track={track} playlist={playlist[0]?.tracks} />)}
|
|
</SortableContainer>
|
|
</SortableContainer>
|
|
</>
|
|
</>
|
|
)
|
|
)
|
|
@@ -89,9 +100,9 @@ const PlaylistTrackDropzone = ({ playlist, uploadTrack }) => {
|
|
}, [uploadTrack, playlistId])
|
|
}, [uploadTrack, playlistId])
|
|
const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop })
|
|
const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop })
|
|
return (
|
|
return (
|
|
- <div
|
|
|
|
- {...getRootProps()}
|
|
|
|
- style={{height:'fit-content', border: `${isDragActive ? '1px solid mediumseagreen' : '1px solid black'}`}}
|
|
|
|
|
|
+ <div
|
|
|
|
+ {...getRootProps()}
|
|
|
|
+ style={{ height: 'fit-content', border: `${isDragActive ? '1px solid mediumseagreen' : '1px solid black'}` }}
|
|
>
|
|
>
|
|
{isDragActive ? <small>...drag here</small> : <small>to upload drag track here</small>}
|
|
{isDragActive ? <small>...drag here</small> : <small>to upload drag track here</small>}
|
|
<PlaylistConnect />
|
|
<PlaylistConnect />
|
|
@@ -115,11 +126,10 @@ const UserTracks = ({ user, tracks }) => {
|
|
return (
|
|
return (
|
|
<>
|
|
<>
|
|
<h2>{user.login || 'My'} tracks:</h2>
|
|
<h2>{user.login || 'My'} tracks:</h2>
|
|
- <ul>{(tracksRev || []).map(track => <TrackConnect track={track} playlist={tracksRev}/>)}</ul>
|
|
|
|
|
|
+ <ul>{(tracksRev || []).map(track => <TrackConnect track={track} playlist={tracksRev} />)}</ul>
|
|
</>
|
|
</>
|
|
)
|
|
)
|
|
}
|
|
}
|
|
-
|
|
|
|
const UserTracksConnect = connect(state => ({
|
|
const UserTracksConnect = connect(state => ({
|
|
tracks: state.promise.userTracks?.payload || [],
|
|
tracks: state.promise.userTracks?.payload || [],
|
|
user: state.promise.userData?.payload || {}
|
|
user: state.promise.userData?.payload || {}
|
|
@@ -132,9 +142,9 @@ const UserTracksDropzone = ({ onLoad }) => {
|
|
}, [onLoad])
|
|
}, [onLoad])
|
|
const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop })
|
|
const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop })
|
|
return (
|
|
return (
|
|
- <div
|
|
|
|
- {...getRootProps()}
|
|
|
|
- style={{ height:'fit-content', border: `${isDragActive ? '1px solid mediumseagreen' : '1px solid black'}`}}
|
|
|
|
|
|
+ <div
|
|
|
|
+ {...getRootProps()}
|
|
|
|
+ style={{ height: 'fit-content', border: `${isDragActive ? '1px solid mediumseagreen' : '1px solid black'}` }}
|
|
>
|
|
>
|
|
{isDragActive ? <small>...drag here</small> : <small>to upload drag track here</small>}
|
|
{isDragActive ? <small>...drag here</small> : <small>to upload drag track here</small>}
|
|
<UserTracksConnect />
|
|
<UserTracksConnect />
|