// @flow import * as React from 'react'; import { normalizeURI, convertToShareLink } from 'lbry-redux'; import type { Claim, Metadata } from 'types/claim'; import CardMedia from 'component/cardMedia'; import TruncatedText from 'component/common/truncated-text'; import Icon from 'component/common/icon'; import UriIndicator from 'component/uriIndicator'; import * as icons from 'constants/icons'; import classnames from 'classnames'; import FilePrice from 'component/filePrice'; import { openCopyLinkMenu } from 'util/context-menu'; import DateTime from 'component/dateTime'; type Props = { uri: string, claim: ?Claim, fileInfo: ?{}, metadata: ?Metadata, navigate: (string, ?{}) => void, rewardedContentClaimIds: Array, obscureNsfw: boolean, claimIsMine: boolean, pending?: boolean, /* eslint-disable react/no-unused-prop-types */ resolveUri: string => void, isResolvingUri: boolean, /* eslint-enable react/no-unused-prop-types */ isSubscribed: boolean, showSubscribedLogo: boolean, isNew: boolean, }; class FileCard extends React.PureComponent { static defaultProps = { showSubscribedLogo: false, }; componentWillMount() { this.resolve(this.props); } componentWillReceiveProps(nextProps: Props) { this.resolve(nextProps); } resolve = (props: Props) => { const { isResolvingUri, resolveUri, claim, uri, pending } = props; if (!pending && !isResolvingUri && claim === undefined && uri) { resolveUri(uri); } }; render() { const { claim, fileInfo, metadata, navigate, rewardedContentClaimIds, obscureNsfw, claimIsMine, pending, isSubscribed, isNew, showSubscribedLogo, } = this.props; if (!claim && !pending) { return (
); } const shouldHide = !claimIsMine && !pending && obscureNsfw && metadata && metadata.nsfw; if (shouldHide) { return null; } const uri = !pending ? normalizeURI(this.props.uri) : this.props.uri; const title = metadata && metadata.title ? metadata.title : uri; const thumbnail = metadata && metadata.thumbnail ? metadata.thumbnail : null; const isRewardContent = claim && rewardedContentClaimIds.includes(claim.claim_id); const height = claim && claim.height; const handleContextMenu = event => { event.preventDefault(); event.stopPropagation(); openCopyLinkMenu(convertToShareLink(uri), event); }; // We should be able to tab through cards /* eslint-disable jsx-a11y/click-events-have-key-events */ return (
navigate('/show', { uri }) : () => {}} className={classnames('card card--small', { 'card--link': !pending, 'card--pending': pending, })} onContextMenu={handleContextMenu} >
{pending ?
Pending...
: }
{isRewardContent && } {showSubscribedLogo && isSubscribed && } {fileInfo && }
{isNew && (
{__('NEW')}
)}
); /* eslint-enable jsx-a11y/click-events-have-key-events */ } } export default FileCard;