ampache_react/app/views/PlaylistPage.jsx
Phyks (Lucas Verney) 99e9b54376 Enhance playlist page
* Do not display play next button on `/playlist` page.
* Play on `/playlist` page jumps to the selected item instead of
clearing the whole playlist.
2016-09-18 21:46:40 +02:00

48 lines
1.6 KiB
JavaScript

// NPM imports
import React, { Component } from "react";
import { bindActionCreators } from "redux";
import { connect } from "react-redux";
import Immutable from "immutable";
// Actions
import * as actionCreators from "../actions";
// Components
import Playlist from "../components/Playlist";
/**
* Table of songs in the current playlist.
*/
class PlaylistPage extends Component {
render() {
return (
<Playlist playAction={this.props.actions.jumpToSong} playNextAction={null} songs={this.props.songsList} currentIndex={this.props.currentIndex} />
);
}
}
const mapStateToProps = (state) => {
let songsList = new Immutable.List();
if (state.webplayer.playlist.size > 0) {
songsList = state.webplayer.playlist.map(function (id) {
let song = state.entities.getIn(["entities", "song", id]);
// Add artist and album infos to song
const artist = state.entities.getIn(["entities", "artist", song.get("artist")]);
const album = state.entities.getIn(["entities", "album", song.get("album")]);
return (
song
.set("artist", new Immutable.Map({id: artist.get("id"), name: artist.get("name")}))
.set("album", new Immutable.Map({id: album.get("id"), name: album.get("name")}))
);
});
}
return {
songsList: songsList,
currentIndex: state.webplayer.currentIndex,
};
};
const mapDispatchToProps = (dispatch) => ({
actions: bindActionCreators(actionCreators, dispatch),
});
export default connect(mapStateToProps, mapDispatchToProps)(PlaylistPage);