You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			139 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			139 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			TypeScript
		
	
| import classNames from 'classnames';
 | |
| import React from 'react';
 | |
| import { lightTheme } from '../../../state/ducks/SessionTheme';
 | |
| import { SessionInput } from '../SessionInput';
 | |
| import { MAX_USERNAME_LENGTH } from './RegistrationTabs';
 | |
| 
 | |
| const DisplayNameInput = (props: {
 | |
|   stealAutoFocus?: boolean;
 | |
|   displayName: string;
 | |
|   onDisplayNameChanged: (val: string) => any;
 | |
|   handlePressEnter: () => any;
 | |
| }) => {
 | |
|   return (
 | |
|     // tslint:disable-next-line: use-simple-attributes
 | |
|     <SessionInput
 | |
|       autoFocus={props.stealAutoFocus || false}
 | |
|       label={window.i18n('displayName')}
 | |
|       type="text"
 | |
|       placeholder={window.i18n('enterDisplayName')}
 | |
|       value={props.displayName}
 | |
|       maxLength={MAX_USERNAME_LENGTH}
 | |
|       onValueChanged={props.onDisplayNameChanged}
 | |
|       onEnterPressed={props.handlePressEnter}
 | |
|       theme={lightTheme}
 | |
|     />
 | |
|   );
 | |
| };
 | |
| 
 | |
| const RecoveryPhraseInput = (props: {
 | |
|   recoveryPhrase: string;
 | |
|   onSeedChanged: (val: string) => any;
 | |
|   handlePressEnter: () => any;
 | |
| }) => {
 | |
|   return (
 | |
|     <SessionInput
 | |
|       label={window.i18n('recoveryPhrase')}
 | |
|       type="password"
 | |
|       value={props.recoveryPhrase}
 | |
|       autoFocus={true}
 | |
|       placeholder={window.i18n('enterRecoveryPhrase')}
 | |
|       enableShowHide={true}
 | |
|       onValueChanged={props.onSeedChanged}
 | |
|       onEnterPressed={props.handlePressEnter}
 | |
|       theme={lightTheme}
 | |
|     />
 | |
|   );
 | |
| };
 | |
| 
 | |
| const PasswordAndVerifyPasswordFields = (props: {
 | |
|   password: string;
 | |
|   passwordFieldsMatch: boolean;
 | |
|   passwordErrorString: string;
 | |
|   onPasswordChanged: (val: string) => any;
 | |
|   onPasswordVerifyChanged: (val: string) => any;
 | |
|   handlePressEnter: () => any;
 | |
| }) => {
 | |
|   const { password, passwordFieldsMatch, passwordErrorString } = props;
 | |
|   const passwordsDoNotMatch =
 | |
|     !passwordFieldsMatch && password ? window.i18n('passwordsDoNotMatch') : undefined;
 | |
| 
 | |
|   return (
 | |
|     <>
 | |
|       <SessionInput
 | |
|         label={window.i18n('password')}
 | |
|         error={passwordErrorString}
 | |
|         type="password"
 | |
|         placeholder={window.i18n('enterOptionalPassword')}
 | |
|         onValueChanged={props.onPasswordChanged}
 | |
|         onEnterPressed={props.handlePressEnter}
 | |
|         theme={lightTheme}
 | |
|       />
 | |
| 
 | |
|       {!!password && (
 | |
|         <SessionInput
 | |
|           label={window.i18n('confirmPassword')}
 | |
|           error={passwordsDoNotMatch}
 | |
|           type="password"
 | |
|           placeholder={window.i18n('confirmPassword')}
 | |
|           onValueChanged={props.onPasswordVerifyChanged}
 | |
|           onEnterPressed={props.handlePressEnter}
 | |
|           theme={lightTheme}
 | |
|         />
 | |
|       )}
 | |
|     </>
 | |
|   );
 | |
| };
 | |
| 
 | |
| export interface Props {
 | |
|   // tslint:disable: react-unused-props-and-state
 | |
|   showDisplayNameField: boolean;
 | |
|   showSeedField: boolean;
 | |
|   stealAutoFocus?: boolean;
 | |
|   recoveryPhrase?: string;
 | |
|   displayName: string;
 | |
|   password: string;
 | |
|   passwordErrorString: string;
 | |
|   passwordFieldsMatch: boolean;
 | |
|   handlePressEnter: () => any;
 | |
|   onSeedChanged?: (val: string) => any;
 | |
|   onDisplayNameChanged: (val: string) => any;
 | |
|   onPasswordChanged: (val: string) => any;
 | |
|   onPasswordVerifyChanged: (val: string) => any;
 | |
| }
 | |
| 
 | |
| export const RegistrationUserDetails = (props: Props) => {
 | |
|   if (props.showSeedField && (props.recoveryPhrase === undefined || !props.onSeedChanged)) {
 | |
|     throw new Error('if show seed is true, we need callback + value');
 | |
|   }
 | |
|   return (
 | |
|     <div className={classNames('session-registration__entry-fields')}>
 | |
|       {props.showSeedField && (
 | |
|         <RecoveryPhraseInput
 | |
|           recoveryPhrase={props.recoveryPhrase as string}
 | |
|           handlePressEnter={props.handlePressEnter}
 | |
|           onSeedChanged={props.onSeedChanged as any}
 | |
|         />
 | |
|       )}
 | |
|       <div className="inputfields">
 | |
|         {props.showDisplayNameField && (
 | |
|           <DisplayNameInput
 | |
|             stealAutoFocus={props.stealAutoFocus}
 | |
|             displayName={props.displayName}
 | |
|             handlePressEnter={props.handlePressEnter}
 | |
|             onDisplayNameChanged={props.onDisplayNameChanged}
 | |
|           />
 | |
|         )}
 | |
|         <PasswordAndVerifyPasswordFields
 | |
|           handlePressEnter={props.handlePressEnter}
 | |
|           onPasswordChanged={props.onPasswordChanged}
 | |
|           onPasswordVerifyChanged={props.onPasswordVerifyChanged}
 | |
|           passwordErrorString={props.passwordErrorString}
 | |
|           password={props.password}
 | |
|           passwordFieldsMatch={props.passwordFieldsMatch}
 | |
|         />
 | |
|       </div>
 | |
|     </div>
 | |
|   );
 | |
| };
 |