Files
Iris/src/js/components/Track.js

83 lines
2.1 KiB
JavaScript
Raw Normal View History

2016-10-03 21:21:14 +13:00
import React, { PropTypes } from 'react'
2016-10-06 16:38:06 +13:00
import FontAwesome from 'react-fontawesome'
2016-10-25 21:36:33 +13:00
import ArtistSentence from './ArtistSentence'
import AlbumLink from './AlbumLink'
2016-10-03 21:21:14 +13:00
export default class Track extends React.Component{
constructor(props) {
super(props);
}
2016-10-27 10:02:12 +13:00
handleClick(e){
var target = $(e.target);
if( !target.is('a') && target.closest('a').length <= 0 ){
this.props.handleClick(e);
}
2016-10-06 16:38:06 +13:00
}
2016-10-27 10:02:12 +13:00
handleDoubleClick(e){
return this.props.handleDoubleClick(e);
}
2016-10-27 10:02:12 +13:00
handleContextMenu(e){
e.preventDefault();
// trigger a regular click event
if( !this.props.track.selected ) this.handleClick(e);
// notify our tracklist
this.props.handleContextMenu(e);
}
formatDuration(){
if( typeof(this.props.track.duration_ms) !== 'undefined' ){
var ms = this.props.track.duration_ms;
}else if( typeof(this.props.track.length) !== 'undefined' ){
var ms = this.props.track.length;
}else{
return null;
}
var time = new Date(ms);
var min = time.getMinutes();
var sec = time.getSeconds();
if( sec < 10 ) sec = '0'+sec;
return min+':'+sec;
}
2016-10-03 21:21:14 +13:00
render(){
2016-10-06 16:38:06 +13:00
var className = 'list-item track';
2016-10-06 16:38:06 +13:00
if( typeof(this.props.track.selected) !== 'undefined' && this.props.track.selected ){
className += ' selected';
}
if( this.props.track.playing ){
className += ' playing';
2016-10-06 16:38:06 +13:00
}
return (
<div
className={className}
onDoubleClick={ (e) => this.handleDoubleClick(e) }
2016-10-27 10:02:12 +13:00
onClick={ (e) => this.handleClick(e) }
onContextMenu={ (e) => this.handleContextMenu(e) }>
2016-10-25 14:09:53 +13:00
{ this.props.track.selected ? <FontAwesome name="check" className="select-state" fixedWidth /> : null }
<span className="col name">
{this.props.track.name}
</span>
<span className="col artists">
2016-10-25 21:36:33 +13:00
{ this.props.track.artists ? <ArtistSentence artists={this.props.track.artists} /> : null }
</span>
<span className="col album">
{ this.props.track.album ? <AlbumLink album={this.props.track.album} /> : null }
</span>
<span className="col duration">
{ this.formatDuration() }
</span>
2016-10-06 16:38:06 +13:00
</div>
);
2016-10-03 21:21:14 +13:00
}
}