// @flow import * as ICONS from 'constants/icons'; import * as PAGES from 'constants/pages'; import React from 'react'; import { Lbryio } from 'lbryinc'; import ClaimPreview from 'component/claimPreview'; import Card from 'component/common/card'; import Spinner from 'component/spinner'; import Icon from 'component/common/icon'; import Button from 'component/button'; import Yrbl from 'component/yrbl'; import { useHistory } from 'react-router-dom'; import analytics from 'analytics'; type Props = { claim: ?ChannelClaim, fetchingChannels: boolean, }; const UNAUTHENTICATED_ERROR = 'unauthenticated'; const GENERIC_ERROR = 'error'; export default function CreatorAnalytics(props: Props) { const { claim } = props; const history = useHistory(); const [stats, setStats] = React.useState(); const [error, setError] = React.useState(); const [fetchingStats, setFetchingStats] = React.useState(false); const claimId = claim && claim.claim_id; // TODO: put this back when hubs are fixed // const channelHasClaims = claim && claim.meta && claim.meta.claims_in_channel && claim.meta.claims_in_channel > 0 || true; const channelHasClaims = true; React.useEffect(() => { setStats(null); }, [claimId]); const channelForEffect = JSON.stringify(claim); React.useEffect(() => { if (claimId && channelForEffect && channelHasClaims) { setFetchingStats(true); Lbryio.call('channel', 'stats', { claim_id: claimId }) .then((res) => { setFetchingStats(false); setStats(res); }) .catch((error) => { if (error.response.status === 401) { setError(UNAUTHENTICATED_ERROR); const channelToSend = JSON.parse(channelForEffect); analytics.apiLogPublish(channelToSend); } else { setError(GENERIC_ERROR); } setFetchingStats(false); }); } }, [claimId, channelForEffect, channelHasClaims, setFetchingStats, setStats]); return ( {!stats && (
{fetchingStats ? ( ) : (
{error && ( )} {!error && !channelHasClaims ? (
} /> ) : (
} /> )} )} )} {stats && (
{__('%follower_count% followers', { follower_count: stats.ChannelSubs })}} icon={ICONS.SUBSCRIBE} subtitle={
{0 > -1 && '+'}{' '} {__('%follower_count_weekly_change% this week', { follower_count_weekly_change: stats.ChannelSubChange || 0, })} {stats.ChannelSubChange > 0 && }
} /> {__('%all_content_views% views', { all_content_views: stats.AllContentViews })}} subtitle={
{__('+ %all_content_views_weekly_change% this week', { all_content_views_weekly_change: stats.AllContentViewChange || 0, })} {stats.AllContentViewChange > 0 && }
} />
{/* {__('%lbc_received% LBRY Credits Earned', { lbc_received: stats.AllLBCReceived })}} icon={ICONS.REWARDS} subtitle={
{'+'}{' '} {__('%lbc_received_changed% this week', { lbc_received_changed: stats.LBCReceivedChange || 0, })} {stats.LBCReceivedChange > 0 && }

{__( "Earnings may also include any LBC you've sent yourself or added as support. We are working on making this more accurate. Check your wallet page for the correct total balance." )}

} /> */} {stats.VideoURITopNew ? (
{stats.VideoViewsTopNew === 1 ? __('1 view') : __('%view_count% views - %view_count_change% this week', { view_count: stats.VideoViewsTopNew, view_count_change: stats.VideoViewChangeTopNew, })} {stats.VideoViewChangeTopNew > 0 && }
} /> ) : (
} /> )} {stats.VideoURITopCommentNew && stats.VideoCommentTopCommentNew > 0 && (
{stats.VideoCommentTopCommentNew === 1 ? __('1 comment') : __('%comment_count% comments - %comment_count_change% this week', { comment_count: stats.VideoCommentTopCommentNew, comment_count_change: stats.VideoCommentChangeTopCommentNew, })} {stats.VideoCommentChangeTopCommentNew > 0 && ( )}
} /> )}
{__('%all_time_top_views% views - %all_time_views_weekly_change% this week', { all_time_top_views: stats.VideoViewsTopAllTime, all_time_views_weekly_change: stats.VideoViewChangeTopAllTime, })} {stats.VideoViewChangeTopAllTime > 0 && }
} /> )} ); }