import React from 'react'; import classNames from 'classnames'; import { LocalizerType } from '../../types/Util'; import { SessionInput } from './SessionInput'; import { SessionButton, SessionButtonTypes } from './SessionButton'; interface Props { i18n: LocalizerType; //onItemClick?: (event: ItemClickEvent) => void; } enum SignInMode { Default = 'Default', UsingSeed = 'UsingSeed', LinkingDevice = 'LinkingDevice', } enum SignUpMode { Default = 'Default', SessionIDGenerated = 'SessionIDGenerated', } interface State { selectedTab: 'create' | 'signin'; signInMode: SignInMode; signUpMode: SignUpMode; seed: string; displayName: string; password: string; validatePassword: string; } interface TabSelectEvent { type: 'create' | 'signin'; } const Tab = ({ isSelected, label, onSelect, type, }: { isSelected: boolean; label: string; onSelect?: (event: TabSelectEvent) => void; type: 'create' | 'signin'; }) => { const handleClick = onSelect ? () => { onSelect({ type }); } : undefined; return (
{label}
); }; export class RegistrationTabs extends React.Component { constructor(props: any) { super(props); this.onSeedChanged = this.onSeedChanged.bind(this); this.onDisplayNameChanged = this.onDisplayNameChanged.bind(this); this.onPasswordChanged = this.onPasswordChanged.bind(this); this.onPasswordVerifyChanged = this.onPasswordVerifyChanged.bind(this); this.state = { selectedTab: 'create', signInMode: SignInMode.Default, signUpMode: SignUpMode.Default, seed: '', displayName: '', password: '', validatePassword: '', }; } public render() { return this.renderTabs(); } private renderTabs() { const { selectedTab } = this.state; const { i18n } = this.props; const createAccount = i18n('createAccount'); const signIn = i18n('signIn'); return (
{this.renderSections()}
); } private readonly handleTabSelect = (event: TabSelectEvent): void => { this.setState({ selectedTab: event.type }); }; private onSeedChanged(val: string) { this.setState({ seed: val }); } private onDisplayNameChanged(val: string) { this.setState({ displayName: val }); } private onPasswordChanged(val: string) { this.setState({ password: val }); } private onPasswordVerifyChanged(val: string) { this.setState({ validatePassword: val }); } private renderSections() { const { selectedTab } = this.state; if (selectedTab === 'create') { return this.renderSignUp(); } return this.renderSignIn(); } private renderSignUp() { const { signUpMode } = this.state; const { i18n } = this.props; if (signUpMode === SignUpMode.Default) { return (
{this.renderSignUpHeader()} {this.renderSignUpButton()}
); } else { return (
{this.renderSignUpHeader()}
{i18n('yourUniqueSessionID')}
{this.renderEnterSessionID(false)} {this.renderSignUpButton()} {this.getRenderTermsConditionAgreement()}
); } } private getRenderTermsConditionAgreement() { const { selectedTab, signInMode, signUpMode } = this.state; if (selectedTab === 'create') { if (signUpMode !== SignUpMode.Default) { return this.renderTermsConditionAgreement(); } else { return null; } } else { if (signInMode !== SignInMode.Default) { return this.renderTermsConditionAgreement(); } else { return null; } } } private renderSignUpHeader() { const allUsersAreRandomly = this.props.i18n('allUsersAreRandomly...'); return
{allUsersAreRandomly}
; } private renderSignUpButton() { const { signUpMode } = this.state; const { i18n } = this.props; let buttonType: any; let buttonText: string; if (signUpMode !== SignUpMode.Default) { buttonType = SessionButtonTypes.FullGreen; buttonText = i18n('getStarted'); } else { buttonType = SessionButtonTypes.Green; buttonText = i18n('generateSessionID'); } return ( { this.setState({ signUpMode: SignUpMode.SessionIDGenerated, }); }} buttonType={buttonType} text={buttonText} /> ); } private renderSignIn() { return (
{this.renderRegistrationContent()} {this.renderSignInButtons()} {this.getRenderTermsConditionAgreement()}
); } private renderRegistrationContent() { const { signInMode } = this.state; const { i18n } = this.props; if (signInMode === SignInMode.UsingSeed) { return (
{ this.onSeedChanged(val); }} /> { this.onDisplayNameChanged(val); }} /> { this.onPasswordChanged(val); }} /> { this.onPasswordVerifyChanged(val); }} />
); } else if (signInMode === SignInMode.LinkingDevice) { return (
{i18n('devicePairingHeader')}
{this.renderEnterSessionID(true)}
); } else { return
; } } private renderEnterSessionID(contentEditable: boolean) { const { i18n } = this.props; const enterSessionIDHere = i18n('enterSessionIDHere'); return (
); } private renderSignInButtons() { const { signInMode } = this.state; const { i18n } = this.props; const or = i18n('or'); let greenButtonType: any; let greenText: string; let whiteButtonText: string; if (signInMode !== SignInMode.Default) { greenButtonType = SessionButtonTypes.FullGreen; greenText = i18n('continueYourSession'); } else { greenButtonType = SessionButtonTypes.Green; greenText = i18n('restoreUsingSeed'); } if (signInMode === SignInMode.LinkingDevice) { whiteButtonText = i18n('restoreUsingSeed'); } else { whiteButtonText = i18n('linkDeviceToExistingAccount'); } return (
{ this.setState({ signInMode: SignInMode.UsingSeed, }); }} buttonType={greenButtonType} text={greenText} />
{or}
{ this.setState({ signInMode: SignInMode.LinkingDevice, }); }} buttonType={SessionButtonTypes.White} text={whiteButtonText} />
); } private renderTermsConditionAgreement() { // FIXME link to our Terms and Conditions and privacy statement // FIXME find a better way than dangerouslySetInnerHTML to set this in a localized way return (
By using this service, you agree to our Terms and Conditions and{' '} Privacy Statement
); } }