Files
Iris/src/js/components/VolumeControl.js

60 lines
1.6 KiB
JavaScript
Raw Normal View History

2016-11-04 13:51:17 +13:00
import React, { PropTypes } from 'react'
import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import { Link } from 'react-router'
import FontAwesome from 'react-fontawesome'
import * as mopidyActions from '../services/mopidy/actions'
class VolumeControl extends React.Component{
constructor(props) {
2017-05-22 20:23:46 +12:00
super(props)
this.state = {
expanded: false
}
2016-11-04 13:51:17 +13:00
}
handleClick(e){
var slider = e.target;
var sliderY = e.clientY - slider.getBoundingClientRect().top;
var sliderHeight = slider.getBoundingClientRect().height;
var percent = 100 - parseInt( sliderY / sliderHeight * 100 );
this.props.mopidyActions.setVolume( percent )
}
render(){
return (
2017-05-19 16:47:40 +12:00
<span className={this.props.mute ? "volume-control muted" : "volume-control"}>
2017-05-19 11:33:06 +12:00
<a onClick={() => this.props.mopidyActions.setMute(!this.props.mute)}>
{this.props.mute ? <FontAwesome name="volume-off" /> : <FontAwesome name="volume-down" />}
</a>
2016-11-04 13:51:17 +13:00
<div className="slider-wrapper">
<div className="slider vertical" onClick={ (e) => this.handleClick(e) } >
<div className="track">
<div className="progress" style={{ height: this.props.volume+'%' }}></div>
2016-11-04 13:51:17 +13:00
</div>
</div>
</div>
</span>
);
}
}
const mapStateToProps = (state, ownProps) => {
return {
2017-05-19 11:33:06 +12:00
volume: state.mopidy.volume,
mute: state.mopidy.mute
}
2016-11-04 13:51:17 +13:00
}
const mapDispatchToProps = (dispatch) => {
return {
mopidyActions: bindActionCreators(mopidyActions, dispatch)
}
}
export default connect(mapStateToProps, mapDispatchToProps)(VolumeControl)