VolumeSlider.jsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import React, { Component } from "react";
  2. import { bindActionCreators } from "redux";
  3. import PropTypes from "prop-types";
  4. import { connect } from "react-redux";
  5. import { actionCreators as volumeActionCreators } from "ducks/volume";
  6. @connect(state => ({
  7. volume: state.volume.get("loudness"),
  8. muted: state.volume.get("muted"),
  9. }),
  10. (dispatch) => ({
  11. onVolumeLoudnessChange: bindActionCreators(volumeActionCreators.changeVolumeLoudness, dispatch),
  12. onVolumeMute: bindActionCreators(volumeActionCreators.muteVolume, dispatch),
  13. onVolumeUnmute: bindActionCreators(volumeActionCreators.unmuteVolume, dispatch),
  14. }))
  15. export default class VolumeSlider extends Component {
  16. constructor(props) {
  17. super(props);
  18. }
  19. changeVolumeHandler = (loudness) => {
  20. loudness = loudness / 100;
  21. localStorage.setItem("volume", loudness);
  22. this.props.onVolumeLoudnessChange(loudness);
  23. };
  24. muteVolume = () => {
  25. this.props.onVolumeMute();
  26. };
  27. unmuteVolume = () => {
  28. this.props.onVolumeUnmute();
  29. };
  30. render() {
  31. return (
  32. <div className="volume-container">
  33. {
  34. (this.props.muted) ? ([
  35. <i className="material-icons" key="unmuteButton" onClick={ this.unmuteVolume }>volume_off</i>,
  36. <input key="disabledVolumeInput" type="range" min="0" max="10000" value="0" disabled/>,
  37. ]) : ([
  38. <i className="material-icons" key="muteButton" onClick={ this.muteVolume }>volume_up</i>,
  39. <input key="volumeInput" type="range" min="0" max="10000" value={ this.props.volume * 100 } onChange={ (e) => { this.changeVolumeHandler(e.target.value) } }/>, //Add default value
  40. ])
  41. }
  42. </div>
  43. );
  44. }
  45. }