2017-06-06 23:19:12 +02:00
import React from "react" ;
2017-07-13 17:32:32 +02:00
import lbry from "lbry.js" ;
2017-06-06 23:19:12 +02:00
import lbryio from "lbryio.js" ;
import lbryuri from "lbryuri" ;
import FileCard from "component/fileCard" ;
import { BusyMessage } from "component/common.js" ;
import ToolTip from "component/tooltip.js" ;
2016-04-10 02:00:56 +02:00
2017-06-06 06:21:55 +02:00
const FeaturedCategory = props => {
2017-06-06 23:19:12 +02:00
const { category , names } = props ;
2017-04-24 16:17:36 +02:00
2017-06-06 23:19:12 +02:00
return (
< div className = "card-row card-row--small" >
< h3 className = "card-row__header" >
{ category }
{ category &&
category . match ( /^community/i ) &&
< ToolTip
label = { _ _ ( "What's this?" ) }
2017-06-20 14:08:52 +02:00
body = { _ _ (
'Community Content is a public space where anyone can share content with the rest of the LBRY community. Bid on the names "one," "two," "three," "four" and "five" to put your content here!'
) }
2017-06-06 23:19:12 +02:00
className = "tooltip--header"
/ > }
< / h3 >
{ names &&
names . map ( name =>
< FileCard
key = { name }
displayStyle = "card"
uri = { lbryuri . normalize ( name ) }
/ >
) }
< / div >
) ;
2017-06-06 06:21:55 +02:00
} ;
2016-05-16 15:20:32 +02:00
2017-06-08 06:42:19 +02:00
class DiscoverPage extends React . PureComponent {
2017-05-11 02:59:47 +02:00
componentWillMount ( ) {
2017-06-06 23:19:12 +02:00
this . props . fetchFeaturedUris ( ) ;
2017-07-06 05:14:45 +02:00
this . scrollListener = this . handleScroll . bind ( this ) ;
}
componentDidMount ( ) {
2017-07-13 17:32:32 +02:00
if ( this . props . isNavigatingBack ) {
const scrollY = parseInt ( lbry . getClientSetting ( "prefs_scrolly" ) ) ;
if ( ! isNaN ( scrollY ) ) {
const restoreScrollPosition = ( ) => {
window . scrollTo ( 0 , scrollY ) ;
} ;
setTimeout ( restoreScrollPosition , 100 ) ;
}
this . props . finishedNavigatingBack ( ) ;
2017-07-06 05:14:45 +02:00
}
window . addEventListener ( "scroll" , this . scrollListener ) ;
}
handleScroll ( ) {
2017-07-13 17:32:32 +02:00
lbry . setClientSetting ( "prefs_scrolly" , window . scrollY ) ;
2017-05-07 09:39:13 +02:00
}
2017-06-29 09:58:15 +02:00
componentWillUnmount ( ) {
this . props . cancelResolvingUris ( ) ;
2017-07-06 05:14:45 +02:00
window . removeEventListener ( "scroll" , this . scrollListener ) ;
2017-06-29 09:58:15 +02:00
}
2017-05-11 02:59:47 +02:00
render ( ) {
2017-06-06 23:19:12 +02:00
const { featuredUris , fetchingFeaturedUris } = this . props ;
const failedToLoad =
! fetchingFeaturedUris &&
( featuredUris === undefined ||
( featuredUris !== undefined && Object . keys ( featuredUris ) . length === 0 ) ) ;
2017-05-11 02:59:47 +02:00
return (
2017-07-06 05:20:25 +02:00
< main >
2017-06-06 23:19:12 +02:00
{ fetchingFeaturedUris &&
< BusyMessage message = { _ _ ( "Fetching content" ) } / > }
{ typeof featuredUris === "object" &&
Object . keys ( featuredUris ) . map (
category =>
featuredUris [ category ] . length
? < FeaturedCategory
key = { category }
category = { category }
names = { featuredUris [ category ] }
/ >
: ""
) }
{ failedToLoad &&
2017-06-29 09:58:15 +02:00
< div className = "empty" >
{ _ _ ( "Failed to load landing content." ) }
< / div > }
2017-05-22 17:22:24 +02:00
< / main >
2017-06-06 23:19:12 +02:00
) ;
2017-05-11 02:59:47 +02:00
}
2017-05-04 05:44:08 +02:00
}
2017-05-25 18:29:56 +02:00
export default DiscoverPage ;