// @flow import React from 'react'; import BusyIndicator from 'component/common/busy-indicator'; import { FormField, FormRow } from 'component/common/form'; import ReactPaginate from 'react-paginate'; import SubscribeButton from 'component/subscribeButton'; import ViewOnWebButton from 'component/viewOnWebButton'; import Page from 'component/page'; import FileList from 'component/fileList'; import type { Claim } from 'types/claim'; type Props = { uri: string, page: number, totalPages: number, fetching: boolean, params: { page: number }, claim: Claim, claimsInChannel: Array<{}>, fetchClaims: (string, number) => void, fetchClaimCount: string => void, navigate: (string, {}) => void, }; class ChannelPage extends React.PureComponent { componentDidMount() { const { uri, page, fetchClaims, fetchClaimCount } = this.props; fetchClaims(uri, page || 1); fetchClaimCount(uri); } componentWillReceiveProps(nextProps: Props) { const { page, uri, fetchClaims, fetchClaimCount } = this.props; if (nextProps.page && page !== nextProps.page) { fetchClaims(nextProps.uri, nextProps.page); } if (nextProps.uri !== uri) { fetchClaimCount(uri); } } changePage(pageNumber: number) { const { params } = this.props; const newParams = Object.assign({}, params, { page: pageNumber }); this.props.navigate('/show', newParams); } paginate(e, totalPages: number) { // Change page if enter was pressed, and the given page is between // the first and the last. const pageFromInput = Number(e.target.value); if ( e.keyCode === 13 && !Number.isNaN(pageFromInput) && pageFromInput > 0 && pageFromInput <= totalPages ) { this.changePage(pageFromInput); } } render() { const { fetching, claimsInChannel, claim, page, totalPages } = this.props; const { name, permanent_url: permanentUrl, claim_id: claimId } = claim; let contentList; if (fetching) { contentList = ; } else { contentList = claimsInChannel && claimsInChannel.length ? ( ) : ( {__('No content found.')} ); } return (

{name}

{contentList}
{(!fetching || (claimsInChannel && claimsInChannel.length)) && totalPages > 1 && ( this.changePage(e.selected + 1)} initialPage={parseInt(page - 1, 10)} containerClassName="pagination" /> this.paginate(e, totalPages)} prefix={__('Go to page:')} type="text" /> )}
); } } export default ChannelPage;