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
---
.../my-account-profile.component.ts | 2 +-
.../+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 +++++++++++++++
.../form-validators/user-validators.service.ts | 33 ++++++++++++---------
client/src/app/shared/misc/loader.component.html | 2 +-
client/src/app/shared/misc/loader.component.scss | 14 ++++-----
client/src/app/shared/users/user.service.ts | 16 ++++++++++
.../video-import-torrent.component.ts | 1 -
12 files changed, 153 insertions(+), 46 deletions(-)
(limited to 'client')
diff --git a/client/src/app/+my-account/my-account-settings/my-account-profile/my-account-profile.component.ts b/client/src/app/+my-account/my-account-settings/my-account-profile/my-account-profile.component.ts
index a9503ed1b..fcad5a6c2 100644
--- a/client/src/app/+my-account/my-account-settings/my-account-profile/my-account-profile.component.ts
+++ b/client/src/app/+my-account/my-account-settings/my-account-profile/my-account-profile.component.ts
@@ -30,7 +30,7 @@ export class MyAccountProfileComponent extends FormReactive implements OnInit {
ngOnInit () {
this.buildForm({
- 'display-name': this.userValidatorsService.USER_DISPLAY_NAME,
+ 'display-name': this.userValidatorsService.USER_DISPLAY_NAME_REQUIRED,
description: this.userValidatorsService.USER_DESCRIPTION
})
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 @@
+
+
@@ -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.
-
-
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 @@