player.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import play from '../play.svg'
  2. import pause from '../pause.svg'
  3. import next from '../next.svg'
  4. import prev from '../prev.svg'
  5. import {connect} from "react-redux";
  6. import {actionTrackPlay, actionTrackStop,actionTrackVolume,actionTrackCurrentTime,actionNextTrack,actionPreviousTrack} from "../reducers";
  7. import {useEffect, useState} from "react";
  8. export const Player = ({player:{token,volume,duration=0,currentTime=0,isPlaying,playlist={},playlistIndex=0},
  9. trackPlay, trackStop,trackVolume,trackCurrentTime,trackNext,trackPrevious}) => {
  10. let name = playlist[playlistIndex]?.originalFileName || ''
  11. let minutes = Math.floor(duration / 60);
  12. let seconds = Math.floor(parseInt((duration % 60) * 100) / 100);
  13. let minutesLeft = Math.floor(currentTime / 60);
  14. let secondsLeft = Math.floor(parseInt((currentTime % 60) * 100) / 100);
  15. return (
  16. <div className='Player'>
  17. <div className='player-nav'>
  18. <div className='player-current-time'>
  19. <span className='track-timer'>{minutesLeft || 0}:{(secondsLeft < 10?"0"+secondsLeft : secondsLeft) || "00"}</span>
  20. <input className='currentTime'
  21. type="range"
  22. min={0}
  23. step={0.1}
  24. max={duration ? duration : `${duration}`}
  25. onChange={(e) => trackCurrentTime(e.target.value)}
  26. value={currentTime}/>
  27. <span className='track-timer'>{minutes || 0}:{(seconds < 10?"0"+seconds : seconds) || "00"}</span>
  28. </div>
  29. <div className="vol-buttons">
  30. <div className='player-buttons'>
  31. <button onClick={() => trackPrevious()}><img src={prev} alt='prev'/></button>
  32. {!isPlaying ? ( <button onClick={() => trackPlay()}>
  33. <img src={play} alt='play'/></button>) : ( <button onClick={() => trackStop()}>
  34. <img src={pause} alt='pause'/></button>)}
  35. <button onClick={()=>trackNext()}><img src={next} alt='next'/></button>
  36. </div>
  37. <input className='volume'
  38. type="range"
  39. min={0}
  40. step={0.1}
  41. max={1}
  42. onChange={(e) => trackVolume(e.target.value)}
  43. value={volume}/>
  44. </div>
  45. </div>
  46. <h3>{name || ''}</h3>
  47. </div>
  48. )
  49. }
  50. export const CPlayer = connect(state => ({player: state.player,token: state.auth.token}),
  51. {trackPlay: actionTrackPlay,
  52. trackStop: actionTrackStop,
  53. trackVolume:actionTrackVolume,
  54. trackCurrentTime:actionTrackCurrentTime,
  55. trackNext:actionNextTrack,
  56. trackPrevious:actionPreviousTrack,})(Player)