VolumeSlider.jsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. localStorage.setItem("muted", true);
  26. this.props.onVolumeMute();
  27. };
  28. unmuteVolume = () => {
  29. localStorage.setItem("muted", false);
  30. this.props.onVolumeUnmute();
  31. };
  32. render() {
  33. return (
  34. <div className="volume-container">
  35. {
  36. (this.props.muted) ? ([
  37. <i className="material-icons" key="unmuteButton" onClick={ this.unmuteVolume }>volume_off</i>,
  38. <input key="disabledVolumeInput" type="range" min="0" max="10000" value="0" disabled/>,
  39. ]) : ([
  40. <i className="material-icons" key="muteButton" onClick={ this.muteVolume }>volume_up</i>,
  41. <input key="volumeInput" type="range" min="0" max="10000" value={ this.props.volume * 100 } onChange={ (e) => { this.changeVolumeHandler(e.target.value) } }/>, //Add default value
  42. ])
  43. }
  44. </div>
  45. );
  46. }
  47. }