// @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 HiddenNsfwClaims from 'component/hiddenNsfwClaims'; import type { Claim } from 'types/claim'; type Props = { uri: string, page: number, totalPages: number, fetching: boolean, params: { page: number }, claim: Claim, claimsInChannel: Array, channelIsMine: boolean, 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: SyntheticKeyboardEvent<*>, totalPages: number) { // Change page if enter was pressed, and the given page is between // the first and the last. const pageFromInput = Number(e.currentTarget.value); if ( pageFromInput && e.keyCode === 13 && !Number.isNaN(pageFromInput) && pageFromInput > 0 && pageFromInput <= totalPages ) { this.changePage(pageFromInput); } } render() { const { uri, fetching, claimsInChannel, claim, page, totalPages, channelIsMine } = this.props; const { name, permanent_url: permanentUrl, claim_id: claimId } = claim; const currentPage = parseInt((page || 1) - 1, 10); const contentList = claimsInChannel && claimsInChannel.length ? ( ) : ( !fetching && {__('No content found.')} ); return (

{name} {fetching && }

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