import { Component, inject, Input, OnInit, output } from '@angular/core'; import { FormBuilder, FormControl, FormGroup, ReactiveFormsModule, Validators, } from '@angular/forms'; import { User } from '@app/shared/models/user'; import { NgClass } from '@angular/common'; import { UserService } from '@app/core/services/user/user.service'; import { AuthService } from '@app/core/services/authentication/auth.service'; import { UntilDestroy } from '@ngneat/until-destroy'; import { ToastrService } from 'ngx-toastr'; @Component({ selector: 'app-user-form', standalone: true, imports: [ReactiveFormsModule, NgClass], templateUrl: './user-form.component.html', styleUrl: './user-form.component.scss', }) @UntilDestroy() export class UserFormComponent implements OnInit { private readonly toastrService = inject(ToastrService); @Input({ required: true }) user: User | undefined = undefined; onFormSubmitted = output(); private userService = inject(UserService); private authService = inject(AuthService); private fb = inject(FormBuilder); protected userForm!: FormGroup; ngOnInit(): void { this.userForm = this.fb.group({ firstname: new FormControl(this.user?.name?.split(' ').slice(0, -1).join(' ') ?? '', [ Validators.required, ]), name: new FormControl(this.user?.name?.split(' ').slice(-1)[0] ?? '', [Validators.required]), }); } onUserFormSubmit() { if (this.userForm.invalid) { return; } const data = { username: this.userForm.getRawValue()!.firstname!.split(' ')[0] + this.userForm.getRawValue()!.name!, name: this.userForm.getRawValue()!.firstname! + ' ' + this.userForm.getRawValue()!.name!, } as User; this.userService.updateUser(this.user?.id!, data).subscribe((value) => { this.authService.updateUser(); this.toastrService.success( `Vos informations personnelles ont bien été modifier !`, `Mise à jour`, { closeButton: true, progressAnimation: 'decreasing', progressBar: true, } ); }); this.onFormSubmitted.emit(data); } }