;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [LegalNoticeComponent],
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(LegalNoticeComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/front-end/src/app/pages/legal-notice/legal-notice.component.ts b/front-end/src/app/pages/legal-notice/legal-notice.component.ts
new file mode 100644
index 0000000..bb88090
--- /dev/null
+++ b/front-end/src/app/pages/legal-notice/legal-notice.component.ts
@@ -0,0 +1,10 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-legal-notice',
+ standalone: true,
+ imports: [],
+ templateUrl: './legal-notice.component.html',
+ styleUrl: './legal-notice.component.scss',
+})
+export class LegalNoticeComponent {}
diff --git a/front-end/src/app/pages/login/login.component.html b/front-end/src/app/pages/login/login.component.html
index 9ab024c..c40e028 100644
--- a/front-end/src/app/pages/login/login.component.html
+++ b/front-end/src/app/pages/login/login.component.html
@@ -25,6 +25,11 @@
Un mot de passe est nécessaire
}
+ @if (error) {
+
+ {{ error }}
+
+ }
diff --git a/front-end/src/app/pages/login/login.component.scss b/front-end/src/app/pages/login/login.component.scss
index 9a8820d..a62b7c4 100644
--- a/front-end/src/app/pages/login/login.component.scss
+++ b/front-end/src/app/pages/login/login.component.scss
@@ -12,3 +12,7 @@ mat-form-field {
max-width: 400px;
padding: 16px;
}
+
+.login-error-container {
+ padding: 0px 16px 16px 16px;
+}
diff --git a/front-end/src/app/pages/login/login.component.ts b/front-end/src/app/pages/login/login.component.ts
index e5ca340..27f5033 100644
--- a/front-end/src/app/pages/login/login.component.ts
+++ b/front-end/src/app/pages/login/login.component.ts
@@ -10,6 +10,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { Router, RouterLink } from '@angular/router';
import { AuthService } from '../../services/auth.service';
+import { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';
@Component({
selector: 'app-login',
@@ -21,6 +22,7 @@ import { AuthService } from '../../services/auth.service';
ReactiveFormsModule,
MatButtonModule,
RouterLink,
+ MatSnackBarModule,
],
templateUrl: './login.component.html',
styleUrl: './login.component.scss',
@@ -37,13 +39,32 @@ export class LoginComponent {
router = inject(Router);
authService = inject(AuthService);
+ snackBar = inject(MatSnackBar);
+
+ error: String | null = null;
onLogin() {
if (this.emailFormControl.valid && this.passwordFormControl.valid) {
- this.authService.login();
- if (this.authService.isAuth.value) {
- this.router.navigate(['..']);
- }
+ this.authService
+ .login({
+ email: this.emailFormControl.value!,
+ password: this.passwordFormControl.value!,
+ })
+ .subscribe({
+ next: (success: any) => {
+ console.log('success', success);
+ this.snackBar.open('Vous êtes connecté', '', { duration: 2000 });
+ this.authService.saveToken(success.access);
+ this.authService.saveRefreshToken(success.refresh);
+ this.authService.checkAuth();
+ this.router.navigate(['..']);
+ },
+ error: (error: any) => {
+ console.log(error);
+ this.error = error.toString();
+ console.log(this.error);
+ },
+ });
}
}
}
diff --git a/front-end/src/app/pages/my-account/my-account.component.html b/front-end/src/app/pages/my-account/my-account.component.html
index eda628d..4632b32 100644
--- a/front-end/src/app/pages/my-account/my-account.component.html
+++ b/front-end/src/app/pages/my-account/my-account.component.html
@@ -1,7 +1,30 @@
diff --git a/front-end/src/app/pages/my-account/my-account.component.ts b/front-end/src/app/pages/my-account/my-account.component.ts
index 66d078f..57912ee 100644
--- a/front-end/src/app/pages/my-account/my-account.component.ts
+++ b/front-end/src/app/pages/my-account/my-account.component.ts
@@ -1,10 +1,5 @@
import { Component, inject } from '@angular/core';
-import {
- FormControl,
- FormGroup,
- FormsModule,
- ReactiveFormsModule,
-} from '@angular/forms';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button';
import { MatDialog } from '@angular/material/dialog';
import { MatFormFieldModule } from '@angular/material/form-field';
@@ -12,17 +7,21 @@ import { MatInputModule } from '@angular/material/input';
import { Router, RouterLink } from '@angular/router';
import { DeleteAccountDialog } from './dialogs/delete-account-dialog';
import { AuthService } from '../../services/auth.service';
+import { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';
+import { CommonModule } from '@angular/common';
@Component({
selector: 'app-my-account',
standalone: true,
imports: [
+ CommonModule,
FormsModule,
MatFormFieldModule,
MatInputModule,
ReactiveFormsModule,
MatButtonModule,
RouterLink,
+ MatSnackBarModule,
],
templateUrl: './my-account.component.html',
styleUrl: './my-account.component.scss',
@@ -30,16 +29,33 @@ import { AuthService } from '../../services/auth.service';
export class MyAccountComponent {
readonly dialog = inject(MatDialog);
email = 'adresse@email.com';
+ lastName = 'Nom';
+ firstName = 'Prénom';
+
authService = inject(AuthService);
router = inject(Router);
+ snackBar = inject(MatSnackBar);
openDeleteAccountDialog() {
const deleteDialogRef = this.dialog.open(DeleteAccountDialog);
deleteDialogRef.afterClosed().subscribe((result) => {
if (result && result.delete) {
- this.authService.logout();
- this.router.navigate(['..']);
+ this.authService.deleteAccount().subscribe({
+ next: (success: any) => {
+ console.log('success', success);
+ this.authService.removeToken();
+ this.authService.removeRefreshToken();
+ this.authService.checkAuth();
+ this.snackBar.open('Votre compte est supprimé', '', {
+ duration: 2000,
+ });
+ this.router.navigate(['..']);
+ },
+ error: (error) => {
+ console.log('error', error);
+ },
+ });
}
});
}
diff --git a/front-end/src/app/pages/my-observations/dialogs/my-observation-loader-dialog.html b/front-end/src/app/pages/my-observations/dialogs/my-observation-loader-dialog.html
new file mode 100644
index 0000000..9d8c9a6
--- /dev/null
+++ b/front-end/src/app/pages/my-observations/dialogs/my-observation-loader-dialog.html
@@ -0,0 +1,4 @@
+
Transfert en cours
+
+
+
diff --git a/front-end/src/app/pages/my-observations/dialogs/my-observation-loader-dialog.scss b/front-end/src/app/pages/my-observations/dialogs/my-observation-loader-dialog.scss
new file mode 100644
index 0000000..4715f66
--- /dev/null
+++ b/front-end/src/app/pages/my-observations/dialogs/my-observation-loader-dialog.scss
@@ -0,0 +1,4 @@
+.spinner-container {
+ display: flex;
+ justify-content: center;
+}
diff --git a/front-end/src/app/pages/my-observations/dialogs/my-observation-loader-dialog.ts b/front-end/src/app/pages/my-observations/dialogs/my-observation-loader-dialog.ts
new file mode 100644
index 0000000..484c91b
--- /dev/null
+++ b/front-end/src/app/pages/my-observations/dialogs/my-observation-loader-dialog.ts
@@ -0,0 +1,31 @@
+import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
+import { MatButtonModule } from '@angular/material/button';
+import {
+ MatDialogActions,
+ MatDialogClose,
+ MatDialogContent,
+ MatDialogRef,
+ MatDialogTitle,
+ MAT_DIALOG_DATA,
+} from '@angular/material/dialog';
+import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
+
+@Component({
+ selector: 'my-observation-loader-dialog',
+ templateUrl: 'my-observation-loader-dialog.html',
+ styleUrl: './my-observation-loader-dialog.scss',
+ standalone: true,
+ imports: [
+ MatButtonModule,
+ MatDialogActions,
+ MatDialogClose,
+ MatDialogTitle,
+ MatDialogContent,
+ MatProgressSpinnerModule,
+ ],
+ changeDetection: ChangeDetectionStrategy.OnPush,
+})
+export class MyObservationLoaderDialog {
+ dialogRef = inject(MatDialogRef);
+ data = inject<{ title: string }>(MAT_DIALOG_DATA);
+}
diff --git a/front-end/src/app/pages/my-observations/my-observations.component.html b/front-end/src/app/pages/my-observations/my-observations.component.html
index 76c3b06..81023c1 100644
--- a/front-end/src/app/pages/my-observations/my-observations.component.html
+++ b/front-end/src/app/pages/my-observations/my-observations.component.html
@@ -33,18 +33,21 @@
- 0" class="observations-container">
+
0"
+ class="observations-container"
+>
Mes observations
- @for (observation of myObservations; track observation.uuid) {
+ @for (observation of myObservations.features; track observation.id) {
{{
- observation.name && observation.name !== ""
- ? observation.name
- : getEventType(observation.category)!.label
+ observation.properties.name && observation.properties.name !== ""
+ ? observation.properties.name
+ : getEventType(observation.properties.category)!.label
}}
{{
- observation.event_date | date: "dd/MM/yyyy"
+ observation.properties.event_date | date: "dd/MM/yyyy"
}}