import { Component, OnInit } from "@angular/core"; import { Router, ActivatedRoute } from "@angular/router"; import { FormBuilder, FormGroup, Validators } from "@angular/forms"; import { first } from "rxjs/operators"; import { AuthenticationService } from "../../services/authentication.service"; import { User } from "../../models/user"; @Component({ selector: "app-create-user", templateUrl: "./create-user.component.html", styleUrls: ["./create-user.component.css"] }) export class CreateUserComponent implements OnInit { createForm: FormGroup; invalidForm = true; submitted = false; returnUrl: string; error = ""; constructor( private formBuilder: FormBuilder, private route: ActivatedRoute, private router: Router, private authenticationService: AuthenticationService ) { // redirect to home if already logged in if (this.authenticationService.currentUserValue) { this.router.navigate(["/"]); } } ngOnInit() { this.createForm = this.formBuilder.group( { username: ["", [Validators.required, Validators.minLength(3)]], password: [ "", [Validators.required, Validators.pattern("^[A-Za-z0-9_-|/]{8,15}$")] ], firstname: ["", [Validators.required, Validators.minLength(3)]], lastname: ["", [Validators.required, Validators.minLength(3)]], email: ["", [Validators.required, Validators.email]] }, { updateOn: "blur" } ); // get return url from route parameters or default to '/' this.returnUrl = this.route.snapshot.queryParams["returnUrl"] || "/"; } get formCtrls() { return this.createForm.controls; } onCreateSubmit() { this.invalidForm = false; this.submitted = true; if (this.createForm.invalid) { this.invalidForm = true; return; } let createUser = new User(); createUser.login = this.formCtrls.username.value; createUser.password = this.formCtrls.password.value; createUser.firstName = this.formCtrls.firstname.value; createUser.lastName = this.formCtrls.lastname.value; createUser.email = this.formCtrls.email.value; this.authenticationService .create(createUser) .pipe(first()) .subscribe( data => { this.router.navigate([this.returnUrl]); }, error => { this.error = error; this.invalidForm = false; } ); } }