import React from "react"; import lbryuri from "lbryuri.js"; import CardMedia from "component/cardMedia"; import Link from "component/link"; import { Thumbnail, TruncatedText, Icon } from "component/common"; import FilePrice from "component/filePrice"; import UriIndicator from "component/uriIndicator"; import NsfwOverlay from "component/nsfwOverlay"; import TruncatedMarkdown from "component/truncatedMarkdown"; class FileCard extends React.PureComponent { constructor(props) { super(props); this.state = { hovered: false, }; } componentWillMount() { this.resolve(this.props); } componentWillReceiveProps(nextProps) { this.resolve(nextProps); } resolve(props) { const { isResolvingUri, resolveUri, claim, uri } = props; if (!isResolvingUri && claim === undefined && uri) { resolveUri(uri); } } handleMouseOver() { this.setState({ hovered: true, }); } handleMouseOut() { this.setState({ hovered: false, }); } render() { const { claim, fileInfo, metadata, isResolvingUri, navigate } = this.props; const uri = lbryuri.normalize(this.props.uri); const title = metadata && metadata.title ? metadata.title : uri; const thumbnail = metadata && metadata.thumbnail ? metadata.thumbnail : null; const obscureNsfw = this.props.obscureNsfw && metadata && metadata.nsfw; let description = ""; if (isResolvingUri && !claim) { description = __("Loading..."); } else if (metadata && metadata.description) { description = metadata.description; } else if (claim === null) { description = __("This address contains no content."); } return (
navigate("/show", { uri })} className="card__link" >
{title}
{fileInfo ? {" "} : ""}
{description}
{obscureNsfw && this.state.hovered && }
); } } export default FileCard;