// @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 SelectChannel from 'component/selectChannel'; 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; const noChannels = !channels || !(channels.length > 0); // 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={ {!noChannels && ( handleReferralChange(channel)} label={__('Customize link')} hideAnon injected={[referralCode]} /> )} } /> }}> Invite someone you know by email and earn %lbc% when they join %SITE_NAME%. } actions={
} onChange={event => { handleEmailChanged(event); }} />

, referral_faq_link:

); } export default InviteNew;