fix shortUrl subscriptions
refactor invited page check if subscribed first always follow regardless of reward status
This commit is contained in:
parent
d1c4e96d60
commit
f130fae214
5 changed files with 56 additions and 41 deletions
|
@ -2,27 +2,31 @@ import { connect } from 'react-redux';
|
||||||
import {
|
import {
|
||||||
selectUser,
|
selectUser,
|
||||||
doClaimRewardType,
|
doClaimRewardType,
|
||||||
doUserFetch,
|
|
||||||
doUserSetReferrer,
|
doUserSetReferrer,
|
||||||
selectSetReferrerPending,
|
selectSetReferrerPending,
|
||||||
selectSetReferrerError,
|
selectSetReferrerError,
|
||||||
rewards as REWARDS,
|
rewards as REWARDS,
|
||||||
selectUnclaimedRewards,
|
selectUnclaimedRewards,
|
||||||
} from 'lbryinc';
|
} from 'lbryinc';
|
||||||
|
import { makeSelectIsSubscribed } from 'redux/selectors/subscriptions';
|
||||||
import { doChannelSubscribe } from 'redux/actions/subscriptions';
|
import { doChannelSubscribe } from 'redux/actions/subscriptions';
|
||||||
import Invited from './view';
|
import Invited from './view';
|
||||||
import { withRouter } from 'react-router';
|
import { withRouter } from 'react-router';
|
||||||
|
|
||||||
const select = state => ({
|
const select = (state, props) => {
|
||||||
user: selectUser(state),
|
return {
|
||||||
referrerSetPending: selectSetReferrerPending(state),
|
user: selectUser(state),
|
||||||
referrerSetError: selectSetReferrerError(state),
|
referrerSetPending: selectSetReferrerPending(state),
|
||||||
rewards: selectUnclaimedRewards(state),
|
referrerSetError: selectSetReferrerError(state),
|
||||||
});
|
rewards: selectUnclaimedRewards(state),
|
||||||
|
isSubscribed: makeSelectIsSubscribed(props.fullUri)(state),
|
||||||
|
fullUri: props.fullUri,
|
||||||
|
referrer: props.referrer,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
const perform = dispatch => ({
|
const perform = dispatch => ({
|
||||||
claimReward: () => dispatch(doClaimRewardType(REWARDS.TYPE_REFEREE)),
|
claimReward: () => dispatch(doClaimRewardType(REWARDS.TYPE_REFEREE)),
|
||||||
fetchUser: () => dispatch(doUserFetch()),
|
|
||||||
setReferrer: referrer => dispatch(doUserSetReferrer(referrer)),
|
setReferrer: referrer => dispatch(doUserSetReferrer(referrer)),
|
||||||
channelSubscribe: uri => dispatch(doChannelSubscribe(uri)),
|
channelSubscribe: uri => dispatch(doChannelSubscribe(uri)),
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// @flow
|
// @flow
|
||||||
import * as PAGES from 'constants/pages';
|
import * as PAGES from 'constants/pages';
|
||||||
import React, { useEffect } from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import { useParams } from 'react-router';
|
|
||||||
import Button from 'component/button';
|
import Button from 'component/button';
|
||||||
import ClaimPreview from 'component/claimPreview';
|
import ClaimPreview from 'component/claimPreview';
|
||||||
import Card from 'component/common/card';
|
import Card from 'component/common/card';
|
||||||
|
@ -10,7 +9,6 @@ import { rewards as REWARDS, ERRORS } from 'lbryinc';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
user: any,
|
user: any,
|
||||||
fetchUser: () => void,
|
|
||||||
claimReward: () => void,
|
claimReward: () => void,
|
||||||
setReferrer: string => void,
|
setReferrer: string => void,
|
||||||
referrerSetPending: boolean,
|
referrerSetPending: boolean,
|
||||||
|
@ -18,12 +16,14 @@ type Props = {
|
||||||
channelSubscribe: (sub: Subscription) => void,
|
channelSubscribe: (sub: Subscription) => void,
|
||||||
history: { push: string => void },
|
history: { push: string => void },
|
||||||
rewards: Array<Reward>,
|
rewards: Array<Reward>,
|
||||||
|
referrer: string,
|
||||||
|
fullUri: string,
|
||||||
|
isSubscribed: boolean,
|
||||||
};
|
};
|
||||||
|
|
||||||
function Invited(props: Props) {
|
function Invited(props: Props) {
|
||||||
const {
|
const {
|
||||||
user,
|
user,
|
||||||
fetchUser,
|
|
||||||
claimReward,
|
claimReward,
|
||||||
setReferrer,
|
setReferrer,
|
||||||
referrerSetPending,
|
referrerSetPending,
|
||||||
|
@ -31,19 +31,26 @@ function Invited(props: Props) {
|
||||||
channelSubscribe,
|
channelSubscribe,
|
||||||
history,
|
history,
|
||||||
rewards,
|
rewards,
|
||||||
|
fullUri,
|
||||||
|
referrer,
|
||||||
|
isSubscribed,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
// useParams requires react-router-dom ^v5.1.0
|
const refUri = referrer && 'lbry://' + referrer.replace(':', '#');
|
||||||
const { referrer } = useParams();
|
|
||||||
const refUri = 'lbry://' + referrer.replace(':', '#');
|
|
||||||
const referrerIsChannel = parseURI(refUri).isChannel;
|
const referrerIsChannel = parseURI(refUri).isChannel;
|
||||||
const rewardsApproved = user && user.is_reward_approved;
|
const rewardsApproved = user && user.is_reward_approved;
|
||||||
const hasVerifiedEmail = user && user.has_verified_email;
|
const hasVerifiedEmail = user && user.has_verified_email;
|
||||||
const referredRewardAvailable = rewards && rewards.some(reward => reward.reward_type === REWARDS.TYPE_REFEREE);
|
const referredRewardAvailable = rewards && rewards.some(reward => reward.reward_type === REWARDS.TYPE_REFEREE);
|
||||||
|
|
||||||
|
// always follow if it's a channel
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchUser();
|
if (fullUri && !isSubscribed) {
|
||||||
}, []);
|
channelSubscribe({
|
||||||
|
channelName: parseURI(fullUri).claimName,
|
||||||
|
uri: fullUri,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, [fullUri, isSubscribed]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!referrerSetPending && hasVerifiedEmail) {
|
if (!referrerSetPending && hasVerifiedEmail) {
|
||||||
|
@ -57,23 +64,7 @@ function Invited(props: Props) {
|
||||||
}
|
}
|
||||||
}, [referrer]);
|
}, [referrer]);
|
||||||
|
|
||||||
// if they land here due to a referrer but already claimed, make them follow anyway
|
|
||||||
useEffect(() => {
|
|
||||||
if (!referredRewardAvailable && referrerIsChannel) {
|
|
||||||
channelSubscribe({
|
|
||||||
channelName: parseURI(refUri).claimName,
|
|
||||||
uri: refUri,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}, [referredRewardAvailable, referrerIsChannel]);
|
|
||||||
|
|
||||||
function handleDone() {
|
function handleDone() {
|
||||||
if (hasVerifiedEmail && referrerIsChannel) {
|
|
||||||
channelSubscribe({
|
|
||||||
channelName: parseURI(refUri).claimName,
|
|
||||||
uri: refUri,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
history.push(`/$/${PAGES.DISCOVER}`);
|
history.push(`/$/${PAGES.DISCOVER}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,24 @@
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import InvitedPage from './view';
|
import InvitedPage from './view';
|
||||||
|
import { makeSelectPermanentUrlForUri } from 'lbry-redux';
|
||||||
|
import { withRouter } from 'react-router';
|
||||||
|
|
||||||
const select = () => ({});
|
const select = (state, props) => {
|
||||||
|
const { match } = props;
|
||||||
|
const { params } = match;
|
||||||
|
const { referrer } = params;
|
||||||
|
const sanitizedReferrer = referrer ? referrer.replace(':', '#') : '';
|
||||||
|
const uri = `lbry://${sanitizedReferrer}`;
|
||||||
|
return {
|
||||||
|
fullUri: makeSelectPermanentUrlForUri(uri)(state),
|
||||||
|
referrer: referrer,
|
||||||
|
};
|
||||||
|
};
|
||||||
const perform = () => ({});
|
const perform = () => ({});
|
||||||
|
|
||||||
export default connect(
|
export default withRouter(
|
||||||
select,
|
connect(
|
||||||
perform
|
select,
|
||||||
)(InvitedPage);
|
perform
|
||||||
|
)(InvitedPage)
|
||||||
|
);
|
||||||
|
|
|
@ -3,10 +3,16 @@ import React from 'react';
|
||||||
import Page from 'component/page';
|
import Page from 'component/page';
|
||||||
import Invited from 'component/invited';
|
import Invited from 'component/invited';
|
||||||
|
|
||||||
export default function ReferredPage() {
|
type Props = {
|
||||||
|
fullUri: string,
|
||||||
|
referrer: string,
|
||||||
|
};
|
||||||
|
export default function ReferredPage(props: Props) {
|
||||||
|
const { fullUri, referrer } = props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Page authPage className="main--auth-page">
|
<Page authPage className="main--auth-page">
|
||||||
<Invited />
|
<Invited fullUri={fullUri} referrer={referrer} />
|
||||||
</Page>
|
</Page>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7071,9 +7071,9 @@ lbry-redux@lbryio/lbry-redux#a2be979986dc93be4c2c596846109f5394f64fa1:
|
||||||
reselect "^3.0.0"
|
reselect "^3.0.0"
|
||||||
uuid "^3.3.2"
|
uuid "^3.3.2"
|
||||||
|
|
||||||
lbryinc@lbryio/lbryinc#6042c6f7bbf5fe7c6db2bd169f5b1c4558485c4c:
|
lbryinc@lbryio/lbryinc#018d149fb493615c7179d1ea3c497f07b9c8aed6:
|
||||||
version "0.0.1"
|
version "0.0.1"
|
||||||
resolved "https://codeload.github.com/lbryio/lbryinc/tar.gz/6042c6f7bbf5fe7c6db2bd169f5b1c4558485c4c"
|
resolved "https://codeload.github.com/lbryio/lbryinc/tar.gz/018d149fb493615c7179d1ea3c497f07b9c8aed6"
|
||||||
dependencies:
|
dependencies:
|
||||||
reselect "^3.0.0"
|
reselect "^3.0.0"
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue