2016-12-23 01:57:01 -05:00
import React from 'react' ;
2017-04-23 16:56:50 +07:00
import lbry from 'lbry.js' ;
import lbryuri from 'lbryuri.js' ;
2017-04-07 12:15:22 +07:00
import Link from 'component/link' ;
2017-04-23 21:01:00 +07:00
import FileActions from 'component/fileActions' ;
2017-05-08 18:22:27 -04:00
import { Thumbnail , TruncatedText , } from 'component/common.js' ;
import FilePrice from 'component/filePrice'
import UriIndicator from 'component/uriIndicator' ;
2017-04-23 21:01:00 +07:00
class FileTile extends React . Component {
2017-05-09 21:33:13 -04:00
static SHOW _EMPTY _PUBLISH = "publish"
static SHOW _EMPTY _PENDING = "pending"
2017-05-08 18:22:27 -04:00
constructor ( props ) {
super ( props )
this . state = {
showNsfwHelp : false ,
}
}
componentDidMount ( ) {
2017-05-11 19:28:43 -04:00
const {
isResolvingUri ,
resolveUri ,
claim ,
uri ,
} = this . props
if ( ! isResolvingUri && ! claim && uri ) {
resolveUri ( uri )
}
2017-05-08 18:22:27 -04:00
}
handleMouseOver ( ) {
if ( this . props . obscureNsfw && this . props . metadata && this . props . metadata . nsfw ) {
this . setState ( {
showNsfwHelp : true ,
} ) ;
}
}
handleMouseOut ( ) {
if ( this . state . showNsfwHelp ) {
this . setState ( {
showNsfwHelp : false ,
} ) ;
}
}
2017-04-23 21:01:00 +07:00
render ( ) {
const {
2017-05-09 21:33:13 -04:00
claim ,
2017-05-08 18:22:27 -04:00
metadata ,
isResolvingUri ,
2017-05-09 21:33:13 -04:00
showEmpty ,
2017-05-08 18:22:27 -04:00
navigate ,
hidePrice ,
2017-04-23 21:01:00 +07:00
} = this . props
2017-04-28 22:14:44 +07:00
2017-05-08 18:22:27 -04:00
const uri = lbryuri . normalize ( this . props . uri ) ;
2017-05-09 21:33:13 -04:00
const isClaimed = ! ! claim ;
2017-05-12 16:49:15 -04:00
const isClaimable = lbryuri . isClaimable ( uri )
2017-05-09 21:33:13 -04:00
const title = isClaimed && metadata && metadata . title ? metadata . title : uri ;
const obscureNsfw = this . props . obscureNsfw && metadata && metadata . nsfw ;
let onClick = ( ) => navigate ( '/show' , { uri } )
2017-05-08 18:22:27 -04:00
let description = ""
2017-05-09 21:33:13 -04:00
if ( isClaimed ) {
2017-05-12 14:36:44 -04:00
description = metadata && metadata . description
2017-05-08 18:22:27 -04:00
} else if ( isResolvingUri ) {
2017-05-26 16:13:16 +02:00
description = _ _ ( "Loading..." )
2017-05-09 21:33:13 -04:00
} else if ( showEmpty === FileTile . SHOW _EMPTY _PUBLISH ) {
2017-05-14 23:50:59 -04:00
onClick = ( ) => navigate ( '/publish' , { } )
2017-05-12 16:49:15 -04:00
description = < span className = "empty" >
2017-05-26 16:13:16 +02:00
{ _ _ ( "This location is unused." ) } { ' ' }
{ isClaimable && < span className = "button-text" > { _ _ ( "Put something here!" ) } < / span > }
2017-05-12 16:49:15 -04:00
< / span >
2017-05-09 21:33:13 -04:00
} else if ( showEmpty === FileTile . SHOW _EMPTY _PENDING ) {
2017-05-26 16:13:16 +02:00
description = < span className = "empty" > { _ _ ( "This file is pending confirmation." ) } < / span >
2017-01-12 22:23:12 -05:00
}
2017-05-08 18:22:27 -04:00
return (
< section className = { 'file-tile card ' + ( obscureNsfw ? 'card--obscured ' : '' ) } onMouseEnter = { this . handleMouseOver . bind ( this ) } onMouseLeave = { this . handleMouseOut . bind ( this ) } >
2017-05-11 19:28:43 -04:00
< Link onClick = { onClick } className = "card__link" >
2017-05-09 16:12:48 -04:00
< div className = { "card__inner file-tile__row" } >
2017-05-08 18:22:27 -04:00
< div className = "card__media"
style = { { backgroundImage : "url('" + ( metadata && metadata . thumbnail ? metadata . thumbnail : lbry . imagePath ( 'default-thumb.svg' ) ) + "')" } } >
< / div >
< div className = "file-tile__content" >
2017-05-09 16:12:48 -04:00
< div className = "card__title-primary" >
2017-05-09 21:33:13 -04:00
{ ! hidePrice ? < FilePrice uri = { this . props . uri } / > : null }
2017-05-09 16:12:48 -04:00
< div className = "meta" > { uri } < / div >
< h3 > < TruncatedText lines = { 1 } > { title } < / TruncatedText > < / h3 >
2017-05-08 18:22:27 -04:00
< / div >
< div className = "card__content card__subtext" >
< TruncatedText lines = { 3 } >
2017-05-09 21:33:13 -04:00
{ description }
2017-05-08 18:22:27 -04:00
< / TruncatedText >
< / div >
< / div >
< / div >
< / Link >
2017-05-09 16:12:48 -04:00
{ this . state . showNsfwHelp
? < div className = 'card-overlay' >
< p >
2017-05-26 16:13:16 +02:00
{ _ _ ( "This content is Not Safe For Work. To view adult content, please change your" ) } < Link className = "button-text" onClick = { ( ) => navigate ( '/settings' ) } label = { _ _ ( "Settings" ) } / > .
2017-05-09 16:12:48 -04:00
< / p >
< / div >
: null }
2017-05-08 18:22:27 -04:00
< / section >
) ;
2017-01-12 22:23:12 -05:00
}
2017-04-23 21:01:00 +07:00
}
2017-05-08 18:22:27 -04:00
export default FileTile