Playerbar.js 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { useEffect, useState } from "react"
  2. import { connect } from "react-redux"
  3. import * as action from "../actions"
  4. const Timestamp = ({time}) =>
  5. <small style={{margin: '0 10px'}}>
  6. {Math.floor((time / 60) % 60) < 10? `0` + Math.floor((time / 60) % 60) : Math.floor((time / 60) % 60)} :
  7. {Math.floor(time % 60) < 10? `0`+ Math.floor(time % 60) : Math.floor(time % 60)}
  8. </small>
  9. const Playerbar = ({ player, playTrack, pauseTrack, switchTrack, setTrackVolume, setCurrentTime }) => {
  10. let [_player, setPlayer] = useState()
  11. useEffect(() => {
  12. setPlayer(player)
  13. }, [player, _player])
  14. return (
  15. <>
  16. {_player?.track ?
  17. <footer style={{display: `${_player?.track ? 'block' : 'none'}`, width: '95%', margin:'0 auto'}}>
  18. <input
  19. style={{width:'100%'}}
  20. type="range" min="0" max={_player?.duration} step="any"
  21. value={_player?.currentTime}
  22. onChange={(e) => setCurrentTime(e.target.value)}
  23. />
  24. <div style={{display:"flex", justifyContent:"space-between", width:'95%', margin:'0 auto'}}>
  25. <Timestamp time={_player?.currentTime} />
  26. {_player ? (_player.track?.id3?.artist && _player.track?.id3?.title ?
  27. <strong>{_player.track?.id3?.artist} - {_player.track?.id3?.title}</strong> :
  28. <strong>{_player.track?.originalFileName}</strong>) : ''}
  29. <Timestamp time={_player?.duration} />
  30. </div>
  31. <div style={{marginTop:'0.5%'}}>
  32. <button
  33. style={{ fontSize: '2vh' }}
  34. onClick={() => switchTrack(false, _player?.playlistIndex, _player?.playlist)}
  35. >
  36. {_player?.playlistIndex === 0 ? `\u23F4` : `\u23EE`}
  37. </button>
  38. {_player?.isPlaying ?
  39. <button style={{ fontSize: '2vh' }} onClick={() => pauseTrack()}>{`\u23F8`}</button> :
  40. <button style={{ fontSize: '2vh' }} onClick={() => playTrack()}>{`\u23F5`}</button>
  41. }
  42. <button
  43. style={{ fontSize: '2vh' }}
  44. onClick={() => switchTrack(true, _player?.playlistIndex, _player?.playlist)}
  45. >
  46. {_player?.playlistIndex === (_player?.playlist?.constructor.name === 'Array'? _player?.playlist?.length - 1 : _player?.playlist?.tracks.length - 1) ?
  47. `\u23F5` : `\u23ED`}
  48. </button>
  49. <input style={{marginLeft: '1%'}} type="range" min="0" max="1" step="any" onChange={(e) => setTrackVolume(e.target.value)} />
  50. </div>
  51. <small>{_player?.playlistIndex}</small>
  52. </footer> : <div style={{width:'inherit', height:'inherit', padding:'2em'}}>C'mon, Push the play button on some track :)</div>}
  53. </>
  54. )
  55. }
  56. export const PlayerbarConnect = connect(
  57. state => ({ player: state.player || {} }),
  58. {
  59. playTrack: action.playTrack,
  60. pauseTrack: action.pauseTrack,
  61. switchTrack: action.switchTrack,
  62. setTrackVolume: action.setTrackVolume,
  63. setCurrentTime: action.setNewTrackCurrentTime
  64. }
  65. )(Playerbar)