From f23bc00af6bcc7b12ad84729a97bc65d6874441d Mon Sep 17 00:00:00 2001 From: Sean Yesmunt <sean@lbry.io> Date: Mon, 13 Aug 2018 23:52:09 -0400 Subject: [PATCH 1/3] default to search --- src/renderer/component/fileTile/view.jsx | 38 ++++++++++++++----- .../component/recommendedContent/view.jsx | 13 ++----- src/renderer/page/search/view.jsx | 34 ++++++----------- src/renderer/scss/_gui.scss | 1 + src/renderer/scss/_vars.scss | 2 + src/renderer/scss/component/_card.scss | 17 +++++++-- src/renderer/scss/component/_file-list.scss | 9 ++++- src/renderer/scss/component/_search.scss | 10 +++++ src/renderer/types/claim.js | 2 +- 9 files changed, 78 insertions(+), 48 deletions(-) diff --git a/src/renderer/component/fileTile/view.jsx b/src/renderer/component/fileTile/view.jsx index acaf49791..5a05aeda4 100644 --- a/src/renderer/component/fileTile/view.jsx +++ b/src/renderer/component/fileTile/view.jsx @@ -28,7 +28,7 @@ type Props = { hideNoResult: boolean, // don't show the tile if there is no claim at this uri displayHiddenMessage?: boolean, displayDescription?: boolean, - small?: boolean, + size: string, }; class FileTile extends React.PureComponent<Props> { @@ -36,6 +36,7 @@ class FileTile extends React.PureComponent<Props> { showUri: false, showLocal: false, displayDescription: true, + size: 'regular', }; componentDidMount() { @@ -65,7 +66,7 @@ class FileTile extends React.PureComponent<Props> { hideNoResult, displayHiddenMessage, displayDescription, - small, + size, } = this.props; const shouldHide = !claimIsMine && obscureNsfw && metadata && metadata.nsfw; @@ -98,7 +99,8 @@ class FileTile extends React.PureComponent<Props> { return !name && hideNoResult ? null : ( <section className={classnames('file-tile card--link', { - 'file-tile--small': small, + 'file-tile--small': size === 'small', + 'file-tile--large': size === 'large', })} onClick={onClick} onKeyUp={onClick} @@ -107,20 +109,31 @@ class FileTile extends React.PureComponent<Props> { > <CardMedia title={title || name} thumbnail={thumbnail} /> <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 && ( <React.Fragment> <div className={classnames({ - 'card__title--file': !small, - 'card__title--x-small': small, + 'card__title--file': size === 'regular', + 'card__title--x-small': size === 'small', + 'card__title--large': size === 'large', })} > - <TruncatedText lines={small ? 2 : 3}>{title || name}</TruncatedText> + <TruncatedText lines={size === 'small' ? 2 : 3}>{title || name}</TruncatedText> </div> <div className={classnames('card__subtitle', { - 'card__subtitle--x-small': small, + 'card__subtitle--x-small': size === 'small', + 'card__subtitle--large': size === 'large', })} > <span className="file-tile__channel"> @@ -133,8 +146,13 @@ class FileTile extends React.PureComponent<Props> { {showLocal && isDownloaded && <Icon icon={icons.LOCAL} />} </div> {displayDescription && ( - <div className="card__subtext card__subtext--small"> - <TruncatedText lines={3}>{description}</TruncatedText> + <div + className={classnames('card__subtext', { + 'card__subtext--small': size !== 'small', + 'card__subtext--large': size === 'large', + })} + > + <TruncatedText lines={size === 'large' ? 4 : 3}>{description}</TruncatedText> </div> )} {!name && ( diff --git a/src/renderer/component/recommendedContent/view.jsx b/src/renderer/component/recommendedContent/view.jsx index a713eaa26..5248d3859 100644 --- a/src/renderer/component/recommendedContent/view.jsx +++ b/src/renderer/component/recommendedContent/view.jsx @@ -10,7 +10,7 @@ type Props = { search: string => void, }; -export default class RecommendedContent extends React.PureComponent<Props, State> { +export default class RecommendedContent extends React.PureComponent<Props> { constructor() { super(); @@ -37,14 +37,7 @@ export default class RecommendedContent extends React.PureComponent<Props, State const { claim, search } = this.props; if (claim && claim.value && claim.value.stream && claim.value.stream.metadata) { - const { - value: { - stream: { - metadata: { title }, - }, - }, - } = claim; - + const { title } = claim.value.stream.metadata; search(title); this.didSearch = true; } @@ -62,7 +55,7 @@ export default class RecommendedContent extends React.PureComponent<Props, State recommendedContent.length && recommendedContent.map(recommendedUri => ( <FileTile - small + size="small" hideNoResult displayDescription={false} key={recommendedUri} diff --git a/src/renderer/page/search/view.jsx b/src/renderer/page/search/view.jsx index 5db8016ee..4b2497797 100644 --- a/src/renderer/page/search/view.jsx +++ b/src/renderer/page/search/view.jsx @@ -5,10 +5,7 @@ import { isURIValid, normalizeURI } from 'lbry-redux'; import { FormField, FormRow } from 'component/common/form'; import FileTile from 'component/fileTile'; import FileListSearch from 'component/fileListSearch'; -import ToolTip from 'component/common/tooltip'; import Page from 'component/page'; -import Icon from 'component/common/icon'; -import * as icons from 'constants/icons'; type Props = { query: ?string, @@ -36,8 +33,15 @@ class SearchPage extends React.PureComponent<Props> { render() { const { query, resultCount } = this.props; return ( - <Page> - <React.Fragment> + <Page noPadding> + {query && + isURIValid(query) && ( + <div className="search__top"> + <div className="file-list__header">{`lbry://${query}`}</div> + <FileTile size="large" displayHiddenMessage uri={normalizeURI(query)} /> + </div> + )} + <div className="search__content"> <FormRow alignRight> <FormField type="number" @@ -61,23 +65,9 @@ class SearchPage extends React.PureComponent<Props> { // /> } </FormRow> - </React.Fragment> - {isURIValid(query) && ( - <React.Fragment> - <div className="file-list__header"> - {__('Exact URL')} - <ToolTip - icon - body={__('This is the resolution of a LBRY URL and not controlled by LBRY Inc.')} - > - <Icon icon={icons.HELP} /> - </ToolTip> - </div> - <FileTile showUri displayHiddenMessage uri={normalizeURI(query)} /> - </React.Fragment> - )} - <FileListSearch query={query} /> - <div className="help">{__('These search results are provided by LBRY, Inc.')}</div> + <FileListSearch query={query} /> + <div className="help">{__('These search results are provided by LBRY, Inc.')}</div> + </div> </Page> ); } diff --git a/src/renderer/scss/_gui.scss b/src/renderer/scss/_gui.scss index 33899285f..74e51a715 100644 --- a/src/renderer/scss/_gui.scss +++ b/src/renderer/scss/_gui.scss @@ -196,6 +196,7 @@ p { .main--no-padding { padding-left: 0; padding-right: 0; + padding-top: 0; margin: 0; } diff --git a/src/renderer/scss/_vars.scss b/src/renderer/scss/_vars.scss index 64fa23cfe..ce5caddf4 100644 --- a/src/renderer/scss/_vars.scss +++ b/src/renderer/scss/_vars.scss @@ -162,6 +162,8 @@ $large-breakpoint: 1921px; --file-tile-media-width: calc(125px * (16 / 9)); --file-tile-media-height-small: 60px; --file-tile-media-width-small: calc(60px * (16 / 9)); + --file-tile-media-height-large: 200px; + --file-tile-media-width-large: calc(200px * (16 / 9)); --file-page-min-width: 400px; --recommended-content-width: 300px; --recommended-content-width-medium: 400px; diff --git a/src/renderer/scss/component/_card.scss b/src/renderer/scss/component/_card.scss index 57f107813..c8fcf54b2 100644 --- a/src/renderer/scss/component/_card.scss +++ b/src/renderer/scss/component/_card.scss @@ -125,6 +125,10 @@ line-height: 12px; } +.card__title--large { + font-size: 22px; +} + .card__title--file { font-family: 'metropolis-bold'; font-size: 28px; @@ -156,6 +160,11 @@ font-size: 12px; } +.card__subtitle--large { + font-size: 18px; + padding-bottom: $spacing-vertical * 1/3; +} + .card__subtitle-price { padding-top: $spacing-vertical * 1/3; } @@ -241,6 +250,10 @@ font-size: calc(var(--font-size-subtext-multiple) * 0.8em); } +.card__subtext--large { + font-size: calc(var(--font-size-subtext-multiple) * 0.9em); +} + .card__actions { margin-top: $spacing-vertical * 2/3; display: flex; @@ -308,10 +321,6 @@ width: 100%; padding-top: $spacing-vertical; - &:first-of-type { - padding-top: 0; - } - &:last-of-type { padding-bottom: $spacing-vertical * 2/3; } diff --git a/src/renderer/scss/component/_file-list.scss b/src/renderer/scss/component/_file-list.scss index ee2583015..bff379d27 100644 --- a/src/renderer/scss/component/_file-list.scss +++ b/src/renderer/scss/component/_file-list.scss @@ -12,7 +12,7 @@ } .file-list__header { - margin-top: $spacing-vertical * 4/3; + padding-top: $spacing-vertical * 4/3; font-size: 24px; .tooltip { @@ -49,6 +49,13 @@ } } +.file-tile.file-tile--large { + .card__media { + height: var(--file-tile-media-height-large); + flex: 0 0 var(--file-tile-media-width-large); + } +} + .file-tile__info { display: flex; flex-direction: column; diff --git a/src/renderer/scss/component/_search.scss b/src/renderer/scss/component/_search.scss index 0bc2b341b..fb61a21e5 100644 --- a/src/renderer/scss/component/_search.scss +++ b/src/renderer/scss/component/_search.scss @@ -85,7 +85,17 @@ background-color: var(--color-secondary); } +.search__top { + padding: 0 $spacing-width $spacing-width; + background-color: var(--card-bg); +} + +.search__content { + padding: $spacing-width; +} + .search__results { + margin-top: -$spacing-width; padding-bottom: $spacing-vertical; flex-flow: wrap column; diff --git a/src/renderer/types/claim.js b/src/renderer/types/claim.js index ec060f2e6..1ed0d64c9 100644 --- a/src/renderer/types/claim.js +++ b/src/renderer/types/claim.js @@ -35,7 +35,7 @@ export type Claim = { certificateId: ?string, }, stream: { - metadata: ?Metadata, + metadata: Metadata, }, }, }; From 5a905fe174c4d0e34108cbe40fec85609e202a5a Mon Sep 17 00:00:00 2001 From: Sean Yesmunt <sean@lbry.io> Date: Tue, 14 Aug 2018 17:06:55 -0400 Subject: [PATCH 2/3] use search selector and add file tile channel links --- src/renderer/component/fileListSearch/view.jsx | 2 +- src/renderer/component/fileTile/view.jsx | 5 ++--- src/renderer/component/wunderbar/index.js | 2 ++ src/renderer/types/claim.js | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/renderer/component/fileListSearch/view.jsx b/src/renderer/component/fileListSearch/view.jsx index baf812d22..b68ebb4de 100644 --- a/src/renderer/component/fileListSearch/view.jsx +++ b/src/renderer/component/fileListSearch/view.jsx @@ -36,7 +36,7 @@ class FileListSearch extends React.PureComponent<Props> { <React.Fragment> <div className="search__results"> <div className="search-result__row"> - <div className="file-list__header">{__('Content')}</div> + <div className="file-list__header">{__('Search Results')}</div> <HiddenNsfwClaims uris={uris} /> {!isSearching && fileResults.length ? ( fileResults.map(uri => <FileTile key={uri} uri={uri} />) diff --git a/src/renderer/component/fileTile/view.jsx b/src/renderer/component/fileTile/view.jsx index 5a05aeda4..100d90f55 100644 --- a/src/renderer/component/fileTile/view.jsx +++ b/src/renderer/component/fileTile/view.jsx @@ -9,6 +9,7 @@ import Icon from 'component/common/icon'; import Button from 'component/button'; import classnames from 'classnames'; import FilePrice from 'component/filePrice'; +import UriIndicator from 'component/uriIndicator'; type Props = { showUri: boolean, @@ -90,10 +91,8 @@ class FileTile extends React.PureComponent<Props> { const onClick = () => navigate('/show', { uri }); let name; - let channel; if (claim) { ({ name } = claim); - channel = claim.channel_name; } return !name && hideNoResult ? null : ( @@ -137,7 +136,7 @@ class FileTile extends React.PureComponent<Props> { })} > <span className="file-tile__channel"> - {showUri ? uri : channel || __('Anonymous')} + {showUri ? uri : <UriIndicator uri={uri} link />} </span> </div> <div className="card__file-properties"> diff --git a/src/renderer/component/wunderbar/index.js b/src/renderer/component/wunderbar/index.js index 27a617452..1bbcd3b26 100644 --- a/src/renderer/component/wunderbar/index.js +++ b/src/renderer/component/wunderbar/index.js @@ -2,6 +2,7 @@ import { connect } from 'react-redux'; import { selectSearchState as selectSearch, selectWunderBarAddress, + selectSearchSuggestions, doUpdateSearchQuery, doFocusSearchInput, doBlurSearchInput, @@ -23,6 +24,7 @@ const select = state => { return { ...searchState, wunderbarValue, + suggestions: selectSearchSuggestions(state), resultCount: makeSelectClientSetting(settings.RESULT_COUNT)(state), }; }; diff --git a/src/renderer/types/claim.js b/src/renderer/types/claim.js index 1ed0d64c9..d45ee3bf3 100644 --- a/src/renderer/types/claim.js +++ b/src/renderer/types/claim.js @@ -32,7 +32,7 @@ export type Claim = { valid_at_height: number, value: ?{ publisherSignature: ?{ - certificateId: ?string, + certificateId: string, }, stream: { metadata: Metadata, From 82d0a7831009f24de8b1fca1bcc411b77e2638bd Mon Sep 17 00:00:00 2001 From: Sean Yesmunt <sean@lbry.io> Date: Mon, 20 Aug 2018 14:59:12 -0400 Subject: [PATCH 3/3] update lbry-redux --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f24ee0ac3..433466551 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "formik": "^0.10.4", "hast-util-sanitize": "^1.1.2", "keytar": "^4.2.1", - "lbry-redux": "lbryio/lbry-redux#ada4880c5d0758c7973aff9d443a87874d98b320", + "lbry-redux": "lbryio/lbry-redux#31f7afa8a37f5741dac01fc1ecdf153f3bed95dc", "localforage": "^1.7.1", "mammoth": "^1.4.6", "mime": "^2.3.1",