import React, { useEffect, useState } from 'react'; import { SessionButton, SessionButtonColor, SessionButtonType } from '../SessionButton'; import { SessionIdEditable } from '../SessionIdEditable'; import { signUp, validatePassword } from './RegistrationTabs'; import { RegistrationUserDetails } from './RegistrationUserDetails'; import { TermsAndConditions } from './TermsAndConditions'; export enum SignUpMode { Default, SessionIDShown, EnterDetails, } export interface Props { // tslint:disable: react-unused-props-and-state generatedRecoveryPhrase: string; hexGeneratedPubKey: string; } const CreateSessionIdButton = ({ createSessionID }: { createSessionID: any }) => { return ( ); }; const ContinueSignUpButton = ({ continueSignUp }: { continueSignUp: any }) => { return ( ); }; const SignUpDefault = (props: { createSessionID: () => void }) => { const allUsersAreRandomly = window.i18n('allUsersAreRandomly...'); return (
{allUsersAreRandomly}
); }; const SignUpSessionIDShown = (props: { continueSignUp: () => void }) => { return (
{window.i18n('yourUniqueSessionID')}
); }; export const SignUpTab = (props: Props) => { const [signUpMode, setSignUpMode] = useState(SignUpMode.Default); const [displayName, setDisplayName] = useState(''); const [password, setPassword] = useState(''); const [passwordVerify, setPasswordVerify] = useState(''); const [passwordErrorString, setPasswordErrorString] = useState(''); const [displayNameError, setDisplayNameError] = useState(''); const [passwordFieldsMatch, setPasswordFieldsMatch] = useState(false); useEffect(() => { if (signUpMode === SignUpMode.SessionIDShown) { window.Session.setNewSessionID(props.hexGeneratedPubKey); } }, [signUpMode]); if (signUpMode === SignUpMode.Default) { return ( { setSignUpMode(SignUpMode.SessionIDShown); }} /> ); } if (signUpMode === SignUpMode.SessionIDShown) { return ( { setSignUpMode(SignUpMode.EnterDetails); }} /> ); } // can only be the EnterDetails step // Display name is required const displayNameOK = !displayNameError && !!displayName; // Password is valid if empty, or if no error and fields are matching const passwordsOK = !password || (!passwordErrorString && passwordFieldsMatch); const enableCompleteSignUp = displayNameOK && passwordsOK; const signUpWithDetails = async () => { await signUp({ displayName, generatedRecoveryPhrase: props.generatedRecoveryPhrase, password, verifyPassword: passwordVerify, }); }; return (
{window.i18n('welcomeToYourSession')}
{ const sanitizedName = name.replace(window.displayNameRegex, ''); const trimName = sanitizedName.trim(); setDisplayName(sanitizedName); setDisplayNameError(!trimName ? window.i18n('displayNameEmpty') : undefined); }} onPasswordChanged={(val: string) => { setPassword(val); if (!val) { setPasswordVerify(''); setPasswordErrorString(''); setPasswordFieldsMatch(true); return; } const errors = validatePassword(val, passwordVerify); setPasswordErrorString(errors.passwordErrorString); setPasswordFieldsMatch(errors.passwordFieldsMatch); }} onPasswordVerifyChanged={(val: string) => { setPasswordVerify(val); const errors = validatePassword(password, val); setPasswordErrorString(errors.passwordErrorString); setPasswordFieldsMatch(errors.passwordFieldsMatch); }} password={password} passwordErrorString={passwordErrorString} passwordFieldsMatch={passwordFieldsMatch} stealAutoFocus={true} />
); };