From 1f20622f2b087eaf8738d60fae00a44b9c558ca3 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 7 Jun 2019 16:59:53 +0200 Subject: Improve registration * Add ability to set the user display name * Use display name to guess the username/channel name * Add explanations about what is the purpose of a username/channel name * Add a loader at the "done" step --- .../+register/register-step-channel.component.html | 34 ++++++++++++---------- .../+register/register-step-channel.component.ts | 30 ++++++++++++++----- .../+register/register-step-user.component.html | 19 ++++++++++++ .../+register/register-step-user.component.ts | 19 +++++++++++- .../app/+signup/+register/register.component.html | 6 ++++ .../app/+signup/+register/register.component.scss | 23 +++++++++++++++ 6 files changed, 108 insertions(+), 23 deletions(-) (limited to 'client/src/app/+signup') diff --git a/client/src/app/+signup/+register/register-step-channel.component.html b/client/src/app/+signup/+register/register-step-channel.component.html index 68ea4473a..253374f87 100644 --- a/client/src/app/+signup/+register/register-step-channel.component.html +++ b/client/src/app/+signup/+register/register-step-channel.component.html @@ -11,6 +11,21 @@

+
+ + +
+ +
+ +
+ {{ formErrors.displayName }} +
+
+
@@ -24,6 +39,10 @@
+
+ The channel name is a unique identifier of your channel on this instance. It's like an address mail, so other people can find your channel. +
+
{{ formErrors.name }}
@@ -32,19 +51,4 @@ Channel name cannot be the same than your account name. You can click on the first step to update your account name. - -
- - -
- -
- -
- {{ formErrors.displayName }} -
-
diff --git a/client/src/app/+signup/+register/register-step-channel.component.ts b/client/src/app/+signup/+register/register-step-channel.component.ts index 9e13f75b3..e434b91a7 100644 --- a/client/src/app/+signup/+register/register-step-channel.component.ts +++ b/client/src/app/+signup/+register/register-step-channel.component.ts @@ -1,8 +1,10 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core' import { AuthService } from '@app/core' -import { FormReactive, VideoChannelValidatorsService } from '@app/shared' +import { FormReactive, UserService, VideoChannelValidatorsService } from '@app/shared' import { FormValidatorService } from '@app/shared/forms/form-validators/form-validator.service' import { FormGroup } from '@angular/forms' +import { pairwise } from 'rxjs/operators' +import { concat, of } from 'rxjs' @Component({ selector: 'my-register-step-channel', @@ -16,6 +18,7 @@ export class RegisterStepChannelComponent extends FormReactive implements OnInit constructor ( protected formValidatorService: FormValidatorService, private authService: AuthService, + private userService: UserService, private videoChannelValidatorsService: VideoChannelValidatorsService ) { super() @@ -25,16 +28,29 @@ export class RegisterStepChannelComponent extends FormReactive implements OnInit return window.location.host } - isSameThanUsername () { - return this.username && this.username === this.form.value['name'] - } - ngOnInit () { this.buildForm({ - name: this.videoChannelValidatorsService.VIDEO_CHANNEL_NAME, - displayName: this.videoChannelValidatorsService.VIDEO_CHANNEL_DISPLAY_NAME + displayName: this.videoChannelValidatorsService.VIDEO_CHANNEL_DISPLAY_NAME, + name: this.videoChannelValidatorsService.VIDEO_CHANNEL_NAME }) setTimeout(() => this.formBuilt.emit(this.form)) + + concat( + of(''), + this.form.get('displayName').valueChanges + ).pipe(pairwise()) + .subscribe(([ oldValue, newValue ]) => this.onDisplayNameChange(oldValue, newValue)) + } + + isSameThanUsername () { + return this.username && this.username === this.form.value['name'] + } + + private onDisplayNameChange (oldDisplayName: string, newDisplayName: string) { + const name = this.form.value['name'] || '' + + const newName = this.userService.getNewUsername(oldDisplayName, newDisplayName, name) + this.form.patchValue({ name: newName }) } } diff --git a/client/src/app/+signup/+register/register-step-user.component.html b/client/src/app/+signup/+register/register-step-user.component.html index cd0c78bfa..47b3be8cc 100644 --- a/client/src/app/+signup/+register/register-step-user.component.html +++ b/client/src/app/+signup/+register/register-step-user.component.html @@ -1,5 +1,20 @@
+
+ + +
+ +
+ +
+ {{ formErrors.displayName }} +
+
+
@@ -13,6 +28,10 @@
+
+ The username is a unique identifier of your account on this instance. It's like an address mail, so other people can find you. +
+
{{ formErrors.username }}
diff --git a/client/src/app/+signup/+register/register-step-user.component.ts b/client/src/app/+signup/+register/register-step-user.component.ts index 3825ae371..3b71fd3c4 100644 --- a/client/src/app/+signup/+register/register-step-user.component.ts +++ b/client/src/app/+signup/+register/register-step-user.component.ts @@ -1,8 +1,10 @@ import { Component, EventEmitter, OnInit, Output } from '@angular/core' import { AuthService } from '@app/core' -import { FormReactive, UserValidatorsService } from '@app/shared' +import { FormReactive, UserService, UserValidatorsService } from '@app/shared' import { FormValidatorService } from '@app/shared/forms/form-validators/form-validator.service' import { FormGroup } from '@angular/forms' +import { pairwise } from 'rxjs/operators' +import { concat, of } from 'rxjs' @Component({ selector: 'my-register-step-user', @@ -15,6 +17,7 @@ export class RegisterStepUserComponent extends FormReactive implements OnInit { constructor ( protected formValidatorService: FormValidatorService, private authService: AuthService, + private userService: UserService, private userValidatorsService: UserValidatorsService ) { super() @@ -26,6 +29,7 @@ export class RegisterStepUserComponent extends FormReactive implements OnInit { ngOnInit () { this.buildForm({ + displayName: this.userValidatorsService.USER_DISPLAY_NAME_REQUIRED, username: this.userValidatorsService.USER_USERNAME, password: this.userValidatorsService.USER_PASSWORD, email: this.userValidatorsService.USER_EMAIL, @@ -33,5 +37,18 @@ export class RegisterStepUserComponent extends FormReactive implements OnInit { }) setTimeout(() => this.formBuilt.emit(this.form)) + + concat( + of(''), + this.form.get('displayName').valueChanges + ).pipe(pairwise()) + .subscribe(([ oldValue, newValue ]) => this.onDisplayNameChange(oldValue, newValue)) + } + + private onDisplayNameChange (oldDisplayName: string, newDisplayName: string) { + const username = this.form.value['username'] || '' + + const newUsername = this.userService.getNewUsername(oldDisplayName, newDisplayName, username) + this.form.patchValue({ username: newUsername }) } } diff --git a/client/src/app/+signup/+register/register.component.html b/client/src/app/+signup/+register/register.component.html index 24def68c1..d7e47c1a8 100644 --- a/client/src/app/+signup/+register/register.component.html +++ b/client/src/app/+signup/+register/register.component.html @@ -27,6 +27,12 @@ +
+ + +
PeerTube is creating your account...
+
+
{{ error }}
diff --git a/client/src/app/+signup/+register/register.component.scss b/client/src/app/+signup/+register/register.component.scss index 6f61b78f7..8d14992e7 100644 --- a/client/src/app/+signup/+register/register.component.scss +++ b/client/src/app/+signup/+register/register.component.scss @@ -56,3 +56,26 @@ button { @include peertube-button; @include orange-button; } + +.name-information { + margin-top: 10px; +} + +.done-loader { + display: flex; + justify-content: center; + flex-direction: column; + align-items: center; + + my-loader { + margin-bottom: 20px; + + /deep/ .loader div { + border-color: var(--mainColor) transparent transparent transparent; + } + + & + div { + font-size: 15px; + } + } +} -- cgit v1.2.3