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;