diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts
index d525b5a..4720348 100644
--- a/src/app/app.routes.ts
+++ b/src/app/app.routes.ts
@@ -1,7 +1,7 @@
import {Routes} from '@angular/router';
import {LoginComponent} from './pages/login/login.component';
import {HomeComponent} from './pages/home/home.component';
-import {RegisterComponent} from './pages/register/register.component';
+import {RegisterFormComponent} from './components/register-form/register-form.component';
import {LogoutComponent} from './pages/logout/logout.component';
import {NotFoundComponent} from './pages/not-found/not-found.component';
import {authGuard} from './guards/auth.guard';
@@ -10,11 +10,12 @@ import {NewPostComponent} from './pages/new-post/new-post.component';
import {writerGuard} from './guards/writer.guard';
import {PostComponent} from './pages/post/post.component';
import {MyPostsComponent} from './pages/my-posts/my-posts.component';
+import {RegisterComponent} from './pages/register/register.component';
export const routes: Routes = [
{path: '', component: HomeComponent},
{path: 'login', component: LoginComponent, canActivate: [authGuard]},
- {path: 'register', component: RegisterComponent, canActivate: [authGuard]},
+ {path: 'register', component: RegisterComponent, canActivate: [authGuard]},
{path: 'logout', component: LogoutComponent},
{path: 'profile/:authorId', component: ProfileComponent},
{path: 'post/:postId', component: PostComponent},
diff --git a/src/app/components/register-form/register-form.component.css b/src/app/components/register-form/register-form.component.css
new file mode 100644
index 0000000..ce9d921
--- /dev/null
+++ b/src/app/components/register-form/register-form.component.css
@@ -0,0 +1,18 @@
+.form-container {
+ margin-top: 2em;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.form {
+ width: 100%;
+ max-width: 50em;
+ display: flex;
+ flex-direction: column;
+ gap:1em;
+}
+
+.send-button {
+ align-self: center;
+}
diff --git a/src/app/components/register-form/register-form.component.html b/src/app/components/register-form/register-form.component.html
new file mode 100644
index 0000000..ebb3265
--- /dev/null
+++ b/src/app/components/register-form/register-form.component.html
@@ -0,0 +1,14 @@
+
diff --git a/src/app/components/register-form/register-form.component.ts b/src/app/components/register-form/register-form.component.ts
new file mode 100644
index 0000000..d00b576
--- /dev/null
+++ b/src/app/components/register-form/register-form.component.ts
@@ -0,0 +1,92 @@
+import {Component, Input, OnDestroy, OnInit} from '@angular/core';
+import {HeaderComponent} from '../header/header.component';
+import {Subscription} from 'rxjs';
+import {FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators} from '@angular/forms';
+import {InputTextModule} from 'primeng/inputtext';
+import {SelectButtonModule} from 'primeng/selectbutton';
+import {Button} from 'primeng/button';
+import {AuthorService} from '../../services/author.service';
+import {Router} from '@angular/router';
+import {MessageService} from 'primeng/api';
+
+@Component({
+ selector: 'app-register-form',
+ standalone: true,
+ imports: [
+ HeaderComponent,
+ ReactiveFormsModule,
+ InputTextModule,
+ SelectButtonModule,
+ FormsModule,
+ Button
+ ],
+ templateUrl: './register-form.component.html',
+ styleUrl: './register-form.component.css'
+})
+export class RegisterFormComponent implements OnDestroy {
+ @Input() username: string = "";
+ @Input() password: string = "";
+ @Input() passwordConfirm: string = "";
+ @Input() role: string = "READER"
+ @Input() adminForm: boolean = false;
+ roles = [
+ {name: 'Lecteur', value: 'READER'},
+ {name: 'Écrivain', value: 'WRITER'}
+ ];
+ subs: Subscription[] = [];
+ form: FormGroup;
+
+ constructor(private formBuilder: FormBuilder,
+ private authorService: AuthorService,
+ private router: Router,
+ private messageService: MessageService
+ ) {
+ this.form = this.formBuilder.group({
+ username: ['', [Validators.required, Validators.maxLength(255)]],
+ password: ['', [Validators.required, Validators.maxLength(50)]],
+ passwordConfirm: ['', [Validators.required, Validators.maxLength(50)]],
+ role: [{value: 'READER', disabled: !this.adminForm}, [Validators.required, Validators.maxLength(10)]],
+ });
+ }
+
+ successMessage(summary: string, detail: string): void {
+ this.messageService.add({
+ severity: 'success',
+ summary,
+ detail,
+ life: 3000,
+ closable: false
+ });
+ }
+
+ failureMessage(summary: string, detail: string): void {
+ this.messageService.add({
+ severity: 'error',
+ summary,
+ detail,
+ life: 3000,
+ closable: false
+ });
+ }
+
+ onSubmit() {
+ if (this.form.valid && this.password === this.passwordConfirm) {
+ if (this.adminForm) {
+ this.authorService.createAccountAdmin(this.username, this.password, this.role); //TODO à finir
+ } else {
+ this.subs.push(this.authorService.createAccount(this.username, this.password).subscribe({
+ next: () => this.router.navigate(['/login']).then(() => this.successMessage('Succès', 'Utilisateur créé avec succès')),
+ error: (err) => this.failureMessage('Erreur', err.message)
+
+ }));
+ }
+ }
+ }
+
+
+ ngOnDestroy(): void {
+ this.subs.forEach((sub: Subscription) => sub.unsubscribe());
+ }
+
+
+}
diff --git a/src/app/pages/login/login.component.css b/src/app/pages/login/login.component.css
index ce9d921..4712463 100644
--- a/src/app/pages/login/login.component.css
+++ b/src/app/pages/login/login.component.css
@@ -16,3 +16,7 @@
.send-button {
align-self: center;
}
+
+#role {
+ width: 100%;
+}
diff --git a/src/app/pages/login/login.component.html b/src/app/pages/login/login.component.html
index 76e243f..e3ba48c 100644
--- a/src/app/pages/login/login.component.html
+++ b/src/app/pages/login/login.component.html
@@ -2,11 +2,11 @@