my-tracks.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import {connect} from "react-redux";
  2. import {CTrack} from "../track";
  3. import {CPlaylistDropZone} from "../tools";
  4. import {SortableContainer, SortableElement} from 'react-sortable-hoc';
  5. import {arrayMoveImmutable} from 'array-move';
  6. import {useState,useEffect} from "react";
  7. import {CPreloaded} from "../preloader";
  8. const SortableItem = SortableElement(CTrack);
  9. const MyTracks = ( {children}) =>
  10. <div className='Category'>
  11. {children}
  12. </div>
  13. const SortableList = SortableContainer(MyTracks)
  14. // const CMyTracks = connect(state => ({playlist: state.promise.playlistById?.payload || []}))(MyTracks)
  15. export const MyPlaylistTracks = ({match:{params:{_id}}}) =>
  16. <>
  17. <CPlaylistDropZone >
  18. <CPreloaded promiseName='playlistById'>
  19. <CSortableComponent />
  20. </CPreloaded>
  21. </CPlaylistDropZone >
  22. </>
  23. function SortableComponent({tracks=[]}) {
  24. const [state, setState] = useState(tracks)
  25. useEffect(() => {
  26. setState (tracks)
  27. },[tracks])
  28. const onSortEnd = ({oldIndex, newIndex}) => {
  29. setState((state) => (arrayMoveImmutable(state, oldIndex, newIndex)));
  30. };
  31. return <SortableList tracks={tracks} onSortEnd={onSortEnd}>
  32. {state.map((value, index) => <SortableItem key={`item-${value}`} index={index} track={value}/>)}
  33. {/*{console.log(state)}*/}
  34. </SortableList>;
  35. }
  36. const CSortableComponent = connect(state => ({tracks: state.promise.playlistById?.payload?.tracks || []}))(SortableComponent)