From e60e989a0861d775c627ab3bfdb0c65609247d12 Mon Sep 17 00:00:00 2001
From: Antonin Coquet <ext.sopra.acoquet@grandlyon.com>
Date: Tue, 30 Mar 2021 16:58:05 +0200
Subject: [PATCH 1/7] feat: componenent for admin pannel

---
 src/app/admin/admin.module.ts                 |  4 ++-
 .../newsletter-users.component.html           |  1 +
 .../newsletter-users.component.scss           |  8 ++++++
 .../newsletter-users.component.spec.ts        | 27 +++++++++++++++++++
 .../newsletter-users.component.ts             | 17 ++++++++++++
 .../components/panel/panel.component.html     |  5 ++++
 src/app/shared/enum/adminPanel.enum.ts        |  1 +
 7 files changed, 62 insertions(+), 1 deletion(-)
 create mode 100644 src/app/admin/components/newsletter-users/newsletter-users.component.html
 create mode 100644 src/app/admin/components/newsletter-users/newsletter-users.component.scss
 create mode 100644 src/app/admin/components/newsletter-users/newsletter-users.component.spec.ts
 create mode 100644 src/app/admin/components/newsletter-users/newsletter-users.component.ts

diff --git a/src/app/admin/admin.module.ts b/src/app/admin/admin.module.ts
index 05b87149d..e808d3c49 100644
--- a/src/app/admin/admin.module.ts
+++ b/src/app/admin/admin.module.ts
@@ -4,9 +4,11 @@ import { PanelComponent } from './components/panel/panel.component';
 import { ClaimStructureComponent } from './components/claim-structure/claim-structure.component';
 import { DeleteUserComponent } from './components/delete-user/delete-user.component';
 import { SharedModule } from '../shared/shared.module';
+import { NewsComponent } from '../post/news.component';
+import { NewsletterUsersComponent } from './components/newsletter-users/newsletter-users.component';
 
 @NgModule({
-  declarations: [PanelComponent, ClaimStructureComponent, DeleteUserComponent],
+  declarations: [PanelComponent, ClaimStructureComponent, DeleteUserComponent, NewsletterUsersComponent],
   imports: [CommonModule, SharedModule],
 })
 export class AdminModule {}
