Revamp "file not available" message

- Don't fade out tile
 - Display message in place of buttons with an option to bypass the
   message
 - Factor out message into its own FileUnavailableMessage component
This commit is contained in:
Alex Liebowitz 2017-01-21 01:52:32 -05:00
parent 42517587ee
commit e5b4aaf175
3 changed files with 29 additions and 22 deletions

View file

@ -2,6 +2,7 @@ import React from 'react';
import lbry from '../lbry.js';
import {Link} from '../component/link.js';
import {Icon} from '../component/common.js';
import FileUnavailableMessage from '../component/file-unavailable-message.js';
import Modal from './modal.js';
import FormField from './form.js';
import {DropDownMenu, DropDownMenuItem} from './menu.js';
@ -71,6 +72,8 @@ export let FileActions = React.createClass({
deleteChecked: false,
attemptingDownload: false,
attemptingRemove: false,
available: null,
forceShowActions: false,
}
},
onFileInfoUpdate: function(fileInfo) {
@ -136,6 +139,11 @@ export let FileActions = React.createClass({
modal: 'confirmRemove',
});
},
showActions: function() {
this.setState({
forceShowActions: true,
});
},
handleRemoveConfirmed: function() {
if (this.props.streamName) {
lbry.removeFile(this.props.sdHash, this.props.streamName, this.state.deleteChecked);
@ -156,6 +164,15 @@ export let FileActions = React.createClass({
componentDidMount: function() {
this._isMounted = true;
this._fileInfoSubscribeId = lbry.fileInfoSubscribe(this.props.sdHash, this.onFileInfoUpdate);
lbry.getPeersForBlobHash(this.props.sdHash, (peers) => {
if (!this._isMounted) {
return;
}
this.setState({
available: peers.length > 0,
});
});
},
componentWillUnmount: function() {
this._isMounted = false;
@ -168,6 +185,11 @@ export let FileActions = React.createClass({
{
return <section className="file-actions--stub"></section>;
}
if (this.state.available === false && !this.state.forceShowActions) {
return <FileUnavailableMessage onShowActionsClicked={this.showActions} />;
}
const openInFolderMessage = window.navigator.platform.startsWith('Mac') ? 'Open in Finder' : 'Open in Folder',
showMenu = !!this.state.fileInfo;
@ -180,11 +202,12 @@ export let FileActions = React.createClass({
label = this.state.fileInfo ? progress.toFixed(0) + '% complete' : 'Connecting...',
labelWithIcon = <span className="button__content"><Icon icon="icon-download" />{label}</span>;
linkBlock =
linkBlock = (
<div className="faux-button-block file-actions__download-status-bar">
<div className="faux-button-block file-actions__download-status-bar-overlay" style={{ width: progress + '%' }}>{labelWithIcon}</div>
{labelWithIcon}
</div>;
</div>
);
} else {
linkBlock = <Link button="text" label="Open" icon="icon-folder-open" onClick={this.onOpenClick} />;
}

View file

@ -74,13 +74,6 @@ export let FileTileStream = React.createClass({
hidePrice: false
}
},
componentWillMount: function() {
lbry.getPeersForBlobHash(this.props.sdHash, (peers) => {
this.setState({
available: peers.length > 0,
});
});
},
componentDidMount: function() {
this._isMounted = true;
if (this.props.hideOnRemove) {
@ -114,26 +107,16 @@ export let FileTileStream = React.createClass({
}
},
render: function() {
const isUnavailable = this.state.available === false;
if (this.state.isHidden || (!lbry.getClientSetting('showUnavailable') && isUnavailable)) {
if (this.state.isHidden) {
return null;
}
const metadata = this.props.metadata || {},
obscureNsfw = this.props.obscureNsfw && metadata.nsfw,
title = metadata.title ? metadata.title : ('lbry://' + this.props.name),
showAsAvailable = this.state.available !== false,
unavailableMessage = ("The content on LBRY is hosted by its users. It appears there are no " +
"users connected that have this file at the moment.");
title = metadata.title ? metadata.title : ('lbry://' + this.props.name);
return (
<section className={ 'file-tile card ' + (obscureNsfw ? 'card-obscured ' : '') } onMouseEnter={this.handleMouseOver} onMouseLeave={this.handleMouseOut}>
{isUnavailable
? <div className='file-tile__not-available-message'>
This file is not currently available. <ToolTipLink label="Why?" tooltip={unavailableMessage} className="not-available-tooltip-link" />
</div>
: null}
<div className={"row-fluid card-content file-tile__row" + (isUnavailable ? ' file-tile__row--unavailable' : '')}>
<div className={"row-fluid card-content file-tile__row"}>
<div className="span3">
<a href={'/?show=' + this.props.name}><Thumbnail className="file-tile__thumbnail" src={metadata.thumbnail} alt={'Photo for ' + (title || this.props.name)} /></a>
</div>

View file

@ -7,6 +7,7 @@
@import "component/_table";
@import "component/_file-actions.scss";
@import "component/_file-tile.scss";
@import "component/_file-unavailable-message.scss";
@import "component/_menu.scss";
@import "component/_tooltiplink.scss";
@import "component/_tooltip.scss";