jam-cloud/web/app/assets/javascripts/react-components/SessionTrackVolumeHover.js....

91 lines
2.9 KiB
CoffeeScript

context = window
MixerActions = @MixerActions
@SessionTrackVolumeHover = React.createClass({
mixins: [Reflux.listenTo(@SessionMyTracksStore,"onInputsChanged")]
onInputsChanged: (sessionMixers) ->
mixers = sessionMixers.mixers
newMixers = mixers.findMixerForTrack.apply(mixers, this.props.mixerFinder)
this.setState({mixers: newMixers})
getInitialState: () ->
{mixers: this.props.mixers}
handleMute: (e) ->
e.preventDefault()
muting = $(e.currentTarget).is('.enabled')
MixerActions.mute([this.state.mixers.mixer, this.state.mixers.oppositeMixer], muting)
handleMuteCheckbox: (e) ->
muting = $(e.target).is(':checked')
MixerActions.mute([this.state.mixers.mixer, this.state.mixers.oppositeMixer], muting)
render: () ->
muteMixer = this.state.mixers.muteMixer
classes = React.addons.classSet({
'track-icon-mute': true
'enabled' : !muteMixer.mute
'muted' : muteMixer.mute
})
`<div className="track-volume-hover">
<div className="session-track track">
<div className="track-vu-left">
<SessionTrackVU orientation="vertical" lightCount={13} lightWidth={3} lightHeight={17} side="vul" mixers={this.state.mixers} />
</div>
<div className="track-vu-right">
<SessionTrackVU orientation="vertical" lightCount={13} lightWidth={3} lightHeight={17} side="vur" mixers={this.state.mixers} />
</div>
<div className="track-label">
<div>Volume</div>
<div>{this.state.mixers.mixer.volume_left}dB</div>
</div>
<SessionTrackGain mixers={this.state.mixers} />
<div className={classes} data-control="mute" data-mixer-id={this.state.mixers.muteMixer.id} onClick={this.handleMute}/>
<input type="checkbox" name="mute"/>
<label for="mute">Mute</label>
</div>
<div className="textual-help">
<p>Use this slider to control the volume of this track in your personal mix.</p>
<p>This will not affect the volume of this track for other musicians in the session.</p>
<p>To adjust master levels for all musicians for recordings and broadcasts, use Mixer button in the toolbar.</p>
</div>
</div>`
componentDidMount: () ->
$root = jQuery(this.getDOMNode())
# initialize icheck
$checkbox = $root.find('input')
context.JK.checkbox($checkbox)
$checkbox.on('ifChanged', this.handleMuteCheckbox);
if this.state.mixers.muteMixer.mute
$checkbox.iCheck('check').attr('checked', true)
else
$checkbox.iCheck('uncheck').attr('checked', false)
componentWillUpdate: (nextProps, nextState) ->
$root = jQuery(this.getDOMNode())
# re-initialize icheck
$checkbox = $root.find('input')
if nextState.mixers.muteMixer.mute
$checkbox.iCheck('check').attr('checked', true)
else
$checkbox.iCheck('uncheck').attr('checked', false)
})