From 3a6bddc5887ec7082b689e73cbf2358f5bf61046 Mon Sep 17 00:00:00 2001 From: saltrafael Date: Wed, 9 Jun 2021 08:07:37 -0300 Subject: [PATCH] fix multiple channels analytics bug --- ui/component/channelSelector/index.js | 5 +++-- ui/component/channelSelector/view.jsx | 10 +++++++++- ui/component/claimMenuList/view.jsx | 4 ++-- ui/page/creatorDashboard/view.jsx | 9 +++++++-- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/ui/component/channelSelector/index.js b/ui/component/channelSelector/index.js index 0b353bb4d..9cdc16632 100644 --- a/ui/component/channelSelector/index.js +++ b/ui/component/channelSelector/index.js @@ -1,10 +1,11 @@ import { connect } from 'react-redux'; -import { selectMyChannelClaims } from 'lbry-redux'; +import { selectMyChannelClaims, makeSelectClaimForUri } from 'lbry-redux'; import { selectActiveChannelClaim, selectIncognito } from 'redux/selectors/app'; import { doSetActiveChannel, doSetIncognito } from 'redux/actions/app'; import SelectChannel from './view'; -const select = state => ({ +const select = (state, props) => ({ + claim: makeSelectClaimForUri(props.uri)(state), channels: selectMyChannelClaims(state), activeChannelClaim: selectActiveChannelClaim(state), incognito: selectIncognito(state), diff --git a/ui/component/channelSelector/view.jsx b/ui/component/channelSelector/view.jsx index 9fd5558d8..424efbdb2 100644 --- a/ui/component/channelSelector/view.jsx +++ b/ui/component/channelSelector/view.jsx @@ -10,6 +10,8 @@ import Icon from 'component/common/icon'; import { useHistory } from 'react-router'; type Props = { + uri: string, + claim: ?Claim, selectedChannelUrl: string, // currently selected channel channels: ?Array, onChannelSelect: (url: string) => void, @@ -18,6 +20,8 @@ type Props = { doSetActiveChannel: (string) => void, incognito: boolean, doSetIncognito: (boolean) => void, + activeChanged: boolean, + setActiveChanged: (boolean) => void, }; type ListItemProps = { @@ -52,15 +56,19 @@ function IncognitoSelector(props: IncognitoSelectorProps) { } function ChannelSelector(props: Props) { - const { channels, activeChannelClaim, doSetActiveChannel, hideAnon = false, incognito, doSetIncognito } = props; + const { claim, channels, activeChannelClaim, doSetActiveChannel, hideAnon = false, incognito, doSetIncognito, activeChanged, setActiveChanged } = props; const { push, location: { pathname }, } = useHistory(); + const selectedClaimId = claim && claim.claim_id; + if (selectedClaimId && !activeChanged) doSetActiveChannel(selectedClaimId); + const activeChannelUrl = activeChannelClaim && activeChannelClaim.permanent_url; function handleChannelSelect(channelClaim) { doSetIncognito(false); + setActiveChanged(true); doSetActiveChannel(channelClaim.claim_id); } diff --git a/ui/component/claimMenuList/view.jsx b/ui/component/claimMenuList/view.jsx index 52926893e..91953443b 100644 --- a/ui/component/claimMenuList/view.jsx +++ b/ui/component/claimMenuList/view.jsx @@ -79,6 +79,7 @@ function ClaimMenuList(props: Props) { } = props; const incognito = channelUri && !(channelUri.includes('@')); const signingChannel = claim && (claim.signing_channel || claim); + const permanentUrl = signingChannel && signingChannel.permanent_url; const isChannel = !incognito && signingChannel === claim; const showDelete = claimIsMine || (fileInfo && (fileInfo.written_bytes > 0 || fileInfo.blobs_completed > 0)); const subscriptionLabel = isSubscribed ? __('Unfollow') : __('Follow'); @@ -100,7 +101,6 @@ function ClaimMenuList(props: Props) { (claim.value.stream_type === 'audio' || claim.value.stream_type === 'video'); function handleFollow() { - const permanentUrl = signingChannel && signingChannel.permanent_url; const { channelName } = parseURI(permanentUrl); const subscriptionHandler = isSubscribed ? doChannelUnsubscribe : doChannelSubscribe; @@ -112,7 +112,7 @@ function ClaimMenuList(props: Props) { } function handleAnalytics() { - push(`/$/${PAGES.CREATOR_DASHBOARD}?channel=${encodeURIComponent(signingChannel.canonical_url)}`); + push(`/$/${PAGES.CREATOR_DASHBOARD}?channel=${encodeURIComponent(permanentUrl)}`); } function handleToggleMute() { diff --git a/ui/page/creatorDashboard/view.jsx b/ui/page/creatorDashboard/view.jsx index 0a6c838ec..d36324508 100644 --- a/ui/page/creatorDashboard/view.jsx +++ b/ui/page/creatorDashboard/view.jsx @@ -7,6 +7,7 @@ import Button from 'component/button'; import CreatorAnalytics from 'component/creatorAnalytics'; import ChannelSelector from 'component/channelSelector'; import Yrbl from 'component/yrbl'; +import { useHistory } from 'react-router'; type Props = { channels: Array, @@ -17,6 +18,10 @@ type Props = { export default function CreatorDashboardPage(props: Props) { const { channels, fetchingChannels, activeChannelClaim } = props; const hasChannels = channels && channels.length > 0; + const [activeChanged, setActiveChanged] = React.useState(false); + const { location: { search } } = useHistory(); + const urlParams = new URLSearchParams(search); + const channelParam = urlParams.get('channel'); return ( @@ -40,8 +45,8 @@ export default function CreatorDashboardPage(props: Props) { {!fetchingChannels && activeChannelClaim && ( - - + + )}