2016-11-22 21:19:08 +01:00
import React from 'react' ;
import lbry from '../lbry.js' ;
2016-12-08 00:07:28 +01:00
import lighthouse from '../lighthouse.js' ;
import { CreditAmount , Thumbnail } from '../component/common.js' ;
import { Link , DownloadLink , WatchLink } from '../component/link.js' ;
2016-11-22 21:19:08 +01:00
2016-08-08 06:47:48 +02:00
var formatItemImgStyle = {
2016-07-16 04:58:24 +02:00
maxWidth : '100%' ,
maxHeight : '100%' ,
display : 'block' ,
marginLeft : 'auto' ,
marginRight : 'auto' ,
marginTop : '5px' ,
} ;
var FormatItem = React . createClass ( {
propTypes : {
2016-07-30 09:47:31 +02:00
claimInfo : React . PropTypes . object ,
amount : React . PropTypes . number ,
name : React . PropTypes . string ,
2016-08-27 00:11:28 +02:00
available : React . PropTypes . bool ,
2016-07-16 04:58:24 +02:00
} ,
render : function ( ) {
2016-07-30 09:47:31 +02:00
var claimInfo = this . props . claimInfo ;
var thumbnail = claimInfo . thumbnail ;
var title = claimInfo . title ;
var description = claimInfo . description ;
var author = claimInfo . author ;
var language = claimInfo . language ;
var license = claimInfo . license ;
2016-08-27 08:37:35 +02:00
var fileContentType = ( claimInfo . content _type || claimInfo [ 'content-type' ] ) ;
2016-09-02 10:51:22 +02:00
var mediaType = lbry . getMediaType ( fileContentType ) ;
2016-08-23 07:22:29 +02:00
var available = this . props . available ;
2016-07-30 09:47:31 +02:00
var amount = this . props . amount || 0.0 ;
2016-07-16 19:14:06 +02:00
2016-07-16 04:58:24 +02:00
return (
2016-08-08 06:47:48 +02:00
< div className = "row-fluid" >
2016-07-16 04:58:24 +02:00
< div className = "span4" >
2016-11-11 13:57:01 +01:00
< Thumbnail src = { thumbnail } alt = { 'Photo for ' + title } style = { formatItemImgStyle } / >
2016-07-16 04:58:24 +02:00
< / d i v >
< div className = "span8" >
2016-08-08 06:47:48 +02:00
< p > { description } < / p >
2016-08-27 00:06:22 +02:00
< section >
< table className = "table-standard" >
< tbody >
< tr >
< td > Content - Type < / t d > < t d > { f i l e C o n t e n t T y p e } < / t d >
< / t r >
< tr >
2016-08-27 00:11:28 +02:00
< td > Cost < /td><td><CreditAmount amount={amount} isEstimate={!available}/ > < / t d >
2016-08-27 00:06:22 +02:00
< / t r >
< tr >
< td > Author < / t d > < t d > { a u t h o r } < / t d >
< / t r >
< tr >
< td > Language < / t d > < t d > { l a n g u a g e } < / t d >
< / t r >
< tr >
< td > License < / t d > < t d > { l i c e n s e } < / t d >
< / t r >
< / t b o d y >
< / t a b l e >
< / s e c t i o n >
< section >
2016-09-02 10:51:22 +02:00
{ mediaType == 'video' ? < WatchLink streamName = { this . props . name } button = "primary" / > : null }
2016-08-27 00:06:22 +02:00
< DownloadLink streamName = { this . props . name } button = "alt" / >
< / s e c t i o n >
2016-11-02 17:13:20 +01:00
< section >
< Link href = "https://lbry.io/dmca" label = "report" className = "button-text-help" / >
< / s e c t i o n >
2016-07-16 04:58:24 +02:00
< / d i v >
< / d i v >
) ;
}
} ) ;
var FormatsSection = React . createClass ( {
propTypes : {
2016-07-30 09:47:31 +02:00
claimInfo : React . PropTypes . object ,
amount : React . PropTypes . number ,
2016-07-16 04:58:24 +02:00
name : React . PropTypes . string ,
2016-08-27 00:11:28 +02:00
available : React . PropTypes . bool ,
2016-07-16 04:58:24 +02:00
} ,
render : function ( ) {
2016-07-16 19:14:06 +02:00
var name = this . props . name ;
2016-07-30 09:47:31 +02:00
var format = this . props . claimInfo ;
2016-07-16 19:14:06 +02:00
var title = format . title ;
2016-07-16 04:58:24 +02:00
2016-07-16 19:14:06 +02:00
if ( format == null )
{
return (
< div >
2016-08-08 06:47:48 +02:00
< h2 > Sorry , no results found for "{name}" . < / h 2 >
2016-07-16 19:14:06 +02:00
< / d i v > ) ;
}
2016-07-16 04:58:24 +02:00
return (
2016-07-16 07:19:40 +02:00
< div >
2016-08-08 06:47:48 +02:00
< div className = "meta" > lbry : //{name}</div>
< h2 > { title } < / h 2 >
2016-07-16 07:19:40 +02:00
{ / * I n f u t u r e , a n t i c i p a t e m u l t i p l e f o r m a t s , j u s t a g u e s s a t w h a t i t c o u l d l o o k l i k e
2016-07-30 09:47:31 +02:00
// var formats = this.props.claimInfo.formats
2016-07-16 07:19:40 +02:00
// return (<tbody>{formats.map(function(format,i){ */}
2016-08-23 07:22:29 +02:00
< FormatItem claimInfo = { format } amount = { this . props . amount } name = { this . props . name } available = { this . props . available } / >
2016-07-16 07:19:40 +02:00
{ /* })}</tbody>); */ }
< / d i v > ) ;
2016-07-16 04:58:24 +02:00
}
} ) ;
var DetailPage = React . createClass ( {
propTypes : {
name : React . PropTypes . string ,
} ,
2016-07-16 19:14:06 +02:00
getInitialState : function ( ) {
return {
2016-07-30 09:47:31 +02:00
claimInfo : null ,
amount : null ,
2016-07-16 19:14:06 +02:00
searching : true ,
2016-09-02 08:49:50 +02:00
matchFound : null ,
2016-07-16 19:14:06 +02:00
} ;
} ,
componentWillMount : function ( ) {
2016-08-08 06:47:48 +02:00
document . title = 'lbry://' + this . props . name ;
2016-12-07 21:14:47 +01:00
lighthouse . search ( this . props . name , ( results ) => {
2016-08-18 09:34:20 +02:00
var result = results [ 0 ] ;
2016-09-02 08:49:50 +02:00
if ( result . name != this . props . name ) {
this . setState ( {
searching : false ,
matchFound : false ,
} ) ;
} else {
this . setState ( {
amount : result . cost ,
available : result . available ,
claimInfo : result . value ,
searching : false ,
matchFound : true ,
} ) ;
}
2016-07-16 19:14:06 +02:00
} ) ;
} ,
2016-07-16 04:58:24 +02:00
render : function ( ) {
2016-07-30 09:47:31 +02:00
if ( this . state . claimInfo == null && this . state . searching ) {
2016-07-16 19:14:06 +02:00
// Still waiting for metadata
return null ;
}
var name = this . props . name ;
2016-08-23 07:22:29 +02:00
var available = this . state . available ;
2016-07-30 09:47:31 +02:00
var claimInfo = this . state . claimInfo ;
var amount = this . state . amount ;
2016-07-16 19:14:06 +02:00
2016-07-16 04:58:24 +02:00
return (
2016-08-08 06:47:48 +02:00
< main >
< section className = "card" >
2016-09-02 08:49:50 +02:00
{ this . state . matchFound ? (
< FormatsSection name = { name } claimInfo = { claimInfo } amount = { amount } available = { available } / >
) : (
< div >
< h2 > No content < / h 2 >
There is no content available at the name < strong > lbry : //{this.props.name}</strong>. If you reached this page from a link within the LBRY interface, please <Link href="/?report" label="report a bug" />. Thanks!
< / d i v >
) }
2016-08-08 06:47:48 +02:00
< / s e c t i o n >
2016-07-16 04:58:24 +02:00
< / m a i n > ) ;
}
2016-11-22 21:19:08 +01:00
} ) ;
export default DetailPage ;