import React from "react"; import lbry from "../lbry.js"; import lbryio from "../lbryio.js"; import Modal from "./modal.js"; import ModalPage from "./modal-page.js"; import Link from "component/link" import {RewardLink} from 'component/reward-link'; import {FormRow} from "../component/form.js"; import {CreditAmount, Address} from "../component/common.js"; import {getLocal, setLocal} from '../utils.js'; import rewards from '../rewards' class SubmitEmailStage extends React.Component { constructor(props) { super(props); this.state = { rewardType: null, email: '', submitting: false }; } handleEmailChanged(event) { this.setState({ email: event.target.value, }); } onEmailSaved(email) { this.props.setStage("confirm", { email: email }) } handleSubmit(event) { event.preventDefault(); this.setState({ submitting: true, }); lbryio.call('user_email', 'new', {email: this.state.email}, 'post').then(() => { this.onEmailSaved(this.state.email); }, (error) => { if (error.xhr && (error.xhr.status == 409 || error.message == __("This email is already in use"))) { this.onEmailSaved(this.state.email); return; } else if (this._emailRow) { this._emailRow.showError(error.message) } this.setState({ submitting: false }); }); } render() { return (
{ this.handleSubmit(event) }}> { this._emailRow = ref }} type="text" label={__("Email")} placeholder="scrwvwls@lbry.io" name="email" value={this.state.email} onChange={(event) => { this.handleEmailChanged(event) }} />
{ this.handleSubmit(event) }} />
); } } class ConfirmEmailStage extends React.Component { constructor(props) { super(props); this.state = { rewardType: null, code: '', submitting: false, errorMessage: null, }; } handleCodeChanged(event) { this.setState({ code: event.target.value, }); } handleSubmit(event) { event.preventDefault(); this.setState({ submitting: true, }); const onSubmitError = (error) => { if (this._codeRow) { this._codeRow.showError(error.message) } this.setState({ submitting: false }); }; lbryio.call('user_email', 'confirm', {verification_token: this.state.code, email: this.props.email}, 'post').then((userEmail) => { if (userEmail.is_verified) { this.props.setStage("welcome") } else { onSubmitError(new Error(__("Your email is still not verified."))) //shouldn't happen? } }, onSubmitError); } render() { return (
{ this.handleSubmit(event) }}> { this._codeRow = ref }} type="text" name="code" placeholder="a94bXXXXXXXXXXXXXX" value={this.state.code} onChange={(event) => { this.handleCodeChanged(event) }} helper={__("A verification code is required to access this version.")}/>
{ this.handleSubmit(event)}} />
{__("No code?")} { this.props.setStage("nocode")}} label={__("Click here")} />.
); } } class WelcomeStage extends React.Component { static propTypes = { endAuth: React.PropTypes.func, } constructor(props) { super(props); this.state = { hasReward: false, rewardAmount: null, }; } onRewardClaim(reward) { this.setState({ hasReward: true, rewardAmount: reward.amount }) } render() { return ( !this.state.hasReward ?

{__("Welcome to LBRY.")}

{__("Using LBRY is like dating a centaur. Totally normal up top, and way different underneath.")}

{__("Up top, LBRY is similar to popular media sites.")}

{__("Below, LBRY is controlled by users -- you -- via blockchain and decentralization.")}

{__("Thank you for making content freedom possible! Here's a nickel, kid.")}

{ this.onRewardClaim(event) }} onRewardFailure={() => this.props.setStage(null)} onConfirmed={() => { this.props.setStage(null) }} />
: { this.props.setStage(null) }}>

{__("About Your Reward")}

{__("You earned a reward of ")} {__("LBRY credits, or \"LBC\".")}

{__("This reward will show in your Wallet momentarily, probably while you are reading this message.")}

{__("LBC is used to compensate creators, to publish, and to have say in how the network works.")}

{__("No need to understand it all just yet! Try watching or downloading something next.")}

{__("Finally, know that LBRY is an early beta and that it earns the name.")}

); } } const ErrorStage = (props) => { return

{__("An error was encountered that we cannot continue from.")}

{__("At least we're earning the name beta.")}

{ props.errorText ?

{__("Message:")} {props.errorText}

: '' } { window.location.reload() } } />
} const PendingStage = (props) => { return

{__("Preparing for first access")}

} class CodeRequiredStage extends React.Component { constructor(props) { super(props); this._balanceSubscribeId = null this.state = { balance: 0, address: getLocal('wallet_address') }; } componentWillMount() { this._balanceSubscribeId = lbry.balanceSubscribe((balance) => { this.setState({ balance: balance }); }) if (!this.state.address) { lbry.wallet_unused_address().then((address) => { setLocal('wallet_address', address); this.setState({ address: address }); }); } } componentWillUnmount() { if (this._balanceSubscribeId) { lbry.balanceUnsubscribe(this._balanceSubscribeId) } } render() { const disabled = this.state.balance < 1; return (

{__("Access to LBRY is restricted as we build and scale the network.")}

{__("There are two ways in:")}

{__("Own LBRY Credits")}

{__("If you own at least 1 LBC, you can get in right now.")}

{ setLocal('auth_bypassed', true); this.props.setStage(null); }} disabled={disabled} label={__("Let Me In")} button={ disabled ? "alt" : "primary" } />

{__("Your balance is ")}. {__("To increase your balance, send credits to this address:")}

{__("If you don't understand how to send credits, then...")}

{__("Wait For A Code")}

{__("If you provide your email, you'll automatically receive a notification when the system is open.")}

{ this.props.setStage("email"); }} label={__("Return")} />

); } } export class AuthOverlay extends React.Component { constructor(props) { super(props); this._stages = { pending: PendingStage, error: ErrorStage, nocode: CodeRequiredStage, email: SubmitEmailStage, confirm: ConfirmEmailStage, welcome: WelcomeStage } this.state = { stage: "pending", stageProps: {} }; } setStage(stage, stageProps = {}) { this.setState({ stage: stage, stageProps: stageProps }) } componentWillMount() { lbryio.authenticate().then((user) => { if (!user.has_verified_email) { if (getLocal('auth_bypassed')) { this.setStage(null) } else { this.setStage("email", {}) } } else { lbryio.call('reward', 'list', {}).then((userRewards) => { userRewards.filter(function(reward) { return reward.reward_type == rewards.TYPE_NEW_USER && reward.transaction_id; }).length ? this.setStage(null) : this.setStage("welcome") }); } }).catch((err) => { this.setStage("error", { errorText: err.message }) document.dispatchEvent(new CustomEvent('unhandledError', { detail: { message: err.message, data: err.stack } })); }) } render() { if (!this.state.stage) { return null; } const StageContent = this._stages[this.state.stage]; if (!StageContent) { return {__("Unknown authentication step.")} } return ( this.state.stage != "welcome" ?

{__("LBRY Early Access")}

{ this.setStage(stage, stageProps) }} />
: { this.setStage(stage, stageProps) }} {...this.state.stageProps} /> ); } }