// @flow import * as ICONS from 'constants/icons'; import React, { Fragment } from 'react'; import { normalizeURI, parseURI } from 'lbry-redux'; import CardMedia from 'component/cardMedia'; import TruncatedText from 'component/common/truncated-text'; import Icon from 'component/common/icon'; import Button from 'component/button'; import classnames from 'classnames'; import FilePrice from 'component/filePrice'; import UriIndicator from 'component/uriIndicator'; import DateTime from 'component/dateTime'; import Yrbl from 'component/yrbl'; import { withRouter } from 'react-router-dom'; import { formatLbryUriForWeb } from 'util/uri'; type Props = { obscureNsfw: boolean, claimIsMine: boolean, isDownloaded: boolean, uri: string, isResolvingUri: boolean, rewardedContentClaimIds: Array, claim: ?StreamClaim, metadata: ?StreamMetadata, resolveUri: string => void, clearPublish: () => void, updatePublishForm: ({}) => void, hideNoResult: boolean, // don't show the tile if there is no claim at this uri displayHiddenMessage?: boolean, size: string, isSubscribed: boolean, isNew: boolean, history: { push: string => void }, thumbnail: ?string, title: ?string, nsfw: boolean, }; class FileTile extends React.PureComponent { static defaultProps = { size: 'regular', }; componentDidMount() { const { isResolvingUri, claim, uri, resolveUri } = this.props; if (!isResolvingUri && !claim && uri) resolveUri(uri); } componentWillReceiveProps(nextProps: Props) { const { isResolvingUri, claim, uri, resolveUri } = nextProps; if (!isResolvingUri && claim === undefined && uri) resolveUri(uri); } renderFileProperties() { const { isSubscribed, isDownloaded, claim, uri, rewardedContentClaimIds, isNew, claimIsMine, } = this.props; const isRewardContent = claim && rewardedContentClaimIds.includes(claim.claim_id); if (!isNew && !isSubscribed && !isRewardContent && !isDownloaded) { return null; } return ( // TODO: turn this into it's own component and share it with FileCard // The only issue is icon placement on the search page
{isNew && {__('NEW')}} {isSubscribed && } {isRewardContent && } {!claimIsMine && isDownloaded && } {claimIsMine && }
); } render() { const { claim, metadata, isResolvingUri, obscureNsfw, claimIsMine, clearPublish, updatePublishForm, hideNoResult, displayHiddenMessage, size, history, thumbnail, title, nsfw, } = this.props; if (!claim && isResolvingUri) { return (
); } const shouldHide = !claimIsMine && obscureNsfw && nsfw; if (shouldHide) { return displayHiddenMessage ? ( {__('This file is hidden because it is marked NSFW. Update your')}{' '}