lbry-desktop/src/renderer/page/channel/view.jsx

114 lines
3.5 KiB
React
Raw Normal View History

2018-03-26 23:32:43 +02:00
// @flow
import React from 'react';
import { buildURI } from 'lbryURI';
2018-03-26 23:32:43 +02:00
import BusyIndicator from 'component/common/busy-indicator';
import FileTile from 'component/fileTile';
import ReactPaginate from 'react-paginate';
2018-03-26 23:32:43 +02:00
import Button from 'component/button';
import SubscribeButton from 'component/subscribeButton';
2018-03-26 23:32:43 +02:00
import Page from 'component/page';
import FileList from 'component/fileList';
import * as modals from 'constants/modal_types';
2017-05-04 05:44:08 +02:00
2018-03-26 23:32:43 +02:00
type Props = {
uri: string,
page: number,
totalPages: number,
fetching: boolean,
params: { page: number },
claim: {
name: string,
claim_id: string,
},
claimsInChannel: Array<{}>,
fetchClaims: (string, number) => void,
fetchClaimCount: string => void,
navigate: (string, {}) => void,
doChannelSubscribe: string => void,
doChannelUnsubscribe: string => void,
openModal: (string, {}) => void,
};
class ChannelPage extends React.PureComponent<Props> {
2017-05-13 00:50:51 +02:00
componentDidMount() {
2017-09-08 05:15:05 +02:00
const { uri, page, fetchClaims, fetchClaimCount } = this.props;
2017-07-17 08:06:04 +02:00
2017-09-08 05:15:05 +02:00
fetchClaims(uri, page || 1);
2017-08-24 23:12:23 +02:00
fetchClaimCount(uri);
2017-05-13 00:50:51 +02:00
}
2017-05-04 05:44:08 +02:00
2018-03-26 23:32:43 +02:00
componentWillReceiveProps(nextProps: Props) {
2017-09-08 05:15:05 +02:00
const { page, uri, fetching, fetchClaims, fetchClaimCount } = this.props;
2017-07-17 08:06:04 +02:00
2017-09-20 19:12:53 +02:00
if (nextProps.page && page !== nextProps.page) {
2017-09-08 05:15:05 +02:00
fetchClaims(nextProps.uri, nextProps.page);
2017-08-24 23:12:23 +02:00
}
2017-09-08 05:15:05 +02:00
if (nextProps.uri != uri) {
2017-08-24 23:12:23 +02:00
fetchClaimCount(uri);
}
2017-05-13 00:50:51 +02:00
}
2018-03-26 23:32:43 +02:00
changePage(pageNumber: number) {
2017-09-20 16:57:43 +02:00
const { params } = this.props;
2017-07-17 08:06:04 +02:00
const newParams = Object.assign({}, params, { page: pageNumber });
this.props.navigate('/show', newParams);
2017-05-13 00:50:51 +02:00
}
render() {
2018-03-26 23:32:43 +02:00
const { fetching, claimsInChannel, claim, uri, page, totalPages, openModal } = this.props;
2017-12-08 21:14:35 +01:00
const { name, claim_id: claimId } = claim;
const subscriptionUri = buildURI({ channelName: name, claimId }, false);
2017-12-08 21:14:35 +01:00
2017-06-06 23:19:12 +02:00
let contentList;
2017-09-20 19:12:53 +02:00
if (fetching) {
2018-03-26 23:32:43 +02:00
contentList = <BusyIndicator message={__('Fetching content')} />;
2017-09-20 19:12:53 +02:00
} else {
2017-11-24 15:31:05 +01:00
contentList =
claimsInChannel && claimsInChannel.length ? (
2018-03-26 23:32:43 +02:00
<FileList hideFilter fileInfos={claimsInChannel} />
2017-11-24 15:31:05 +01:00
) : (
<span className="empty">{__('No content found.')}</span>
2017-11-24 15:31:05 +01:00
);
2017-05-21 16:42:34 +02:00
}
2017-06-06 23:19:12 +02:00
return (
2018-03-26 23:32:43 +02:00
<Page notContained>
<section className="card__channel-info card__channel-info--large">
<h1>{name}</h1>
<div className="card__actions card__actions--no-margin">
<Button
button="alt"
iconRight="Send"
label={__('Enjoy this? Send a tip')}
onClick={() => openModal(modals.SEND_TIP, { uri })}
/>
2017-12-08 21:38:20 +01:00
<SubscribeButton uri={uri} channelName={name} />
2017-06-06 23:19:12 +02:00
</div>
</section>
2018-03-26 23:32:43 +02:00
<section>{contentList}</section>
2017-07-17 08:06:04 +02:00
{(!fetching || (claimsInChannel && claimsInChannel.length)) &&
2017-11-24 15:31:05 +01:00
totalPages > 1 && (
<ReactPaginate
pageCount={totalPages}
pageRangeDisplayed={2}
previousLabel=""
nextLabel=""
activeClassName="pagination__item--selected"
pageClassName="pagination__item"
previousClassName="pagination__item pagination__item--previous"
nextClassName="pagination__item pagination__item--next"
breakClassName="pagination__item pagination__item--break"
marginPagesDisplayed={2}
onPageChange={e => this.changePage(e.selected + 1)}
initialPage={parseInt(page - 1)}
containerClassName="pagination"
/>
)}
2018-03-26 23:32:43 +02:00
</Page>
2017-06-06 23:19:12 +02:00
);
2017-05-13 00:50:51 +02:00
}
2017-05-04 05:44:08 +02:00
}
export default ChannelPage;