diff --git a/static/app-strings.json b/static/app-strings.json
index 4a9f60b5a..01ecab3d9 100644
--- a/static/app-strings.json
+++ b/static/app-strings.json
@@ -2315,5 +2315,6 @@
"Disable background": "Disable background",
"Installing, please wait...": "Installing, please wait...",
"There was an error during installation. Please, try again.": "There was an error during installation. Please, try again.",
+ "Odysee Connect --[Section in Help Page]--": "Odysee Connect",
"--end--": "--end--"
}
diff --git a/ui/component/fileDescription/index.js b/ui/component/fileDescription/index.js
index d8a119c37..5d8cff218 100644
--- a/ui/component/fileDescription/index.js
+++ b/ui/component/fileDescription/index.js
@@ -7,7 +7,6 @@ import {
} from 'redux/selectors/claims';
import { makeSelectPendingAmountByUri } from 'redux/selectors/wallet';
import { doOpenModal } from 'redux/actions/app';
-import { selectUser } from 'redux/selectors/user';
import FileDescription from './view';
const select = (state, props) => {
@@ -17,7 +16,6 @@ const select = (state, props) => {
claim,
claimIsMine: selectClaimIsMine(state, claim),
metadata: makeSelectMetadataForUri(props.uri)(state),
- user: selectUser(state),
pendingAmount: makeSelectPendingAmountByUri(props.uri)(state),
tags: makeSelectTagsForUri(props.uri)(state),
};
diff --git a/ui/component/fileDescription/view.jsx b/ui/component/fileDescription/view.jsx
index 9d20526c7..ae8abb160 100644
--- a/ui/component/fileDescription/view.jsx
+++ b/ui/component/fileDescription/view.jsx
@@ -15,7 +15,6 @@ type Props = {
uri: string,
claim: StreamClaim,
metadata: StreamMetadata,
- user: ?any,
tags: any,
pendingAmount: number,
doOpenModal: (id: string, {}) => void,
diff --git a/ui/component/fileValues/index.js b/ui/component/fileValues/index.js
index a3994d7c3..eb633a91f 100644
--- a/ui/component/fileValues/index.js
+++ b/ui/component/fileValues/index.js
@@ -7,7 +7,6 @@ import {
} from 'redux/selectors/claims';
import { makeSelectPendingAmountByUri } from 'redux/selectors/wallet';
import { makeSelectFileInfoForUri } from 'redux/selectors/file_info';
-import { selectUser } from 'redux/selectors/user';
import { doOpenModal } from 'redux/actions/app';
import FileValues from './view';
@@ -20,7 +19,6 @@ const select = (state, props) => {
contentType: makeSelectContentTypeForUri(props.uri)(state),
fileInfo: makeSelectFileInfoForUri(props.uri)(state),
metadata: makeSelectMetadataForUri(props.uri)(state),
- user: selectUser(state),
pendingAmount: makeSelectPendingAmountByUri(props.uri)(state),
claimIsMine: selectClaimIsMine(state, claim),
};
diff --git a/ui/component/fileValues/view.jsx b/ui/component/fileValues/view.jsx
index f425fc169..f230b5b80 100644
--- a/ui/component/fileValues/view.jsx
+++ b/ui/component/fileValues/view.jsx
@@ -15,7 +15,6 @@ type Props = {
metadata: StreamMetadata,
openFolder: (string) => void,
contentType: string,
- user: ?any,
pendingAmount: string,
openModal: (id: string, { uri: string }) => void,
claimIsMine: boolean,
diff --git a/ui/component/header/index.js b/ui/component/header/index.js
index 34835dbd5..f3b1df29b 100644
--- a/ui/component/header/index.js
+++ b/ui/component/header/index.js
@@ -6,12 +6,11 @@ import { selectClientSetting } from 'redux/selectors/settings';
import { selectGetSyncErrorMessage } from 'redux/selectors/sync';
import { selectHasNavigated } from 'redux/selectors/app';
import { selectTotalBalance, selectBalance } from 'redux/selectors/wallet';
-import { selectUserVerifiedEmail, selectEmailToVerify, selectUser } from 'redux/selectors/user';
+import { selectEmailToVerify, selectUser } from 'redux/selectors/user';
import * as SETTINGS from 'constants/settings';
import Header from './view';
const select = (state) => ({
- authenticated: selectUserVerifiedEmail(state),
balance: selectBalance(state),
emailToVerify: selectEmailToVerify(state),
hasNavigated: selectHasNavigated(state),
diff --git a/ui/component/headerMenuButtons/index.js b/ui/component/headerMenuButtons/index.js
index dab91821b..778f7228d 100644
--- a/ui/component/headerMenuButtons/index.js
+++ b/ui/component/headerMenuButtons/index.js
@@ -4,11 +4,10 @@ import { selectActiveChannelStakedLevel } from 'redux/selectors/app';
import { selectClientSetting } from 'redux/selectors/settings';
import * as SETTINGS from 'constants/settings';
import HeaderMenuButtons from './view';
-import { selectUserVerifiedEmail, selectUser } from 'redux/selectors/user';
+import { selectUser } from 'redux/selectors/user';
const select = (state) => ({
activeChannelStakedLevel: selectActiveChannelStakedLevel(state),
- authenticated: selectUserVerifiedEmail(state),
automaticDarkModeEnabled: selectClientSetting(state, SETTINGS.AUTOMATIC_DARK_MODE_ENABLED),
currentTheme: selectClientSetting(state, SETTINGS.THEME),
user: selectUser(state),
diff --git a/ui/component/headerMenuButtons/view.jsx b/ui/component/headerMenuButtons/view.jsx
index 687fe4b2e..953f6d678 100644
--- a/ui/component/headerMenuButtons/view.jsx
+++ b/ui/component/headerMenuButtons/view.jsx
@@ -12,7 +12,6 @@ import React from 'react';
import Tooltip from 'component/common/tooltip';
type HeaderMenuButtonProps = {
- authenticated: boolean,
automaticDarkModeEnabled: boolean,
currentTheme: string,
user: ?User,
diff --git a/ui/component/inviteList/index.js b/ui/component/inviteList/index.js
deleted file mode 100644
index 253a8c266..000000000
--- a/ui/component/inviteList/index.js
+++ /dev/null
@@ -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);
diff --git a/ui/component/inviteList/view.jsx b/ui/component/inviteList/view.jsx
deleted file mode 100644
index fecfa3599..000000000
--- a/ui/component/inviteList/view.jsx
+++ /dev/null
@@ -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 {
- 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 (
- {__('Invite History')}}
- subtitle={
-
- {rewardHelp}
-
- }
- titleActions={
- referralReward &&
- showClaimable && (
-
-
-
- )
- }
- isBodyList
- body={
-
-
-
-
- {__('Invitee Email')} |
- {__('Invite Status')} |
- {__('Reward')} |
-
-
-
- {invitees.map(invitee => (
-
- {invitee.email} |
-
- {invitee.invite_accepted ? __('Accepted') : __('Not Accepted')}
- |
-
- {invitee.invite_reward_claimed && (
-
- {__('Claimed')}
-
-
- )}
-
- {!invitee.invite_reward_claimed &&
- (invitee.invite_reward_claimable ? {__('Claimable')} : __('Unclaimable'))}
- |
-
- ))}
-
-
-
- }
- />
- );
- }
-}
-
-export default InviteList;
diff --git a/ui/component/inviteNew/index.js b/ui/component/inviteNew/index.js
deleted file mode 100644
index c7cbc0ada..000000000
--- a/ui/component/inviteNew/index.js
+++ /dev/null
@@ -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);
diff --git a/ui/component/inviteNew/view.jsx b/ui/component/inviteNew/view.jsx
deleted file mode 100644
index 00944d830..000000000
--- a/ui/component/inviteNew/view.jsx
+++ /dev/null
@@ -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,
-};
-
-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 (
-
-
- }}>
- 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.
-
- }
- actions={
-
-
- {channels && channels.length > 0 && (
- handleReferralChange(e.target.value)}
- >
- {channels.map((channel) => (
-
- ))}
-
-
- )}
-
- }
- />
-
-
-
}}>
- Invite someone you know by email and earn %lbc% when they join %SITE_NAME%.
-
- }
- actions={
-
-
-
- }
- />
-
-
- );
-}
-
-export default InviteNew;
diff --git a/ui/component/invited/index.js b/ui/component/invited/index.js
deleted file mode 100644
index d91178095..000000000
--- a/ui/component/invited/index.js
+++ /dev/null
@@ -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));
diff --git a/ui/component/invited/view.jsx b/ui/component/invited/view.jsx
deleted file mode 100644
index 9c757e855..000000000
--- a/ui/component/invited/view.jsx
+++ /dev/null
@@ -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,
- 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 (
-
-
-
- )
- }
- actions={
-
-
-
- }
- />
- );
- }
-
- if (referrerSetError && referredRewardAvailable) {
- return (
-
- {__('Not a valid invite')}
-
-
-
-
- >
- }
- />
- );
- }
-
- if (!rewardsApproved) {
- const signUpButton = (
-
- );
-
- return (
-
- {referrerIsChannel ? (
-
- %channel_name% is waiting for you on %SITE_NAME%. Create your account now.
-
- ) : (
-
- Content freedom and a present are waiting for you. %signup_link% to claim it.
-
- )}
-
- }
- body={
- referrerIsChannel && (
-
- )
- }
- actions={
-
-
-
-
- }
- />
- );
- }
-
- return (
-
-
-
- )
- }
- actions={
-
-
-
- }
- />
- );
-}
-
-export default Invited;
diff --git a/ui/component/rewardAuthIntro/index.js b/ui/component/rewardAuthIntro/index.js
deleted file mode 100644
index 014a436d1..000000000
--- a/ui/component/rewardAuthIntro/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import { connect } from 'react-redux';
-import { selectUnclaimedRewardValue } from 'redux/selectors/rewards';
-import RewardAuthIntro from './view';
-
-const select = state => ({
- totalRewardValue: selectUnclaimedRewardValue(state),
-});
-
-export default connect(select, null)(RewardAuthIntro);
diff --git a/ui/component/rewardAuthIntro/view.jsx b/ui/component/rewardAuthIntro/view.jsx
deleted file mode 100644
index 9d069a447..000000000
--- a/ui/component/rewardAuthIntro/view.jsx
+++ /dev/null
@@ -1,46 +0,0 @@
-// @flow
-import { SITE_NAME } from 'config';
-import * as PAGES from 'constants/pages';
-import React from 'react';
-import CreditAmount from 'component/common/credit-amount';
-import Button from 'component/button';
-import Card from 'component/common/card';
-import I18nMessage from 'component/i18nMessage';
-
-type Props = {
- balance: number,
- totalRewardValue: number,
- title?: string,
-};
-
-function RewardAuthIntro(props: Props) {
- const { totalRewardValue, title } = props;
- const totalRewardRounded = Math.floor(totalRewardValue / 10) * 10;
-
- return (
- ,
- site_name: SITE_NAME,
- }}
- >
- A %site_name% account allows you to earn more than %credit_amount% in rewards, backup your data, and get
- content and security updates.
-
- }
- actions={
-
- }
- />
- );
-}
-
-export default RewardAuthIntro;
diff --git a/ui/component/rewardLink/index.js b/ui/component/rewardLink/index.js
deleted file mode 100644
index c240b28ec..000000000
--- a/ui/component/rewardLink/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { connect } from 'react-redux';
-import { makeSelectRewardByClaimCode, makeSelectIsRewardClaimPending } from 'redux/selectors/rewards';
-import { doClaimRewardType } from 'redux/actions/rewards';
-
-import RewardLink from './view';
-
-const select = (state, props) => ({
- isPending: makeSelectIsRewardClaimPending()(state, props),
- reward: makeSelectRewardByClaimCode()(state, props.claim_code),
-});
-
-const perform = dispatch => ({
- claimReward: reward =>
- dispatch(doClaimRewardType(reward.reward_type, { notifyError: true, params: { claim_code: reward.claim_code } })),
-});
-
-export default connect(select, perform)(RewardLink);
diff --git a/ui/component/rewardLink/view.jsx b/ui/component/rewardLink/view.jsx
deleted file mode 100644
index b0167213e..000000000
--- a/ui/component/rewardLink/view.jsx
+++ /dev/null
@@ -1,48 +0,0 @@
-// @flow
-import React from 'react';
-import Button from 'component/button';
-import LbcMessage from 'component/common/lbc-message';
-
-type Reward = {
- reward_amount: number,
- reward_range: string,
-};
-
-type Props = {
- isPending: boolean,
- label: ?string,
- reward: Reward,
- button: ?boolean,
- disabled: boolean,
- claimReward: (Reward) => void,
-};
-
-const RewardLink = (props: Props) => {
- const { reward, claimReward, label, isPending, button, disabled = false } = props;
- let displayLabel = label;
- if (isPending) {
- displayLabel = __('Claiming...');
- } else if (label) {
- displayLabel = label;
- } else if (reward && reward.reward_range && reward.reward_range.includes('-')) {
- displayLabel = __('Claim %range% LBC', { range: reward.reward_range });
- } else if (reward && reward.reward_amount > 0) {
- displayLabel = __('Claim %amount% LBC', { amount: reward.reward_amount });
- } else {
- displayLabel = __('Claim ??? LBC');
- }
-
- return !reward ? null : (
-