Dataset/JS/ReactBookmarks/podcasts.js (59 lines of code) (raw):
import _ from 'lodash';
import React, { PropTypes } from 'react';
import Loading from './loading';
import Pager from './pager';
import Podcast from './podcast_item';
export class PodcastList extends React.Component {
render() {
const {
actions,
dispatch,
isLoggedIn,
podcasts,
searchQuery,
isLoading,
ifEmpty,
page,
onSelectPage,
showChannel,
} = this.props;
if (isLoading) {
return <Loading />;
}
const emptyMsg = typeof ifEmpty === 'undefined' ? 'No podcasts found' : ifEmpty;
if (_.isEmpty(podcasts)) {
return <div className="lead">{emptyMsg}</div>;
}
const pager = <Pager page={page} onSelectPage={onSelectPage} />;
return (
<div>
{pager}
{podcasts.map(podcast => {
const togglePlayer = event => {
event.preventDefault();
dispatch(actions.player.togglePlayer(podcast));
};
const toggleBookmark = event => {
event.preventDefault();
dispatch(actions.bookmarks.toggleBookmark(podcast));
};
const toggleDetail = event => {
event.preventDefault();
dispatch(actions.showDetail.toggleDetail(podcast));
};
return (
<Podcast
key={podcast.id}
searchQuery={searchQuery}
isLoggedIn={isLoggedIn}
podcast={podcast}
showImage={false}
showChannel={showChannel}
showExpanded={false}
toggleBookmark={toggleBookmark}
toggleDetail={toggleDetail}
togglePlayer={togglePlayer}
/>);
})}
{pager}
</div>
);
}
}
PodcastList.propTypes = {
actions: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired,
isLoggedIn: PropTypes.bool.isRequired,
podcasts: PropTypes.array.isRequired,
page: PropTypes.object,
onSelectPage: PropTypes.func,
isLoading: PropTypes.bool.isRequired,
ifEmpty: PropTypes.any,
showChannel: PropTypes.bool,
searchQuery: PropTypes.string,
};
export default PodcastList;