X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2F%2Bsignup%2F%2Bregister%2Fregister.component.ts;h=4ab327b1bfdffd239c744d9facee701b951eb546;hb=3267d381f4fdd128b2f948670b2e2ba765145276;hp=cd605972842e9f7c471c7ce8ad7e68d857a9b02b;hpb=a41b9da1a9ce49df82ea10c82de4c2fbc6d1b189;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/+signup/+register/register.component.ts b/client/src/app/+signup/+register/register.component.ts index cd6059728..4ab327b1b 100644 --- a/client/src/app/+signup/+register/register.component.ts +++ b/client/src/app/+signup/+register/register.component.ts @@ -1,37 +1,91 @@ -import { Component } from '@angular/core' -import { AuthService, Notifier, RedirectService, ServerService } from '@app/core' -import { UserService, UserValidatorsService } from '@app/shared' -import { I18n } from '@ngx-translate/i18n-polyfill' -import { UserRegister } from '@shared/models/users/user-register.model' +import { CdkStep } from '@angular/cdk/stepper' +import { Component, OnInit, ViewChild } from '@angular/core' import { FormGroup } from '@angular/forms' +import { ActivatedRoute } from '@angular/router' +import { AuthService } from '@app/core' +import { HooksService } from '@app/core/plugins/hooks.service' +import { InstanceAboutAccordionComponent } from '@app/shared/shared-instance' +import { UserSignupService } from '@app/shared/shared-users' +import { NgbAccordion } from '@ng-bootstrap/ng-bootstrap' +import { UserRegister } from '@shared/models' +import { ServerConfig } from '@shared/models/server' @Component({ selector: 'my-register', templateUrl: './register.component.html', styleUrls: [ './register.component.scss' ] }) -export class RegisterComponent { - info: string = null - error: string = null - success: string = null - signupDone = false +export class RegisterComponent implements OnInit { + @ViewChild('lastStep') lastStep: CdkStep + accordion: NgbAccordion + + signupError: string + signupSuccess = false + + videoUploadDisabled: boolean + videoQuota: number + + formStepTerms: FormGroup formStepUser: FormGroup formStepChannel: FormGroup + aboutHtml = { + codeOfConduct: '' + } + + instanceInformationPanels = { + codeOfConduct: true, + terms: true, + administrators: false, + features: false, + moderation: false + } + + defaultPreviousStepButtonLabel = $localize`Go to the previous step` + defaultNextStepButtonLabel = $localize`Go to the next step` + stepUserButtonLabel = this.defaultNextStepButtonLabel + + signupDisabled = false + + private serverConfig: ServerConfig + constructor ( + private route: ActivatedRoute, private authService: AuthService, - private userValidatorsService: UserValidatorsService, - private notifier: Notifier, - private userService: UserService, - private serverService: ServerService, - private redirectService: RedirectService, - private i18n: I18n - ) { - } + private userSignupService: UserSignupService, + private hooks: HooksService + ) { } get requiresEmailVerification () { - return this.serverService.getConfig().signup.requiresEmailVerification + return this.serverConfig.signup.requiresEmailVerification + } + + get minimumAge () { + return this.serverConfig.signup.minimumAge + } + + get instanceName () { + return this.serverConfig.instance.name + } + + ngOnInit () { + this.serverConfig = this.route.snapshot.data.serverConfig + + if (this.serverConfig.signup.allowed === false || this.serverConfig.signup.allowedForCurrentIP === false) { + this.signupDisabled = true + return + } + + this.videoQuota = this.serverConfig.user.videoQuota + this.videoUploadDisabled = this.videoQuota === 0 + + this.stepUserButtonLabel = this.videoUploadDisabled + ? $localize`:Button on the registration form to finalize the account and channel creation:Signup` + : this.defaultNextStepButtonLabel + + this.hooks.runAction('action:signup.register.init', 'signup') + } hasSameChannelAndAccountNames () { @@ -50,6 +104,10 @@ export class RegisterComponent { return this.formStepChannel.value['name'] } + onTermsFormBuilt (form: FormGroup) { + this.formStepTerms = form + } + onUserFormBuilt (form: FormGroup) { this.formStepUser = form } @@ -58,32 +116,63 @@ export class RegisterComponent { this.formStepChannel = form } - signup () { - this.error = null + onTermsClick () { + if (this.accordion) this.accordion.toggle('terms') + } + + onCodeOfConductClick () { + if (this.accordion) this.accordion.toggle('code-of-conduct') + } + + onInstanceAboutAccordionInit (instanceAboutAccordion: InstanceAboutAccordionComponent) { + this.accordion = instanceAboutAccordion.accordion + this.aboutHtml = instanceAboutAccordion.aboutHtml + } - const body: UserRegister = Object.assign(this.formStepUser.value, { channel: this.formStepChannel.value }) + skipChannelCreation () { + this.formStepChannel.reset() + this.lastStep.select() + this.signup() + } - this.userService.signup(body).subscribe( - () => { - this.signupDone = true + async signup () { + this.signupError = undefined + const body: UserRegister = await this.hooks.wrapObject( + { + ...this.formStepUser.value, + + channel: this.formStepChannel?.value?.name + ? this.formStepChannel.value + : undefined + }, + 'signup', + 'filter:api.signup.registration.create.params' + ) + + this.userSignupService.signup(body).subscribe({ + next: () => { if (this.requiresEmailVerification) { - this.info = this.i18n('Now please check your emails to verify your account and complete signup.') + this.signupSuccess = true return } // Auto login this.authService.login(body.username, body.password) - .subscribe( - () => { - this.success = this.i18n('You are now logged in as {{username}}!', { username: body.username }) - }, - - err => this.error = err.message - ) + .subscribe({ + next: () => { + this.signupSuccess = true + }, + + error: err => { + this.signupError = err.message + } + }) }, - err => this.error = err.message - ) + error: err => { + this.signupError = err.message + } + }) } }