Few UX Improvements #2638
24 changed files with 189 additions and 95 deletions
|
@ -98,7 +98,7 @@ class CardVerify extends React.Component<Props, State> {
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
if (this.loadPromise) {
|
if (this.loadPromise) {
|
||||||
this.loadPromise.cancel();
|
this.loadPromise.reject();
|
||||||
}
|
}
|
||||||
if (CardVerify.stripeHandler && this.state.open) {
|
if (CardVerify.stripeHandler && this.state.open) {
|
||||||
CardVerify.stripeHandler.close();
|
CardVerify.stripeHandler.close();
|
||||||
|
|
|
@ -57,7 +57,7 @@ function ClaimListDiscover(props: Props) {
|
||||||
channel_ids?: Array<string>,
|
channel_ids?: Array<string>,
|
||||||
release_time?: string,
|
release_time?: string,
|
||||||
not_tags?: Array<string>,
|
not_tags?: Array<string>,
|
||||||
} = { page_size: PAGE_SIZE, page };
|
} = { page_size: PAGE_SIZE, page, no_totals: true };
|
||||||
const newTags = tagsString.split(',');
|
const newTags = tagsString.split(',');
|
||||||
const newChannelIds = channelsIdString.split(',');
|
const newChannelIds = channelsIdString.split(',');
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,11 @@ export function CommentCreate(props: Props) {
|
||||||
'During the alpha, comments are not decentralized or censorship resistant (but we repeat ourselves).'
|
'During the alpha, comments are not decentralized or censorship resistant (but we repeat ourselves).'
|
||||||
)}
|
)}
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
{__(
|
||||||
|
'For the initial release, deleting or editing comments is not possible. Please be mindful of this when posting.'
|
||||||
|
)}
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
{__(
|
{__(
|
||||||
'When the alpha ends, we will attempt to transition comments, but do not promise to do so. Any transition will likely involve publishing previous comments under a single archive handle.'
|
'When the alpha ends, we will attempt to transition comments, but do not promise to do so. Any transition will likely involve publishing previous comments under a single archive handle.'
|
||||||
|
|
|
@ -253,4 +253,10 @@ export const icons = {
|
||||||
<path d="M7 11V7a5 5 0 0 1 9.9-1" />
|
<path d="M7 11V7a5 5 0 0 1 9.9-1" />
|
||||||
</g>
|
</g>
|
||||||
),
|
),
|
||||||
|
[ICONS.SUPPORT]: buildIcon(
|
||||||
|
<g>
|
||||||
|
<polyline points="23 6 13.5 15.5 8.5 10.5 1 18" />
|
||||||
|
<polyline points="17 6 23 6 23 12" />
|
||||||
|
</g>
|
||||||
|
),
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,6 +3,7 @@ import React from 'react';
|
||||||
import { regexInvalidURI } from 'lbry-redux';
|
import { regexInvalidURI } from 'lbry-redux';
|
||||||
import classnames from 'classnames';
|
import classnames from 'classnames';
|
||||||
import FileSelector from 'component/common/file-selector';
|
import FileSelector from 'component/common/file-selector';
|
||||||
|
import Button from 'component/button';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
name: ?string,
|
name: ?string,
|
||||||
|
@ -39,6 +40,12 @@ function PublishFile(props: Props) {
|
||||||
|
|
||||||
<div className="card__content">
|
<div className="card__content">
|
||||||
<FileSelector currentPath={filePath} onFileChosen={handleFileChange} />
|
<FileSelector currentPath={filePath} onFileChosen={handleFileChange} />
|
||||||
|
{!isStillEditing && (
|
||||||
|
<p className="help">
|
||||||
|
{__('For video content, use MP4s in H264/AAC format for best compatibility.')}{' '}
|
||||||
|
<Button button="link" label={__('Learn more')} href="https://lbry.com/faq/how-to-publish" />.
|
||||||
|
</p>
|
||||||
|
)}
|
||||||
{!!isStillEditing && name && (
|
{!!isStillEditing && name && (
|
||||||
<p className="help">
|
<p className="help">
|
||||||
{/* @i18nfixme */}
|
{/* @i18nfixme */}
|
||||||
|
|
|
@ -13,6 +13,8 @@ function BidHelpText(props: Props) {
|
||||||
if (uri) {
|
if (uri) {
|
||||||
if (isResolvingUri) {
|
if (isResolvingUri) {
|
||||||
bidHelpText = __('Checking the winning claim amount...');
|
bidHelpText = __('Checking the winning claim amount...');
|
||||||
|
} else if (amountNeededForTakeover === 0) {
|
||||||
|
bidHelpText = __('You currently have the highest bid for this name.');
|
||||||
} else if (!amountNeededForTakeover) {
|
} else if (!amountNeededForTakeover) {
|
||||||
bidHelpText = __('Any amount will give you the winning bid.');
|
bidHelpText = __('Any amount will give you the winning bid.');
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -25,36 +25,16 @@ class SocialShare extends React.PureComponent<Props> {
|
||||||
input: ?HTMLInputElement;
|
input: ?HTMLInputElement;
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { claim, isChannel } = this.props;
|
const { claim } = this.props;
|
||||||
const { claim_id: claimId, name: claimName } = claim;
|
const { short_url: shortUrl } = claim;
|
||||||
|
|
||||||
const { speechShareable, onDone } = this.props;
|
const { speechShareable, onDone } = this.props;
|
||||||
const signingChannel = claim.signing_channel;
|
|
||||||
const channelClaimId = signingChannel && signingChannel.claim_id;
|
|
||||||
const channelName = signingChannel && signingChannel.name;
|
|
||||||
|
|
||||||
const getLbryTvUri = (): string => {
|
|
||||||
return `${claimName}/${claimId}`;
|
|
||||||
};
|
|
||||||
|
|
||||||
const getLbryUri = (): string => {
|
|
||||||
if (isChannel) {
|
|
||||||
// For channel claims, the channel name (@something) is in `claim.name`
|
|
||||||
return `${claimName}#${claimId}`;
|
|
||||||
} else {
|
|
||||||
// If it's for a regular claim, check if it has an associated channel
|
|
||||||
return channelName && channelClaimId
|
|
||||||
? `${channelName}#${channelClaimId}/${claimName}`
|
|
||||||
: `${claimName}#${claimId}`;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const lbryTvPrefix = 'https://beta.lbry.tv/';
|
const lbryTvPrefix = 'https://beta.lbry.tv/';
|
||||||
const lbryPrefix = 'https://open.lbry.com/';
|
const lbryPrefix = 'https://open.lbry.com/';
|
||||||
const lbryUri = getLbryUri();
|
const lbryUri = shortUrl.split('lbry://')[1];
|
||||||
const lbryTvUri = getLbryTvUri();
|
const lbryTvUri = lbryUri.replace('#', '/');
|
||||||
const encodedLbryURL: string = `${lbryPrefix}${encodeURIComponent(lbryUri)}`;
|
const encodedLbryURL: string = `${lbryPrefix}${encodeURIComponent(lbryUri)}`;
|
||||||
const lbryURL: string = `${lbryPrefix}${getLbryUri()}`;
|
const lbryURL: string = `${lbryPrefix}${lbryUri}`;
|
||||||
const encodedLbryTvUrl = `${lbryTvPrefix}${encodeURIComponent(lbryTvUri)}`;
|
const encodedLbryTvUrl = `${lbryTvPrefix}${encodeURIComponent(lbryTvUri)}`;
|
||||||
const lbryTvUrl = `${lbryTvPrefix}${lbryTvUri}`;
|
const lbryTvUrl = `${lbryTvPrefix}${lbryTvUri}`;
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,24 @@
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { selectEmailToVerify, doUserResendVerificationEmail, doUserCheckEmailVerified, selectUser } from 'lbryinc';
|
import {
|
||||||
|
selectEmailToVerify,
|
||||||
|
doUserResendVerificationEmail,
|
||||||
|
doUserCheckEmailVerified,
|
||||||
|
selectUser,
|
||||||
|
doFetchAccessToken,
|
||||||
|
selectAccessToken,
|
||||||
|
} from 'lbryinc';
|
||||||
import UserEmailVerify from './view';
|
import UserEmailVerify from './view';
|
||||||
|
|
||||||
const select = state => ({
|
const select = state => ({
|
||||||
email: selectEmailToVerify(state),
|
email: selectEmailToVerify(state),
|
||||||
user: selectUser(state),
|
user: selectUser(state),
|
||||||
|
accessToken: selectAccessToken(state),
|
||||||
});
|
});
|
||||||
|
|
||||||
const perform = dispatch => ({
|
const perform = dispatch => ({
|
||||||
resendVerificationEmail: email => dispatch(doUserResendVerificationEmail(email)),
|
resendVerificationEmail: email => dispatch(doUserResendVerificationEmail(email)),
|
||||||
checkEmailVerified: () => dispatch(doUserCheckEmailVerified()),
|
checkEmailVerified: () => dispatch(doUserCheckEmailVerified()),
|
||||||
|
fetchAccessToken: () => dispatch(doFetchAccessToken()),
|
||||||
});
|
});
|
||||||
|
|
||||||
export default connect(
|
export default connect(
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
// @flow
|
// @flow
|
||||||
import * as React from 'react';
|
import type { Node } from 'react';
|
||||||
|
import React, { useEffect } from 'react';
|
||||||
import Button from 'component/button';
|
import Button from 'component/button';
|
||||||
import { FormField } from 'component/common/form';
|
import { FormField } from 'component/common/form';
|
||||||
import UserEmailNew from 'component/userEmailNew';
|
import UserEmailNew from 'component/userEmailNew';
|
||||||
|
@ -7,22 +8,19 @@ import UserEmailVerify from 'component/userEmailVerify';
|
||||||
import cookie from 'cookie';
|
import cookie from 'cookie';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
cancelButton: React.Node,
|
cancelButton: Node,
|
||||||
email: string,
|
email: string,
|
||||||
resendVerificationEmail: string => void,
|
resendVerificationEmail: string => void,
|
||||||
checkEmailVerified: () => void,
|
checkEmailVerified: () => void,
|
||||||
user: {
|
user: {
|
||||||
has_verified_email: boolean,
|
has_verified_email: boolean,
|
||||||
},
|
},
|
||||||
|
fetchAccessToken: () => void,
|
||||||
|
accessToken: string,
|
||||||
};
|
};
|
||||||
|
|
||||||
function UserEmail(props: Props) {
|
function UserEmail(props: Props) {
|
||||||
const { email, user } = props;
|
const { email, user, accessToken, fetchAccessToken } = props;
|
||||||
let isVerified = false;
|
|
||||||
if (user) {
|
|
||||||
isVerified = user.has_verified_email;
|
|
||||||
}
|
|
||||||
|
|
||||||
const buttonsProps = IS_WEB
|
const buttonsProps = IS_WEB
|
||||||
? {
|
? {
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
|
@ -32,6 +30,17 @@ function UserEmail(props: Props) {
|
||||||
}
|
}
|
||||||
: { href: 'https://lbry.com/faq/how-to-change-email' };
|
: { href: 'https://lbry.com/faq/how-to-change-email' };
|
||||||
|
|
||||||
|
let isVerified = false;
|
||||||
|
if (user) {
|
||||||
|
isVerified = user.has_verified_email;
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!accessToken) {
|
||||||
|
fetchAccessToken();
|
||||||
|
}
|
||||||
|
}, [accessToken, fetchAccessToken]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<section className="card card--section">
|
<section className="card card--section">
|
||||||
{!email && <UserEmailNew />}
|
{!email && <UserEmailNew />}
|
||||||
|
@ -51,14 +60,23 @@ function UserEmail(props: Props) {
|
||||||
type="text"
|
type="text"
|
||||||
className="form-field--copyable"
|
className="form-field--copyable"
|
||||||
readOnly
|
readOnly
|
||||||
label={__('Your Email')}
|
label={
|
||||||
|
<React.Fragment>
|
||||||
|
{__('Your Email')}{' '}
|
||||||
|
<Button
|
||||||
|
button="link"
|
||||||
|
label={__('Update mailing preferences')}
|
||||||
|
href={`http://lbry.io/list/edit/${accessToken}`}
|
||||||
|
/>
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
value={email}
|
value={email}
|
||||||
inputButton={<Button button="inverse" label={__('Change')} {...buttonsProps} />}
|
inputButton={<Button button="inverse" label={__('Change')} {...buttonsProps} />}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
<p className="help">
|
<p className="help">
|
||||||
{`${__(
|
{`${__(
|
||||||
'This information is disclosed only to LBRY, Inc. and not to the LBRY network. It is only required to earn LBRY rewards.'
|
'This information is disclosed only to LBRY, Inc. and not to the LBRY network. It is only required to save account information and earn rewards.'
|
||||||
)} `}
|
)} `}
|
||||||
</p>
|
</p>
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
|
|
|
@ -30,14 +30,43 @@ class UserVerify extends React.PureComponent<Props> {
|
||||||
<header className="card__header--flat">
|
<header className="card__header--flat">
|
||||||
<h1 className="card__title">{__('Final Human Proof')}</h1>
|
<h1 className="card__title">{__('Final Human Proof')}</h1>
|
||||||
<p className="card__subtitle">
|
<p className="card__subtitle">
|
||||||
Finally, please complete <strong>one and only one</strong> of the options below.
|
To be approved for rewards, please complete <strong>one and only one</strong> of the options below. This
|
||||||
|
is optional, and you can be skipped at the bottom.
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section className="card card--section">
|
<section className="card card--section">
|
||||||
<header className="card__header">
|
<header className="card__header">
|
||||||
<h2 className="card__title">{__('1) Proof via Credit')}</h2>
|
<h2 className="card__title">{__('1) Proof via Phone')}</h2>
|
||||||
|
<p className="card__subtitle">
|
||||||
|
{`${__(
|
||||||
|
'You will receive an SMS text message confirming that your phone number is correct. Does not work for Canada and possibly other regions'
|
||||||
|
)}`}
|
||||||
|
</p>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div className="card__content">
|
||||||
|
<div className="card__actions">
|
||||||
|
<Button
|
||||||
|
onClick={() => {
|
||||||
|
verifyPhone();
|
||||||
|
}}
|
||||||
|
button="inverse"
|
||||||
|
label={__('Submit Phone Number')}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="help">
|
||||||
|
{__('Standard messaging rates apply. LBRY will not text or call you otherwise. Having trouble?')}{' '}
|
||||||
|
<Button button="link" href="https://lbry.com/faq/phone" label={__('Read more.')} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="card card--section">
|
||||||
|
<header className="card__header">
|
||||||
|
<h2 className="card__title">{__('2) Proof via Credit')}</h2>
|
||||||
<p className="card__subtitle">
|
<p className="card__subtitle">
|
||||||
{`${__(
|
{`${__(
|
||||||
'If you have a valid credit or debit card, you can use it to instantly prove your humanity.'
|
'If you have a valid credit or debit card, you can use it to instantly prove your humanity.'
|
||||||
|
@ -69,32 +98,6 @@ class UserVerify extends React.PureComponent<Props> {
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section className="card card--section">
|
|
||||||
<header className="card__header">
|
|
||||||
<h2 className="card__title">{__('2) Proof via Phone')}</h2>
|
|
||||||
<p className="card__subtitle">
|
|
||||||
{`${__('You will receive an SMS text message confirming that your phone number is correct.')}`}
|
|
||||||
</p>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div className="card__content">
|
|
||||||
<div className="card__actions">
|
|
||||||
<Button
|
|
||||||
onClick={() => {
|
|
||||||
verifyPhone();
|
|
||||||
}}
|
|
||||||
button="inverse"
|
|
||||||
label={__('Submit Phone Number')}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="help">
|
|
||||||
{__('Standard messaging rates apply. Having trouble?')}{' '}
|
|
||||||
<Button button="link" href="https://lbry.com/faq/phone" label={__('Read more.')} />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section className="card card--section">
|
<section className="card card--section">
|
||||||
<header className="card__header">
|
<header className="card__header">
|
||||||
<h2 className="card__title">{__('3) Proof via Chat')}</h2>
|
<h2 className="card__title">{__('3) Proof via Chat')}</h2>
|
||||||
|
|
|
@ -71,9 +71,7 @@ class WalletAddress extends React.PureComponent<Props, State> {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="help">
|
<p className="help">
|
||||||
{__(
|
{__('You can generate a new address at any time, and any previous addresses will continue to work.')}
|
||||||
'You can generate a new address at any time, and any previous addresses will continue to work. Using multiple addresses can be helpful for keeping track of incoming payments from multiple sources.'
|
|
||||||
)}
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import { FormField, Form } from 'component/common/form';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
uri: string,
|
uri: string,
|
||||||
|
claimIsMine: boolean,
|
||||||
title: string,
|
title: string,
|
||||||
claim: StreamClaim,
|
claim: StreamClaim,
|
||||||
isPending: boolean,
|
isPending: boolean,
|
||||||
|
@ -69,7 +70,7 @@ class WalletSendTip extends React.PureComponent<Props, State> {
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { title, isPending, uri, onCancel } = this.props;
|
const { title, isPending, uri, onCancel, claimIsMine } = this.props;
|
||||||
const { tipAmount, tipError } = this.state;
|
const { tipAmount, tipError } = this.state;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -98,7 +99,10 @@ class WalletSendTip extends React.PureComponent<Props, State> {
|
||||||
}
|
}
|
||||||
helper={
|
helper={
|
||||||
<p>
|
<p>
|
||||||
{__(`This will appear as a tip for "${title}".`)}{' '}
|
{claimIsMine
|
||||||
|
? __('This will increase your overall bid amount for ')
|
||||||
|
: __('This will appear as a tip for ')}
|
||||||
|
{`"${title}" which will boost its ability to be discovered while active.`}{' '}
|
||||||
<Button label={__('Learn more')} button="link" href="https://lbry.com/faq/tipping" />
|
<Button label={__('Learn more')} button="link" href="https://lbry.com/faq/tipping" />
|
||||||
</p>
|
</p>
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,3 +69,4 @@ export const MUSIC_EQUALIZER = 'Sliders';
|
||||||
export const LIGHT = 'Sun';
|
export const LIGHT = 'Sun';
|
||||||
export const DARK = 'Moon';
|
export const DARK = 'Moon';
|
||||||
export const LIBRARY = 'Folder';
|
export const LIBRARY = 'Folder';
|
||||||
|
export const SUPPORT = 'TrendingUp';
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
export const TIP = 'tip';
|
export const TIP = 'tip';
|
||||||
|
export const SUPPORT = 'support';
|
||||||
|
|
|
@ -37,6 +37,17 @@ class ModalRevokeClaim extends React.PureComponent<Props> {
|
||||||
</p>
|
</p>
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
);
|
);
|
||||||
|
} else if (type === txnTypes.SUPPORT) {
|
||||||
|
return (
|
||||||
|
<React.Fragment>
|
||||||
|
<p>{__('Are you sure you want to remove this support?')}</p>
|
||||||
|
<p>
|
||||||
|
{__(
|
||||||
|
"These credits are permanently yours and can be removed at any time. Removing this support will reduce the claim's discoverability and return the LBC to your spendable balance."
|
||||||
|
)}
|
||||||
|
</p>
|
||||||
|
</React.Fragment>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
|
|
|
@ -7,11 +7,12 @@ import UriIndicator from 'component/uriIndicator';
|
||||||
type Props = {
|
type Props = {
|
||||||
closeModal: () => void,
|
closeModal: () => void,
|
||||||
uri: string,
|
uri: string,
|
||||||
|
claimIsMine: boolean,
|
||||||
};
|
};
|
||||||
|
|
||||||
class ModalSendTip extends React.PureComponent<Props> {
|
class ModalSendTip extends React.PureComponent<Props> {
|
||||||
render() {
|
render() {
|
||||||
const { closeModal, uri } = this.props;
|
const { closeModal, uri, claimIsMine } = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
|
@ -20,11 +21,11 @@ class ModalSendTip extends React.PureComponent<Props> {
|
||||||
type="custom"
|
type="custom"
|
||||||
title={
|
title={
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
{__('Send a tip to')} <UriIndicator uri={uri} />
|
{claimIsMine ? __('Add support to') : __('Send a tip')} <UriIndicator uri={uri} />
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<SendTip uri={uri} onCancel={closeModal} sendTipCallback={closeModal} />
|
<SendTip uri={uri} claimIsMine={claimIsMine} onCancel={closeModal} sendTipCallback={closeModal} />
|
||||||
</Modal>
|
</Modal>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,7 +164,7 @@ class FilePage extends React.Component<Props> {
|
||||||
const showFile = isPlayableType || isPreviewType;
|
const showFile = isPlayableType || isPreviewType;
|
||||||
|
|
||||||
const speechShareable =
|
const speechShareable =
|
||||||
costInfo && costInfo.cost === 0 && contentType && ['video', 'image'].includes(contentType.split('/')[0]);
|
costInfo && costInfo.cost === 0 && contentType && ['video', 'image', 'audio'].includes(contentType.split('/')[0]);
|
||||||
// We want to use the short form uri for editing
|
// We want to use the short form uri for editing
|
||||||
// This is what the user is used to seeing, they don't care about the claim id
|
// This is what the user is used to seeing, they don't care about the claim id
|
||||||
// We will select the claim id before they publish
|
// We will select the claim id before they publish
|
||||||
|
@ -240,18 +240,17 @@ class FilePage extends React.Component<Props> {
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!claimIsMine && (
|
{
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
{channelUri && <SubscribeButton uri={channelUri} channelName={channelName} />}
|
{!claimIsMine && channelUri && <SubscribeButton uri={channelUri} channelName={channelName} />}
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
button="alt"
|
button="alt"
|
||||||
icon={icons.TIP}
|
icon={claimIsMine ? icons.SUPPORT : icons.TIP}
|
||||||
label={__('Send a tip')}
|
label={claimIsMine ? __('Add support') : __('Send a tip')}
|
||||||
onClick={() => openModal(MODALS.SEND_TIP, { uri })}
|
onClick={() => openModal(MODALS.SEND_TIP, { uri, claimIsMine })}
|
||||||
/>
|
/>
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
)}
|
}
|
||||||
<Button
|
<Button
|
||||||
button="alt"
|
button="alt"
|
||||||
icon={icons.SHARE}
|
icon={icons.SHARE}
|
||||||
|
|
|
@ -130,24 +130,31 @@ class HelpPage extends React.PureComponent<Props, State> {
|
||||||
|
|
||||||
<div className="card__content">
|
<div className="card__content">
|
||||||
<div className="card__actions">
|
<div className="card__actions">
|
||||||
<Button href="https://lbry.com/faq" label={__('Read the FAQ')} icon={icons.HELP} button="inverse" />
|
<Button
|
||||||
|
href="https://lbry.com/faq/lbry-basics"
|
||||||
|
label={__('Read the App Basics FAQ')}
|
||||||
|
icon={icons.HELP}
|
||||||
|
button="inverse"
|
||||||
|
/>
|
||||||
|
<Button href="https://lbry.com/faq" label={__('View all LBRY FAQs')} icon={icons.HELP} button="inverse" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section className="card card--section">
|
<section className="card card--section">
|
||||||
<header className="card__header">
|
<header className="card__header">
|
||||||
<h2 className="card__title">{__('Get Live Help')}</h2>
|
<h2 className="card__title">{__('Find Assistance')}</h2>
|
||||||
|
|
||||||
<p className="card__subtitle">
|
<p className="card__subtitle">
|
||||||
{__('Live help is available most hours in the')} <strong>#help</strong>{' '}
|
{__('Live help is available most hours in the')} <strong>#help</strong>{' '}
|
||||||
{__('channel of our Discord chat room.')}
|
{__('channel of our Discord chat room. Or you can always email us at help@lbry.com.')}
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div className="card__content">
|
<div className="card__content">
|
||||||
<div className="card__actions">
|
<div className="card__actions">
|
||||||
<Button button="inverse" label={__('Join Our Chat')} icon={icons.CHAT} href="https://chat.lbry.com" />
|
<Button button="inverse" label={__('Join Our Chat')} icon={icons.CHAT} href="https://chat.lbry.com" />
|
||||||
|
<Button button="inverse" label={__('Email Us')} icon={icons.WEB} href="mailto:help@lbry.com" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -35,11 +35,12 @@ class RewardsPage extends PureComponent<Props> {
|
||||||
!IS_WEB && (
|
!IS_WEB && (
|
||||||
<section className="card card--section">
|
<section className="card card--section">
|
||||||
<header className="card__header">
|
<header className="card__header">
|
||||||
<h2 className="card__title">{__('Verification For Rewards')}</h2>
|
<h2 className="card__title">{__('Rewards Approval to Earn Credits (LBC)')}</h2>
|
||||||
<p className="card__subtitle">
|
<p className="card__subtitle">
|
||||||
{__('Rewards are for human beings only.')}{' '}
|
{__(
|
||||||
{__("You'll have to prove you're one of us before you can claim any rewards.")}{' '}
|
'This step is optional. You can continue to use this app without rewards, but LBC may be needed for some tasks.'
|
||||||
{__('This is optional.')}
|
)}{' '}
|
||||||
|
<Button button="link" label={__('Learn more')} href="https://lbry.com/faq/rewards" />
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
|
|
@ -313,7 +313,12 @@ class SettingsPage extends React.PureComponent<Props, State> {
|
||||||
name="share_usage_data"
|
name="share_usage_data"
|
||||||
onChange={() => setDaemonSetting('share_usage_data', !daemonSettings.share_usage_data)}
|
onChange={() => setDaemonSetting('share_usage_data', !daemonSettings.share_usage_data)}
|
||||||
checked={daemonSettings.share_usage_data}
|
checked={daemonSettings.share_usage_data}
|
||||||
label={__('Help make LBRY better by contributing analytics and diagnostic data about my usage.')}
|
label={
|
||||||
|
<React.Fragment>
|
||||||
|
{__('Help make LBRY better by contributing analytics and diagnostic data about my usage.')}{' '}
|
||||||
|
<Button button="link" label={__('Learn more')} href="https://lbry.com/privacypolicy" />.
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
helper={__('You will be ineligible to earn rewards while diagnostics are not being shared.')}
|
helper={__('You will be ineligible to earn rewards while diagnostics are not being shared.')}
|
||||||
/>
|
/>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
|
@ -11,9 +11,9 @@ const WalletPage = () => (
|
||||||
<UnsupportedOnWeb />
|
<UnsupportedOnWeb />
|
||||||
<div className={IS_WEB && 'card--disabled'}>
|
<div className={IS_WEB && 'card--disabled'}>
|
||||||
<WalletBalance />
|
<WalletBalance />
|
||||||
<TransactionListRecent />
|
|
||||||
<WalletSend />
|
<WalletSend />
|
||||||
<WalletAddress />
|
<WalletAddress />
|
||||||
|
<TransactionListRecent />
|
||||||
</div>
|
</div>
|
||||||
</Page>
|
</Page>
|
||||||
);
|
);
|
||||||
|
|
|
@ -104,7 +104,10 @@ export const selectTakeOverAmount = createSelector(
|
||||||
// is needed to win the claim. Currently this is not possible during a takeover.
|
// is needed to win the claim. Currently this is not possible during a takeover.
|
||||||
// With this, we could say something like, "You have x lbc in support, if you bid y additional LBC you will control the claim"
|
// With this, we could say something like, "You have x lbc in support, if you bid y additional LBC you will control the claim"
|
||||||
// For now just ignore supports. We will just show the winning claim's bid amount
|
// For now just ignore supports. We will just show the winning claim's bid amount
|
||||||
return claimForShortUri.meta.effective_amount || claimForShortUri.amount;
|
// If the top claim is your claim, no takeover is necessary so we return 0.
|
||||||
|
return claimForShortUri.claim_id === myClaimForUri.claim_id
|
||||||
|
? 0
|
||||||
|
: claimForShortUri.meta.effective_amount || claimForShortUri.amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -541,5 +541,38 @@
|
||||||
"When the alpha ends, we will attempt to transition comments, but do not promise to do so. Any transition will likely involve publishing previous comments under a single archive handle.": "When the alpha ends, we will attempt to transition comments, but do not promise to do so. Any transition will likely involve publishing previous comments under a single archive handle.",
|
"When the alpha ends, we will attempt to transition comments, but do not promise to do so. Any transition will likely involve publishing previous comments under a single archive handle.": "When the alpha ends, we will attempt to transition comments, but do not promise to do so. Any transition will likely involve publishing previous comments under a single archive handle.",
|
||||||
"Upgrade is ready to install": "Upgrade is ready to install",
|
"Upgrade is ready to install": "Upgrade is ready to install",
|
||||||
"Upgrade is ready": "Upgrade is ready",
|
"Upgrade is ready": "Upgrade is ready",
|
||||||
"Abandon the claim for this URI": "Abandon the claim for this URI"
|
"Abandon the claim for this URI": "Abandon the claim for this URI",
|
||||||
|
"For video content, use MP4s in H264/AAC format for best compatibility.": "For video content, use MP4s in H264/AAC format for best compatibility.",
|
||||||
|
"Read the App Basics FAQ": "Read the App Basics FAQ",
|
||||||
|
"View all LBRY FAQs": "View all LBRY FAQs",
|
||||||
|
"Find Assistance": "Find Assistance",
|
||||||
|
"channel of our Discord chat room. Or you can always email us at help@lbry.com.": "channel of our Discord chat room. Or you can always email us at help@lbry.com.",
|
||||||
|
"Email Us": "Email Us",
|
||||||
|
"Today": "Today",
|
||||||
|
"This": "This",
|
||||||
|
"All time": "All time",
|
||||||
|
"For the initial release, deleting or editing comments is not possible. Please be mindful of this when posting.": "For the initial release, deleting or editing comments is not possible. Please be mindful of this when posting.",
|
||||||
|
"Add support": "Add support",
|
||||||
|
"Add support to": "Add support to",
|
||||||
|
"This will increase your overall bid amount for ": "This will increase your overall bid amount for ",
|
||||||
|
"Share on Facebook": "Share on Facebook",
|
||||||
|
"Share On Twitter": "Share On Twitter",
|
||||||
|
"View on lbry.tv": "View on lbry.tv",
|
||||||
|
"Your Email - ": "Your Email - ",
|
||||||
|
"This information is disclosed only to LBRY, Inc. and not to the LBRY network. It is only required to save account information and earn rewards.": "This information is disclosed only to LBRY, Inc. and not to the LBRY network. It is only required to save account information and earn rewards.",
|
||||||
|
"Rewards Approval to Earn Credits (LBC)": "Rewards Approval to Earn Credits (LBC)",
|
||||||
|
"This step optional. You can continue to use this app without Rewards, but LBC may be needed for some tasks.": "This step optional. You can continue to use this app without Rewards, but LBC may be needed for some tasks.",
|
||||||
|
"Rewards are for human beings only. You'll have to prove you're one of us before you can claim any.": "Rewards are for human beings only. You'll have to prove you're one of us before you can claim any.",
|
||||||
|
"This step is optional. You can continue to use this app without Rewards, but LBC may be needed for some tasks.": "This step is optional. You can continue to use this app without Rewards, but LBC may be needed for some tasks.",
|
||||||
|
"This step is optional. You can continue to use this app without rewards, but LBC may be needed for some tasks.": "This step is optional. You can continue to use this app without rewards, but LBC may be needed for some tasks.",
|
||||||
|
"1) Proof via Phone": "1) Proof via Phone",
|
||||||
|
"You will receive an SMS text message confirming that your phone number is correct. Does not work for Canada and possibly other regions": "You will receive an SMS text message confirming that your phone number is correct. Does not work for Canada and possibly other regions",
|
||||||
|
"Standard messaging rates apply. LBRY will not text or call you otherwise. Having trouble?": "Standard messaging rates apply. LBRY will not text or call you otherwise. Having trouble?",
|
||||||
|
"2) Proof via Credit": "2) Proof via Credit",
|
||||||
|
"You currently have the highest bid for this name.": "You currently have the highest bid for this name.",
|
||||||
|
"You sent 1 LBC as a tip, Mahalo!": "You sent 1 LBC as a tip, Mahalo!",
|
||||||
|
"You can generate a new address at any time, and any previous addresses will continue to work.": "You can generate a new address at any time, and any previous addresses will continue to work.",
|
||||||
|
"Confirm Claim Revoke": "Confirm Claim Revoke",
|
||||||
|
"Are you sure you want to remove this support?": "Are you sure you want to remove this support?",
|
||||||
|
"These credits are permanently yours and can be removed at any time. Removing this support will reduce the claim's discoverability and return the LBC to your spendable balance.": "These credits are permanently yours and can be removed at any time. Removing this support will reduce the claim's discoverability and return the LBC to your spendable balance."
|
||||||
}
|
}
|
|
@ -6654,9 +6654,9 @@ lbry-redux@lbryio/lbry-redux#bb82aed61a5569e565daa784eb25fc1d639c0c22:
|
||||||
reselect "^3.0.0"
|
reselect "^3.0.0"
|
||||||
uuid "^3.3.2"
|
uuid "^3.3.2"
|
||||||
|
|
||||||
lbryinc@lbryio/lbryinc#43d382d9b74d396a581a74d87e4c53105e04f845:
|
lbryinc@lbryio/lbryinc#69f9562b016030b481375443f56147ff5e273c0e:
|
||||||
version "0.0.1"
|
version "0.0.1"
|
||||||
resolved "https://codeload.github.com/lbryio/lbryinc/tar.gz/43d382d9b74d396a581a74d87e4c53105e04f845"
|
resolved "https://codeload.github.com/lbryio/lbryinc/tar.gz/69f9562b016030b481375443f56147ff5e273c0e"
|
||||||
dependencies:
|
dependencies:
|
||||||
reselect "^3.0.0"
|
reselect "^3.0.0"
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue
"you can be" :p