diff --git a/src/app/admin/components/newsletter-users/newsletter-users.component.html b/src/app/admin/components/newsletter-users/newsletter-users.component.html
new file mode 100644
index 000000000..58109452a
--- /dev/null
+++ b/src/app/admin/components/newsletter-users/newsletter-users.component.html
@@ -0,0 +1 @@
+<span>Liste d'utilisateurs ayant un abonnement</span>
\ No newline at end of file
diff --git a/src/app/admin/components/newsletter-users/newsletter-users.component.scss b/src/app/admin/components/newsletter-users/newsletter-users.component.scss
new file mode 100644
index 000000000..39b7a0741
--- /dev/null
+++ b/src/app/admin/components/newsletter-users/newsletter-users.component.scss
@@ -0,0 +1,8 @@
+.userList {
+    max-width: 50%;
+}
+
+.userBlock {
+    max-width: 50%;
+    margin: 0 auto;
+}
\ No newline at end of file
diff --git a/src/app/admin/components/newsletter-users/newsletter-users.component.spec.ts b/src/app/admin/components/newsletter-users/newsletter-users.component.spec.ts
new file mode 100644
index 000000000..119aadb28
--- /dev/null
+++ b/src/app/admin/components/newsletter-users/newsletter-users.component.spec.ts
@@ -0,0 +1,27 @@
+import { HttpClientModule } from '@angular/common/http';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { NewsletterUsersComponent } from './newsletter-users.component';
+
+describe('DeleteUserComponent', () => {
+  let component: NewsletterUsersComponent;
+  let fixture: ComponentFixture<NewsletterUsersComponent>;
+  let USERS;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [HttpClientModule],
+      declarations: [NewsletterUsersComponent],
+    }).compileComponents();
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(NewsletterUsersComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/admin/components/newsletter-users/newsletter-users.component.ts b/src/app/admin/components/newsletter-users/newsletter-users.component.ts
new file mode 100644
index 000000000..9f11cdaad
--- /dev/null
+++ b/src/app/admin/components/newsletter-users/newsletter-users.component.ts
@@ -0,0 +1,17 @@
+import { Component } from '@angular/core';
+import { User } from '../../../models/user.model';
+import { ProfileService } from '../../../profile/services/profile.service';
+import { AdminService } from '../../services/admin.service';
+
+@Component({
+  selector: 'app-admin-newsletter-users',
+  templateUrl: './newsletter-users.component.html',
+  styleUrls: ['./newsletter-users.component.scss'],
+})
+export class NewsletterUsersComponent {
+  public users: User[];
+  public deleteModalOpenned = false;
+  public userToUnsubscribe: User = null;
+
+  constructor() {}
+}
diff --git a/src/app/admin/components/panel/panel.component.html b/src/app/admin/components/panel/panel.component.html
index 783642e99..f61631c69 100644
--- a/src/app/admin/components/panel/panel.component.html
+++ b/src/app/admin/components/panel/panel.component.html
@@ -3,6 +3,7 @@
   <div fxLayout="row" fxLayoutGap="20px" fxLayoutAlign="center center">
     <button (click)="changeActiveFeature(features.pendingStructures)">Gestion structure</button>
     <button (click)="changeActiveFeature(features.deleteUsers)">Suppression d'utilisateurs</button>
+    <button (click)="changeActiveFeature(features.newsletterUsers)">Désabonnement newsletter</button>
     <button routerLink="/blog/ghost/">Ghost</button>
   </div>
   <div *ngIf="selectedFeature === features.deleteUsers">
@@ -11,4 +12,8 @@
   <div *ngIf="selectedFeature === features.pendingStructures">
     <app-admin-claim-structure></app-admin-claim-structure>
   </div>
+  <div *ngIf="selectedFeature === features.newsletterUsers">
+    <app-admin-newsletter-users></app-admin-newsletter-users>
+  </div>
+  
 </div>
diff --git a/src/app/shared/enum/adminPanel.enum.ts b/src/app/shared/enum/adminPanel.enum.ts
index 39dbc605f..293c64c4d 100644
--- a/src/app/shared/enum/adminPanel.enum.ts
+++ b/src/app/shared/enum/adminPanel.enum.ts
@@ -1,4 +1,5 @@
 export enum AdminPannelEnum {
   deleteUsers,
   pendingStructures,
+  newsletterUsers
 }
-- 
GitLab


From 5d6142d14832fbfb5dbf282ae8ece55ef6de47c8 Mon Sep 17 00:00:00 2001
From: Antonin Coquet <ext.sopra.acoquet@grandlyon.com>
Date: Wed, 31 Mar 2021 17:14:41 +0200
Subject: [PATCH 2/7] add newsletter subscription componenent and service

---
 .../newsletter-users.component.html           | 24 ++++++-
 .../newsletter-users.component.ts             | 29 ++++++++-
 src/app/admin/services/admin.service.ts       |  8 +++
 src/app/app-routing.module.ts                 |  5 ++
 src/app/app.module.ts                         |  2 +
 src/app/footer/footer.component.html          |  1 +
 .../newsletter-subscription.component.html    | 29 +++++++++
 .../newsletter-subscription.component.scss    | 11 ++++
 .../newsletter-subscription.component.spec.ts | 28 ++++++++
 .../newsletter-subscription.component.ts      | 65 +++++++++++++++++++
 src/app/services/newsletter.service.ts        | 21 ++++++
 11 files changed, 219 insertions(+), 4 deletions(-)
 create mode 100644 src/app/newsletter-subscription/newsletter-subscription.component.html
 create mode 100644 src/app/newsletter-subscription/newsletter-subscription.component.scss
 create mode 100644 src/app/newsletter-subscription/newsletter-subscription.component.spec.ts
 create mode 100644 src/app/newsletter-subscription/newsletter-subscription.component.ts
 create mode 100644 src/app/services/newsletter.service.ts

diff --git a/src/app/admin/components/newsletter-users/newsletter-users.component.html b/src/app/admin/components/newsletter-users/newsletter-users.component.html
index 58109452a..9fda65050 100644
--- a/src/app/admin/components/newsletter-users/newsletter-users.component.html
+++ b/src/app/admin/components/newsletter-users/newsletter-users.component.html
@@ -1 +1,23 @@
-<span>Liste d'utilisateurs ayant un abonnement</span>
\ No newline at end of file
+<div fxLayout="column" fxLayoutGap="5px" fxLayoutAlign="center center" class="userBlock">
+    <h4>Gestion abonnement newsletter</h4>
+    <div fxLayout="row">
+      <input #searchstring (keyup)="(0)" />
+      <button (click)="searchSubscribedEmail(searchstring.value)">Rechercher</button>
+    </div>
+    <div class="userList">
+      <tr *ngFor="let subscription of subscriptions">
+        <td>{{ subscription.email }}</td>
+        <td>
+          <button (click)="toggleDeleteModal(subscription.email)">Désabonner</button>
+        </td>
+      </tr>
+      <app-modal-confirmation
+        *ngIf="emailToUnsubscribe"
+        [openned]="deleteModalOpenned"
+        [content]="'Voulez-vous vraiment supprimer ' + emailToUnsubscribe + ' de la newsletter &nbsp;?'"
+        (closed)="unsubscribeEmail(emailToUnsubscribe, $event)"
+      ></app-modal-confirmation>
+      <div *ngIf="subscriptions && subscriptions.length == 0">Aucun résultat</div>
+    </div>
+  </div>
+  
\ No newline at end of file
diff --git a/src/app/admin/components/newsletter-users/newsletter-users.component.ts b/src/app/admin/components/newsletter-users/newsletter-users.component.ts
index 9f11cdaad..68ddf6c5d 100644
--- a/src/app/admin/components/newsletter-users/newsletter-users.component.ts
+++ b/src/app/admin/components/newsletter-users/newsletter-users.component.ts
@@ -3,15 +3,38 @@ import { User } from '../../../models/user.model';
 import { ProfileService } from '../../../profile/services/profile.service';
 import { AdminService } from '../../services/admin.service';
 
+const emails = ["test", "resin", "wahou super", "c'est encore un mail test"];
+
 @Component({
   selector: 'app-admin-newsletter-users',
   templateUrl: './newsletter-users.component.html',
   styleUrls: ['./newsletter-users.component.scss'],
 })
 export class NewsletterUsersComponent {
-  public users: User[];
+  public subscriptions: string[];
   public deleteModalOpenned = false;
-  public userToUnsubscribe: User = null;
+  public emailToUnsubscribe: string = null;
+
+  constructor(private adminService: AdminService) {}
+
+  public toggleDeleteModal(emailToUnsubscribe: string): void {
+    this.emailToUnsubscribe = emailToUnsubscribe;
+    this.deleteModalOpenned = !this.deleteModalOpenned;
+  }
+
+  public searchSubscribedEmail(searchString: string): void {
+    this.adminService.searchNewsletterSubscriptions(searchString).subscribe((emails) => {
+      console.log("deleting:", emails)
+        this.subscriptions = emails
+      });
+  }
 
-  constructor() {}
+  public unsubscribeEmail(email: string, shouldUnsubscribe: boolean): void {
+    this.toggleDeleteModal(email);
+    if (shouldUnsubscribe) {
+      this.adminService.unsubscribeEmail(email).subscribe((data) => {
+        this.subscriptions = this.subscriptions.filter((obj) => obj !== email);
+      });
+    }
+  }
 }
diff --git a/src/app/admin/services/admin.service.ts b/src/app/admin/services/admin.service.ts
index 689fdc668..e343610ea 100644
--- a/src/app/admin/services/admin.service.ts
+++ b/src/app/admin/services/admin.service.ts
@@ -30,6 +30,14 @@ export class AdminService {
     return this.http.delete<User>(`api/admin/user/` + id);
   }
 
+  public searchNewsletterSubscriptions(searchString: string): Observable<string[]> {
+    return this.http.post<string[]>(`api/admin/searchNewsletterSubscriptions`, { searchString });
+  }
+
+  public unsubscribeEmail(email: string): Observable<string> {
+    return this.http.delete<string>(`api/admin/newsletterSubscription/` + email);
+  }
+
   public acceptStructureClaim(
     userEmail: string,
     structureId: number,
diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts
index a67351971..7253614d3 100644
--- a/src/app/app-routing.module.ts
+++ b/src/app/app-routing.module.ts
@@ -16,6 +16,7 @@ import { StructureJoinComponent } from './structure-join/structure-join.componen
 import { StructureDetailsComponent } from './structure-list/components/structure-details/structure-details.component';
 import { StructureListComponent } from './structure-list/structure-list.component';
 import { UserVerificationComponent } from './user-verification/user-verification.component';
+import { NewsletterSubscriptionComponent } from './newsletter-subscription/newsletter-subscription.component';
 
 const routes: Routes = [
   { path: 'print', outlet: 'print', children: [{ path: 'structure', component: StructureDetailsComponent }] },
@@ -79,6 +80,10 @@ const routes: Routes = [
     component: FormComponent,
     canDeactivate: [DeactivateGuard],
   },
+  {
+    path: 'newsletter',
+    component: NewsletterSubscriptionComponent,
+  },
   {
     path: 'news',
     loadChildren: () => import('./post/post.module').then((m) => m.PostModule),
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 1aebde846..960ec8793 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -33,6 +33,7 @@ import { FooterFormComponent } from './form/footer-form/footer-form.component';
 import { TempUserResolver } from './resolvers/temp-user.resolver';
 import { StructureJoinComponent } from './structure-join/structure-join.component';
 import { RouterListenerService } from './services/routerListener.service';
+import { NewsletterSubscriptionComponent } from './newsletter-subscription/newsletter-subscription.component';
 
 @NgModule({
   declarations: [
@@ -54,6 +55,7 @@ import { RouterListenerService } from './services/routerListener.service';
     FormComponent,
     FooterFormComponent,
     StructureJoinComponent,
+    NewsletterSubscriptionComponent,
   ],
   imports: [BrowserModule, HttpClientModule, AppRoutingModule, SharedModule, MapModule, ProfileModule, AdminModule],
   providers: [
diff --git a/src/app/footer/footer.component.html b/src/app/footer/footer.component.html
index 6cc2485c7..b6de16278 100644
--- a/src/app/footer/footer.component.html
+++ b/src/app/footer/footer.component.html
@@ -1,6 +1,7 @@
 <div class="footer" fxLayout="row" fxLayoutAlign="center">
   <div fxLayout="row">
     <a class="clickable text-align-center" routerLink="/legal-notice" i18n>Mentions légales</a>
+    <a class="clickable text-align-center" routerLink="/newsletter" i18n>Newsletter</a>
     <!-- <a class="clickable text-align-center" routerLink="/sitemap" i18n>Plan du site</a> -->
     <a class="clickable text-align-center" href="mailto:inclusionnumerique@grandlyon.com">Contact</a>
   </div>
diff --git a/src/app/newsletter-subscription/newsletter-subscription.component.html b/src/app/newsletter-subscription/newsletter-subscription.component.html
new file mode 100644
index 000000000..c7d6a0abf
--- /dev/null
+++ b/src/app/newsletter-subscription/newsletter-subscription.component.html
@@ -0,0 +1,29 @@
+<div fxLayout="column" class="content-container full-screen">
+  <div class="section-container" fxLayout="column" fxLayoutAlign="center center">
+    <div class="resetPasswordForm">
+      <h1>Inscription à la newsletter</h1>
+      <form *ngIf="!token" [formGroup]="resetForm" (ngSubmit)="onSubmit()">
+        <div class="form-group">
+          <label for="email">Courriel personnel</label>
+            <div fxLayout="row" fxLayoutGap="13px">
+              <input type="text"
+               autocomplete="on" 
+               formControlName="email" 
+               class="form-input" 
+               [ngClass]="{ 'is-invalid': submitted && f.email.errors }"/>
+            </div>
+          <div *ngIf="submitted && f.email.errors" class="invalid-feedback">
+            <div *ngIf="f.email.errors.required" >L'adresse e-mail est requise</div>
+          </div>
+        </div>
+        <div class="button" fxLayout="row" fxLayoutAlign="space-around center">
+          <a routerLink="../home" class="btn btn-link">Annuler</a>
+          <button [disabled]="loading" class="btn btn-primary">
+            <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>
+            S'inscrire
+          </button>
+        </div>
+      </form>
+    </div>
+  </div>
+</div>
diff --git a/src/app/newsletter-subscription/newsletter-subscription.component.scss b/src/app/newsletter-subscription/newsletter-subscription.component.scss
new file mode 100644
index 000000000..89432adb7
--- /dev/null
+++ b/src/app/newsletter-subscription/newsletter-subscription.component.scss
@@ -0,0 +1,11 @@
+.resetPasswordForm {
+    max-width: 500px;
+}
+
+.button {
+    margin-top: 20px;
+}
+
+.form-input {
+    width: 100%;
+  }
\ No newline at end of file
diff --git a/src/app/newsletter-subscription/newsletter-subscription.component.spec.ts b/src/app/newsletter-subscription/newsletter-subscription.component.spec.ts
new file mode 100644
index 000000000..a39ffc169
--- /dev/null
+++ b/src/app/newsletter-subscription/newsletter-subscription.component.spec.ts
@@ -0,0 +1,28 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { ReactiveFormsModule } from '@angular/forms';
+import { RouterTestingModule } from '@angular/router/testing';
+
+import { NewsletterSubscriptionComponent } from './newsletter-subscription.component';
+
+describe('ResetPasswordComponent', () => {
+  let component: NewsletterSubscriptionComponent;
+  let fixture: ComponentFixture<NewsletterSubscriptionComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      declarations: [NewsletterSubscriptionComponent],
+      imports: [ReactiveFormsModule, HttpClientTestingModule, RouterTestingModule],
+    }).compileComponents();
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(NewsletterSubscriptionComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/newsletter-subscription/newsletter-subscription.component.ts b/src/app/newsletter-subscription/newsletter-subscription.component.ts
new file mode 100644
index 000000000..65888cf8e
--- /dev/null
+++ b/src/app/newsletter-subscription/newsletter-subscription.component.ts
@@ -0,0 +1,65 @@
+import { Component, OnInit } from '@angular/core';
+import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
+import { ActivatedRoute, Router } from '@angular/router';
+import { AuthService } from '../services/auth.service';
+import { NewsletterService } from '../services/newsletter.service';
+import { MustMatch } from '../shared/validator/form';
+import { CustomRegExp } from '../utils/CustomRegExp';
+
+@Component({
+  selector: 'app-newsletter-subscription',
+  templateUrl: './newsletter-subscription.component.html',
+  styleUrls: ['./newsletter-subscription.component.scss'],
+})
+export class NewsletterSubscriptionComponent implements OnInit {
+  public resetForm: FormGroup;
+  public resetFormChangePassword: FormGroup;
+  public token: string;
+  public loading = false;
+  public submitted = false;
+
+  constructor(
+    private formBuilder: FormBuilder,
+    private newsletterService: NewsletterService,
+    private router: Router,
+  ) {}
+
+  ngOnInit(): void {
+    this.resetForm = this.formBuilder.group({
+      email: ['', Validators.required],
+    });
+  }
+
+  // getter for form fields
+  get f(): { [key: string]: AbstractControl } {
+    return this.resetForm.controls;
+  }
+
+  public onSubmit(): void {
+    this.submitted = true;
+
+    // stop here if form is invalid
+    if (this.resetForm.invalid) {
+      return;
+    }
+    console.log("subsribing:", this.f.email.value)
+    this.loading = true;
+    this.newsletterService.newsletterSubscribe(this.f.email.value).subscribe(
+        () => {
+          this.router.navigate(['']);
+        },
+        () => {
+          this.loading = false;
+        }
+      );
+    // this.loading = true;
+    // this.authService.resetPassword(this.f.email.value).subscribe(
+    //   () => {
+    //     this.router.navigate(['']);
+    //   },
+    //   () => {
+    //     this.loading = false;
+    //   }
+    // );
+  }
+}
diff --git a/src/app/services/newsletter.service.ts b/src/app/services/newsletter.service.ts
new file mode 100644
index 000000000..43c1b7fd8
--- /dev/null
+++ b/src/app/services/newsletter.service.ts
@@ -0,0 +1,21 @@
+import { HttpClient } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { Observable, of } from 'rxjs';
+
+@Injectable({
+  providedIn: 'root',
+})
+export class NewsletterService {
+  constructor(private http: HttpClient) {}
+
+  public newsletterSubscribe(email: string): Observable<any> {
+    console.log('service subscribe:', email)
+    //return (of(true))
+    return this.http.post('/api/newsletter/subscribe', {email});
+  }
+
+  public newsletterUnsubscribe(email: string): Observable<any> {
+    return (of(true))
+    return this.http.post('/api/newsletter/unsubscribe', {email});
+  }
+}
-- 
GitLab


From 1bf526ef7a5f32646f0bf7495af1efbda3b3a933 Mon Sep 17 00:00:00 2001
From: Antonin Coquet <ext.sopra.acoquet@grandlyon.com>
Date: Thu, 1 Apr 2021 15:00:27 +0200
Subject: [PATCH 3/7] feat: subscription and unsubscription component + admin
 pannel

---
 .../newsletter-users.component.html           |  3 +
 .../newsletter-users.component.ts             | 21 +++++--
 src/app/admin/services/admin.service.ts       |  5 +-
 src/app/app-routing.module.ts                 |  7 +++
 src/app/app.module.ts                         |  2 +
 src/app/models/subscription-model.ts          | 18 ++++++
 .../newsletter-subscription.component.html    |  8 ++-
 .../newsletter-subscription.component.scss    | 11 +++-
 .../newsletter-subscription.component.ts      | 16 +-----
 .../newsletter-unsubscription.component.html  | 31 +++++++++++
 .../newsletter-unsubscription.component.scss  | 18 ++++++
 ...ewsletter-unsubscription.component.spec.ts | 28 ++++++++++
 .../newsletter-unsubscription.component.ts    | 55 +++++++++++++++++++
 src/app/services/newsletter.service.ts        |  2 -
 14 files changed, 198 insertions(+), 27 deletions(-)
 create mode 100644 src/app/models/subscription-model.ts
 create mode 100644 src/app/newsletter-unsubscription/newsletter-unsubscription.component.html
 create mode 100644 src/app/newsletter-unsubscription/newsletter-unsubscription.component.scss
 create mode 100644 src/app/newsletter-unsubscription/newsletter-unsubscription.component.spec.ts
 create mode 100644 src/app/newsletter-unsubscription/newsletter-unsubscription.component.ts

diff --git a/src/app/admin/components/newsletter-users/newsletter-users.component.html b/src/app/admin/components/newsletter-users/newsletter-users.component.html
index 9fda65050..0d710bd7f 100644
--- a/src/app/admin/components/newsletter-users/newsletter-users.component.html
+++ b/src/app/admin/components/newsletter-users/newsletter-users.component.html
@@ -1,5 +1,8 @@
 <div fxLayout="column" fxLayoutGap="5px" fxLayoutAlign="center center" class="userBlock">
     <h4>Gestion abonnement newsletter</h4>
+    <div fxLayout="row">
+      <button (click)="copySubscription()">Copier les adresses dans le presse papier</button>
+    </div>
     <div fxLayout="row">
       <input #searchstring (keyup)="(0)" />
       <button (click)="searchSubscribedEmail(searchstring.value)">Rechercher</button>
diff --git a/src/app/admin/components/newsletter-users/newsletter-users.component.ts b/src/app/admin/components/newsletter-users/newsletter-users.component.ts
index 68ddf6c5d..1a685db89 100644
--- a/src/app/admin/components/newsletter-users/newsletter-users.component.ts
+++ b/src/app/admin/components/newsletter-users/newsletter-users.component.ts
@@ -1,17 +1,16 @@
 import { Component } from '@angular/core';
+import { NewsletterSubscription } from '../../../models/subscription-model';
 import { User } from '../../../models/user.model';
 import { ProfileService } from '../../../profile/services/profile.service';
 import { AdminService } from '../../services/admin.service';
 
-const emails = ["test", "resin", "wahou super", "c'est encore un mail test"];
-
 @Component({
   selector: 'app-admin-newsletter-users',
   templateUrl: './newsletter-users.component.html',
   styleUrls: ['./newsletter-users.component.scss'],
 })
 export class NewsletterUsersComponent {
-  public subscriptions: string[];
+  public subscriptions: NewsletterSubscription[];
   public deleteModalOpenned = false;
   public emailToUnsubscribe: string = null;
 
@@ -24,7 +23,6 @@ export class NewsletterUsersComponent {
 
   public searchSubscribedEmail(searchString: string): void {
     this.adminService.searchNewsletterSubscriptions(searchString).subscribe((emails) => {
-      console.log("deleting:", emails)
         this.subscriptions = emails
       });
   }
@@ -33,8 +31,21 @@ export class NewsletterUsersComponent {
     this.toggleDeleteModal(email);
     if (shouldUnsubscribe) {
       this.adminService.unsubscribeEmail(email).subscribe((data) => {
-        this.subscriptions = this.subscriptions.filter((obj) => obj !== email);
+        this.subscriptions = this.subscriptions.filter((obj) => obj.email !== email);
       });
     }
   }
+
+  public copySubscription(): void {
+    this.adminService.searchNewsletterSubscriptions("").subscribe((emails) => {
+      let emailsToBeCopied = emails.map(e => e.email).join(";");
+      var copyElement = document.createElement("textarea");
+      copyElement.textContent =  decodeURI(emailsToBeCopied);
+      var body = document.getElementsByTagName('body')[0];
+      body.appendChild(copyElement);
+      copyElement.select();
+      document.execCommand('copy');
+      body.removeChild(copyElement);
+    });
+  }
 }
diff --git a/src/app/admin/services/admin.service.ts b/src/app/admin/services/admin.service.ts
index e343610ea..c66fae0a5 100644
--- a/src/app/admin/services/admin.service.ts
+++ b/src/app/admin/services/admin.service.ts
@@ -2,6 +2,7 @@ import { HttpClient } from '@angular/common/http';
 import { stringify } from '@angular/compiler/src/util';
 import { Injectable } from '@angular/core';
 import { Observable } from 'rxjs';
+import { NewsletterSubscription } from '../../models/subscription-model';
 import { User } from '../../models/user.model';
 import { DemandAttachment } from '../models/demandAttachment.model';
 
@@ -30,8 +31,8 @@ export class AdminService {
     return this.http.delete<User>(`api/admin/user/` + id);
   }
 
-  public searchNewsletterSubscriptions(searchString: string): Observable<string[]> {
-    return this.http.post<string[]>(`api/admin/searchNewsletterSubscriptions`, { searchString });
+  public searchNewsletterSubscriptions(searchString: string): Observable<NewsletterSubscription[]> {
+    return this.http.post<NewsletterSubscription[]>(`api/admin/searchNewsletterSubscriptions`, { searchString });
   }
 
   public unsubscribeEmail(email: string): Observable<string> {
diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts
index 7253614d3..d281f4c8f 100644
--- a/src/app/app-routing.module.ts
+++ b/src/app/app-routing.module.ts
@@ -17,6 +17,7 @@ import { StructureDetailsComponent } from './structure-list/components/structure
 import { StructureListComponent } from './structure-list/structure-list.component';
 import { UserVerificationComponent } from './user-verification/user-verification.component';
 import { NewsletterSubscriptionComponent } from './newsletter-subscription/newsletter-subscription.component';
+import { NewsletterUnsubscriptionComponent } from './newsletter-unsubscription/newsletter-unsubscription.component';
 
 const routes: Routes = [
   { path: 'print', outlet: 'print', children: [{ path: 'structure', component: StructureDetailsComponent }] },
@@ -84,6 +85,12 @@ const routes: Routes = [
     path: 'newsletter',
     component: NewsletterSubscriptionComponent,
   },
+
+  {
+    path: 'newsletter-unsubscribe',
+    component: NewsletterUnsubscriptionComponent,
+  },
+  
   {
     path: 'news',
     loadChildren: () => import('./post/post.module').then((m) => m.PostModule),
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 960ec8793..441435049 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -34,6 +34,7 @@ import { TempUserResolver } from './resolvers/temp-user.resolver';
 import { StructureJoinComponent } from './structure-join/structure-join.component';
 import { RouterListenerService } from './services/routerListener.service';
 import { NewsletterSubscriptionComponent } from './newsletter-subscription/newsletter-subscription.component';
+import { NewsletterUnsubscriptionComponent } from './newsletter-unsubscription/newsletter-unsubscription.component';
 
 @NgModule({
   declarations: [
@@ -56,6 +57,7 @@ import { NewsletterSubscriptionComponent } from './newsletter-subscription/newsl
     FooterFormComponent,
     StructureJoinComponent,
     NewsletterSubscriptionComponent,
+    NewsletterUnsubscriptionComponent
   ],
   imports: [BrowserModule, HttpClientModule, AppRoutingModule, SharedModule, MapModule, ProfileModule, AdminModule],
   providers: [
diff --git a/src/app/models/subscription-model.ts b/src/app/models/subscription-model.ts
new file mode 100644
index 000000000..ed5b7aa02
--- /dev/null
+++ b/src/app/models/subscription-model.ts
@@ -0,0 +1,18 @@
+export class User {
+  _id: string;
+  email: string;
+  name: string;
+  surname: string;
+  phone: string;
+  password?: string;
+  emailVerified: boolean;
+  role: number;
+  validationToken: string;
+  structuresLink: string[];
+  pendingStructuresLink: string[] = [];
+  profileImage: string;
+
+  constructor(obj?: any) {
+    Object.assign(this, obj);
+  }
+}
diff --git a/src/app/newsletter-subscription/newsletter-subscription.component.html b/src/app/newsletter-subscription/newsletter-subscription.component.html
index c7d6a0abf..21ed81497 100644
--- a/src/app/newsletter-subscription/newsletter-subscription.component.html
+++ b/src/app/newsletter-subscription/newsletter-subscription.component.html
@@ -1,12 +1,12 @@
 <div fxLayout="column" class="content-container full-screen">
   <div class="section-container" fxLayout="column" fxLayoutAlign="center center">
-    <div class="resetPasswordForm">
+    <div class="subscriptionForm">
       <h1>Inscription à la newsletter</h1>
-      <form *ngIf="!token" [formGroup]="resetForm" (ngSubmit)="onSubmit()">
+      <form [formGroup]="resetForm" (ngSubmit)="onSubmit()">
         <div class="form-group">
           <label for="email">Courriel personnel</label>
             <div fxLayout="row" fxLayoutGap="13px">
-              <input type="text"
+              <input type="email"
                autocomplete="on" 
                formControlName="email" 
                class="form-input" 
@@ -14,8 +14,10 @@
             </div>
           <div *ngIf="submitted && f.email.errors" class="invalid-feedback">
             <div *ngIf="f.email.errors.required" >L'adresse e-mail est requise</div>
+            <div *ngIf="f.email.errors.pattern" >L'adresse e-mail doit être valide</div>
           </div>
         </div>
+        <div class="existingEmail" *ngIf="subscriptionFailed">Adresse email déja renseignée</div>
         <div class="button" fxLayout="row" fxLayoutAlign="space-around center">
           <a routerLink="../home" class="btn btn-link">Annuler</a>
           <button [disabled]="loading" class="btn btn-primary">
diff --git a/src/app/newsletter-subscription/newsletter-subscription.component.scss b/src/app/newsletter-subscription/newsletter-subscription.component.scss
index 89432adb7..aca6d45a1 100644
--- a/src/app/newsletter-subscription/newsletter-subscription.component.scss
+++ b/src/app/newsletter-subscription/newsletter-subscription.component.scss
@@ -1,4 +1,6 @@
-.resetPasswordForm {
+@import '../../assets/scss/color';
+
+.subscriptionPasswordForm {
     max-width: 500px;
 }
 
@@ -8,4 +10,9 @@
 
 .form-input {
     width: 100%;
-  }
\ No newline at end of file
+  }
+
+.existingEmail {
+    color: $orange-warning;
+}
+  
\ No newline at end of file
diff --git a/src/app/newsletter-subscription/newsletter-subscription.component.ts b/src/app/newsletter-subscription/newsletter-subscription.component.ts
index 65888cf8e..4f1bc0016 100644
--- a/src/app/newsletter-subscription/newsletter-subscription.component.ts
+++ b/src/app/newsletter-subscription/newsletter-subscription.component.ts
@@ -17,6 +17,7 @@ export class NewsletterSubscriptionComponent implements OnInit {
   public token: string;
   public loading = false;
   public submitted = false;
+  public subscriptionFailed = false;
 
   constructor(
     private formBuilder: FormBuilder,
@@ -26,11 +27,10 @@ export class NewsletterSubscriptionComponent implements OnInit {
 
   ngOnInit(): void {
     this.resetForm = this.formBuilder.group({
-      email: ['', Validators.required],
+      email: ['', [Validators.required, Validators.pattern(CustomRegExp.EMAIL)]],
     });
   }
 
-  // getter for form fields
   get f(): { [key: string]: AbstractControl } {
     return this.resetForm.controls;
   }
@@ -38,11 +38,9 @@ export class NewsletterSubscriptionComponent implements OnInit {
   public onSubmit(): void {
     this.submitted = true;
 
-    // stop here if form is invalid
     if (this.resetForm.invalid) {
       return;
     }
-    console.log("subsribing:", this.f.email.value)
     this.loading = true;
     this.newsletterService.newsletterSubscribe(this.f.email.value).subscribe(
         () => {
@@ -50,16 +48,8 @@ export class NewsletterSubscriptionComponent implements OnInit {
         },
         () => {
           this.loading = false;
+          this.subscriptionFailed = true;
         }
       );
-    // this.loading = true;
-    // this.authService.resetPassword(this.f.email.value).subscribe(
-    //   () => {
-    //     this.router.navigate(['']);
-    //   },
-    //   () => {
-    //     this.loading = false;
-    //   }
-    // );
   }
 }
diff --git a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.html b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.html
new file mode 100644
index 000000000..254d2bef7
--- /dev/null
+++ b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.html
@@ -0,0 +1,31 @@
+<div fxLayout="column" class="content-container full-screen">
+  <div class="section-container" fxLayout="column" fxLayoutAlign="center center">
+    <div class="unsubscriptionForm">
+      <h1>Désinscription de la newsletter</h1>
+      <form [formGroup]="resetForm" (ngSubmit)="onSubmit()">
+        <div class="form-group">
+          <label for="email">Courriel personnel</label>
+            <div fxLayout="row" fxLayoutGap="13px">
+              <input type="email"
+               autocomplete="on" 
+               formControlName="email" 
+               class="form-input" 
+               [ngClass]="{ 'is-invalid': submitted && f.email.errors }"/>
+            </div>
+          <div *ngIf="submitted && f.email.errors" class="invalid-feedback">
+            <div *ngIf="f.email.errors.required" >L'adresse e-mail est requise</div>
+            <div *ngIf="f.email.errors.pattern" >L'adresse e-mail doit être valide</div>
+          </div>
+        </div>
+        <div class="existingEmail" *ngIf="unsubscriptionFailed">Cette adresse email n'est pas abonnée à notre newsletter</div>
+        <div class="button" fxLayout="row" fxLayoutAlign="space-around center">
+          <a routerLink="../home" class="btn btn-link">Annuler</a>
+          <button [disabled]="loading" class="btn btn-primary">
+            <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>
+            Se désinscrire
+          </button>
+        </div>
+      </form>
+    </div>
+  </div>
+</div>
diff --git a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.scss b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.scss
new file mode 100644
index 000000000..b734335d7
--- /dev/null
+++ b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.scss
@@ -0,0 +1,18 @@
+@import '../../assets/scss/color';
+
+.unsubscriptionForm {
+    max-width: 500px;
+}
+
+.button {
+    margin-top: 20px;
+}
+
+.form-input {
+    width: 100%;
+  }
+
+.existingEmail {
+    color: $orange-warning;
+}
+  
\ No newline at end of file
diff --git a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.spec.ts b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.spec.ts
new file mode 100644
index 000000000..2c641b4f0
--- /dev/null
+++ b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.spec.ts
@@ -0,0 +1,28 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { ReactiveFormsModule } from '@angular/forms';
+import { RouterTestingModule } from '@angular/router/testing';
+
+import { NewsletterUnsubscriptionComponent } from './newsletter-unsubscription.component';
+
+describe('ResetPasswordComponent', () => {
+  let component: NewsletterUnsubscriptionComponent;
+  let fixture: ComponentFixture<NewsletterUnsubscriptionComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      declarations: [NewsletterUnsubscriptionComponent],
+      imports: [ReactiveFormsModule, HttpClientTestingModule, RouterTestingModule],
+    }).compileComponents();
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(NewsletterUnsubscriptionComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.ts b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.ts
new file mode 100644
index 000000000..115f1c9b7
--- /dev/null
+++ b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.ts
@@ -0,0 +1,55 @@
+import { Component, OnInit } from '@angular/core';
+import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
+import { ActivatedRoute, Router } from '@angular/router';
+import { AuthService } from '../services/auth.service';
+import { NewsletterService } from '../services/newsletter.service';
+import { MustMatch } from '../shared/validator/form';
+import { CustomRegExp } from '../utils/CustomRegExp';
+
+@Component({
+  selector: 'app-newsletter-unsubscription',
+  templateUrl: './newsletter-unsubscription.component.html',
+  styleUrls: ['./newsletter-unsubscription.component.scss'],
+})
+export class NewsletterUnsubscriptionComponent implements OnInit {
+  public resetForm: FormGroup;
+  public resetFormChangePassword: FormGroup;
+  public token: string;
+  public loading = false;
+  public submitted = false;
+  public unsubscriptionFailed = false;
+
+  constructor(
+    private formBuilder: FormBuilder,
+    private newsletterService: NewsletterService,
+    private router: Router,
+  ) {}
+
+  ngOnInit(): void {
+    this.resetForm = this.formBuilder.group({
+      email: ['', Validators.required],
+    });
+  }
+
+  get f(): { [key: string]: AbstractControl } {
+    return this.resetForm.controls;
+  }
+
+  public onSubmit(): void {
+    this.submitted = true;
+
+    if (this.resetForm.invalid) {
+      return;
+    }
+    this.loading = true;
+    this.newsletterService.newsletterUnsubscribe(this.f.email.value).subscribe(
+        () => {
+          this.router.navigate(['']);
+        },
+        () => {
+          this.loading = false;
+          this.unsubscriptionFailed = true;
+        }
+      );
+  }
+}
diff --git a/src/app/services/newsletter.service.ts b/src/app/services/newsletter.service.ts
index 43c1b7fd8..ad6316c04 100644
--- a/src/app/services/newsletter.service.ts
+++ b/src/app/services/newsletter.service.ts
@@ -10,12 +10,10 @@ export class NewsletterService {
 
   public newsletterSubscribe(email: string): Observable<any> {
     console.log('service subscribe:', email)
-    //return (of(true))
     return this.http.post('/api/newsletter/subscribe', {email});
   }
 
   public newsletterUnsubscribe(email: string): Observable<any> {
-    return (of(true))
     return this.http.post('/api/newsletter/unsubscribe', {email});
   }
 }
-- 
GitLab


From 461fd37dffa1e3c44f78163dd0fdef51a9b8b8c6 Mon Sep 17 00:00:00 2001
From: Antonin Coquet <ext.sopra.acoquet@grandlyon.com>
Date: Thu, 1 Apr 2021 16:11:39 +0200
Subject: [PATCH 4/7] last fix before MR

---
 src/app/models/subscription-model.ts           | 18 ++----------------
 .../newsletter-subscription.component.html     |  2 +-
 .../newsletter-subscription.component.ts       | 12 ++++--------
 .../newsletter-unsubscription.component.html   |  2 +-
 .../newsletter-unsubscription.component.ts     | 13 ++++---------
 src/app/services/newsletter.service.ts         |  1 -
 6 files changed, 12 insertions(+), 36 deletions(-)

diff --git a/src/app/models/subscription-model.ts b/src/app/models/subscription-model.ts
index ed5b7aa02..4657f29d6 100644
--- a/src/app/models/subscription-model.ts
+++ b/src/app/models/subscription-model.ts
@@ -1,18 +1,4 @@
-export class User {
-  _id: string;
+export class NewsletterSubscription {
   email: string;
-  name: string;
-  surname: string;
-  phone: string;
-  password?: string;
-  emailVerified: boolean;
-  role: number;
-  validationToken: string;
-  structuresLink: string[];
-  pendingStructuresLink: string[] = [];
-  profileImage: string;
-
-  constructor(obj?: any) {
-    Object.assign(this, obj);
-  }
+  _id: string;
 }
diff --git a/src/app/newsletter-subscription/newsletter-subscription.component.html b/src/app/newsletter-subscription/newsletter-subscription.component.html
index 21ed81497..266728008 100644
--- a/src/app/newsletter-subscription/newsletter-subscription.component.html
+++ b/src/app/newsletter-subscription/newsletter-subscription.component.html
@@ -2,7 +2,7 @@
   <div class="section-container" fxLayout="column" fxLayoutAlign="center center">
     <div class="subscriptionForm">
       <h1>Inscription à la newsletter</h1>
-      <form [formGroup]="resetForm" (ngSubmit)="onSubmit()">
+      <form [formGroup]="subscriptionForm" (ngSubmit)="onSubmit()">
         <div class="form-group">
           <label for="email">Courriel personnel</label>
             <div fxLayout="row" fxLayoutGap="13px">
diff --git a/src/app/newsletter-subscription/newsletter-subscription.component.ts b/src/app/newsletter-subscription/newsletter-subscription.component.ts
index 4f1bc0016..02a13756c 100644
--- a/src/app/newsletter-subscription/newsletter-subscription.component.ts
+++ b/src/app/newsletter-subscription/newsletter-subscription.component.ts
@@ -1,9 +1,7 @@
 import { Component, OnInit } from '@angular/core';
 import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
 import { ActivatedRoute, Router } from '@angular/router';
-import { AuthService } from '../services/auth.service';
 import { NewsletterService } from '../services/newsletter.service';
-import { MustMatch } from '../shared/validator/form';
 import { CustomRegExp } from '../utils/CustomRegExp';
 
 @Component({
@@ -12,9 +10,7 @@ import { CustomRegExp } from '../utils/CustomRegExp';
   styleUrls: ['./newsletter-subscription.component.scss'],
 })
 export class NewsletterSubscriptionComponent implements OnInit {
-  public resetForm: FormGroup;
-  public resetFormChangePassword: FormGroup;
-  public token: string;
+  public subscriptionForm: FormGroup;
   public loading = false;
   public submitted = false;
   public subscriptionFailed = false;
@@ -26,19 +22,19 @@ export class NewsletterSubscriptionComponent implements OnInit {
   ) {}
 
   ngOnInit(): void {
-    this.resetForm = this.formBuilder.group({
+    this.subscriptionForm = this.formBuilder.group({
       email: ['', [Validators.required, Validators.pattern(CustomRegExp.EMAIL)]],
     });
   }
 
   get f(): { [key: string]: AbstractControl } {
-    return this.resetForm.controls;
+    return this.subscriptionForm.controls;
   }
 
   public onSubmit(): void {
     this.submitted = true;
 
-    if (this.resetForm.invalid) {
+    if (this.subscriptionForm.invalid) {
       return;
     }
     this.loading = true;
diff --git a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.html b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.html
index 254d2bef7..3dd086cf3 100644
--- a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.html
+++ b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.html
@@ -2,7 +2,7 @@
   <div class="section-container" fxLayout="column" fxLayoutAlign="center center">
     <div class="unsubscriptionForm">
       <h1>Désinscription de la newsletter</h1>
-      <form [formGroup]="resetForm" (ngSubmit)="onSubmit()">
+      <form [formGroup]="unsubscriptionForm" (ngSubmit)="onSubmit()">
         <div class="form-group">
           <label for="email">Courriel personnel</label>
             <div fxLayout="row" fxLayoutGap="13px">
diff --git a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.ts b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.ts
index 115f1c9b7..237a7bd58 100644
--- a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.ts
+++ b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.ts
@@ -1,10 +1,7 @@
 import { Component, OnInit } from '@angular/core';
 import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
 import { ActivatedRoute, Router } from '@angular/router';
-import { AuthService } from '../services/auth.service';
 import { NewsletterService } from '../services/newsletter.service';
-import { MustMatch } from '../shared/validator/form';
-import { CustomRegExp } from '../utils/CustomRegExp';
 
 @Component({
   selector: 'app-newsletter-unsubscription',
@@ -12,9 +9,7 @@ import { CustomRegExp } from '../utils/CustomRegExp';
   styleUrls: ['./newsletter-unsubscription.component.scss'],
 })
 export class NewsletterUnsubscriptionComponent implements OnInit {
-  public resetForm: FormGroup;
-  public resetFormChangePassword: FormGroup;
-  public token: string;
+  public unsubscriptionForm: FormGroup;
   public loading = false;
   public submitted = false;
   public unsubscriptionFailed = false;
@@ -26,19 +21,19 @@ export class NewsletterUnsubscriptionComponent implements OnInit {
   ) {}
 
   ngOnInit(): void {
-    this.resetForm = this.formBuilder.group({
+    this.unsubscriptionForm = this.formBuilder.group({
       email: ['', Validators.required],
     });
   }
 
   get f(): { [key: string]: AbstractControl } {
-    return this.resetForm.controls;
+    return this.unsubscriptionForm.controls;
   }
 
   public onSubmit(): void {
     this.submitted = true;
 
-    if (this.resetForm.invalid) {
+    if (this.unsubscriptionForm.invalid) {
       return;
     }
     this.loading = true;
diff --git a/src/app/services/newsletter.service.ts b/src/app/services/newsletter.service.ts
index ad6316c04..d90bd565d 100644
--- a/src/app/services/newsletter.service.ts
+++ b/src/app/services/newsletter.service.ts
@@ -9,7 +9,6 @@ export class NewsletterService {
   constructor(private http: HttpClient) {}
 
   public newsletterSubscribe(email: string): Observable<any> {
-    console.log('service subscribe:', email)
     return this.http.post('/api/newsletter/subscribe', {email});
   }
 
-- 
GitLab


From 7fbdadfb098c98b8331fb7d5a2055cc64ae18f19 Mon Sep 17 00:00:00 2001
From: Antonin Coquet <ext.sopra.acoquet@grandlyon.com>
Date: Tue, 6 Apr 2021 16:27:39 +0200
Subject: [PATCH 5/7] some fix after MR comment

---
 .../newsletter-users.component.html           | 47 +++++++++--------
 .../newsletter-users.component.ts             | 20 ++++----
 src/app/app-routing.module.ts                 |  5 +-
 src/app/app.module.ts                         |  2 -
 .../newsletter-subscription.component.html    | 27 +++++-----
 .../newsletter-subscription.component.scss    | 12 ++---
 .../newsletter-subscription.component.ts      | 30 ++++++++---
 .../newsletter-unsubscription.component.html  | 31 ------------
 .../newsletter-unsubscription.component.scss  | 18 -------
 ...ewsletter-unsubscription.component.spec.ts | 28 -----------
 .../newsletter-unsubscription.component.ts    | 50 -------------------
 11 files changed, 78 insertions(+), 192 deletions(-)
 delete mode 100644 src/app/newsletter-unsubscription/newsletter-unsubscription.component.html
 delete mode 100644 src/app/newsletter-unsubscription/newsletter-unsubscription.component.scss
 delete mode 100644 src/app/newsletter-unsubscription/newsletter-unsubscription.component.spec.ts
 delete mode 100644 src/app/newsletter-unsubscription/newsletter-unsubscription.component.ts

diff --git a/src/app/admin/components/newsletter-users/newsletter-users.component.html b/src/app/admin/components/newsletter-users/newsletter-users.component.html
index 0d710bd7f..8a82446d7 100644
--- a/src/app/admin/components/newsletter-users/newsletter-users.component.html
+++ b/src/app/admin/components/newsletter-users/newsletter-users.component.html
@@ -1,26 +1,25 @@
 <div fxLayout="column" fxLayoutGap="5px" fxLayoutAlign="center center" class="userBlock">
-    <h4>Gestion abonnement newsletter</h4>
-    <div fxLayout="row">
-      <button (click)="copySubscription()">Copier les adresses dans le presse papier</button>
-    </div>
-    <div fxLayout="row">
-      <input #searchstring (keyup)="(0)" />
-      <button (click)="searchSubscribedEmail(searchstring.value)">Rechercher</button>
-    </div>
-    <div class="userList">
-      <tr *ngFor="let subscription of subscriptions">
-        <td>{{ subscription.email }}</td>
-        <td>
-          <button (click)="toggleDeleteModal(subscription.email)">Désabonner</button>
-        </td>
-      </tr>
-      <app-modal-confirmation
-        *ngIf="emailToUnsubscribe"
-        [openned]="deleteModalOpenned"
-        [content]="'Voulez-vous vraiment supprimer ' + emailToUnsubscribe + ' de la newsletter &nbsp;?'"
-        (closed)="unsubscribeEmail(emailToUnsubscribe, $event)"
-      ></app-modal-confirmation>
-      <div *ngIf="subscriptions && subscriptions.length == 0">Aucun résultat</div>
-    </div>
+  <h2>Gestion abonnement newsletter</h2>
+  <div fxLayout="row">
+    <button (click)="copySubscription()">Copier les adresses dans le presse papier</button>
   </div>
-  
\ No newline at end of file
+  <div fxLayout="row">
+    <input #searchstring (keyup)="(0)" />
+    <button (click)="searchSubscribedEmail(searchstring.value)">Rechercher</button>
+  </div>
+  <div class="userList">
+    <tr *ngFor="let subscription of subscriptions">
+      <td>{{ subscription.email }}</td>
+      <td>
+        <button (click)="toggleUnsubscribeModal(subscription.email)">Désabonner</button>
+      </td>
+    </tr>
+    <app-modal-confirmation
+      *ngIf="emailToUnsubscribe"
+      [openned]="deleteModalOpenned"
+      [content]="'Voulez-vous vraiment supprimer ' + emailToUnsubscribe + ' de la newsletter &nbsp;?'"
+      (closed)="unsubscribeEmail(emailToUnsubscribe, $event)"
+    ></app-modal-confirmation>
+    <div *ngIf="subscriptions && subscriptions.length == 0">Aucun résultat</div>
+  </div>
+</div>
diff --git a/src/app/admin/components/newsletter-users/newsletter-users.component.ts b/src/app/admin/components/newsletter-users/newsletter-users.component.ts
index 1a685db89..95f046801 100644
--- a/src/app/admin/components/newsletter-users/newsletter-users.component.ts
+++ b/src/app/admin/components/newsletter-users/newsletter-users.component.ts
@@ -1,7 +1,5 @@
 import { Component } from '@angular/core';
 import { NewsletterSubscription } from '../../../models/subscription-model';
-import { User } from '../../../models/user.model';
-import { ProfileService } from '../../../profile/services/profile.service';
 import { AdminService } from '../../services/admin.service';
 
 @Component({
@@ -16,19 +14,19 @@ export class NewsletterUsersComponent {
 
   constructor(private adminService: AdminService) {}
 
-  public toggleDeleteModal(emailToUnsubscribe: string): void {
+  public toggleUnsubscribeModal(emailToUnsubscribe: string): void {
     this.emailToUnsubscribe = emailToUnsubscribe;
     this.deleteModalOpenned = !this.deleteModalOpenned;
   }
 
   public searchSubscribedEmail(searchString: string): void {
     this.adminService.searchNewsletterSubscriptions(searchString).subscribe((emails) => {
-        this.subscriptions = emails
-      });
+      this.subscriptions = emails;
+    });
   }
 
   public unsubscribeEmail(email: string, shouldUnsubscribe: boolean): void {
-    this.toggleDeleteModal(email);
+    this.toggleUnsubscribeModal(email);
     if (shouldUnsubscribe) {
       this.adminService.unsubscribeEmail(email).subscribe((data) => {
         this.subscriptions = this.subscriptions.filter((obj) => obj.email !== email);
@@ -37,11 +35,11 @@ export class NewsletterUsersComponent {
   }
 
   public copySubscription(): void {
-    this.adminService.searchNewsletterSubscriptions("").subscribe((emails) => {
-      let emailsToBeCopied = emails.map(e => e.email).join(";");
-      var copyElement = document.createElement("textarea");
-      copyElement.textContent =  decodeURI(emailsToBeCopied);
-      var body = document.getElementsByTagName('body')[0];
+    this.adminService.searchNewsletterSubscriptions('').subscribe((emails) => {
+      let emailsToBeCopied = emails.map((e) => e.email).join(';');
+      let copyElement = document.createElement('textarea');
+      copyElement.textContent = decodeURI(emailsToBeCopied);
+      let body = document.getElementsByTagName('body')[0];
       body.appendChild(copyElement);
       copyElement.select();
       document.execCommand('copy');
diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts
index d281f4c8f..46da7c87e 100644
--- a/src/app/app-routing.module.ts
+++ b/src/app/app-routing.module.ts
@@ -17,7 +17,6 @@ import { StructureDetailsComponent } from './structure-list/components/structure
 import { StructureListComponent } from './structure-list/structure-list.component';
 import { UserVerificationComponent } from './user-verification/user-verification.component';
 import { NewsletterSubscriptionComponent } from './newsletter-subscription/newsletter-subscription.component';
-import { NewsletterUnsubscriptionComponent } from './newsletter-unsubscription/newsletter-unsubscription.component';
 
 const routes: Routes = [
   { path: 'print', outlet: 'print', children: [{ path: 'structure', component: StructureDetailsComponent }] },
@@ -88,9 +87,9 @@ const routes: Routes = [
 
   {
     path: 'newsletter-unsubscribe',
-    component: NewsletterUnsubscriptionComponent,
+    component: NewsletterSubscriptionComponent,
   },
-  
+
   {
     path: 'news',
     loadChildren: () => import('./post/post.module').then((m) => m.PostModule),
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 441435049..960ec8793 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -34,7 +34,6 @@ import { TempUserResolver } from './resolvers/temp-user.resolver';
 import { StructureJoinComponent } from './structure-join/structure-join.component';
 import { RouterListenerService } from './services/routerListener.service';
 import { NewsletterSubscriptionComponent } from './newsletter-subscription/newsletter-subscription.component';
-import { NewsletterUnsubscriptionComponent } from './newsletter-unsubscription/newsletter-unsubscription.component';
 
 @NgModule({
   declarations: [
@@ -57,7 +56,6 @@ import { NewsletterUnsubscriptionComponent } from './newsletter-unsubscription/n
     FooterFormComponent,
     StructureJoinComponent,
     NewsletterSubscriptionComponent,
-    NewsletterUnsubscriptionComponent
   ],
   imports: [BrowserModule, HttpClientModule, AppRoutingModule, SharedModule, MapModule, ProfileModule, AdminModule],
   providers: [
diff --git a/src/app/newsletter-subscription/newsletter-subscription.component.html b/src/app/newsletter-subscription/newsletter-subscription.component.html
index 266728008..445ca0a46 100644
--- a/src/app/newsletter-subscription/newsletter-subscription.component.html
+++ b/src/app/newsletter-subscription/newsletter-subscription.component.html
@@ -1,28 +1,31 @@
 <div fxLayout="column" class="content-container full-screen">
   <div class="section-container" fxLayout="column" fxLayoutAlign="center center">
     <div class="subscriptionForm">
-      <h1>Inscription à la newsletter</h1>
+      <div *ngIf="subscriptionMod"><h1>Inscription à la newsletter</h1></div>
+      <div *ngIf="!subscriptionMod"><h1>Désinscription de la newsletter</h1></div>
       <form [formGroup]="subscriptionForm" (ngSubmit)="onSubmit()">
         <div class="form-group">
           <label for="email">Courriel personnel</label>
-            <div fxLayout="row" fxLayoutGap="13px">
-              <input type="email"
-               autocomplete="on" 
-               formControlName="email" 
-               class="form-input" 
-               [ngClass]="{ 'is-invalid': submitted && f.email.errors }"/>
-            </div>
+          <div fxLayout="row" fxLayoutGap="13px">
+            <input
+              type="email"
+              autocomplete="on"
+              formControlName="email"
+              class="form-input"
+              [ngClass]="{ 'is-invalid': submitted && f.email.errors }"
+            />
+          </div>
           <div *ngIf="submitted && f.email.errors" class="invalid-feedback">
-            <div *ngIf="f.email.errors.required" >L'adresse e-mail est requise</div>
-            <div *ngIf="f.email.errors.pattern" >L'adresse e-mail doit être valide</div>
+            <div *ngIf="f.email.errors.required">L'adresse e-mail est requise</div>
+            <div *ngIf="f.email.errors.pattern">L'adresse e-mail doit être valide</div>
           </div>
         </div>
-        <div class="existingEmail" *ngIf="subscriptionFailed">Adresse email déja renseignée</div>
         <div class="button" fxLayout="row" fxLayoutAlign="space-around center">
           <a routerLink="../home" class="btn btn-link">Annuler</a>
           <button [disabled]="loading" class="btn btn-primary">
             <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>
-            S'inscrire
+            <div *ngIf="subscriptionMod">S'inscrire</div>
+            <div *ngIf="!subscriptionMod">Se désinscrire</div>
           </button>
         </div>
       </form>
diff --git a/src/app/newsletter-subscription/newsletter-subscription.component.scss b/src/app/newsletter-subscription/newsletter-subscription.component.scss
index aca6d45a1..01eb52d26 100644
--- a/src/app/newsletter-subscription/newsletter-subscription.component.scss
+++ b/src/app/newsletter-subscription/newsletter-subscription.component.scss
@@ -1,18 +1,18 @@
 @import '../../assets/scss/color';
 
 .subscriptionPasswordForm {
-    max-width: 500px;
+  max-width: 500px;
 }
 
 .button {
-    margin-top: 20px;
+  margin-top: 20px;
 }
 
 .form-input {
-    width: 100%;
-  }
+  background-color: white;
+  width: 100%;
+}
 
 .existingEmail {
-    color: $orange-warning;
+  color: $orange-warning;
 }
-  
\ No newline at end of file
diff --git a/src/app/newsletter-subscription/newsletter-subscription.component.ts b/src/app/newsletter-subscription/newsletter-subscription.component.ts
index 02a13756c..2239fc70f 100644
--- a/src/app/newsletter-subscription/newsletter-subscription.component.ts
+++ b/src/app/newsletter-subscription/newsletter-subscription.component.ts
@@ -1,6 +1,6 @@
 import { Component, OnInit } from '@angular/core';
 import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
-import { ActivatedRoute, Router } from '@angular/router';
+import { Router } from '@angular/router';
 import { NewsletterService } from '../services/newsletter.service';
 import { CustomRegExp } from '../utils/CustomRegExp';
 
@@ -14,17 +14,20 @@ export class NewsletterSubscriptionComponent implements OnInit {
   public loading = false;
   public submitted = false;
   public subscriptionFailed = false;
+  public subscriptionMod: boolean;
 
-  constructor(
-    private formBuilder: FormBuilder,
-    private newsletterService: NewsletterService,
-    private router: Router,
-  ) {}
+  constructor(private formBuilder: FormBuilder, private newsletterService: NewsletterService, private router: Router) {}
 
   ngOnInit(): void {
     this.subscriptionForm = this.formBuilder.group({
       email: ['', [Validators.required, Validators.pattern(CustomRegExp.EMAIL)]],
     });
+    if (this.router.url === '/newsletter') {
+      this.subscriptionMod = true;
+    }
+    if (this.router.url === '/newsletter-unsubscription') {
+      this.subscriptionMod = false;
+    }
   }
 
   get f(): { [key: string]: AbstractControl } {
@@ -38,7 +41,19 @@ export class NewsletterSubscriptionComponent implements OnInit {
       return;
     }
     this.loading = true;
-    this.newsletterService.newsletterSubscribe(this.f.email.value).subscribe(
+    if (this.subscriptionMod) {
+      this.newsletterService.newsletterSubscribe(this.f.email.value).subscribe(
+        () => {
+          this.router.navigate(['']);
+        },
+        () => {
+          this.loading = false;
+          this.subscriptionFailed = true;
+        }
+      );
+    }
+    if (!this.subscriptionMod) {
+      this.newsletterService.newsletterUnsubscribe(this.f.email.value).subscribe(
         () => {
           this.router.navigate(['']);
         },
@@ -47,5 +62,6 @@ export class NewsletterSubscriptionComponent implements OnInit {
           this.subscriptionFailed = true;
         }
       );
+    }
   }
 }
diff --git a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.html b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.html
deleted file mode 100644
index 3dd086cf3..000000000
--- a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<div fxLayout="column" class="content-container full-screen">
-  <div class="section-container" fxLayout="column" fxLayoutAlign="center center">
-    <div class="unsubscriptionForm">
-      <h1>Désinscription de la newsletter</h1>
-      <form [formGroup]="unsubscriptionForm" (ngSubmit)="onSubmit()">
-        <div class="form-group">
-          <label for="email">Courriel personnel</label>
-            <div fxLayout="row" fxLayoutGap="13px">
-              <input type="email"
-               autocomplete="on" 
-               formControlName="email" 
-               class="form-input" 
-               [ngClass]="{ 'is-invalid': submitted && f.email.errors }"/>
-            </div>
-          <div *ngIf="submitted && f.email.errors" class="invalid-feedback">
-            <div *ngIf="f.email.errors.required" >L'adresse e-mail est requise</div>
-            <div *ngIf="f.email.errors.pattern" >L'adresse e-mail doit être valide</div>
-          </div>
-        </div>
-        <div class="existingEmail" *ngIf="unsubscriptionFailed">Cette adresse email n'est pas abonnée à notre newsletter</div>
-        <div class="button" fxLayout="row" fxLayoutAlign="space-around center">
-          <a routerLink="../home" class="btn btn-link">Annuler</a>
-          <button [disabled]="loading" class="btn btn-primary">
-            <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>
-            Se désinscrire
-          </button>
-        </div>
-      </form>
-    </div>
-  </div>
-</div>
diff --git a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.scss b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.scss
deleted file mode 100644
index b734335d7..000000000
--- a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-@import '../../assets/scss/color';
-
-.unsubscriptionForm {
-    max-width: 500px;
-}
-
-.button {
-    margin-top: 20px;
-}
-
-.form-input {
-    width: 100%;
-  }
-
-.existingEmail {
-    color: $orange-warning;
-}
-  
\ No newline at end of file
diff --git a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.spec.ts b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.spec.ts
deleted file mode 100644
index 2c641b4f0..000000000
--- a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.spec.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { HttpClientTestingModule } from '@angular/common/http/testing';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ReactiveFormsModule } from '@angular/forms';
-import { RouterTestingModule } from '@angular/router/testing';
-
-import { NewsletterUnsubscriptionComponent } from './newsletter-unsubscription.component';
-
-describe('ResetPasswordComponent', () => {
-  let component: NewsletterUnsubscriptionComponent;
-  let fixture: ComponentFixture<NewsletterUnsubscriptionComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [NewsletterUnsubscriptionComponent],
-      imports: [ReactiveFormsModule, HttpClientTestingModule, RouterTestingModule],
-    }).compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(NewsletterUnsubscriptionComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
diff --git a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.ts b/src/app/newsletter-unsubscription/newsletter-unsubscription.component.ts
deleted file mode 100644
index 237a7bd58..000000000
--- a/src/app/newsletter-unsubscription/newsletter-unsubscription.component.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import { Component, OnInit } from '@angular/core';
-import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
-import { ActivatedRoute, Router } from '@angular/router';
-import { NewsletterService } from '../services/newsletter.service';
-
-@Component({
-  selector: 'app-newsletter-unsubscription',
-  templateUrl: './newsletter-unsubscription.component.html',
-  styleUrls: ['./newsletter-unsubscription.component.scss'],
-})
-export class NewsletterUnsubscriptionComponent implements OnInit {
-  public unsubscriptionForm: FormGroup;
-  public loading = false;
-  public submitted = false;
-  public unsubscriptionFailed = false;
-
-  constructor(
-    private formBuilder: FormBuilder,
-    private newsletterService: NewsletterService,
-    private router: Router,
-  ) {}
-
-  ngOnInit(): void {
-    this.unsubscriptionForm = this.formBuilder.group({
-      email: ['', Validators.required],
-    });
-  }
-
-  get f(): { [key: string]: AbstractControl } {
-    return this.unsubscriptionForm.controls;
-  }
-
-  public onSubmit(): void {
-    this.submitted = true;
-
-    if (this.unsubscriptionForm.invalid) {
-      return;
-    }
-    this.loading = true;
-    this.newsletterService.newsletterUnsubscribe(this.f.email.value).subscribe(
-        () => {
-          this.router.navigate(['']);
-        },
-        () => {
-          this.loading = false;
-          this.unsubscriptionFailed = true;
-        }
-      );
-  }
-}
-- 
GitLab


From 17f7d5cbd09f6c27f9f353583adc2f7ad901444a Mon Sep 17 00:00:00 2001
From: Antonin Coquet <ext.sopra.acoquet@grandlyon.com>
Date: Wed, 7 Apr 2021 10:39:58 +0200
Subject: [PATCH 6/7] add newsletter subscription on signup form

---
 src/app/form/form.component.html |  9 +++++++++
 src/app/form/form.component.ts   | 18 +++++++++++++++++-
 src/app/form/pageType.enum.ts    |  1 +
 3 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/src/app/form/form.component.html b/src/app/form/form.component.html
index 24a36a212..fe166739b 100644
--- a/src/app/form/form.component.html
+++ b/src/app/form/form.component.html
@@ -1074,6 +1074,15 @@
         (checkEvent)="acceptDataBeSaved($event)"
       >
       </app-checkbox-form>
+      <div class="title">
+        <h3>Acceptez-vous de recevoir des mails d'informations de la part de Res'in ?</h3>
+      </div>
+      <app-checkbox-form
+        [isChecked]="userAcceptNewsletter"
+        [text]="'J\'accepte'"
+        (checkEvent)="acceptReceiveNewsletter($event)"
+      >
+      </app-checkbox-form>
       <p class="informationEndForm">
         <span class="asterisk">*</span> Les informations recueillies sont enregistrées dans un fichier par la Métropole
         de Lyon en vue de l'animation du réseau des acteurs de la médiation numérique. Elles sont conservées pendant 24
diff --git a/src/app/form/form.component.ts b/src/app/form/form.component.ts
index 692a0a761..1d9b6e457 100644
--- a/src/app/form/form.component.ts
+++ b/src/app/form/form.component.ts
@@ -20,6 +20,7 @@ import { PageTypeEnum } from './pageType.enum';
 import { CustomRegExp } from '../utils/CustomRegExp';
 import { StructureWithOwners } from '../models/structureWithOwners.model';
 import { RouterListenerService } from '../services/routerListener.service';
+import { NewsletterService } from '../services/newsletter.service';
 const { DateTime } = require('luxon');
 @Component({
   selector: 'app-structureForm',
@@ -66,6 +67,7 @@ export class FormComponent implements OnInit {
   public isShowConfirmPassword = false;
   public isShowPassword = false;
   public userAcceptSavedDate = false;
+  public userAcceptNewsletter = false;
   public showMenu = false;
   public isEditMode = false;
   public isClaimMode = false;
@@ -82,7 +84,8 @@ export class FormComponent implements OnInit {
     private authService: AuthService,
     private router: Router,
     private route: ActivatedRoute,
-    private routerListener: RouterListenerService
+    private routerListener: RouterListenerService,
+    private newsletterService: NewsletterService
   ) {}
 
   async ngOnInit(): Promise<void> {
@@ -574,6 +577,9 @@ export class FormComponent implements OnInit {
       const user = new User(this.accountForm.value);
       // Create user and claim structure
       this.authService.register(user).subscribe(() => {
+        if (this.userAcceptNewsletter) {
+          this.newsletterService.newsletterSubscribe(user.email).subscribe(() => {});
+        }
         // If joinMode, send join request, if not send claim request;
         if (this.isJoinMode) {
           this.structureService.joinStructure(this.claimStructure._id, user.email).subscribe(() => {
@@ -824,6 +830,10 @@ export class FormComponent implements OnInit {
     this.setValidationsForm();
   }
 
+  public acceptReceiveNewsletter(isAccepted: boolean): void {
+    this.userAcceptNewsletter = isAccepted;
+  }
+
   public validateForm(): void {
     if (this.structureForm.valid && this.hoursForm.valid) {
       let structure: Structure = this.structureForm.value;
@@ -839,6 +849,9 @@ export class FormComponent implements OnInit {
           user = this.profile;
           structure.accountVerified = true;
           this.createStructure(structure, user);
+          if (this.userAcceptNewsletter) {
+            this.newsletterService.newsletterSubscribe(user.email).subscribe(() => {});
+          }
         } else {
           if (this.accountForm.valid) {
             user = new User(this.accountForm.value);
@@ -848,6 +861,9 @@ export class FormComponent implements OnInit {
               .subscribe(() => {
                 this.createStructure(structure, user);
               });
+            if (this.userAcceptNewsletter) {
+              this.newsletterService.newsletterSubscribe(user.email).subscribe(() => {});
+            }
           }
         }
       }
diff --git a/src/app/form/pageType.enum.ts b/src/app/form/pageType.enum.ts
index 3b3f5071a..b32e79987 100644
--- a/src/app/form/pageType.enum.ts
+++ b/src/app/form/pageType.enum.ts
@@ -23,4 +23,5 @@ export enum PageTypeEnum {
   structureDescription = 21,
   structureCovidInfo = 22,
   cgu = 23,
+  newsletter = 24,
 }
-- 
GitLab


From 3dd71ad9bda6b631c7a12b4fceb4dfb0a06d2798 Mon Sep 17 00:00:00 2001
From: Antonin Coquet <ext.sopra.acoquet@grandlyon.com>
Date: Thu, 8 Apr 2021 09:46:13 +0200
Subject: [PATCH 7/7] small scss changes

---
 .../components/delete-user/delete-user.component.scss    | 8 --------
 .../components/delete-user/delete-user.component.ts      | 1 -
 .../newsletter-users/newsletter-users.component.scss     | 8 --------
 .../newsletter-users/newsletter-users.component.ts       | 1 -
 src/app/form/pageType.enum.ts                            | 1 -
 src/styles.scss                                          | 9 +++++++++
 6 files changed, 9 insertions(+), 19 deletions(-)
 delete mode 100644 src/app/admin/components/delete-user/delete-user.component.scss
 delete mode 100644 src/app/admin/components/newsletter-users/newsletter-users.component.scss

diff --git a/src/app/admin/components/delete-user/delete-user.component.scss b/src/app/admin/components/delete-user/delete-user.component.scss
deleted file mode 100644
index 39b7a0741..000000000
--- a/src/app/admin/components/delete-user/delete-user.component.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-.userList {
-    max-width: 50%;
-}
-
-.userBlock {
-    max-width: 50%;
-    margin: 0 auto;
-}
\ No newline at end of file
diff --git a/src/app/admin/components/delete-user/delete-user.component.ts b/src/app/admin/components/delete-user/delete-user.component.ts
index 00e5c943b..293324fe7 100644
--- a/src/app/admin/components/delete-user/delete-user.component.ts
+++ b/src/app/admin/components/delete-user/delete-user.component.ts
@@ -6,7 +6,6 @@ import { AdminService } from '../../services/admin.service';
 @Component({
   selector: 'app-admin-delete-user',
   templateUrl: './delete-user.component.html',
-  styleUrls: ['./delete-user.component.scss'],
 })
 export class DeleteUserComponent {
   public users: User[];
diff --git a/src/app/admin/components/newsletter-users/newsletter-users.component.scss b/src/app/admin/components/newsletter-users/newsletter-users.component.scss
deleted file mode 100644
index 39b7a0741..000000000
--- a/src/app/admin/components/newsletter-users/newsletter-users.component.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-.userList {
-    max-width: 50%;
-}
-
-.userBlock {
-    max-width: 50%;
-    margin: 0 auto;
-}
\ No newline at end of file
diff --git a/src/app/admin/components/newsletter-users/newsletter-users.component.ts b/src/app/admin/components/newsletter-users/newsletter-users.component.ts
index 95f046801..66290faae 100644
--- a/src/app/admin/components/newsletter-users/newsletter-users.component.ts
+++ b/src/app/admin/components/newsletter-users/newsletter-users.component.ts
@@ -5,7 +5,6 @@ import { AdminService } from '../../services/admin.service';
 @Component({
   selector: 'app-admin-newsletter-users',
   templateUrl: './newsletter-users.component.html',
-  styleUrls: ['./newsletter-users.component.scss'],
 })
 export class NewsletterUsersComponent {
   public subscriptions: NewsletterSubscription[];
diff --git a/src/app/form/pageType.enum.ts b/src/app/form/pageType.enum.ts
index b32e79987..3b3f5071a 100644
--- a/src/app/form/pageType.enum.ts
+++ b/src/app/form/pageType.enum.ts
@@ -23,5 +23,4 @@ export enum PageTypeEnum {
   structureDescription = 21,
   structureCovidInfo = 22,
   cgu = 23,
-  newsletter = 24,
 }
diff --git a/src/styles.scss b/src/styles.scss
index 08c7d2ff6..97e279390 100644
--- a/src/styles.scss
+++ b/src/styles.scss
@@ -269,3 +269,12 @@ button {
 .no-margin {
   margin: 0 !important;
 }
+
+.userList {
+  max-width: 50%;
+}
+
+.userBlock {
+  max-width: 50%;
+  margin: 0 auto;
+}
-- 
GitLab