// @flow import type { Claim, Metadata } from 'types/claim'; import * as icons from 'constants/icons'; import * as React from 'react'; import { normalizeURI, convertToShareLink } from 'lbry-redux'; import CardMedia from 'component/cardMedia'; import TruncatedText from 'component/common/truncated-text'; import Icon from 'component/common/icon'; import UriIndicator from 'component/uriIndicator'; 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, isNew: boolean, placeholder: boolean, }; class FileCard extends React.PureComponent { static defaultProps = { placeholder: 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, isResolvingUri, placeholder, } = this.props; const abandoned = !isResolvingUri && !claim && !pending && !placeholder; if (abandoned) { return null; } if ((!claim && !pending) || placeholder) { 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(claim.permanent_url), event); }; // We should be able to tab through cards /* eslint-disable jsx-a11y/click-events-have-key-events */ return (
  • navigate('/show', { uri }) : () => {}} className={classnames('media-card', { 'card--link': !pending, 'media--pending': pending, })} onContextMenu={handleContextMenu} >
    {pending ?
    Pending...
    : }
    {isRewardContent && } {isSubscribed && } {fileInfo && } {isNew && {__('NEW')}}
  • ); /* eslint-enable jsx-a11y/click-events-have-key-events */ } } export default FileCard;