From fbd9131b91b3db7d901bff2194dce6b7be3c86eb Mon Sep 17 00:00:00 2001 From: zeppi <jessopb@gmail.com> Date: Tue, 28 Jun 2022 09:36:47 -0400 Subject: [PATCH] remove invite components --- ui/component/fileDescription/index.js | 2 - ui/component/fileDescription/view.jsx | 1 - ui/component/fileValues/index.js | 2 - ui/component/fileValues/view.jsx | 1 - ui/component/inviteList/index.js | 14 -- ui/component/inviteList/view.jsx | 99 ------------ ui/component/inviteNew/index.js | 29 ---- ui/component/inviteNew/view.jsx | 154 ------------------ ui/component/invited/index.js | 30 ---- ui/component/invited/view.jsx | 225 -------------------------- ui/component/settingAccount/view.jsx | 2 - ui/redux/selectors/user.js | 2 - 12 files changed, 561 deletions(-) delete mode 100644 ui/component/inviteList/index.js delete mode 100644 ui/component/inviteList/view.jsx delete mode 100644 ui/component/inviteNew/index.js delete mode 100644 ui/component/inviteNew/view.jsx delete mode 100644 ui/component/invited/index.js delete mode 100644 ui/component/invited/view.jsx 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/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<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; 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<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; 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<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; diff --git a/ui/component/settingAccount/view.jsx b/ui/component/settingAccount/view.jsx index d0d67224e..127da531c 100644 --- a/ui/component/settingAccount/view.jsx +++ b/ui/component/settingAccount/view.jsx @@ -53,9 +53,7 @@ export default function SettingAccount(props: Props) { </SettingsRow> )} - {/* @if TARGET='app' */} <SyncToggle disabled={walletEncrypted && !storedPassword && storedPassword !== ''} /> - {/* @endif */} {hasChannels && ( <SettingsRow title={__('Comments')} subtitle={__('View your past comments.')}> diff --git a/ui/redux/selectors/user.js b/ui/redux/selectors/user.js index 65d317ef7..26f6161ef 100644 --- a/ui/redux/selectors/user.js +++ b/ui/redux/selectors/user.js @@ -2,8 +2,6 @@ import { createSelector } from 'reselect'; export const selectState = (state) => state.user || {}; -export const selectAuthenticationIsPending = createSelector(selectState, (state) => state.authenticationIsPending); - export const selectUserIsPending = createSelector(selectState, (state) => state.userIsPending); export const selectUser = createSelector(selectState, (state) => state.user);