ampache_react/app/components/Albums.jsx

55 lines
1.7 KiB
React
Raw Normal View History

// NPM imports
2016-07-07 23:23:18 +02:00
import React, { Component, PropTypes } from "react";
import Immutable from "immutable";
2016-07-07 23:23:18 +02:00
// Local imports
2016-07-07 23:23:18 +02:00
import FilterablePaginatedGrid from "./elements/Grid";
import DismissibleAlert from "./elements/DismissibleAlert";
2016-07-07 23:23:18 +02:00
/**
* Paginated albums grid
*/
2016-07-07 23:23:18 +02:00
export default class Albums extends Component {
render() {
// Handle error
let error = null;
if (this.props.error) {
error = (<DismissibleAlert type="danger" text={this.props.error} />);
}
// Set grid props
2016-08-12 13:57:53 +02:00
const artists = this.props.artists;
const grid = {
isFetching: this.props.isFetching,
items: this.props.albums,
2016-08-02 13:07:12 +02:00
itemsType: "album",
itemsLabel: "app.common.album",
subItemsType: "tracks",
subItemsLabel: "app.common.track",
2016-08-12 13:57:53 +02:00
buildLinkTo: (itemType, item) => {
let artist = encodeURIComponent(item.get("artist"));
if (artists && artists.size > 0) {
const id = item.get("artist");
artist = encodeURIComponent(id + "-" + artists.getIn([id, "name"]));
}
return "/artist/" + artist + "/album/" + item.get("id") + "-" + encodeURIComponent(item.get("name"));
},
};
2016-07-07 23:23:18 +02:00
return (
<div>
{ error }
<FilterablePaginatedGrid grid={grid} pagination={this.props.pagination} />
</div>
2016-07-07 23:23:18 +02:00
);
}
}
Albums.propTypes = {
error: PropTypes.string,
isFetching: PropTypes.bool.isRequired,
albums: PropTypes.instanceOf(Immutable.List).isRequired,
2016-08-12 13:57:53 +02:00
artists: PropTypes.instanceOf(Immutable.Map),
pagination: PropTypes.object.isRequired,
2016-07-07 23:23:18 +02:00
};