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-16 12:37:37 +13:00
|
|
|
import ArtistList from './ArtistList'
|
|
|
|
|
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-17 22:00:29 +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-17 22:00:29 +13:00
|
|
|
handleDoubleClick( e ){
|
|
|
|
|
return this.props.handleDoubleClick(e);
|
2016-10-06 09:35:42 +13:00
|
|
|
}
|
|
|
|
|
|
2016-10-18 16:53:33 +13:00
|
|
|
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 selectedIcon = 'square-o';
|
|
|
|
|
if( typeof(this.props.track.selected) !== 'undefined' && this.props.track.selected ){
|
|
|
|
|
selectedIcon = 'check-square-o';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
2016-10-16 12:37:37 +13:00
|
|
|
<div
|
|
|
|
|
className="track"
|
2016-10-17 22:00:29 +13:00
|
|
|
onDoubleClick={ (e) => this.handleDoubleClick(e) }
|
|
|
|
|
onClick={ (e) => this.handleClick(e) }>
|
|
|
|
|
<FontAwesome name={selectedIcon} fixedWidth />
|
|
|
|
|
<span className="name">
|
|
|
|
|
{this.props.track.name}
|
|
|
|
|
</span>
|
|
|
|
|
<span className="artists">
|
|
|
|
|
<ArtistList artists={this.props.track.artists} />
|
|
|
|
|
</span>
|
|
|
|
|
<span className="album">
|
|
|
|
|
{ this.props.track.album ? <AlbumLink album={this.props.track.album} /> : null }
|
|
|
|
|
</span>
|
|
|
|
|
<span className="duration">
|
2016-10-18 16:53:33 +13:00
|
|
|
{ this.formatDuration() }
|
2016-10-17 22:00:29 +13:00
|
|
|
</span>
|
2016-10-06 16:38:06 +13:00
|
|
|
</div>
|
|
|
|
|
);
|
2016-10-03 21:21:14 +13:00
|
|
|
}
|
|
|
|
|
}
|