From 5b7f4f5831b7209e38ee73637cc4ea28f9607ac1 Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Fri, 21 Oct 2016 23:27:50 +1300 Subject: [PATCH] Playlist list... not sure if cleanest way to build components --- src/js/components/ItemSource.js | 15 +++++ src/js/components/ListItem.js | 26 ++++++++ src/js/components/PlaylistListItem.js | 39 ++++++++++++ src/js/components/Track.js | 2 +- src/js/components/TrackList.js | 6 ++ src/js/index.js | 4 +- src/js/services/mopidy/actions.js | 32 +++++++--- src/js/services/mopidy/middleware.js | 7 ++ src/js/services/mopidy/reducer.js | 5 ++ src/js/views/library/LibraryPlaylists.js | 68 +++++++++++++++----- src/scss/app.scss | 1 + src/scss/components/_lists.scss | 81 ++++++++++++++++++++++++ src/scss/components/_track.scss | 53 ---------------- 13 files changed, 259 insertions(+), 80 deletions(-) create mode 100755 src/js/components/ItemSource.js create mode 100755 src/js/components/ListItem.js create mode 100755 src/js/components/PlaylistListItem.js create mode 100755 src/scss/components/_lists.scss diff --git a/src/js/components/ItemSource.js b/src/js/components/ItemSource.js new file mode 100755 index 00000000..f35c6763 --- /dev/null +++ b/src/js/components/ItemSource.js @@ -0,0 +1,15 @@ + +import React, { PropTypes } from 'react' + +export default class extends React.Component{ + + constructor(props) { + super(props); + } + + render(){ + var uriElements = this.props.uri.split(':'); + if( uriElements.length <= 0 ) return false; + return { uriElements[0] }; + } +} \ No newline at end of file diff --git a/src/js/components/ListItem.js b/src/js/components/ListItem.js new file mode 100755 index 00000000..92b9d4bf --- /dev/null +++ b/src/js/components/ListItem.js @@ -0,0 +1,26 @@ + +import React, { PropTypes } from 'react' +import FontAwesome from 'react-fontawesome' +import { browserHistory } from 'react-router' + +export default class ListItem extends React.Component{ + + constructor(props) { + super(props); + } + + handleClick(e){ + browserHistory.push( this.props.link ); + } + + render(){ + var className = 'list-item'; + if( this.props.extraClasses ) className += ' '+this.props.extraClasses; + + return ( +
  • this.handleClick(e) }> + { this.props.children } +
  • + ); + } +} \ No newline at end of file diff --git a/src/js/components/PlaylistListItem.js b/src/js/components/PlaylistListItem.js new file mode 100755 index 00000000..1484cd05 --- /dev/null +++ b/src/js/components/PlaylistListItem.js @@ -0,0 +1,39 @@ + +import React, { PropTypes } from 'react' +import FontAwesome from 'react-fontawesome' +import { Link } from 'react-router' + +import ListItem from './ListItem' +import ItemSource from './ItemSource' + +export default class PlaylistListItem extends React.Component{ + + constructor(props) { + super(props); + } + + renderOwner(){ + if( !this.props.item.owner ) return null; + return ( + + { this.props.item.owner.id } + + ); + } + + render(){ + return ( + + + {this.props.item.name} + + + { this.renderOwner() } + + + + + + ); + } +} \ No newline at end of file diff --git a/src/js/components/Track.js b/src/js/components/Track.js index c6e97007..375b1b1e 100755 --- a/src/js/components/Track.js +++ b/src/js/components/Track.js @@ -39,7 +39,7 @@ export default class Track extends React.Component{ render(){ - var className = 'track'; + var className = 'list-item track'; var selectedIcon = 'square-o'; if( typeof(this.props.track.selected) !== 'undefined' && this.props.track.selected ){ selectedIcon = 'check-square-o'; diff --git a/src/js/components/TrackList.js b/src/js/components/TrackList.js index 2f78158a..e81528c0 100755 --- a/src/js/components/TrackList.js +++ b/src/js/components/TrackList.js @@ -105,6 +105,12 @@ class TrackList extends React.Component{ return (