From b68b85cad2bcc8bfb69e7af1b8a9029a9e018977 Mon Sep 17 00:00:00 2001
From: Adel LAKHDAR <alakhdar@grandlyon.com>
Date: Mon, 22 Apr 2024 09:04:14 +0000
Subject: [PATCH] fix(UI): fix newsletter form

---
 src/app/form/footer-form/footer-form.component.ts          | 3 +--
 .../form-view/account-form/account-form.component.html     | 6 +-----
 .../form/form-view/account-form/account-form.component.ts  | 5 +----
 .../account-newsletter/account-newsletter.component.html   | 4 ++--
 .../account-newsletter/account-newsletter.component.ts     | 7 +++----
 src/app/form/form-view/form-view.component.html            | 2 --
 src/app/form/form-view/form-view.component.ts              | 6 +-----
 7 files changed, 9 insertions(+), 24 deletions(-)

diff --git a/src/app/form/footer-form/footer-form.component.ts b/src/app/form/footer-form/footer-form.component.ts
index f74cea5bb..42f1c9a4e 100644
--- a/src/app/form/footer-form/footer-form.component.ts
+++ b/src/app/form/footer-form/footer-form.component.ts
@@ -25,7 +25,6 @@ export class FooterFormComponent {
   @Input() nbPagesForm: number;
   @Input() form: UntypedFormGroup;
   @Input() linkedStructureId: string[] = null;
-  @Input() acceptNewsletter: boolean;
   @Input() currentStep: stepType;
   @Input() hasOtherPersonalOffer: boolean;
   @Input() isPersonalOfferProfile: boolean;
@@ -102,7 +101,7 @@ export class FooterFormComponent {
       user.structuresLink = this.linkedStructureId;
       try {
         await firstValueFrom(this.authService.register(user));
-        if (this.acceptNewsletter) {
+        if (this.form.value.hasAcceptedNewsletter) {
           this.newsletterService.subscribe(user.email).subscribe();
         }
         document.getElementsByClassName('page')[0].scrollTo(0, 0);
diff --git a/src/app/form/form-view/account-form/account-form.component.html b/src/app/form/form-view/account-form/account-form.component.html
index c6d69a41d..4c8b83fad 100644
--- a/src/app/form/form-view/account-form/account-form.component.html
+++ b/src/app/form/form-view/account-form/account-form.component.html
@@ -12,11 +12,7 @@
     />
   </ng-container>
   <ng-container *ngIf="currentStep === accountFormStepEnum.accountNewsletter">
-    <app-account-newsletter
-      [accountForm]="accountForm"
-      [profile]="profile"
-      (acceptNewsletter)="acceptReceiveNewsletter($event)"
-    />
+    <app-account-newsletter [accountForm]="accountForm" [profile]="profile" (validateForm)="setValidationsForm()" />
   </ng-container>
   <ng-container *ngIf="currentStep === accountFormStepEnum.confirmEmailSentInfo">
     <app-information-step [step]="accountFormStepEnum.confirmEmailSentInfo" [formType]="formType.account" />
diff --git a/src/app/form/form-view/account-form/account-form.component.ts b/src/app/form/form-view/account-form/account-form.component.ts
index f944c1b24..a16940f4a 100644
--- a/src/app/form/form-view/account-form/account-form.component.ts
+++ b/src/app/form/form-view/account-form/account-form.component.ts
@@ -50,7 +50,7 @@ export class AccountFormComponent implements OnInit, OnChanges {
         this.accountForm.get('confirmPassword').valid,
     };
     this.pagesValidation[accountFormStep.accountNewsletter] = {
-      valid: true,
+      valid: this.accountForm.get('hasAcceptedNewsletter').value !== null,
     };
     this.pagesValidation[accountFormStep.confirmEmailSentInfo] = {
       valid: true,
@@ -74,7 +74,4 @@ export class AccountFormComponent implements OnInit, OnChanges {
     const isPageValid = this.pagesValidation[this.currentStep].valid;
     this.pageValid.emit(isPageValid);
   }
-  public acceptReceiveNewsletter(accept: boolean): void {
-    this.acceptNewsletter.emit(accept);
-  }
 }
diff --git a/src/app/form/form-view/account-form/account-newsletter/account-newsletter.component.html b/src/app/form/form-view/account-form/account-newsletter/account-newsletter.component.html
index 25656d575..b72dd3875 100644
--- a/src/app/form/form-view/account-form/account-newsletter/account-newsletter.component.html
+++ b/src/app/form/form-view/account-form/account-newsletter/account-newsletter.component.html
@@ -8,14 +8,14 @@
       [id]="'yes'"
       [label]="'Oui'"
       [value]="true"
-      [selected]="userAcceptNewsletter"
+      [selected]="accountForm.get('hasAcceptedNewsletter').value === true"
       (click)="acceptReceiveNewsletter(true)"
     />
     <app-radio-option
       [id]="'no'"
       [label]="'Non'"
       [value]="false"
-      [selected]="!userAcceptNewsletter"
+      [selected]="accountForm.get('hasAcceptedNewsletter').value === false"
       (click)="acceptReceiveNewsletter(false)"
     />
   </div>
diff --git a/src/app/form/form-view/account-form/account-newsletter/account-newsletter.component.ts b/src/app/form/form-view/account-form/account-newsletter/account-newsletter.component.ts
index 952d50bd8..64c37f011 100644
--- a/src/app/form/form-view/account-form/account-newsletter/account-newsletter.component.ts
+++ b/src/app/form/form-view/account-form/account-newsletter/account-newsletter.component.ts
@@ -9,11 +9,10 @@ import { User } from '../../../../models/user.model';
 export class AccountNewsletterComponent {
   @Input() accountForm: UntypedFormGroup;
   @Input() profile: User;
-  @Output() acceptNewsletter = new EventEmitter<any>();
-  public userAcceptNewsletter = false;
+  @Output() validateForm = new EventEmitter<any>();
 
   public acceptReceiveNewsletter(accepts: boolean): void {
-    this.userAcceptNewsletter = accepts;
-    this.acceptNewsletter.emit(accepts);
+    this.accountForm.get('hasAcceptedNewsletter').setValue(accepts);
+    this.validateForm.emit();
   }
 }
diff --git a/src/app/form/form-view/form-view.component.html b/src/app/form/form-view/form-view.component.html
index 4b92517b4..8c3a89528 100644
--- a/src/app/form/form-view/form-view.component.html
+++ b/src/app/form/form-view/form-view.component.html
@@ -25,7 +25,6 @@
       [isAccountMode]="isAccountMode"
       (goNext)="nextPage()"
       (pageValid)="validatePage($event)"
-      (acceptNewsletter)="acceptReceiveNewsletter($event)"
     />
     <app-profile-form
       *ngIf="formType[routeParam] === formType.profile"
@@ -66,7 +65,6 @@
     [form]="currentForm"
     [linkedStructureId]="linkedStructureId"
     [isValid]="isPageValid"
-    [acceptNewsletter]="userAcceptNewsletter"
     [hasOtherPersonalOffer]="hasOtherPersonalOffer"
     [isPersonalOfferProfile]="isPersonalOfferProfile"
     [isEditMode]="isEditMode"
diff --git a/src/app/form/form-view/form-view.component.ts b/src/app/form/form-view/form-view.component.ts
index fd71532be..bbff09df4 100644
--- a/src/app/form/form-view/form-view.component.ts
+++ b/src/app/form/form-view/form-view.component.ts
@@ -37,7 +37,6 @@ export class FormViewComponent implements OnInit, AfterViewInit {
   public formUtils = new FormUtils();
   // Account Form
   public accountForm: UntypedFormGroup;
-  public userAcceptNewsletter: boolean;
   // Profile Form
   public profileForm: UntypedFormGroup;
   public isPersonalOfferProfile = false;
@@ -214,6 +213,7 @@ export class FormViewComponent implements OnInit, AfterViewInit {
           Validators.pattern(CustomRegExp.PASSWORD), // NOSONAR
         ]),
         confirmPassword: new UntypedFormControl(''),
+        hasAcceptedNewsletter: new UntypedFormControl(null),
       },
       [MustMatch('password', 'confirmPassword')],
     );
@@ -235,10 +235,6 @@ export class FormViewComponent implements OnInit, AfterViewInit {
     });
   }
 
-  public acceptReceiveNewsletter(isAccepted: boolean): void {
-    this.userAcceptNewsletter = isAccepted;
-  }
-
   private createPersonalOfferForm(personalOffer: PersonalOffer): void {
     this.personalOfferForm = new UntypedFormGroup({
       categories: new UntypedFormGroup({
-- 
GitLab