use channelTile on top of search page

This commit is contained in:
seanyesmunt 2018-08-24 17:25:18 -04:00
parent c077c9103d
commit 2d2c414811
2 changed files with 56 additions and 15 deletions

View file

@ -2,16 +2,13 @@
import * as React from 'react'; import * as React from 'react';
import CardMedia from 'component/cardMedia'; import CardMedia from 'component/cardMedia';
import TruncatedText from 'component/common/truncated-text'; import TruncatedText from 'component/common/truncated-text';
import classnames from 'classnames';
/*
This component can probably be combined with FileTile
Currently the only difference is showing the number of files/empty channel
*/
type Props = { type Props = {
uri: string, uri: string,
isResolvingUri: boolean, isResolvingUri: boolean,
totalItems: number, totalItems: number,
size: string,
claim: ?{ claim: ?{
claim_id: string, claim_id: string,
name: string, name: string,
@ -21,6 +18,10 @@ type Props = {
}; };
class ChannelTile extends React.PureComponent<Props> { class ChannelTile extends React.PureComponent<Props> {
static defaultProps = {
size: 'regular',
};
componentDidMount() { componentDidMount() {
const { uri, resolveUri } = this.props; const { uri, resolveUri } = this.props;
@ -36,27 +37,52 @@ class ChannelTile extends React.PureComponent<Props> {
} }
render() { render() {
const { claim, navigate, isResolvingUri, totalItems, uri } = this.props; const { claim, navigate, isResolvingUri, totalItems, uri, size } = this.props;
let channelName, channelId; let channelName;
if (claim) { if (claim) {
channelName = claim.name; channelName = claim.name;
channelId = claim.claim_id;
} }
const onClick = () => navigate('/show', { uri }); const onClick = () => navigate('/show', { uri });
return ( return (
<section className="file-tile card--link" onClick={onClick} role="button"> <section
onClick={onClick}
role="button"
className={classnames('file-tile card--link', {
'file-tile--small': size === 'small',
'file-tile--large': size === 'large',
})}
>
<CardMedia title={channelName} thumbnail={null} /> <CardMedia title={channelName} thumbnail={null} />
<div className="file-tile__info"> <div className="file-tile__info">
{isResolvingUri && <div className="card__title--small">{__('Loading...')}</div>} {isResolvingUri && (
<div
className={classnames({
'card__title--small': size !== 'large',
'card__title--large': size === 'large',
})}
>
{__('Loading...')}
</div>
)}
{!isResolvingUri && ( {!isResolvingUri && (
<React.Fragment> <React.Fragment>
<div className="card__title--small card__title--file"> <div
className={classnames({
'card__title--file': size === 'regular',
'card__title--x-small': size === 'small',
'card__title--large': size === 'large',
})}
>
<TruncatedText lines={1}>{channelName || uri}</TruncatedText> <TruncatedText lines={1}>{channelName || uri}</TruncatedText>
</div> </div>
<div className="card__subtitle"> <div
className={classnames('card__subtitle', {
'card__subtitle--large': size === 'large',
})}
>
{totalItems > 0 && ( {totalItems > 0 && (
<span> <span>
{totalItems} {totalItems === 1 ? 'file' : 'files'} {totalItems} {totalItems === 1 ? 'file' : 'files'}

View file

@ -1,9 +1,10 @@
// @flow // @flow
import * as React from 'react'; import * as React from 'react';
import * as settings from 'constants/settings'; import * as settings from 'constants/settings';
import { isURIValid, normalizeURI } from 'lbry-redux'; import { isURIValid, normalizeURI, parseURI } from 'lbry-redux';
import { FormField, FormRow } from 'component/common/form'; import { FormField, FormRow } from 'component/common/form';
import FileTile from 'component/fileTile'; import FileTile from 'component/fileTile';
import ChannelTile from 'component/channelTile';
import FileListSearch from 'component/fileListSearch'; import FileListSearch from 'component/fileListSearch';
import Page from 'component/page'; import Page from 'component/page';
@ -32,13 +33,27 @@ class SearchPage extends React.PureComponent<Props> {
render() { render() {
const { query, resultCount } = this.props; const { query, resultCount } = this.props;
const isValid = isURIValid(query);
let uri;
let isChannel;
if (isValid) {
uri = normalizeURI(query);
({ isChannel } = parseURI(uri));
}
return ( return (
<Page noPadding> <Page noPadding>
{query && {query &&
isURIValid(query) && ( isValid && (
<div className="search__top"> <div className="search__top">
<div className="file-list__header">{`lbry://${query}`}</div> <div className="file-list__header">{`lbry://${query}`}</div>
<FileTile size="large" displayHiddenMessage uri={normalizeURI(query)} /> {isChannel ? (
<ChannelTile size="large" uri={uri} />
) : (
<FileTile size="large" displayHiddenMessage uri={uri} />
)}
</div> </div>
)} )}
<div className="search__content"> <div className="search__content">