remove invite components
This commit is contained in:
parent
2ca26c9332
commit
4c40b5a07f
12 changed files with 0 additions and 561 deletions
|
@ -7,7 +7,6 @@ import {
|
||||||
} from 'redux/selectors/claims';
|
} from 'redux/selectors/claims';
|
||||||
import { makeSelectPendingAmountByUri } from 'redux/selectors/wallet';
|
import { makeSelectPendingAmountByUri } from 'redux/selectors/wallet';
|
||||||
import { doOpenModal } from 'redux/actions/app';
|
import { doOpenModal } from 'redux/actions/app';
|
||||||
import { selectUser } from 'redux/selectors/user';
|
|
||||||
import FileDescription from './view';
|
import FileDescription from './view';
|
||||||
|
|
||||||
const select = (state, props) => {
|
const select = (state, props) => {
|
||||||
|
@ -17,7 +16,6 @@ const select = (state, props) => {
|
||||||
claim,
|
claim,
|
||||||
claimIsMine: selectClaimIsMine(state, claim),
|
claimIsMine: selectClaimIsMine(state, claim),
|
||||||
metadata: makeSelectMetadataForUri(props.uri)(state),
|
metadata: makeSelectMetadataForUri(props.uri)(state),
|
||||||
user: selectUser(state),
|
|
||||||
pendingAmount: makeSelectPendingAmountByUri(props.uri)(state),
|
pendingAmount: makeSelectPendingAmountByUri(props.uri)(state),
|
||||||
tags: makeSelectTagsForUri(props.uri)(state),
|
tags: makeSelectTagsForUri(props.uri)(state),
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,7 +15,6 @@ type Props = {
|
||||||
uri: string,
|
uri: string,
|
||||||
claim: StreamClaim,
|
claim: StreamClaim,
|
||||||
metadata: StreamMetadata,
|
metadata: StreamMetadata,
|
||||||
user: ?any,
|
|
||||||
tags: any,
|
tags: any,
|
||||||
pendingAmount: number,
|
pendingAmount: number,
|
||||||
doOpenModal: (id: string, {}) => void,
|
doOpenModal: (id: string, {}) => void,
|
||||||
|
|
|
@ -7,7 +7,6 @@ import {
|
||||||
} from 'redux/selectors/claims';
|
} from 'redux/selectors/claims';
|
||||||
import { makeSelectPendingAmountByUri } from 'redux/selectors/wallet';
|
import { makeSelectPendingAmountByUri } from 'redux/selectors/wallet';
|
||||||
import { makeSelectFileInfoForUri } from 'redux/selectors/file_info';
|
import { makeSelectFileInfoForUri } from 'redux/selectors/file_info';
|
||||||
import { selectUser } from 'redux/selectors/user';
|
|
||||||
import { doOpenModal } from 'redux/actions/app';
|
import { doOpenModal } from 'redux/actions/app';
|
||||||
|
|
||||||
import FileValues from './view';
|
import FileValues from './view';
|
||||||
|
@ -20,7 +19,6 @@ const select = (state, props) => {
|
||||||
contentType: makeSelectContentTypeForUri(props.uri)(state),
|
contentType: makeSelectContentTypeForUri(props.uri)(state),
|
||||||
fileInfo: makeSelectFileInfoForUri(props.uri)(state),
|
fileInfo: makeSelectFileInfoForUri(props.uri)(state),
|
||||||
metadata: makeSelectMetadataForUri(props.uri)(state),
|
metadata: makeSelectMetadataForUri(props.uri)(state),
|
||||||
user: selectUser(state),
|
|
||||||
pendingAmount: makeSelectPendingAmountByUri(props.uri)(state),
|
pendingAmount: makeSelectPendingAmountByUri(props.uri)(state),
|
||||||
claimIsMine: selectClaimIsMine(state, claim),
|
claimIsMine: selectClaimIsMine(state, claim),
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,7 +15,6 @@ type Props = {
|
||||||
metadata: StreamMetadata,
|
metadata: StreamMetadata,
|
||||||
openFolder: (string) => void,
|
openFolder: (string) => void,
|
||||||
contentType: string,
|
contentType: string,
|
||||||
user: ?any,
|
|
||||||
pendingAmount: string,
|
pendingAmount: string,
|
||||||
openModal: (id: string, { uri: string }) => void,
|
openModal: (id: string, { uri: string }) => void,
|
||||||
claimIsMine: boolean,
|
claimIsMine: boolean,
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
import { connect } from 'react-redux';
|
|
||||||
import { selectReferralReward } from 'redux/selectors/rewards';
|
|
||||||
import { selectUserInvitees, selectUserInviteStatusIsPending } from 'redux/selectors/user';
|
|
||||||
import InviteList from './view';
|
|
||||||
|
|
||||||
const select = state => ({
|
|
||||||
invitees: selectUserInvitees(state),
|
|
||||||
isPending: selectUserInviteStatusIsPending(state),
|
|
||||||
referralReward: selectReferralReward(state),
|
|
||||||
});
|
|
||||||
|
|
||||||
const perform = () => ({});
|
|
||||||
|
|
||||||
export default connect(select, perform)(InviteList);
|
|
|
@ -1,99 +0,0 @@
|
||||||
// @flow
|
|
||||||
import React from 'react';
|
|
||||||
import RewardLink from 'component/rewardLink';
|
|
||||||
import Icon from 'component/common/icon';
|
|
||||||
import * as ICONS from 'constants/icons';
|
|
||||||
import Card from 'component/common/card';
|
|
||||||
import LbcMessage from 'component/common/lbc-message';
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
invitees: ?Array<{
|
|
||||||
email: string,
|
|
||||||
invite_accepted: boolean,
|
|
||||||
invite_reward_claimed: boolean,
|
|
||||||
invite_reward_claimable: boolean,
|
|
||||||
}>,
|
|
||||||
referralReward: ?Reward,
|
|
||||||
};
|
|
||||||
|
|
||||||
class InviteList extends React.PureComponent<Props> {
|
|
||||||
render() {
|
|
||||||
const { invitees, referralReward } = this.props;
|
|
||||||
|
|
||||||
if (!invitees || !invitees.length) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
let rewardAmount = 0;
|
|
||||||
let rewardHelp = __(
|
|
||||||
"Woah, you have a lot of friends! You've claimed the maximum amount of invite rewards. Email %email% if you'd like to be whitelisted for more invites.",
|
|
||||||
{ email: 'hello@lbry.com' }
|
|
||||||
);
|
|
||||||
|
|
||||||
if (referralReward) {
|
|
||||||
rewardAmount = referralReward.reward_amount;
|
|
||||||
rewardHelp = referralReward.reward_description;
|
|
||||||
}
|
|
||||||
const showClaimable = invitees.some(invite => invite.invite_reward_claimable && !invite.invite_reward_claimed);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Card
|
|
||||||
title={<div className="table__header-text">{__('Invite History')}</div>}
|
|
||||||
subtitle={
|
|
||||||
<div className="table__header-text">
|
|
||||||
<LbcMessage>{rewardHelp}</LbcMessage>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
titleActions={
|
|
||||||
referralReward &&
|
|
||||||
showClaimable && (
|
|
||||||
<div className="card__actions--inline">
|
|
||||||
<RewardLink
|
|
||||||
button
|
|
||||||
label={__(`Claim Your %reward_amount% Credit Invite Reward`, { reward_amount: rewardAmount })}
|
|
||||||
claim_code={referralReward.claim_code}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
isBodyList
|
|
||||||
body={
|
|
||||||
<div className="table__wrapper">
|
|
||||||
<table className="table section">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>{__('Invitee Email')}</th>
|
|
||||||
<th>{__('Invite Status')}</th>
|
|
||||||
<th>{__('Reward')}</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{invitees.map(invitee => (
|
|
||||||
<tr key={invitee.email}>
|
|
||||||
<td>{invitee.email}</td>
|
|
||||||
<td>
|
|
||||||
<span>{invitee.invite_accepted ? __('Accepted') : __('Not Accepted')}</span>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{invitee.invite_reward_claimed && (
|
|
||||||
<React.Fragment>
|
|
||||||
<span>{__('Claimed')}</span>
|
|
||||||
<Icon icon={ICONS.COMPLETE} />
|
|
||||||
</React.Fragment>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{!invitee.invite_reward_claimed &&
|
|
||||||
(invitee.invite_reward_claimable ? <span>{__('Claimable')}</span> : __('Unclaimable'))}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
))}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default InviteList;
|
|
|
@ -1,29 +0,0 @@
|
||||||
import { connect } from 'react-redux';
|
|
||||||
import {
|
|
||||||
selectUserInvitesRemaining,
|
|
||||||
selectUserInviteNewIsPending,
|
|
||||||
selectUserInviteNewErrorMessage,
|
|
||||||
selectUserInviteReferralLink,
|
|
||||||
selectUserInviteReferralCode,
|
|
||||||
} from 'redux/selectors/user';
|
|
||||||
// import { doUserInviteNew } from 'redux/actions/user';
|
|
||||||
import { selectMyChannelClaims, selectFetchingMyChannels } from 'redux/selectors/claims';
|
|
||||||
import { doFetchChannelListMine } from 'redux/actions/claims';
|
|
||||||
import InviteNew from './view';
|
|
||||||
|
|
||||||
const select = (state) => ({
|
|
||||||
errorMessage: selectUserInviteNewErrorMessage(state),
|
|
||||||
invitesRemaining: selectUserInvitesRemaining(state),
|
|
||||||
referralLink: selectUserInviteReferralLink(state),
|
|
||||||
referralCode: selectUserInviteReferralCode(state),
|
|
||||||
isPending: selectUserInviteNewIsPending(state),
|
|
||||||
channels: selectMyChannelClaims(state),
|
|
||||||
fetchingChannels: selectFetchingMyChannels(state),
|
|
||||||
});
|
|
||||||
|
|
||||||
const perform = (dispatch) => ({
|
|
||||||
// inviteNew: (email) => dispatch(doUserInviteNew(email)),
|
|
||||||
fetchChannelListMine: () => dispatch(doFetchChannelListMine()),
|
|
||||||
});
|
|
||||||
|
|
||||||
export default connect(select, perform)(InviteNew);
|
|
|
@ -1,154 +0,0 @@
|
||||||
// @flow
|
|
||||||
import { URL, SITE_NAME } from 'config';
|
|
||||||
import React, { useEffect, useState } from 'react';
|
|
||||||
import Button from 'component/button';
|
|
||||||
import { Form, FormField } from 'component/common/form';
|
|
||||||
import CopyableText from 'component/copyableText';
|
|
||||||
import Card from 'component/common/card';
|
|
||||||
import analytics from 'analytics';
|
|
||||||
import I18nMessage from 'component/i18nMessage';
|
|
||||||
import LbcSymbol from 'component/common/lbc-symbol';
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
errorMessage: ?string,
|
|
||||||
inviteNew: (string) => void,
|
|
||||||
isPending: boolean,
|
|
||||||
referralLink: string,
|
|
||||||
referralCode: string,
|
|
||||||
channels: ?Array<ChannelClaim>,
|
|
||||||
};
|
|
||||||
|
|
||||||
function InviteNew(props: Props) {
|
|
||||||
const { inviteNew, errorMessage, isPending, referralCode = '', channels } = props;
|
|
||||||
|
|
||||||
// Email
|
|
||||||
const [email, setEmail] = useState('');
|
|
||||||
function handleSubmit() {
|
|
||||||
inviteNew(email);
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleEmailChanged(event: any) {
|
|
||||||
setEmail(event.target.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Referral link
|
|
||||||
const [referralSource, setReferralSource] = useState(referralCode);
|
|
||||||
|
|
||||||
const handleReferralChange = React.useCallback(
|
|
||||||
(code) => {
|
|
||||||
setReferralSource(code);
|
|
||||||
// TODO: keep track of this in an array?
|
|
||||||
const matchingChannel = channels && channels.find((ch) => ch.name === code);
|
|
||||||
if (matchingChannel) {
|
|
||||||
analytics.apiLogPublish(matchingChannel);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
[setReferralSource]
|
|
||||||
);
|
|
||||||
|
|
||||||
const topChannel =
|
|
||||||
channels &&
|
|
||||||
channels.reduce((top, channel) => {
|
|
||||||
const topClaimCount = (top && top.meta && top.meta.claims_in_channel) || 0;
|
|
||||||
const currentClaimCount = (channel && channel.meta && channel.meta.claims_in_channel) || 0;
|
|
||||||
return topClaimCount >= currentClaimCount ? top : channel;
|
|
||||||
});
|
|
||||||
const referralString =
|
|
||||||
channels && channels.length && referralSource !== referralCode
|
|
||||||
? lookupUrlByClaimName(referralSource, channels)
|
|
||||||
: referralSource;
|
|
||||||
|
|
||||||
const referral = `${URL}/$/invite/${referralString.replace('#', ':')}`;
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
// set default channel
|
|
||||||
if (topChannel) {
|
|
||||||
handleReferralChange(topChannel.name);
|
|
||||||
}
|
|
||||||
}, [topChannel, handleReferralChange]);
|
|
||||||
|
|
||||||
function lookupUrlByClaimName(name, channels) {
|
|
||||||
const claim = channels.find((channel) => channel.name === name);
|
|
||||||
return claim && claim.canonical_url ? claim.canonical_url.replace('lbry://', '') : name;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className={'columns'}>
|
|
||||||
<div className="column">
|
|
||||||
<Card
|
|
||||||
title={__('Invites')}
|
|
||||||
subtitle={
|
|
||||||
<I18nMessage tokens={{ SITE_NAME, lbc: <LbcSymbol /> }}>
|
|
||||||
Earn %lbc% for inviting subscribers, followers, fans, friends, etc. to join and follow you on %SITE_NAME%.
|
|
||||||
You can use invites just like affiliate links.
|
|
||||||
</I18nMessage>
|
|
||||||
}
|
|
||||||
actions={
|
|
||||||
<React.Fragment>
|
|
||||||
<CopyableText label={__('Your invite link')} copyable={referral} />
|
|
||||||
{channels && channels.length > 0 && (
|
|
||||||
<FormField
|
|
||||||
type="select"
|
|
||||||
label={__('Customize link')}
|
|
||||||
value={referralSource}
|
|
||||||
onChange={(e) => handleReferralChange(e.target.value)}
|
|
||||||
>
|
|
||||||
{channels.map((channel) => (
|
|
||||||
<option key={channel.claim_id} value={channel.name}>
|
|
||||||
{channel.name}
|
|
||||||
</option>
|
|
||||||
))}
|
|
||||||
<option value={referralCode}>{referralCode}</option>
|
|
||||||
</FormField>
|
|
||||||
)}
|
|
||||||
</React.Fragment>
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="column">
|
|
||||||
<Card
|
|
||||||
title={__('Invite by email')}
|
|
||||||
subtitle={
|
|
||||||
<I18nMessage tokens={{ SITE_NAME, lbc: <LbcSymbol /> }}>
|
|
||||||
Invite someone you know by email and earn %lbc% when they join %SITE_NAME%.
|
|
||||||
</I18nMessage>
|
|
||||||
}
|
|
||||||
actions={
|
|
||||||
<React.Fragment>
|
|
||||||
<Form onSubmit={handleSubmit}>
|
|
||||||
<FormField
|
|
||||||
type="text"
|
|
||||||
label={__('Email')}
|
|
||||||
placeholder="youremail@example.org"
|
|
||||||
name="email"
|
|
||||||
value={email}
|
|
||||||
error={errorMessage}
|
|
||||||
inputButton={
|
|
||||||
<Button button="secondary" type="submit" label={__('Invite')} disabled={isPending || !email} />
|
|
||||||
}
|
|
||||||
onChange={(event) => {
|
|
||||||
handleEmailChanged(event);
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
<p className="help">
|
|
||||||
<I18nMessage
|
|
||||||
tokens={{
|
|
||||||
rewards_link: <Button button="link" navigate="/$/rewards" label={__('rewards')} />,
|
|
||||||
referral_faq_link: (
|
|
||||||
<Button button="link" label={__('FAQ')} href="https://lbry.com/faq/referrals" />
|
|
||||||
),
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
Read our %referral_faq_link% to learn more about rewards.
|
|
||||||
</I18nMessage>
|
|
||||||
</p>
|
|
||||||
</Form>
|
|
||||||
</React.Fragment>
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default InviteNew;
|
|
|
@ -1,30 +0,0 @@
|
||||||
import { connect } from 'react-redux';
|
|
||||||
import { withRouter } from 'react-router';
|
|
||||||
import REWARDS from 'rewards';
|
|
||||||
import { selectUser, selectSetReferrerPending, selectSetReferrerError } from 'redux/selectors/user';
|
|
||||||
import { doClaimRewardType } from 'redux/actions/rewards';
|
|
||||||
import { selectUnclaimedRewards } from 'redux/selectors/rewards';
|
|
||||||
import { doUserSetReferrer } from 'redux/actions/user';
|
|
||||||
import { selectIsSubscribedForUri } from 'redux/selectors/subscriptions';
|
|
||||||
import { doChannelSubscribe } from 'redux/actions/subscriptions';
|
|
||||||
import Invited from './view';
|
|
||||||
|
|
||||||
const select = (state, props) => {
|
|
||||||
return {
|
|
||||||
user: selectUser(state),
|
|
||||||
referrerSetPending: selectSetReferrerPending(state),
|
|
||||||
referrerSetError: selectSetReferrerError(state),
|
|
||||||
rewards: selectUnclaimedRewards(state),
|
|
||||||
isSubscribed: selectIsSubscribedForUri(state, props.fullUri),
|
|
||||||
fullUri: props.fullUri,
|
|
||||||
referrer: props.referrer,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const perform = (dispatch) => ({
|
|
||||||
claimReward: () => dispatch(doClaimRewardType(REWARDS.TYPE_REFEREE)),
|
|
||||||
setReferrer: (referrer) => dispatch(doUserSetReferrer(referrer)),
|
|
||||||
channelSubscribe: (uri) => dispatch(doChannelSubscribe(uri)),
|
|
||||||
});
|
|
||||||
|
|
||||||
export default withRouter(connect(select, perform)(Invited));
|
|
|
@ -1,225 +0,0 @@
|
||||||
// @flow
|
|
||||||
import { SITE_NAME } from 'config';
|
|
||||||
import * as PAGES from 'constants/pages';
|
|
||||||
import React, { useEffect } from 'react';
|
|
||||||
import Button from 'component/button';
|
|
||||||
import ClaimPreview from 'component/claimPreview';
|
|
||||||
import Card from 'component/common/card';
|
|
||||||
import { buildURI, parseURI } from 'util/lbryURI';
|
|
||||||
import { ERRORS } from 'lbryinc';
|
|
||||||
import REWARDS from 'rewards';
|
|
||||||
import { formatLbryUrlForWeb } from 'util/url';
|
|
||||||
import ChannelContent from 'component/channelContent';
|
|
||||||
import I18nMessage from 'component/i18nMessage';
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
user: any,
|
|
||||||
claimReward: () => void,
|
|
||||||
setReferrer: (string) => void,
|
|
||||||
referrerSetPending: boolean,
|
|
||||||
referrerSetError: string,
|
|
||||||
channelSubscribe: (sub: Subscription) => void,
|
|
||||||
history: { push: (string) => void },
|
|
||||||
rewards: Array<Reward>,
|
|
||||||
referrer: string,
|
|
||||||
fullUri: string,
|
|
||||||
isSubscribed: boolean,
|
|
||||||
};
|
|
||||||
|
|
||||||
function Invited(props: Props) {
|
|
||||||
const {
|
|
||||||
user,
|
|
||||||
claimReward,
|
|
||||||
setReferrer,
|
|
||||||
referrerSetPending,
|
|
||||||
referrerSetError,
|
|
||||||
channelSubscribe,
|
|
||||||
history,
|
|
||||||
rewards,
|
|
||||||
fullUri,
|
|
||||||
referrer,
|
|
||||||
isSubscribed,
|
|
||||||
} = props;
|
|
||||||
|
|
||||||
const refUri = referrer && 'lbry://' + referrer.replace(':', '#');
|
|
||||||
const {
|
|
||||||
isChannel: referrerIsChannel,
|
|
||||||
claimName: referrerChannelName,
|
|
||||||
channelClaimId: referrerChannelClaimId,
|
|
||||||
} = parseURI(refUri);
|
|
||||||
const channelUri =
|
|
||||||
referrerIsChannel &&
|
|
||||||
formatLbryUrlForWeb(buildURI({ channelName: referrerChannelName, channelClaimId: referrerChannelClaimId }));
|
|
||||||
const rewardsApproved = user && user.is_reward_approved;
|
|
||||||
const hasVerifiedEmail = user && user.has_verified_email;
|
|
||||||
const referredRewardAvailable = rewards && rewards.some((reward) => reward.reward_type === REWARDS.TYPE_REFEREE);
|
|
||||||
const redirect = channelUri || `/`;
|
|
||||||
|
|
||||||
// always follow if it's a channel
|
|
||||||
useEffect(() => {
|
|
||||||
if (fullUri && !isSubscribed && fullUri) {
|
|
||||||
let channelName;
|
|
||||||
try {
|
|
||||||
const { claimName } = parseURI(fullUri);
|
|
||||||
channelName = claimName;
|
|
||||||
} catch (e) {}
|
|
||||||
if (channelName) {
|
|
||||||
channelSubscribe({
|
|
||||||
channelName: channelName,
|
|
||||||
uri: fullUri,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, [fullUri, isSubscribed, channelSubscribe]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (!referrerSetPending && hasVerifiedEmail) {
|
|
||||||
claimReward();
|
|
||||||
}
|
|
||||||
}, [referrerSetPending, hasVerifiedEmail, claimReward]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (referrer) {
|
|
||||||
setReferrer(referrer.replace(':', '#'));
|
|
||||||
}
|
|
||||||
}, [referrer, setReferrer]);
|
|
||||||
|
|
||||||
function handleDone() {
|
|
||||||
history.push(redirect);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (referrerSetError === ERRORS.ALREADY_CLAIMED) {
|
|
||||||
return (
|
|
||||||
<Card
|
|
||||||
title={__(`Whoa`)}
|
|
||||||
subtitle={
|
|
||||||
referrerIsChannel
|
|
||||||
? __(`You've already claimed your referrer, but we've followed this channel for you.`)
|
|
||||||
: __(`You've already claimed your referrer.`)
|
|
||||||
}
|
|
||||||
body={
|
|
||||||
referrerIsChannel && (
|
|
||||||
<div className="claim-preview--channel">
|
|
||||||
<ClaimPreview key={refUri} uri={refUri} actions={''} type={'small'} />
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
actions={
|
|
||||||
<div className="card__actions">
|
|
||||||
<Button button="primary" label={__('Done!')} onClick={handleDone} />
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (referrerSetError && referredRewardAvailable) {
|
|
||||||
return (
|
|
||||||
<Card
|
|
||||||
title={__(`Welcome!`)}
|
|
||||||
subtitle={__(
|
|
||||||
`Something went wrong with your invite link. You can set and claim your invite reward after signing in.`
|
|
||||||
)}
|
|
||||||
actions={
|
|
||||||
<>
|
|
||||||
<p className="error__text">{__('Not a valid invite')}</p>
|
|
||||||
<div className="card__actions">
|
|
||||||
<Button
|
|
||||||
button="primary"
|
|
||||||
label={hasVerifiedEmail ? __('Verify') : __('Create Account')}
|
|
||||||
navigate={`/$/${PAGES.AUTH}?redirect=/$/${PAGES.REWARDS}`}
|
|
||||||
/>
|
|
||||||
<Button button="link" label={__('Explore')} onClick={handleDone} />
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!rewardsApproved) {
|
|
||||||
const signUpButton = (
|
|
||||||
<Button
|
|
||||||
button="link"
|
|
||||||
label={hasVerifiedEmail ? __(`Finish verification `) : __(`Create an account `)}
|
|
||||||
navigate={`/$/${PAGES.AUTH}?redirect=/$/${PAGES.INVITE}/${referrer}`}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Card
|
|
||||||
title={
|
|
||||||
referrerIsChannel
|
|
||||||
? __('%channel_name% invites you to the party!', { channel_name: referrerChannelName })
|
|
||||||
: __(`You're invited!`)
|
|
||||||
}
|
|
||||||
subtitle={
|
|
||||||
<p>
|
|
||||||
{referrerIsChannel ? (
|
|
||||||
<I18nMessage
|
|
||||||
tokens={{
|
|
||||||
channel_name: referrerChannelName,
|
|
||||||
signup_link: signUpButton,
|
|
||||||
SITE_NAME,
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
%channel_name% is waiting for you on %SITE_NAME%. Create your account now.
|
|
||||||
</I18nMessage>
|
|
||||||
) : (
|
|
||||||
<I18nMessage
|
|
||||||
tokens={{
|
|
||||||
signup_link: signUpButton,
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
Content freedom and a present are waiting for you. %signup_link% to claim it.
|
|
||||||
</I18nMessage>
|
|
||||||
)}
|
|
||||||
</p>
|
|
||||||
}
|
|
||||||
body={
|
|
||||||
referrerIsChannel && (
|
|
||||||
<div className="claim-preview--channel">
|
|
||||||
<div className="section">
|
|
||||||
<ClaimPreview key={refUri} uri={refUri} actions={''} type={'small'} />
|
|
||||||
</div>
|
|
||||||
<div className="section">
|
|
||||||
<ChannelContent uri={fullUri} defaultPageSize={3} defaultInfiniteScroll={false} />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
actions={
|
|
||||||
<div className="section__actions">
|
|
||||||
<Button
|
|
||||||
button="primary"
|
|
||||||
label={hasVerifiedEmail ? __('Finish Account') : __('Create Account')}
|
|
||||||
navigate={`/$/${PAGES.AUTH}?redirect=/$/${PAGES.INVITE}/${referrer}`}
|
|
||||||
/>
|
|
||||||
<Button button="link" label={__('Skip')} onClick={handleDone} />
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Card
|
|
||||||
title={__(`Welcome!`)}
|
|
||||||
subtitle={referrerIsChannel ? __(`We've followed your invitee for you. Check them out!`) : __(`Congrats!`)}
|
|
||||||
body={
|
|
||||||
referrerIsChannel && (
|
|
||||||
<div className="claim-preview--channel">
|
|
||||||
<ClaimPreview key={refUri} uri={refUri} actions={''} type={'small'} />
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
actions={
|
|
||||||
<div className="section__actions">
|
|
||||||
<Button button="primary" label={__('Done')} onClick={handleDone} />
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Invited;
|
|
|
@ -53,9 +53,7 @@ export default function SettingAccount(props: Props) {
|
||||||
</SettingsRow>
|
</SettingsRow>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* @if TARGET='app' */}
|
|
||||||
<SyncToggle disabled={walletEncrypted && !storedPassword && storedPassword !== ''} />
|
<SyncToggle disabled={walletEncrypted && !storedPassword && storedPassword !== ''} />
|
||||||
{/* @endif */}
|
|
||||||
|
|
||||||
{hasChannels && (
|
{hasChannels && (
|
||||||
<SettingsRow title={__('Comments')} subtitle={__('View your past comments.')}>
|
<SettingsRow title={__('Comments')} subtitle={__('View your past comments.')}>
|
||||||
|
|
|
@ -2,8 +2,6 @@ import { createSelector } from 'reselect';
|
||||||
|
|
||||||
export const selectState = (state) => state.user || {};
|
export const selectState = (state) => state.user || {};
|
||||||
|
|
||||||
export const selectAuthenticationIsPending = createSelector(selectState, (state) => state.authenticationIsPending);
|
|
||||||
|
|
||||||
export const selectUserIsPending = createSelector(selectState, (state) => state.userIsPending);
|
export const selectUserIsPending = createSelector(selectState, (state) => state.userIsPending);
|
||||||
|
|
||||||
export const selectUser = createSelector(selectState, (state) => state.user);
|
export const selectUser = createSelector(selectState, (state) => state.user);
|
||||||
|
|
Loading…
Reference in a new issue