From c0f2c500b84ad5fa3ab0ec0b9047bc9fff4c7250 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Fri, 21 Feb 2025 15:03:55 +0100
Subject: [PATCH 01/87] Add new svg icons for new profile nav

---
 src/assets/ico/sprite.svg | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/assets/ico/sprite.svg b/src/assets/ico/sprite.svg
index 5612c0cac..204dd66cf 100644
--- a/src/assets/ico/sprite.svg
+++ b/src/assets/ico/sprite.svg
@@ -403,4 +403,19 @@
         fill="#333333" />
     </g>
   </symbol>
-</svg>
\ No newline at end of file
+
+    <symbol id="dashboard" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
+        <path d="M2 8.66667H7.33333V2H2V8.66667ZM2 14H7.33333V10H2V14ZM8.66667 14H14V7.33333H8.66667V14ZM8.66667 2V6H14V2H8.66667Z" fill="#767676"/>
+    </symbol>
+
+    <symbol id="myStructures" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
+      <path d="M5.44406 3.80078L0.664062 6.98745V14.0008H3.9974V8.66745H6.66406V14.0008H9.9974V6.83411L5.44406 3.80078Z" fill="#767676"/>
+      <path d="M6.66406 2V3.00667L7.9974 3.89333L9.15073 4.66667H9.9974V5.23333L11.3307 6.12667V7.33333H12.6641V8.66667H11.3307V10H12.6641V11.3333H11.3307V14H15.3307V2H6.66406ZM12.6641 6H11.3307V4.66667H12.6641V6Z" fill="#767676"/>
+    </symbol>
+
+    <symbol id="myProfile" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
+      <path d="M8.0026 1.33398C4.3226 1.33398 1.33594 4.32065 1.33594 8.00065C1.33594 11.6807 4.3226 14.6673 8.0026 14.6673C11.6826 14.6673 14.6693 11.6807 14.6693 8.00065C14.6693 4.32065 11.6826 1.33398 8.0026 1.33398ZM8.0026 3.33398C9.10927 3.33398 10.0026 4.22732 10.0026 5.33398C10.0026 6.44065 9.10927 7.33398 8.0026 7.33398C6.89594 7.33398 6.0026 6.44065 6.0026 5.33398C6.0026 4.22732 6.89594 3.33398 8.0026 3.33398ZM8.0026 12.8007C6.33594 12.8007 4.8626 11.9473 4.0026 10.654C4.0226 9.32732 6.66927 8.60065 8.0026 8.60065C9.32927 8.60065 11.9826 9.32732 12.0026 10.654C11.1426 11.9473 9.66927 12.8007 8.0026 12.8007Z" fill="#333333"/>
+    </symbol>
+
+
+</svg>
-- 
GitLab


From 3de24b291c9555b1509e2da56194084439a9f8ea Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Fri, 21 Feb 2025 15:10:23 +0100
Subject: [PATCH 02/87] Import new nav component

---
 src/app/profile/profile.module.ts | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/app/profile/profile.module.ts b/src/app/profile/profile.module.ts
index c71a85463..7f0c15dc5 100644
--- a/src/app/profile/profile.module.ts
+++ b/src/app/profile/profile.module.ts
@@ -1,8 +1,10 @@
 import { CommonModule } from '@angular/common';
 import { NgModule } from '@angular/core';
+import { ResetEmailComponent } from '../reset-email/reset-email.component';
 import { SharedModule } from '../shared/shared.module';
 import { EditComponent } from './edit/edit.component';
 import { PersonalOfferEditionComponent } from './personal-offer-edition/personal-offer-edition.component';
+import { ProfileNavComponent } from './profile-nav/profile-nav.component';
 import { ProfileNewsletterComponent } from './profile-newsletter/profile-newsletter.component';
 import { ProfileRoutingModule } from './profile-routing.module';
 import { PersonalOfferComponent } from './profile-structure/personal-offer/personal-offer.component';
@@ -14,7 +16,6 @@ import { NoInformationComponent } from './structure-edition-summary/no-informati
 import { StructureEditionSummaryComponent } from './structure-edition-summary/structure-edition-summary.component';
 import { StructureMembersManagementComponent } from './structure-members-management/structure-members-management.component';
 import { StructuresManagementComponent } from './structures-management/structures-management.component';
-import  {ResetEmailComponent} from '../reset-email/reset-email.component';
 
 @NgModule({
   declarations: [
@@ -29,6 +30,7 @@ import  {ResetEmailComponent} from '../reset-email/reset-email.component';
     StructuresManagementComponent,
     PersonalOfferComponent,
     PersonalOfferEditionComponent,
+    ProfileNavComponent,
     ProfileNewsletterComponent,
     ResetEmailComponent,
   ],
-- 
GitLab


From 5cc84cae774f13ce989be004835e0b85aa3bede2 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Fri, 21 Feb 2025 15:49:30 +0100
Subject: [PATCH 03/87] Add a new component my-structures

---
 src/app/profile/profile-routing.module.ts | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/app/profile/profile-routing.module.ts b/src/app/profile/profile-routing.module.ts
index 91b892547..7264769ee 100644
--- a/src/app/profile/profile-routing.module.ts
+++ b/src/app/profile/profile-routing.module.ts
@@ -9,6 +9,7 @@ import { PersonalOfferResolver } from '../resolvers/personal-offer.resolver';
 import { StructureResolver } from '../resolvers/structure.resolver';
 import { RouteRole } from '../shared/enum/routeRole.enum';
 import { EditComponent } from './edit/edit.component';
+import { MyStructuresComponent } from './my-structures/my-structures.component';
 import { PersonalOfferEditionComponent } from './personal-offer-edition/personal-offer-edition.component';
 import { ProfileComponent } from './profile.component';
 import { StructureEditionSummaryComponent } from './structure-edition-summary/structure-edition-summary.component';
@@ -32,6 +33,10 @@ const routes: Routes = [
     path: 'gestion-structures',
     component: StructuresManagementComponent,
   },
+  {
+    path: 'mes-structures',
+    component: MyStructuresComponent,
+  },
   footerOutletRoute,
   {
     path: '',
-- 
GitLab


From d8eafd46f59dcca881cf1760f0c4b5145533863a Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Fri, 21 Feb 2025 15:50:14 +0100
Subject: [PATCH 04/87] Add a new routing for my-profile

---
 src/app/profile/profile-routing.module.ts | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/app/profile/profile-routing.module.ts b/src/app/profile/profile-routing.module.ts
index 7264769ee..b79ee289a 100644
--- a/src/app/profile/profile-routing.module.ts
+++ b/src/app/profile/profile-routing.module.ts
@@ -9,6 +9,7 @@ import { PersonalOfferResolver } from '../resolvers/personal-offer.resolver';
 import { StructureResolver } from '../resolvers/structure.resolver';
 import { RouteRole } from '../shared/enum/routeRole.enum';
 import { EditComponent } from './edit/edit.component';
+import { MyProfileComponent } from './my-profile/my-profile.component';
 import { MyStructuresComponent } from './my-structures/my-structures.component';
 import { PersonalOfferEditionComponent } from './personal-offer-edition/personal-offer-edition.component';
 import { ProfileComponent } from './profile.component';
@@ -37,6 +38,10 @@ const routes: Routes = [
     path: 'mes-structures',
     component: MyStructuresComponent,
   },
+  {
+    path: 'mon-profil',
+    component: MyProfileComponent,
+  },
   footerOutletRoute,
   {
     path: '',
-- 
GitLab


From 019e162d5bbc0d17f092e76ef118534e51a27f0e Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Fri, 21 Feb 2025 15:50:58 +0100
Subject: [PATCH 05/87] Add a new component to profile :  my-structures

---
 src/app/profile/profile.module.ts | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/app/profile/profile.module.ts b/src/app/profile/profile.module.ts
index 7f0c15dc5..b649fdd67 100644
--- a/src/app/profile/profile.module.ts
+++ b/src/app/profile/profile.module.ts
@@ -3,6 +3,7 @@ import { NgModule } from '@angular/core';
 import { ResetEmailComponent } from '../reset-email/reset-email.component';
 import { SharedModule } from '../shared/shared.module';
 import { EditComponent } from './edit/edit.component';
+import { MyStructuresComponent } from './my-structures/my-structures.component';
 import { PersonalOfferEditionComponent } from './personal-offer-edition/personal-offer-edition.component';
 import { ProfileNavComponent } from './profile-nav/profile-nav.component';
 import { ProfileNewsletterComponent } from './profile-newsletter/profile-newsletter.component';
@@ -33,6 +34,7 @@ import { StructuresManagementComponent } from './structures-management/structure
     ProfileNavComponent,
     ProfileNewsletterComponent,
     ResetEmailComponent,
+    MyStructuresComponent,
   ],
   imports: [CommonModule, ProfileRoutingModule, SharedModule],
 })
-- 
GitLab


From 0d1ae4573b287c2fc81354a06ff4e73615f1bddf Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Fri, 21 Feb 2025 15:51:15 +0100
Subject: [PATCH 06/87] Add a new component to profile :  my-profile

---
 src/app/profile/profile.module.ts | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/app/profile/profile.module.ts b/src/app/profile/profile.module.ts
index b649fdd67..de529ab6b 100644
--- a/src/app/profile/profile.module.ts
+++ b/src/app/profile/profile.module.ts
@@ -3,6 +3,7 @@ import { NgModule } from '@angular/core';
 import { ResetEmailComponent } from '../reset-email/reset-email.component';
 import { SharedModule } from '../shared/shared.module';
 import { EditComponent } from './edit/edit.component';
+import { MyProfileComponent } from './my-profile/my-profile.component';
 import { MyStructuresComponent } from './my-structures/my-structures.component';
 import { PersonalOfferEditionComponent } from './personal-offer-edition/personal-offer-edition.component';
 import { ProfileNavComponent } from './profile-nav/profile-nav.component';
@@ -35,6 +36,7 @@ import { StructuresManagementComponent } from './structures-management/structure
     ProfileNewsletterComponent,
     ResetEmailComponent,
     MyStructuresComponent,
+    MyProfileComponent,
   ],
   imports: [CommonModule, ProfileRoutingModule, SharedModule],
 })
-- 
GitLab


From 2edf408bda7155892fb55bbcf9b994d83310d4ff Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Fri, 21 Feb 2025 15:52:59 +0100
Subject: [PATCH 07/87] Nav component for profile

---
 .../profile-nav/profile-nav.component.ts      | 26 +++++++++++++++++++
 1 file changed, 26 insertions(+)
 create mode 100644 src/app/profile/profile-nav/profile-nav.component.ts

diff --git a/src/app/profile/profile-nav/profile-nav.component.ts b/src/app/profile/profile-nav/profile-nav.component.ts
new file mode 100644
index 000000000..56ce5276a
--- /dev/null
+++ b/src/app/profile/profile-nav/profile-nav.component.ts
@@ -0,0 +1,26 @@
+import { Component, OnInit } from '@angular/core';
+import { Router } from '@angular/router';
+import { User } from '../../models/user.model';
+import { Utils } from '../../utils/utils';
+import { ProfileService } from '../services/profile.service';
+
+@Component({
+  selector: 'app-profile-nav',
+  templateUrl: './profile-nav.component.html',
+  styleUrls: ['./profile-nav.component.scss'],
+})
+export class ProfileNavComponent implements OnInit {
+  public userProfile: User;
+
+  constructor(
+    private router: Router,
+    public utils: Utils,
+    private profileService: ProfileService,
+  ) {}
+
+  ngOnInit(): void {
+    this.profileService.getProfile().then((profile) => {
+      this.userProfile = new User(profile);
+    });
+  }
+}
-- 
GitLab


From 7f961caa9520efa8057b24d812109018992ecbb7 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Fri, 21 Feb 2025 15:53:29 +0100
Subject: [PATCH 08/87] Nav html

---
 .../profile/profile-nav/profile-nav.component.html | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 src/app/profile/profile-nav/profile-nav.component.html

diff --git a/src/app/profile/profile-nav/profile-nav.component.html b/src/app/profile/profile-nav/profile-nav.component.html
new file mode 100644
index 000000000..454d8b722
--- /dev/null
+++ b/src/app/profile/profile-nav/profile-nav.component.html
@@ -0,0 +1,14 @@
+<nav>
+  <a class="back" [routerLink]="'/profil'">
+    <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'dashboard'" />
+    Tableau de bord
+  </a>
+  <a class="back" [routerLink]="'/profil/mes-structures'">
+    <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myStructures'" />
+    Mes structures
+  </a>
+  <a class="back" [routerLink]="'/profil/mon-profil'">
+    <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myProfile'" />
+    Mon profil
+  </a>
+</nav>
-- 
GitLab


From 74b74129f19856f4713ab97909123d2871f4b841 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Fri, 21 Feb 2025 15:53:44 +0100
Subject: [PATCH 09/87] Nav styles

---
 .../profile-nav/profile-nav.component.scss    | 33 +++++++++++++++++++
 1 file changed, 33 insertions(+)
 create mode 100644 src/app/profile/profile-nav/profile-nav.component.scss

diff --git a/src/app/profile/profile-nav/profile-nav.component.scss b/src/app/profile/profile-nav/profile-nav.component.scss
new file mode 100644
index 000000000..4c5b43d92
--- /dev/null
+++ b/src/app/profile/profile-nav/profile-nav.component.scss
@@ -0,0 +1,33 @@
+@import 'color';
+@import 'typography';
+@import 'breakpoint';
+@import 'layout';
+
+nav {
+  display: flex;
+  flex-direction: column;
+  align-self: stretch;
+  align-items: flex-start;
+  width: 250px;
+  height: 100vh;
+  padding: 32px;
+  gap: 16px;
+  border-right: 1px solid $grey-7;
+  a {
+    display: flex;
+    padding: 4px 12px;
+    align-items: center;
+    align-self: stretch;
+    gap: 4px;
+    text-decoration: none;
+    height: 32px;
+    color: $grey-4-5-1;
+    &.selected,
+    &:hover {
+      background: $grey-7;
+      border-radius: 4px;
+      color: $grey-1;
+      font-weight: bold;
+    }
+  }
+}
-- 
GitLab


From abdcaa9f160f827156f9f88948ced487a5af3c52 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 24 Feb 2025 12:14:55 +0100
Subject: [PATCH 10/87] routing

---
 src/app/profile/profile-routing.module.ts | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/app/profile/profile-routing.module.ts b/src/app/profile/profile-routing.module.ts
index b79ee289a..0e7bab1f0 100644
--- a/src/app/profile/profile-routing.module.ts
+++ b/src/app/profile/profile-routing.module.ts
@@ -8,8 +8,8 @@ import { RoleGuard } from '../guards/role.guard';
 import { PersonalOfferResolver } from '../resolvers/personal-offer.resolver';
 import { StructureResolver } from '../resolvers/structure.resolver';
 import { RouteRole } from '../shared/enum/routeRole.enum';
+import { DashboardComponent } from './dashboard/dashboard.component';
 import { EditComponent } from './edit/edit.component';
-import { MyProfileComponent } from './my-profile/my-profile.component';
 import { MyStructuresComponent } from './my-structures/my-structures.component';
 import { PersonalOfferEditionComponent } from './personal-offer-edition/personal-offer-edition.component';
 import { ProfileComponent } from './profile.component';
@@ -39,8 +39,8 @@ const routes: Routes = [
     component: MyStructuresComponent,
   },
   {
-    path: 'mon-profil',
-    component: MyProfileComponent,
+    path: 'tableau-de-bord',
+    component: DashboardComponent,
   },
   footerOutletRoute,
   {
-- 
GitLab


From fc7caf2667e57faa44fcc63b35574ac84aa70d06 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 24 Feb 2025 12:16:17 +0100
Subject: [PATCH 11/87] Update nav

---
 src/app/profile/profile-nav/profile-nav.component.ts | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/app/profile/profile-nav/profile-nav.component.ts b/src/app/profile/profile-nav/profile-nav.component.ts
index 56ce5276a..0430138a2 100644
--- a/src/app/profile/profile-nav/profile-nav.component.ts
+++ b/src/app/profile/profile-nav/profile-nav.component.ts
@@ -1,5 +1,4 @@
-import { Component, OnInit } from '@angular/core';
-import { Router } from '@angular/router';
+import { Component, Input, OnInit } from '@angular/core';
 import { User } from '../../models/user.model';
 import { Utils } from '../../utils/utils';
 import { ProfileService } from '../services/profile.service';
@@ -10,10 +9,10 @@ import { ProfileService } from '../services/profile.service';
   styleUrls: ['./profile-nav.component.scss'],
 })
 export class ProfileNavComponent implements OnInit {
+  @Input() isPublic: boolean;
   public userProfile: User;
 
   constructor(
-    private router: Router,
     public utils: Utils,
     private profileService: ProfileService,
   ) {}
-- 
GitLab


From fa53c538fa2c6db4be7b4a59ec8e3d25c36c04a1 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 24 Feb 2025 12:16:28 +0100
Subject: [PATCH 12/87] Update nav

---
 src/app/profile/profile-nav/profile-nav.component.html | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/app/profile/profile-nav/profile-nav.component.html b/src/app/profile/profile-nav/profile-nav.component.html
index 454d8b722..20acff7f2 100644
--- a/src/app/profile/profile-nav/profile-nav.component.html
+++ b/src/app/profile/profile-nav/profile-nav.component.html
@@ -1,5 +1,5 @@
-<nav>
-  <a class="back" [routerLink]="'/profil'">
+<nav *ngIf="!isPublic">
+  <a class="back" [routerLink]="'/profil/tableau-de-bord'">
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'dashboard'" />
     Tableau de bord
   </a>
@@ -7,7 +7,7 @@
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myStructures'" />
     Mes structures
   </a>
-  <a class="back" [routerLink]="'/profil/mon-profil'">
+  <a class="back" [routerLink]="'/profil'">
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myProfile'" />
     Mon profil
   </a>
-- 
GitLab


From 940c955bc21f001f9969c44824e35c6c46ae0c81 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 24 Feb 2025 12:19:46 +0100
Subject: [PATCH 13/87] fix nav height

---
 src/app/profile/profile-nav/profile-nav.component.scss | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/app/profile/profile-nav/profile-nav.component.scss b/src/app/profile/profile-nav/profile-nav.component.scss
index 4c5b43d92..fa79a6831 100644
--- a/src/app/profile/profile-nav/profile-nav.component.scss
+++ b/src/app/profile/profile-nav/profile-nav.component.scss
@@ -9,7 +9,6 @@ nav {
   align-self: stretch;
   align-items: flex-start;
   width: 250px;
-  height: 100vh;
   padding: 32px;
   gap: 16px;
   border-right: 1px solid $grey-7;
-- 
GitLab


From 2e650638571ca7fee5a40b7b3422adcdc19f7da7 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 24 Feb 2025 14:51:30 +0100
Subject: [PATCH 14/87] Update profile module

---
 src/app/profile/profile.module.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/app/profile/profile.module.ts b/src/app/profile/profile.module.ts
index de529ab6b..ed6a4b2ac 100644
--- a/src/app/profile/profile.module.ts
+++ b/src/app/profile/profile.module.ts
@@ -2,8 +2,8 @@ import { CommonModule } from '@angular/common';
 import { NgModule } from '@angular/core';
 import { ResetEmailComponent } from '../reset-email/reset-email.component';
 import { SharedModule } from '../shared/shared.module';
+import { DashboardComponent } from './dashboard/dashboard.component';
 import { EditComponent } from './edit/edit.component';
-import { MyProfileComponent } from './my-profile/my-profile.component';
 import { MyStructuresComponent } from './my-structures/my-structures.component';
 import { PersonalOfferEditionComponent } from './personal-offer-edition/personal-offer-edition.component';
 import { ProfileNavComponent } from './profile-nav/profile-nav.component';
@@ -36,7 +36,7 @@ import { StructuresManagementComponent } from './structures-management/structure
     ProfileNewsletterComponent,
     ResetEmailComponent,
     MyStructuresComponent,
-    MyProfileComponent,
+    DashboardComponent,
   ],
   imports: [CommonModule, ProfileRoutingModule, SharedModule],
 })
-- 
GitLab


From fb6764bce52dc6f5a0137a5010c8fdedb54b72e8 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 24 Feb 2025 14:52:09 +0100
Subject: [PATCH 15/87] Re organize profile page to reflect new mockup

---
 src/app/profile/profile.component.html | 180 +++++++++----------------
 1 file changed, 65 insertions(+), 115 deletions(-)

diff --git a/src/app/profile/profile.component.html b/src/app/profile/profile.component.html
index f2b655fff..2ea8d3da6 100644
--- a/src/app/profile/profile.component.html
+++ b/src/app/profile/profile.component.html
@@ -1,11 +1,13 @@
-<div *ngIf="userProfile" class="content-container full-screen">
-  <div class="goBack">
+<div *ngIf="userProfile" class="content-container" [ngClass]="{ public: isPublic }">
+  <div *ngIf="isPublic" class="goBack">
     <app-go-back (action)="goBack()" />
   </div>
 
-  <section>
+  <app-profile-nav [isPublic]="isPublic" />
+
+  <div class="profileContainer">
     <div class="header">
-      <h1 class="uppercase">Profil</h1>
+      <h1>Profil</h1>
       <app-button
         *ngIf="isPublic && userProfile.withAppointment"
         class="hide-on-mobile rdv"
@@ -35,20 +37,32 @@
         (action)="goToProfileEdit()"
       />
     </div>
-    <div class="profile">
-      <app-svg-icon
-        class="hide-on-mobile"
-        alt=""
-        [folder]="'avatar'"
-        [icon]="userProfile.avatar || 'avatar1'"
-        [iconClass]="'icon-120'"
-      />
-      <div class="information">
-        <div class="block">
-          <div class="name">{{ userProfile.name | userName }} {{ userProfile.surname | uppercase }}</div>
-          <div *ngIf="utils.getJobEmployer(userProfile)" class="job">{{ utils.getJobEmployer(userProfile) }}</div>
+
+    <section>
+      <div class="profile">
+        <div class="block information">
+          <app-svg-icon
+            class="hide-on-mobile"
+            alt=""
+            [folder]="'avatar'"
+            [icon]="userProfile.avatar || 'avatar1'"
+            [iconClass]="'icon-80'"
+          />
+          <div class="user">
+            <div class="name">{{ userProfile.name | userName }} {{ userProfile.surname | uppercase }}</div>
+            <div *ngIf="utils.getJobEmployer(userProfile)" class="job">{{ utils.getJobEmployer(userProfile) }}</div>
+            <app-tag-item
+              *ngIf="userProfile.withAppointment"
+              [label]="'Rendez-vous'"
+              [color]="'blue'"
+              [iconFolder]="'ico'"
+              [iconName]="'calendar'"
+              [size]="'small'"
+              [clickable]="false"
+            />
+          </div>
         </div>
-        <div class="block contact">
+        <div class="block">
           <div class="row">
             <app-svg-icon
               [attr.aria-label]="'Numéro de téléphone'"
@@ -67,111 +81,47 @@
             />
             <a href="mailto:{{ userProfile.email }}">{{ userProfile.email }}</a>
           </div>
-          <div *ngIf="isPublic && userProfile.withAppointment" class="row">
-            <app-svg-icon [iconClass]="'icon-20'" [folder]="'tags'" [icon]="'rdv'" />
-            <div>Rendez-vous</div>
-          </div>
         </div>
-
         <div *ngIf="userProfile.description" class="description">{{ userProfile.description }}</div>
       </div>
-    </div>
-    <app-button
-      *ngIf="!isPublic && !userProfile.description"
-      class="centerButton"
-      [variant]="'secondary'"
-      [label]="'Ajouter une description'"
-      [iconName]="'plus'"
-      [size]="'small'"
-      [wide]="true"
-      (action)="goToProfileEdit('description')"
-    />
-  </section>
-
-  <!-- Private profile with pending structures -->
-  <section *ngIf="!isPublic">
-    <div class="header">
-      <h1 class="uppercase" [ngPlural]="userProfile.structuresLink.length">
-        <ng-template ngPluralCase="1">Structure</ng-template>
-        <ng-template ngPluralCase="other">Structures</ng-template>
-      </h1>
-      <!-- Do NOT pluralize this button, it's weird for the UX otherwise -->
       <app-button
-        *ngIf="userProfile.structuresLink.length > 0"
-        class="hide-on-mobile"
-        [iconName]="'edit'"
-        [variant]="'primaryBlack'"
-        [label]="'Gérer mes structures'"
+        *ngIf="!isPublic && !userProfile.description"
+        class="centerButton"
+        [variant]="'secondary'"
+        [label]="'Ajouter une description'"
+        [iconName]="'plus'"
         [size]="'small'"
         [wide]="true"
-        (action)="goToStructuresManagement()"
-      />
-      <app-icon-button
-        *ngIf="userProfile.structuresLink.length > 0"
-        ariaLabel="Gérer mes structures"
-        class="hide-on-desktop"
-        [variant]="'primaryBlack'"
-        [iconName]="'edit'"
-        (action)="goToStructuresManagement()"
-      />
-    </div>
-    <div
-      *ngIf="userProfile.structuresLink.length > 0 || userProfile.pendingStructuresLink.length > 0"
-      class="structuresContainer"
-    >
-      <app-profile-structure
-        *ngFor="let structure of pendingStructures; let i = index"
-        [structureWithOwners]="structure"
-        [userProfile]="this.userProfile"
-        [isPublic]="this.isPublic"
-        [isPending]="true"
-        [joinRequestDate]="userProfile.pendingStructuresLink[i].createdAt"
-        (cancelJoin)="cancelJoin($event)"
+        (action)="goToProfileEdit('description')"
       />
+    </section>
 
-      <app-profile-structure
-        *ngFor="let structure of structures; let i = index"
-        [structureWithOwners]="structure"
-        [userProfile]="this.userProfile"
-        [isPublic]="this.isPublic"
-      />
-    </div>
-    <app-button
-      class="centerButton"
-      [variant]="'secondary'"
-      [label]="'Ajouter une structure'"
-      [iconName]="'plus'"
-      [size]="'small'"
-      [wide]="true"
-      (action)="goToFormStructure()"
-    />
-  </section>
-
-  <!-- Public profile -->
-  <section *ngIf="isPublic && userProfile.structuresLink.length > 0">
-    <div class="header">
-      <h1 class="uppercase" [ngPlural]="userProfile.structuresLink.length">
-        <ng-template ngPluralCase="1">Structure</ng-template>
-        <ng-template ngPluralCase="other">Structures</ng-template>
-      </h1>
-    </div>
-    <div
-      *ngIf="userProfile.structuresLink.length > 0 || userProfile.pendingStructuresLink.length > 0"
-      class="structuresContainer"
-    >
-      <app-profile-structure
-        *ngFor="let structure of structures; let i = index"
-        [structureWithOwners]="structure"
-        [userProfile]="this.userProfile"
-        [isPublic]="this.isPublic"
-      />
-    </div>
-  </section>
+    <!-- Public profile : structures -->
+    <section *ngIf="isPublic && userProfile.structuresLink.length > 0">
+      <div class="header">
+        <h1 [ngPlural]="userProfile.structuresLink.length">
+          <ng-template ngPluralCase="1">Structure</ng-template>
+          <ng-template ngPluralCase="other">Structures</ng-template>
+        </h1>
+      </div>
+      <div
+        *ngIf="userProfile.structuresLink.length > 0 || userProfile.pendingStructuresLink.length > 0"
+        class="structuresContainer"
+      >
+        <app-profile-structure
+          *ngFor="let structure of structures; let i = index"
+          [structureWithOwners]="structure"
+          [userProfile]="this.userProfile"
+          [isPublic]="this.isPublic"
+        />
+      </div>
+    </section>
 
-  <section *ngIf="!isPublic">
-    <div class="header">
-      <h1 class="uppercase">Newsletter</h1>
-    </div>
-    <app-profile-newsletter [userEmail]="this.userProfile.email" />
-  </section>
+    <section *ngIf="!isPublic" class="newsletter">
+      <div class="header">
+        <h1>Newsletter</h1>
+      </div>
+      <app-profile-newsletter [userEmail]="this.userProfile.email" />
+    </section>
+  </div>
 </div>
-- 
GitLab


From e26b5a66a7c486d8c4bb3a4688de9646db9c3f34 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 24 Feb 2025 14:52:47 +0100
Subject: [PATCH 16/87] Cleanup new profile page to remove what will be moved
 to other pages

---
 src/app/profile/profile.component.ts | 32 +++++-----------------------
 1 file changed, 5 insertions(+), 27 deletions(-)

diff --git a/src/app/profile/profile.component.ts b/src/app/profile/profile.component.ts
index 7e899f0c5..627321dfd 100644
--- a/src/app/profile/profile.component.ts
+++ b/src/app/profile/profile.component.ts
@@ -5,7 +5,6 @@ import { Observable, forkJoin } from 'rxjs';
 import { catchError, map, tap } from 'rxjs/operators';
 import { StructureWithOwners } from '../models/structureWithOwners.model';
 import { User } from '../models/user.model';
-import { NotificationService } from '../services/notification.service';
 import { StructureService } from '../services/structure.service';
 import { Utils } from '../utils/utils';
 import { UserService } from './../services/user.service';
@@ -28,9 +27,8 @@ export class ProfileComponent implements OnInit {
     private userService: UserService,
     private route: ActivatedRoute,
     private router: Router,
-    private location: Location,
     public utils: Utils,
-    private notificationService: NotificationService,
+    public location: Location,
   ) {}
 
   ngOnInit(): void {
@@ -56,8 +54,6 @@ export class ProfileComponent implements OnInit {
         this.isPublic = false;
         this.profileService.getProfile().then((profile) => {
           this.userProfile = new User(profile);
-          this.getStructuresFromProfile();
-          this.getPendingStructuresFromProfile();
         });
       }
     });
@@ -97,13 +93,14 @@ export class ProfileComponent implements OnInit {
     });
   }
 
+  public goToOrientation(): void {
+    this.router.navigate(['/orientation'], { state: { rdvUser: this.userProfile } });
+  }
+
   public goBack(): void {
     this.location.back();
   }
 
-  public goToOrientation(): void {
-    this.router.navigate(['/orientation'], { state: { rdvUser: this.userProfile } });
-  }
   public goToProfileEdit(tabToSelect?: string): void {
     if (tabToSelect) {
       this.router.navigateByUrl('/profil/edition', { state: { data: tabToSelect } });
@@ -111,23 +108,4 @@ export class ProfileComponent implements OnInit {
       this.router.navigateByUrl('/profil/edition');
     }
   }
-  public goToStructuresManagement(): void {
-    this.router.navigateByUrl('/profil/gestion-structures');
-  }
-  public goToFormStructure(): void {
-    this.router.navigateByUrl('/formulaire/structure');
-  }
-  public cancelJoin(idStructure: string): void {
-    this.userService.cancelJoin(idStructure, this.userProfile._id).subscribe({
-      next: () => {
-        const index = this.pendingStructures.map((s) => s.structure._id).indexOf(idStructure);
-        this.pendingStructures.splice(index, 1);
-        this.notificationService.showSuccess('La demande a été annulée avec succès');
-      },
-      error: (err) => {
-        this.notificationService.showError(`${err.error.message}`, 'Une erreur est survenue');
-        console.error(err);
-      },
-    });
-  }
 }
-- 
GitLab


From bd4912cc2d3efedcdd4f04d2b25443fd52679da5 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 24 Feb 2025 14:53:21 +0100
Subject: [PATCH 17/87] new profile page desktop styles

---
 src/app/profile/profile.component.scss | 139 +++++++++++++------------
 1 file changed, 72 insertions(+), 67 deletions(-)

diff --git a/src/app/profile/profile.component.scss b/src/app/profile/profile.component.scss
index ed46eb123..0409c84c0 100644
--- a/src/app/profile/profile.component.scss
+++ b/src/app/profile/profile.component.scss
@@ -4,103 +4,108 @@
 @import 'layout';
 
 .content-container {
-  padding-block: 2rem;
-  box-sizing: border-box;
-  scrollbar-gutter: stable !important;
   display: flex;
-  flex-direction: column;
-  align-items: center;
-  gap: 40px;
-  @media #{$tablet} {
-    padding: 1rem;
+
+  &.public {
+    display: flex;
+    flex-direction: column;
+    max-width: 980px;
+    place-self: center;
+    section {
+      border: 1px solid $grey-6;
+      border-radius: 8px;
+      padding: 32px;
+      max-width: 916px;
+    }
+    .structuresContainer {
+      display: flex;
+      flex-direction: column;
+      gap: 32px;
+      width: 100%;
+    }
   }
 }
+
 .goBack {
   max-width: 980px;
   width: 100%;
 }
 
-section {
-  width: 100%;
-  max-width: 980px;
+.profileContainer {
   display: flex;
-  gap: 2em;
   flex-direction: column;
-  align-items: flex-start;
-  box-sizing: border-box;
-  background: $white;
-  border: 1px solid $grey-6;
-  border-radius: 8px;
-  padding: 2rem;
-  @media #{$tablet} {
-    padding: 1.5rem;
-  }
+  padding: 32px 48px;
+  gap: 32px;
+  width: 100%;
 
   .header {
     display: flex;
-    align-items: center;
     justify-content: space-between;
-    width: 100%;
-  }
-  h1 {
-    @include font-bold-18;
+    align-items: center;
+    align-self: stretch;
+    max-width: 980px;
+    h1 {
+      @include font-bold-24;
+    }
   }
-}
 
-.profile {
-  display: flex;
-  gap: 1rem;
-  width: 100%;
-
-  .information {
-    flex: 1;
+  section {
     display: flex;
+    width: 100%;
+    max-width: 980px;
+    gap: 2em;
     flex-direction: column;
-    gap: 8px;
-    line-height: 120%;
-
-    .block {
-      border-bottom: 1px solid $grey-7;
-      padding-bottom: 12px;
-    }
-    .name {
-      @include font-bold-20;
-      margin-bottom: 8px;
-    }
-    .job {
-      @include font-regular-15;
-      color: $grey-4-5-1;
+    align-items: flex-start;
+    &.newsletter {
+      padding: 32px;
+      border-radius: 8px;
+      border: 1px solid var(--Grey-6, #dedede);
+      max-width: 916px;
     }
+  }
 
-    .contact {
+  .profile {
+    display: flex;
+    flex-direction: column;
+    gap: 24px;
+    width: 100%;
+    .block {
       display: flex;
       flex-direction: column;
+      border-bottom: 1px solid $grey-7;
+      padding-bottom: 24px;
       gap: 8px;
-      @include font-regular-14;
-
       .row {
         display: flex;
         gap: 8px;
         align-items: center;
       }
     }
-    .description {
-      @include font-regular-14;
+
+    .information {
+      display: flex;
+      flex-direction: row;
+      line-height: 120%;
+      gap: 16px;
+      .user {
+        display: flex;
+        flex-direction: column;
+        gap: 8px;
+        .name {
+          @include font-bold-20;
+        }
+        .job {
+          @include font-regular-15;
+          color: $grey-4-5-1;
+        }
+      }
+      .description {
+        @include font-regular-14;
+      }
     }
   }
-}
-
-.addDescription {
-  margin: auto;
-}
 
-.structuresContainer {
-  display: flex;
-  flex-direction: column;
-  gap: 2rem;
-  width: 100%;
-}
-
-.centerButton {
-  margin: auto;
+  .centerButton {
+    margin: auto;
+  }
 }
-- 
GitLab


From 8129cb7cfc6fab8e7a7ef690c40a94342cabf64b Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 24 Feb 2025 15:00:00 +0100
Subject: [PATCH 18/87] Empty dashboard component

---
 src/app/profile/dashboard/dashboard.component.ts | 8 ++++++++
 1 file changed, 8 insertions(+)
 create mode 100644 src/app/profile/dashboard/dashboard.component.ts

diff --git a/src/app/profile/dashboard/dashboard.component.ts b/src/app/profile/dashboard/dashboard.component.ts
new file mode 100644
index 000000000..216f82c0e
--- /dev/null
+++ b/src/app/profile/dashboard/dashboard.component.ts
@@ -0,0 +1,8 @@
+import { Component } from '@angular/core';
+
+@Component({
+  selector: 'app-dashboard',
+  templateUrl: './dashboard.component.html',
+  styleUrls: ['./dashboard.component.scss'],
+})
+export class DashboardComponent {}
-- 
GitLab


From cb4f7c90c0347a27b30977a98756b706fb9bb9f6 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 24 Feb 2025 15:00:18 +0100
Subject: [PATCH 19/87] Basic dashboard layout

---
 src/app/profile/dashboard/dashboard.component.html |  9 +++++++++
 src/app/profile/dashboard/dashboard.component.scss | 10 ++++++++++
 2 files changed, 19 insertions(+)
 create mode 100644 src/app/profile/dashboard/dashboard.component.html
 create mode 100644 src/app/profile/dashboard/dashboard.component.scss

diff --git a/src/app/profile/dashboard/dashboard.component.html b/src/app/profile/dashboard/dashboard.component.html
new file mode 100644
index 000000000..898b889d5
--- /dev/null
+++ b/src/app/profile/dashboard/dashboard.component.html
@@ -0,0 +1,9 @@
+<div class="dashboardContainer">
+  <app-profile-nav />
+
+  <section>
+    <div>
+      <h1>Tableau de bord</h1>
+    </div>
+  </section>
+</div>
diff --git a/src/app/profile/dashboard/dashboard.component.scss b/src/app/profile/dashboard/dashboard.component.scss
new file mode 100644
index 000000000..135199aa0
--- /dev/null
+++ b/src/app/profile/dashboard/dashboard.component.scss
@@ -0,0 +1,10 @@
+@import 'color';
+@import 'typography';
+@import 'breakpoint';
+@import 'layout';
+
+.dashboardContainer {
+  display: flex;
+  flex-direction: row;
+  padding-top: 32px;
+}
-- 
GitLab


From 35aec18ae3bb96e2da952f664658c69dd7d0d717 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 24 Feb 2025 15:10:11 +0100
Subject: [PATCH 20/87] Some more styles

---
 src/app/profile/dashboard/dashboard.component.html | 2 +-
 src/app/profile/dashboard/dashboard.component.scss | 9 +++++++--
 src/app/profile/profile.component.scss             | 2 ++
 3 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/app/profile/dashboard/dashboard.component.html b/src/app/profile/dashboard/dashboard.component.html
index 898b889d5..853f314ea 100644
--- a/src/app/profile/dashboard/dashboard.component.html
+++ b/src/app/profile/dashboard/dashboard.component.html
@@ -1,4 +1,4 @@
-<div class="dashboardContainer">
+<div class="content-container">
   <app-profile-nav />
 
   <section>
diff --git a/src/app/profile/dashboard/dashboard.component.scss b/src/app/profile/dashboard/dashboard.component.scss
index 135199aa0..65317f09b 100644
--- a/src/app/profile/dashboard/dashboard.component.scss
+++ b/src/app/profile/dashboard/dashboard.component.scss
@@ -3,8 +3,13 @@
 @import 'breakpoint';
 @import 'layout';
 
-.dashboardContainer {
+.content-container {
   display: flex;
   flex-direction: row;
-  padding-top: 32px;
+  align-items: flex-start;
+  padding-top: 0;
+
+  h1 {
+    padding: 32px;
+  }
 }
diff --git a/src/app/profile/profile.component.scss b/src/app/profile/profile.component.scss
index 0409c84c0..cdb928c74 100644
--- a/src/app/profile/profile.component.scss
+++ b/src/app/profile/profile.component.scss
@@ -5,6 +5,8 @@
 
 .content-container {
   display: flex;
+  align-items: flex-start;
+  padding-top: 0;
 
   &.public {
     display: flex;
-- 
GitLab


From a83b590c1b9ff4778ce0a510f5475f879a78f0be Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 24 Feb 2025 15:38:24 +0100
Subject: [PATCH 21/87] Profile small improvements

---
 src/app/profile/profile.component.html | 2 +-
 src/app/profile/profile.component.scss | 3 +--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/app/profile/profile.component.html b/src/app/profile/profile.component.html
index 2ea8d3da6..a21d7bd87 100644
--- a/src/app/profile/profile.component.html
+++ b/src/app/profile/profile.component.html
@@ -5,7 +5,7 @@
 
   <app-profile-nav [isPublic]="isPublic" />
 
-  <div class="profileContainer">
+  <div class="profile-container">
     <div class="header">
       <h1>Profil</h1>
       <app-button
diff --git a/src/app/profile/profile.component.scss b/src/app/profile/profile.component.scss
index cdb928c74..6d29f3c4c 100644
--- a/src/app/profile/profile.component.scss
+++ b/src/app/profile/profile.component.scss
@@ -5,7 +5,6 @@
 
 .content-container {
   display: flex;
-  align-items: flex-start;
   padding-top: 0;
 
   &.public {
@@ -33,7 +32,7 @@
   width: 100%;
 }
 
-.profileContainer {
+.profile-container {
   display: flex;
   flex-direction: column;
   padding: 32px 48px;
-- 
GitLab


From 203743f4516fd18a63ede2673de631d017cb2e53 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 24 Feb 2025 15:38:39 +0100
Subject: [PATCH 22/87] Dashboard small improvements

---
 src/app/profile/dashboard/dashboard.component.scss | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/app/profile/dashboard/dashboard.component.scss b/src/app/profile/dashboard/dashboard.component.scss
index 65317f09b..67f91b090 100644
--- a/src/app/profile/dashboard/dashboard.component.scss
+++ b/src/app/profile/dashboard/dashboard.component.scss
@@ -6,7 +6,6 @@
 .content-container {
   display: flex;
   flex-direction: row;
-  align-items: flex-start;
   padding-top: 0;
 
   h1 {
-- 
GitLab


From 45de692684298fbccb2b5956811b8f2d1261b43a Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 09:52:31 +0100
Subject: [PATCH 23/87] make menu sticky + display current page as selected

---
 .../profile/profile-nav/profile-nav.component.html    |  6 +++---
 .../profile/profile-nav/profile-nav.component.scss    | 11 ++++++++++-
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/app/profile/profile-nav/profile-nav.component.html b/src/app/profile/profile-nav/profile-nav.component.html
index 20acff7f2..198c1899e 100644
--- a/src/app/profile/profile-nav/profile-nav.component.html
+++ b/src/app/profile/profile-nav/profile-nav.component.html
@@ -1,13 +1,13 @@
 <nav *ngIf="!isPublic">
-  <a class="back" [routerLink]="'/profil/tableau-de-bord'">
+  <a class="back" routerLinkActive="selected" [routerLink]="'/profil/tableau-de-bord'">
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'dashboard'" />
     Tableau de bord
   </a>
-  <a class="back" [routerLink]="'/profil/mes-structures'">
+  <a class="back" routerLinkActive="selected" [routerLink]="'/profil/mes-structures'">
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myStructures'" />
     Mes structures
   </a>
-  <a class="back" [routerLink]="'/profil'">
+  <a class="back" routerLinkActive="selected" [routerLinkActiveOptions]="{ exact: true }" [routerLink]="'/profil'">
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myProfile'" />
     Mon profil
   </a>
diff --git a/src/app/profile/profile-nav/profile-nav.component.scss b/src/app/profile/profile-nav/profile-nav.component.scss
index fa79a6831..f3ad718da 100644
--- a/src/app/profile/profile-nav/profile-nav.component.scss
+++ b/src/app/profile/profile-nav/profile-nav.component.scss
@@ -4,11 +4,16 @@
 @import 'layout';
 
 nav {
+  position: sticky;
+  top: 0;
+  overflow-y: auto;
   display: flex;
   flex-direction: column;
   align-self: stretch;
   align-items: flex-start;
   width: 250px;
+  height: calc(100vh - #{$header-height} - #{$footer-height});
+  box-sizing: border-box;
   padding: 32px;
   gap: 16px;
   border-right: 1px solid $grey-7;
@@ -21,8 +26,12 @@ nav {
     text-decoration: none;
     height: 32px;
     color: $grey-4-5-1;
-    &.selected,
     &:hover {
+      background: $grey-8;
+      border-radius: 4px;
+      color: $grey-1;
+    }
+    &.selected {
       background: $grey-7;
       border-radius: 4px;
       color: $grey-1;
-- 
GitLab


From 5e61b071bdf6e1d5ca4e95f0ed84fc340237f34d Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 09:53:14 +0100
Subject: [PATCH 24/87] dashboard

---
 src/app/profile/dashboard/dashboard.component.html |  7 +++++--
 src/app/profile/dashboard/dashboard.component.scss | 10 +++++++++-
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/app/profile/dashboard/dashboard.component.html b/src/app/profile/dashboard/dashboard.component.html
index 853f314ea..989063f66 100644
--- a/src/app/profile/dashboard/dashboard.component.html
+++ b/src/app/profile/dashboard/dashboard.component.html
@@ -1,9 +1,12 @@
 <div class="content-container">
   <app-profile-nav />
 
-  <section>
+  <div class="dashboard-container">
     <div>
       <h1>Tableau de bord</h1>
     </div>
-  </section>
+
+    <section>En cours</section>
+    <section>Historique</section>
+  </div>
 </div>
diff --git a/src/app/profile/dashboard/dashboard.component.scss b/src/app/profile/dashboard/dashboard.component.scss
index 67f91b090..626af80c6 100644
--- a/src/app/profile/dashboard/dashboard.component.scss
+++ b/src/app/profile/dashboard/dashboard.component.scss
@@ -6,9 +6,17 @@
 .content-container {
   display: flex;
   flex-direction: row;
-  padding-top: 0;
+  padding: 0;
 
   h1 {
     padding: 32px;
   }
+
+  .dashboard-container {
+    display: flex;
+    flex-direction: column;
+    padding: 32px 48px;
+    gap: 32px;
+    width: 100%;
+  }
 }
-- 
GitLab


From 0394542e13355c69b3a39494d19416a75a6ad694 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 09:53:37 +0100
Subject: [PATCH 25/87] Sructures layout

---
 .../my-structures.component.html              |  64 +++++++++++
 .../my-structures.component.scss              | 108 ++++++++++++++++++
 2 files changed, 172 insertions(+)
 create mode 100644 src/app/profile/my-structures/my-structures.component.html
 create mode 100644 src/app/profile/my-structures/my-structures.component.scss

diff --git a/src/app/profile/my-structures/my-structures.component.html b/src/app/profile/my-structures/my-structures.component.html
new file mode 100644
index 000000000..5af38f059
--- /dev/null
+++ b/src/app/profile/my-structures/my-structures.component.html
@@ -0,0 +1,64 @@
+<div *ngIf="userProfile" class="content-container full-screen">
+  <app-profile-nav />
+
+  <div class="structures-container">
+    <div class="header">
+      <h1 [ngPlural]="userProfile.structuresLink.length">
+        <ng-template ngPluralCase="1">Ma structure</ng-template>
+        <ng-template ngPluralCase="other">Mes structures</ng-template>
+      </h1>
+      <app-button
+        *ngIf="userProfile.structuresLink.length > 0"
+        class="hide-on-mobile"
+        [iconName]="'edit'"
+        [variant]="'primaryBlack'"
+        [label]="'Gérer mes structures'"
+        [size]="'small'"
+        [wide]="true"
+        (action)="goToStructuresManagement()"
+      />
+      <app-icon-button
+        *ngIf="userProfile.structuresLink.length > 0"
+        ariaLabel="Gérer mes structures"
+        class="hide-on-desktop"
+        [variant]="'primaryBlack'"
+        [iconName]="'edit'"
+        (action)="goToStructuresManagement()"
+      />
+    </div>
+
+    <section>
+      <div
+        *ngIf="userProfile.structuresLink.length > 0 || userProfile.pendingStructuresLink.length > 0"
+        class="structuresContainer"
+      >
+        <app-profile-structure
+          *ngFor="let structure of pendingStructures; let i = index"
+          [structureWithOwners]="structure"
+          [userProfile]="this.userProfile"
+          [isPublic]="false"
+          [isPending]="true"
+          [isExpanded]="false"
+          [joinRequestDate]="userProfile.pendingStructuresLink[i].createdAt"
+          (cancelJoin)="cancelJoin($event)"
+        />
+        <app-profile-structure
+          *ngFor="let structure of structures; let i = index"
+          [structureWithOwners]="structure"
+          [userProfile]="this.userProfile"
+          [isPublic]="false"
+          [isExpanded]="i === 0"
+        />
+      </div>
+      <app-button
+        class="centerButton"
+        [variant]="'secondary'"
+        [label]="'Ajouter une structure'"
+        [iconName]="'plus'"
+        [size]="'small'"
+        [wide]="true"
+        (action)="goToFormStructure()"
+      />
+    </section>
+  </div>
+</div>
diff --git a/src/app/profile/my-structures/my-structures.component.scss b/src/app/profile/my-structures/my-structures.component.scss
new file mode 100644
index 000000000..d3193cc1a
--- /dev/null
+++ b/src/app/profile/my-structures/my-structures.component.scss
@@ -0,0 +1,108 @@
+@import 'color';
+@import 'typography';
+@import 'breakpoint';
+@import 'layout';
+
+.content-container {
+  scrollbar-gutter: stable !important;
+  display: flex;
+  flex-direction: row;
+  padding: 0;
+
+  .structures-container {
+    display: flex;
+    flex-direction: column;
+    padding: 32px 48px;
+    gap: 32px;
+    width: 100%;
+
+    .header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      align-self: stretch;
+      max-width: 980px;
+
+      h1 {
+        @include font-bold-24;
+      }
+    }
+  }
+
+  section {
+    width: 100%;
+    max-width: 980px;
+    display: flex;
+    gap: 2em;
+    flex-direction: column;
+    align-items: flex-start;
+
+    .header {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      width: 100%;
+    }
+    h1 {
+      @include font-bold-18;
+    }
+  }
+
+  .profile {
+    display: flex;
+    gap: 1rem;
+    width: 100%;
+
+    .information {
+      flex: 1;
+      display: flex;
+      flex-direction: column;
+      gap: 8px;
+      line-height: 120%;
+
+      .block {
+        border-bottom: 1px solid $grey-7;
+        padding-bottom: 12px;
+      }
+      .name {
+        @include font-bold-20;
+        margin-bottom: 8px;
+      }
+      .job {
+        @include font-regular-15;
+        color: $grey-4-5-1;
+      }
+
+      .contact {
+        display: flex;
+        flex-direction: column;
+        gap: 8px;
+        @include font-regular-14;
+
+        .row {
+          display: flex;
+          gap: 8px;
+          align-items: center;
+        }
+      }
+      .description {
+        @include font-regular-14;
+      }
+    }
+  }
+
+  .addDescription {
+    margin: auto;
+  }
+
+  .structuresContainer {
+    display: flex;
+    flex-direction: column;
+    gap: 2rem;
+    width: 100%;
+  }
+
+  .centerButton {
+    margin: auto;
+  }
+}
-- 
GitLab


From d4dbfcfb80d10b048d5958b1065965132cbb51b6 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 09:53:52 +0100
Subject: [PATCH 26/87] structures

---
 .../my-structures/my-structures.component.ts  | 96 +++++++++++++++++++
 1 file changed, 96 insertions(+)
 create mode 100644 src/app/profile/my-structures/my-structures.component.ts

diff --git a/src/app/profile/my-structures/my-structures.component.ts b/src/app/profile/my-structures/my-structures.component.ts
new file mode 100644
index 000000000..c4240e1ca
--- /dev/null
+++ b/src/app/profile/my-structures/my-structures.component.ts
@@ -0,0 +1,96 @@
+import { Component, OnInit } from '@angular/core';
+import { Router } from '@angular/router';
+import { Observable, forkJoin } from 'rxjs';
+import { tap } from 'rxjs/operators';
+import { StructureWithOwners } from '../../models/structureWithOwners.model';
+import { User } from '../../models/user.model';
+import { NotificationService } from '../../services/notification.service';
+import { StructureService } from '../../services/structure.service';
+import { Utils } from '../../utils/utils';
+import { ProfileService } from '../services/profile.service';
+import { UserService } from './../../services/user.service';
+
+@Component({
+  selector: 'app-my-structures',
+  templateUrl: './my-structures.component.html',
+  styleUrls: ['./my-structures.component.scss'],
+})
+export class MyStructuresComponent implements OnInit {
+  public userProfile: User;
+  public structures: StructureWithOwners[] = [];
+  public pendingStructures: StructureWithOwners[] = [];
+
+  constructor(
+    private profileService: ProfileService,
+    private structureService: StructureService,
+    private userService: UserService,
+    private router: Router,
+    public utils: Utils,
+    private notificationService: NotificationService,
+  ) {}
+
+  ngOnInit(): void {
+    this.profileService.getProfile().then((profile) => {
+      this.userProfile = new User(profile);
+      this.getStructuresFromProfile();
+      this.getPendingStructuresFromProfile();
+    });
+  }
+
+  private getStructuresFromProfile(): void {
+    const structures$: Observable<any>[] = [];
+    this.structures = [];
+
+    this.userProfile.structuresLink.forEach((structureId) => {
+      structures$.push(
+        this.structureService.getStructureWithOwners(structureId).pipe(
+          tap((structure) => {
+            this.structures.push(structure);
+          }),
+        ),
+      );
+    });
+    forkJoin(structures$).subscribe(() => {
+      this.structures.sort((a, b) => a.structure.structureName.localeCompare(b.structure.structureName));
+    });
+  }
+
+  private getPendingStructuresFromProfile(): void {
+    const structures$: Observable<any>[] = [];
+    this.structures = [];
+    this.userProfile.pendingStructuresLink.forEach((pending) => {
+      structures$.push(
+        this.structureService.getStructureWithOwners(pending.id).pipe(
+          tap((structure) => {
+            this.pendingStructures.push(structure);
+          }),
+        ),
+      );
+    });
+    forkJoin(structures$).subscribe(() => {
+      this.pendingStructures.sort((a, b) => a.structure.structureName.localeCompare(b.structure.structureName));
+    });
+  }
+
+  public goToStructuresManagement(): void {
+    this.router.navigateByUrl('/profil/gestion-structures');
+  }
+
+  public goToFormStructure(): void {
+    this.router.navigateByUrl('/formulaire/structure');
+  }
+
+  public cancelJoin(idStructure: string): void {
+    this.userService.cancelJoin(idStructure, this.userProfile._id).subscribe({
+      next: () => {
+        const index = this.pendingStructures.map((s) => s.structure._id).indexOf(idStructure);
+        this.pendingStructures.splice(index, 1);
+        this.notificationService.showSuccess('La demande a été annulée avec succès');
+      },
+      error: (err) => {
+        this.notificationService.showError(`${err.error.message}`, 'Une erreur est survenue');
+        console.error(err);
+      },
+    });
+  }
+}
-- 
GitLab


From abb36270d70c55c0b26051e3be70546d79b5f318 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 09:54:28 +0100
Subject: [PATCH 27/87] profile structure minor changes

---
 .../profile-structure/profile-structure.component.html      | 6 +++---
 .../profile-structure/profile-structure.component.scss      | 2 +-
 .../profile-structure/profile-structure.component.ts        | 1 +
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/app/profile/profile-structure/profile-structure.component.html b/src/app/profile/profile-structure/profile-structure.component.html
index 492406907..f00e7538a 100644
--- a/src/app/profile/profile-structure/profile-structure.component.html
+++ b/src/app/profile/profile-structure/profile-structure.component.html
@@ -4,7 +4,7 @@
   [size]="'medium'"
   [boxShadow]="true"
   [warningBorder]="!isValid && !isPublic"
-  [expanded]="true"
+  [expanded]="isExpanded"
 >
   <app-collapse-header>
     <div class="collapseHeader">
@@ -41,7 +41,7 @@
   <app-collapse-content>
     <div class="section">
       <div class="sectionHeader">
-        <p class="sectionTitle uppercase">informations</p>
+        <p class="sectionTitle">Informations</p>
         <div class="sectionButtons">
           <app-button
             class="hide-on-mobile"
@@ -117,7 +117,7 @@
     </div>
     <div class="section">
       <div class="sectionHeader">
-        <p class="sectionTitle uppercase">Accompagnant·es numériques</p>
+        <p class="sectionTitle">Accompagnant·es numériques</p>
         <app-button
           *ngIf="!isPublic && !isPending"
           class="hide-on-mobile"
diff --git a/src/app/profile/profile-structure/profile-structure.component.scss b/src/app/profile/profile-structure/profile-structure.component.scss
index fddf6a306..d35904f7a 100644
--- a/src/app/profile/profile-structure/profile-structure.component.scss
+++ b/src/app/profile/profile-structure/profile-structure.component.scss
@@ -65,7 +65,7 @@
     }
     .sectionButtons {
       display: flex;
-      gap: 12px;
+      gap: 24px;
     }
   }
 
diff --git a/src/app/profile/profile-structure/profile-structure.component.ts b/src/app/profile/profile-structure/profile-structure.component.ts
index 52e6084e9..e81841c9c 100644
--- a/src/app/profile/profile-structure/profile-structure.component.ts
+++ b/src/app/profile/profile-structure/profile-structure.component.ts
@@ -21,6 +21,7 @@ export class ProfileStructureComponent implements OnInit {
   @Input() public structureWithOwners: StructureWithOwners;
   @Input() public userProfile: User;
   @Input() public isPublic: boolean;
+  @Input() public isExpanded: boolean;
   @Input() public isPending = false;
   @Input() public joinRequestDate: string | null;
   @Output() cancelJoin = new EventEmitter<string>();
-- 
GitLab


From 0a87e4c8f040900a6faccc444cc5de07cb76ff2c Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 09:54:58 +0100
Subject: [PATCH 28/87] Add edit button to peronnal offer block

---
 .../personal-offer-edition.component.ts       |  6 +++--
 .../personal-offer.component.html             | 22 ++++++++++++++++---
 2 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/src/app/profile/personal-offer-edition/personal-offer-edition.component.ts b/src/app/profile/personal-offer-edition/personal-offer-edition.component.ts
index 2733f5c26..2df13b958 100644
--- a/src/app/profile/personal-offer-edition/personal-offer-edition.component.ts
+++ b/src/app/profile/personal-offer-edition/personal-offer-edition.component.ts
@@ -1,3 +1,4 @@
+import { Location } from '@angular/common';
 import { Component, OnInit } from '@angular/core';
 import { UntypedFormControl, UntypedFormGroup } from '@angular/forms';
 import { ActivatedRoute, Data, Router } from '@angular/router';
@@ -38,6 +39,7 @@ export class PersonalOfferEditionComponent implements OnInit {
     private searchService: SearchService,
     private personalOfferService: PersonalOfferService,
     private notificationService: NotificationService,
+    private location: Location,
   ) {}
 
   ngOnInit(): void {
@@ -123,7 +125,7 @@ export class PersonalOfferEditionComponent implements OnInit {
           this.initialPersonalOffer = this.personalOfferForm.value;
           this.personalOfferForm.markAsPristine();
         });
-      this.router.navigate(['profil', 'edition-structure', this.structure.permalink]);
+      this.location.back();
     }
   }
 
@@ -153,7 +155,7 @@ export class PersonalOfferEditionComponent implements OnInit {
         this.notificationService.showError(`${err.error.message}`, 'Une erreur est survenue');
       },
     );
-    this.router.navigate(['profil', 'edition-structure', this.structure.permalink]);
+    this.location.back();
   }
 
   public goBack(): void {
diff --git a/src/app/profile/profile-structure/personal-offer/personal-offer.component.html b/src/app/profile/profile-structure/personal-offer/personal-offer.component.html
index a60cbdbd1..d93411689 100644
--- a/src/app/profile/profile-structure/personal-offer/personal-offer.component.html
+++ b/src/app/profile/profile-structure/personal-offer/personal-offer.component.html
@@ -1,9 +1,25 @@
 <div *ngIf="this.personalOffer.categoriesDisplay" class="container">
   <div class="header">
-    <h2 class="uppercase">Mon offre d'accompagnements</h2>
+    <h2>Mon offre de service</h2>
+    <app-button
+      class="hide-on-mobile"
+      [iconName]="'edit'"
+      [variant]="'primaryBlack'"
+      [label]="'Modifier mon offre de services'"
+      [size]="'small'"
+      [wide]="true"
+      (action)="goToOfferEdition(this.personalOffer)"
+    />
+    <app-icon-button
+      ariaLabel="Modifier mon offre de services"
+      class="hide-on-desktop"
+      [variant]="'primaryBlack'"
+      [iconName]="'edit'"
+      (action)="goToOfferEdition(this.personalOffer)"
+    />
   </div>
   <div class="content">
-    <app-collapse *ngIf="this.personalOffer.categoriesDisplay.onlineProcedures.length" [expanded]="true">
+    <app-collapse *ngIf="this.personalOffer.categoriesDisplay.onlineProcedures.length" [expanded]="false">
       <app-collapse-header>
         <div class="collapseHeader">
           <h3>Démarches en ligne</h3>
@@ -18,7 +34,7 @@
       </app-collapse-content>
     </app-collapse>
 
-    <app-collapse *ngIf="this.personalOffer.categoriesDisplay.baseSkills.length" [expanded]="true">
+    <app-collapse *ngIf="this.personalOffer.categoriesDisplay.baseSkills.length" [expanded]="false">
       <app-collapse-header>
         <div class="collapseHeader">
           <h3>Compétences numériques de base</h3>
-- 
GitLab


From 76920fa89bc899f29b504d7e27fe80a1db8738a2 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 09:55:07 +0100
Subject: [PATCH 29/87] Add edit button to peronnal offer block

---
 .../personal-offer/personal-offer.component.ts             | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/app/profile/profile-structure/personal-offer/personal-offer.component.ts b/src/app/profile/profile-structure/personal-offer/personal-offer.component.ts
index 9c6a10a7a..9979102db 100644
--- a/src/app/profile/profile-structure/personal-offer/personal-offer.component.ts
+++ b/src/app/profile/profile-structure/personal-offer/personal-offer.component.ts
@@ -1,4 +1,5 @@
 import { Component, Input } from '@angular/core';
+import { Router } from '@angular/router';
 import { PersonalOffer } from './../../../models/personalOffer.model';
 
 @Component({
@@ -7,7 +8,13 @@ import { PersonalOffer } from './../../../models/personalOffer.model';
   styleUrls: ['./personal-offer.component.scss'],
 })
 export class PersonalOfferComponent {
+  constructor(private router: Router) {}
+
   @Input() public personalOffer: PersonalOffer;
   @Input() public isPublic: boolean;
   @Input() public structureName?: string;
+
+  public goToOfferEdition(offer): void {
+    this.router.navigate([`/profil/edition-offre-personnelle/${offer._id}`]);
+  }
 }
-- 
GitLab


From ba190f4f2715c0af5aa57cfbd63c757ca7acf300 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 10:49:37 +0100
Subject: [PATCH 30/87] Profil : responsive styles

---
 src/app/profile/profile.component.html |  8 +++++++
 src/app/profile/profile.component.scss | 32 ++++++++++++++++++--------
 2 files changed, 31 insertions(+), 9 deletions(-)

diff --git a/src/app/profile/profile.component.html b/src/app/profile/profile.component.html
index a21d7bd87..c4ea4690b 100644
--- a/src/app/profile/profile.component.html
+++ b/src/app/profile/profile.component.html
@@ -48,6 +48,13 @@
             [icon]="userProfile.avatar || 'avatar1'"
             [iconClass]="'icon-80'"
           />
+          <app-svg-icon
+            class="hide-on-desktop mobile-icon"
+            alt=""
+            [folder]="'avatar'"
+            [icon]="userProfile.avatar || 'avatar1'"
+            [iconClass]="'icon-40'"
+          />
           <div class="user">
             <div class="name">{{ userProfile.name | userName }} {{ userProfile.surname | uppercase }}</div>
             <div *ngIf="utils.getJobEmployer(userProfile)" class="job">{{ utils.getJobEmployer(userProfile) }}</div>
@@ -113,6 +120,7 @@
           [structureWithOwners]="structure"
           [userProfile]="this.userProfile"
           [isPublic]="this.isPublic"
+          [isExpanded]="true"
         />
       </div>
     </section>
diff --git a/src/app/profile/profile.component.scss b/src/app/profile/profile.component.scss
index 6d29f3c4c..934686ea1 100644
--- a/src/app/profile/profile.component.scss
+++ b/src/app/profile/profile.component.scss
@@ -5,7 +5,7 @@
 
 .content-container {
   display: flex;
-  padding-top: 0;
+  padding: 0;
 
   &.public {
     display: flex;
@@ -13,16 +13,18 @@
     max-width: 980px;
     place-self: center;
     section {
+      box-sizing: border-box;
       border: 1px solid $grey-6;
       border-radius: 8px;
       padding: 32px;
-      max-width: 916px;
+      width: 916px;
+      max-width: 100%;
     }
     .structuresContainer {
       display: flex;
       flex-direction: column;
       gap: 32px;
-      width: 100%;
+      max-width: 100%;
     }
   }
 }
@@ -35,16 +37,19 @@
 .profile-container {
   display: flex;
   flex-direction: column;
+  box-sizing: border-box;
   padding: 32px 48px;
   gap: 32px;
-  width: 100%;
+  max-width: 100%;
 
   .header {
     display: flex;
     justify-content: space-between;
+    box-sizing: border-box;
     align-items: center;
     align-self: stretch;
-    max-width: 980px;
+    width: 980px;
+    max-width: 100%;
     h1 {
       @include font-bold-24;
     }
@@ -52,16 +57,18 @@
 
   section {
     display: flex;
-    width: 100%;
-    max-width: 980px;
+    box-sizing: border-box;
+    width: 980px;
+    max-width: 100%;
     gap: 2em;
     flex-direction: column;
     align-items: flex-start;
     &.newsletter {
       padding: 32px;
       border-radius: 8px;
-      border: 1px solid var(--Grey-6, #dedede);
-      max-width: 916px;
+      border: 1px solid $grey-6;
+      width: 916px;
+      max-width: 100%;
     }
   }
 
@@ -81,6 +88,13 @@
         gap: 8px;
         align-items: center;
       }
+      .mobile-icon {
+        align-self: start;
+        display: none;
+        @media #{$tablet} {
+          display: block;
+        }
+      }
     }
 
     .information {
-- 
GitLab


From c823151523116233e2d215c8f4cfce4d5b06028b Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 10:56:43 +0100
Subject: [PATCH 31/87] member card on mobile

---
 .../shared/components/member-card/member-card.component.html    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/app/shared/components/member-card/member-card.component.html b/src/app/shared/components/member-card/member-card.component.html
index 60276953d..d302f7c16 100644
--- a/src/app/shared/components/member-card/member-card.component.html
+++ b/src/app/shared/components/member-card/member-card.component.html
@@ -16,7 +16,7 @@
       <span aria-label="Prise de rendez-vous possible">Rendez-vous</span>
     </div>
   </div>
-  <div *ngIf="showContactInfo" class="infoDetails">
+  <div *ngIf="showContactInfo" class="infoDetails hide-on-mobile">
     <p *ngIf="getPhone()">{{ getPhone() }}</p>
     <p *ngIf="getEmail()" class="mail">{{ getEmail() }}</p>
   </div>
-- 
GitLab


From 681446b8339b4422231ed6f6fc9417cbe7f54cf9 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 10:57:12 +0100
Subject: [PATCH 32/87] personnalOffer on mobile

---
 .../personal-offer/personal-offer.component.html                | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/app/profile/profile-structure/personal-offer/personal-offer.component.html b/src/app/profile/profile-structure/personal-offer/personal-offer.component.html
index d93411689..e82591b33 100644
--- a/src/app/profile/profile-structure/personal-offer/personal-offer.component.html
+++ b/src/app/profile/profile-structure/personal-offer/personal-offer.component.html
@@ -13,7 +13,7 @@
     <app-icon-button
       ariaLabel="Modifier mon offre de services"
       class="hide-on-desktop"
-      [variant]="'primaryBlack'"
+      [variant]="'secondary'"
       [iconName]="'edit'"
       (action)="goToOfferEdition(this.personalOffer)"
     />
-- 
GitLab


From 3c7c6fadcb30b5330dd14267bb3024efe7263d8b Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 10:57:34 +0100
Subject: [PATCH 33/87] profile structure on moble

---
 .../profile/profile-structure/profile-structure.component.html  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/app/profile/profile-structure/profile-structure.component.html b/src/app/profile/profile-structure/profile-structure.component.html
index f00e7538a..63beff5eb 100644
--- a/src/app/profile/profile-structure/profile-structure.component.html
+++ b/src/app/profile/profile-structure/profile-structure.component.html
@@ -72,7 +72,7 @@
             *ngIf="!isPublic && !isPending"
             ariaLabel="Modifier la structure"
             class="hide-on-desktop"
-            [variant]="isValid ? 'primaryBlack' : 'primaryWarning'"
+            [variant]="isValid ? 'secondary' : 'primaryWarning'"
             [iconName]="'edit'"
             (action)="goToEditStructure()"
           />
-- 
GitLab


From 74aa177f19481a05d8b6d63efa03331c97ab3429 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 10:57:58 +0100
Subject: [PATCH 34/87] My structures page on mobile

---
 src/app/profile/my-structures/my-structures.component.scss | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/app/profile/my-structures/my-structures.component.scss b/src/app/profile/my-structures/my-structures.component.scss
index d3193cc1a..e8ece7cf2 100644
--- a/src/app/profile/my-structures/my-structures.component.scss
+++ b/src/app/profile/my-structures/my-structures.component.scss
@@ -12,9 +12,10 @@
   .structures-container {
     display: flex;
     flex-direction: column;
+    box-sizing: border-box;
     padding: 32px 48px;
     gap: 32px;
-    width: 100%;
+    max-width: 100%;
 
     .header {
       display: flex;
-- 
GitLab


From d33cac65771e114daa82ab1bf059a86224de2765 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 11:02:40 +0100
Subject: [PATCH 35/87] structures width

---
 src/app/profile/my-structures/my-structures.component.scss | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/app/profile/my-structures/my-structures.component.scss b/src/app/profile/my-structures/my-structures.component.scss
index e8ece7cf2..d394238f3 100644
--- a/src/app/profile/my-structures/my-structures.component.scss
+++ b/src/app/profile/my-structures/my-structures.component.scss
@@ -15,6 +15,7 @@
     box-sizing: border-box;
     padding: 32px 48px;
     gap: 32px;
+    width: 980px;
     max-width: 100%;
 
     .header {
-- 
GitLab


From ea60658a216113bff41b813dfba2ecadb31a4954 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 11:03:15 +0100
Subject: [PATCH 36/87] Pluralize nav item

---
 src/app/profile/dashboard/dashboard.component.scss   |  2 +-
 .../profile/profile-nav/profile-nav.component.html   | 12 +++++++++---
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/app/profile/dashboard/dashboard.component.scss b/src/app/profile/dashboard/dashboard.component.scss
index 626af80c6..618b2bfee 100644
--- a/src/app/profile/dashboard/dashboard.component.scss
+++ b/src/app/profile/dashboard/dashboard.component.scss
@@ -17,6 +17,6 @@
     flex-direction: column;
     padding: 32px 48px;
     gap: 32px;
-    width: 100%;
+    max-width: 100%;
   }
 }
diff --git a/src/app/profile/profile-nav/profile-nav.component.html b/src/app/profile/profile-nav/profile-nav.component.html
index 198c1899e..938126ae8 100644
--- a/src/app/profile/profile-nav/profile-nav.component.html
+++ b/src/app/profile/profile-nav/profile-nav.component.html
@@ -1,11 +1,17 @@
-<nav *ngIf="!isPublic">
+<nav *ngIf="!isPublic" class="hide-on-mobile">
   <a class="back" routerLinkActive="selected" [routerLink]="'/profil/tableau-de-bord'">
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'dashboard'" />
     Tableau de bord
   </a>
-  <a class="back" routerLinkActive="selected" [routerLink]="'/profil/mes-structures'">
+  <a
+    class="back"
+    routerLinkActive="selected"
+    [routerLink]="'/profil/mes-structures'"
+    [ngPlural]="userProfile.structuresLink.length"
+  >
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myStructures'" />
-    Mes structures
+    <ng-template ngPluralCase="1">Ma structure</ng-template>
+    <ng-template ngPluralCase="other">Mes structures</ng-template>
   </a>
   <a class="back" routerLinkActive="selected" [routerLinkActiveOptions]="{ exact: true }" [routerLink]="'/profil'">
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myProfile'" />
-- 
GitLab


From 4bb71c584ebad3b81b5fb931ed8ca6abb1b4c193 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 11:17:08 +0100
Subject: [PATCH 37/87] Remove back class

---
 .../profile/profile-nav/profile-nav.component.html    | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/src/app/profile/profile-nav/profile-nav.component.html b/src/app/profile/profile-nav/profile-nav.component.html
index 938126ae8..e932ef884 100644
--- a/src/app/profile/profile-nav/profile-nav.component.html
+++ b/src/app/profile/profile-nav/profile-nav.component.html
@@ -1,19 +1,14 @@
 <nav *ngIf="!isPublic" class="hide-on-mobile">
-  <a class="back" routerLinkActive="selected" [routerLink]="'/profil/tableau-de-bord'">
+  <a routerLinkActive="selected" [routerLink]="'/profil/tableau-de-bord'">
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'dashboard'" />
     Tableau de bord
   </a>
-  <a
-    class="back"
-    routerLinkActive="selected"
-    [routerLink]="'/profil/mes-structures'"
-    [ngPlural]="userProfile.structuresLink.length"
-  >
+  <a routerLinkActive="selected" [routerLink]="'/profil/mes-structures'" [ngPlural]="userProfile.structuresLink.length">
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myStructures'" />
     <ng-template ngPluralCase="1">Ma structure</ng-template>
     <ng-template ngPluralCase="other">Mes structures</ng-template>
   </a>
-  <a class="back" routerLinkActive="selected" [routerLinkActiveOptions]="{ exact: true }" [routerLink]="'/profil'">
+  <a routerLinkActive="selected" [routerLinkActiveOptions]="{ exact: true }" [routerLink]="'/profil'">
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myProfile'" />
     Mon profil
   </a>
-- 
GitLab


From 21b8b6cfc05c92882adb05bbedbbf15c8586fd3f Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 11:17:28 +0100
Subject: [PATCH 38/87] No structures cas

---
 src/app/profile/my-structures/my-structures.component.html | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/app/profile/my-structures/my-structures.component.html b/src/app/profile/my-structures/my-structures.component.html
index 5af38f059..bad234591 100644
--- a/src/app/profile/my-structures/my-structures.component.html
+++ b/src/app/profile/my-structures/my-structures.component.html
@@ -50,6 +50,9 @@
           [isExpanded]="i === 0"
         />
       </div>
+      <div *ngIf="userProfile.pendingStructuresLink.length <= 0" class="structuresContainer">
+        Vous n'avez pas encore de structure(s).
+      </div>
       <app-button
         class="centerButton"
         [variant]="'secondary'"
-- 
GitLab


From 580f983eb9684821c0bde12a9cf6b6d1e63ba862 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 14:25:56 +0100
Subject: [PATCH 39/87] More responsive styles

---
 .../dashboard/dashboard.component.scss        |  3 +-
 src/app/profile/profile.component.scss        | 57 ++++++++++++++-----
 2 files changed, 45 insertions(+), 15 deletions(-)

diff --git a/src/app/profile/dashboard/dashboard.component.scss b/src/app/profile/dashboard/dashboard.component.scss
index 618b2bfee..8398e839c 100644
--- a/src/app/profile/dashboard/dashboard.component.scss
+++ b/src/app/profile/dashboard/dashboard.component.scss
@@ -7,9 +7,8 @@
   display: flex;
   flex-direction: row;
   padding: 0;
-
   h1 {
-    padding: 32px;
+    @include font-bold-24;
   }
 
   .dashboard-container {
diff --git a/src/app/profile/profile.component.scss b/src/app/profile/profile.component.scss
index 934686ea1..bbff76e4a 100644
--- a/src/app/profile/profile.component.scss
+++ b/src/app/profile/profile.component.scss
@@ -3,28 +3,36 @@
 @import 'breakpoint';
 @import 'layout';
 
+@import 'color';
+@import 'typography';
+@import 'breakpoint';
+@import 'layout';
+
 .content-container {
   display: flex;
   padding: 0;
+  width: 100%;
 
   &.public {
     display: flex;
     flex-direction: column;
     max-width: 980px;
-    place-self: center;
+    margin: 0 auto;
+
     section {
       box-sizing: border-box;
       border: 1px solid $grey-6;
       border-radius: 8px;
       padding: 32px;
-      width: 916px;
-      max-width: 100%;
+      width: 100%;
+      max-width: 916px;
     }
+
     .structuresContainer {
       display: flex;
       flex-direction: column;
       gap: 32px;
-      max-width: 100%;
+      width: 100%;
     }
   }
 }
@@ -40,16 +48,21 @@
   box-sizing: border-box;
   padding: 32px 48px;
   gap: 32px;
-  max-width: 100%;
+  width: 100%;
+  max-width: 980px;
+  @media #{$tablet} {
+    padding: 24px;
+  }
+  @media #{$phone} {
+    padding: 20px;
+  }
 
   .header {
     display: flex;
     justify-content: space-between;
-    box-sizing: border-box;
     align-items: center;
-    align-self: stretch;
-    width: 980px;
-    max-width: 100%;
+    width: 100%;
+
     h1 {
       @include font-bold-24;
     }
@@ -58,17 +71,22 @@
   section {
     display: flex;
     box-sizing: border-box;
-    width: 980px;
-    max-width: 100%;
+    width: 100%;
     gap: 2em;
     flex-direction: column;
     align-items: flex-start;
+
     &.newsletter {
       padding: 32px;
       border-radius: 8px;
       border: 1px solid $grey-6;
-      width: 916px;
-      max-width: 100%;
+      max-width: 916px;
+      @media #{$phone} {
+        padding: 32px 0 0;
+        border: none;
+        border-radius: 0;
+        border-top: 1px solid $grey-6;
+      }
     }
   }
 
@@ -77,17 +95,21 @@
     flex-direction: column;
     gap: 24px;
     width: 100%;
+
     .block {
       display: flex;
       flex-direction: column;
       border-bottom: 1px solid $grey-7;
       padding-bottom: 24px;
       gap: 8px;
+
       .row {
         display: flex;
         gap: 8px;
         align-items: center;
+        flex-wrap: wrap;
       }
+
       .mobile-icon {
         align-self: start;
         display: none;
@@ -102,18 +124,27 @@
       flex-direction: row;
       line-height: 120%;
       gap: 16px;
+      flex-wrap: wrap;
+
+      @media #{$phone} {
+        flex-direction: column;
+      }
+
       .user {
         display: flex;
         flex-direction: column;
         gap: 8px;
+
         .name {
           @include font-bold-20;
         }
+
         .job {
           @include font-regular-15;
           color: $grey-4-5-1;
         }
       }
+
       .description {
         @include font-regular-14;
       }
-- 
GitLab


From ea557c4342693b4e4a88bc09ec43abaa89814ede Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 14:36:23 +0100
Subject: [PATCH 40/87] cleanup

---
 .../my-structures.component.scss              |  59 ++----
 src/app/profile/profile.component.scss        | 170 +++++++++---------
 2 files changed, 95 insertions(+), 134 deletions(-)

diff --git a/src/app/profile/my-structures/my-structures.component.scss b/src/app/profile/my-structures/my-structures.component.scss
index d394238f3..a280ce842 100644
--- a/src/app/profile/my-structures/my-structures.component.scss
+++ b/src/app/profile/my-structures/my-structures.component.scss
@@ -8,6 +8,7 @@
   display: flex;
   flex-direction: row;
   padding: 0;
+  width: 100%;
 
   .structures-container {
     display: flex;
@@ -15,15 +16,22 @@
     box-sizing: border-box;
     padding: 32px 48px;
     gap: 32px;
-    width: 980px;
-    max-width: 100%;
+    width: 100%;
+    max-width: 980px;
+    @media #{$tablet} {
+      padding: 24px;
+    }
+    @media #{$phone} {
+      padding: 20px;
+    }
 
     .header {
       display: flex;
       justify-content: space-between;
       align-items: center;
-      align-self: stretch;
-      max-width: 980px;
+      width: 100%;
+      flex-wrap: wrap;
+      gap: 16px;
 
       h1 {
         @include font-bold-24;
@@ -50,49 +58,6 @@
     }
   }
 
-  .profile {
-    display: flex;
-    gap: 1rem;
-    width: 100%;
-
-    .information {
-      flex: 1;
-      display: flex;
-      flex-direction: column;
-      gap: 8px;
-      line-height: 120%;
-
-      .block {
-        border-bottom: 1px solid $grey-7;
-        padding-bottom: 12px;
-      }
-      .name {
-        @include font-bold-20;
-        margin-bottom: 8px;
-      }
-      .job {
-        @include font-regular-15;
-        color: $grey-4-5-1;
-      }
-
-      .contact {
-        display: flex;
-        flex-direction: column;
-        gap: 8px;
-        @include font-regular-14;
-
-        .row {
-          display: flex;
-          gap: 8px;
-          align-items: center;
-        }
-      }
-      .description {
-        @include font-regular-14;
-      }
-    }
-  }
-
   .addDescription {
     margin: auto;
   }
diff --git a/src/app/profile/profile.component.scss b/src/app/profile/profile.component.scss
index bbff76e4a..694378c13 100644
--- a/src/app/profile/profile.component.scss
+++ b/src/app/profile/profile.component.scss
@@ -35,123 +35,119 @@
       width: 100%;
     }
   }
-}
-
-.goBack {
-  max-width: 980px;
-  width: 100%;
-}
 
-.profile-container {
-  display: flex;
-  flex-direction: column;
-  box-sizing: border-box;
-  padding: 32px 48px;
-  gap: 32px;
-  width: 100%;
-  max-width: 980px;
-  @media #{$tablet} {
-    padding: 24px;
-  }
-  @media #{$phone} {
-    padding: 20px;
-  }
-
-  .header {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
+  .goBack {
+    max-width: 980px;
     width: 100%;
-
-    h1 {
-      @include font-bold-24;
-    }
   }
 
-  section {
+  .profile-container {
     display: flex;
+    flex-direction: column;
     box-sizing: border-box;
+    padding: 32px 48px;
+    gap: 32px;
     width: 100%;
-    gap: 2em;
-    flex-direction: column;
-    align-items: flex-start;
-
-    &.newsletter {
-      padding: 32px;
-      border-radius: 8px;
-      border: 1px solid $grey-6;
-      max-width: 916px;
-      @media #{$phone} {
-        padding: 32px 0 0;
-        border: none;
-        border-radius: 0;
-        border-top: 1px solid $grey-6;
-      }
+    max-width: 980px;
+    @media #{$tablet} {
+      padding: 24px;
+    }
+    @media #{$phone} {
+      padding: 20px;
     }
-  }
-
-  .profile {
-    display: flex;
-    flex-direction: column;
-    gap: 24px;
-    width: 100%;
 
-    .block {
+    .header {
       display: flex;
-      flex-direction: column;
-      border-bottom: 1px solid $grey-7;
-      padding-bottom: 24px;
-      gap: 8px;
+      justify-content: space-between;
+      align-items: center;
+      width: 100%;
 
-      .row {
-        display: flex;
-        gap: 8px;
-        align-items: center;
-        flex-wrap: wrap;
+      h1 {
+        @include font-bold-24;
       }
+    }
 
-      .mobile-icon {
-        align-self: start;
-        display: none;
-        @media #{$tablet} {
-          display: block;
+    section {
+      display: flex;
+      box-sizing: border-box;
+      width: 100%;
+      gap: 2em;
+      flex-direction: column;
+      align-items: flex-start;
+
+      &.newsletter {
+        padding: 32px;
+        box-sizing: border-box;
+        border-radius: 8px;
+        border: 1px solid $grey-6;
+        max-width: 980px;
+        @media #{$phone} {
+          padding: 32px 0 0;
+          border: none;
+          border-radius: 0;
+          border-top: 1px solid $grey-6;
         }
       }
     }
 
-    .information {
+    .profile {
       display: flex;
-      flex-direction: row;
-      line-height: 120%;
-      gap: 16px;
-      flex-wrap: wrap;
-
-      @media #{$phone} {
-        flex-direction: column;
-      }
+      flex-direction: column;
+      gap: 24px;
+      width: 100%;
 
-      .user {
+      .block {
         display: flex;
         flex-direction: column;
+        border-bottom: 1px solid $grey-7;
+        padding-bottom: 24px;
         gap: 8px;
 
-        .name {
-          @include font-bold-20;
+        .row {
+          display: flex;
+          gap: 8px;
+          align-items: center;
+          flex-wrap: wrap;
         }
 
-        .job {
-          @include font-regular-15;
-          color: $grey-4-5-1;
+        .mobile-icon {
+          align-self: start;
+          display: none;
+          @media #{$tablet} {
+            display: block;
+          }
         }
       }
 
-      .description {
-        @include font-regular-14;
+      .information {
+        display: flex;
+        flex-direction: row;
+        line-height: 120%;
+        gap: 16px;
+
+        .user {
+          display: flex;
+          flex-direction: column;
+          gap: 8px;
+
+          .name {
+            @include font-bold-20;
+          }
+
+          .job {
+            @include font-regular-15;
+            color: $grey-4-5-1;
+          }
+        }
+
+        .description {
+          @include font-regular-14;
+        }
       }
     }
-  }
 
-  .centerButton {
-    margin: auto;
+    .centerButton {
+      margin: auto;
+    }
   }
 }
-- 
GitLab


From 4ffab96656b3bc8bbd648a838d3be7165ec4b03e Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 14:46:17 +0100
Subject: [PATCH 41/87] Minor improvements to profile

---
 .../profile/profile-nav/profile-nav.component.html   |  6 +++++-
 src/app/profile/profile-nav/profile-nav.component.ts | 12 ++++++------
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/app/profile/profile-nav/profile-nav.component.html b/src/app/profile/profile-nav/profile-nav.component.html
index e932ef884..307522f5f 100644
--- a/src/app/profile/profile-nav/profile-nav.component.html
+++ b/src/app/profile/profile-nav/profile-nav.component.html
@@ -3,7 +3,11 @@
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'dashboard'" />
     Tableau de bord
   </a>
-  <a routerLinkActive="selected" [routerLink]="'/profil/mes-structures'" [ngPlural]="userProfile.structuresLink.length">
+  <a
+    routerLinkActive="selected"
+    [routerLink]="'/profil/mes-structures'"
+    [ngPlural]="(userProfile$ | async)?.structuresLink?.length"
+  >
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myStructures'" />
     <ng-template ngPluralCase="1">Ma structure</ng-template>
     <ng-template ngPluralCase="other">Mes structures</ng-template>
diff --git a/src/app/profile/profile-nav/profile-nav.component.ts b/src/app/profile/profile-nav/profile-nav.component.ts
index 0430138a2..1e06818c5 100644
--- a/src/app/profile/profile-nav/profile-nav.component.ts
+++ b/src/app/profile/profile-nav/profile-nav.component.ts
@@ -1,4 +1,5 @@
-import { Component, Input, OnInit } from '@angular/core';
+import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';
+import { Observable, from } from 'rxjs';
 import { User } from '../../models/user.model';
 import { Utils } from '../../utils/utils';
 import { ProfileService } from '../services/profile.service';
@@ -7,10 +8,11 @@ import { ProfileService } from '../services/profile.service';
   selector: 'app-profile-nav',
   templateUrl: './profile-nav.component.html',
   styleUrls: ['./profile-nav.component.scss'],
+  changeDetection: ChangeDetectionStrategy.OnPush,
 })
 export class ProfileNavComponent implements OnInit {
-  @Input() isPublic: boolean;
-  public userProfile: User;
+  @Input() isPublic!: boolean;
+  public userProfile$: Observable<User>;
 
   constructor(
     public utils: Utils,
@@ -18,8 +20,6 @@ export class ProfileNavComponent implements OnInit {
   ) {}
 
   ngOnInit(): void {
-    this.profileService.getProfile().then((profile) => {
-      this.userProfile = new User(profile);
-    });
+    this.userProfile$ = from(this.profileService.getProfile());
   }
 }
-- 
GitLab


From 48c00849b08ae27d321b87b110883d44208f817f Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 16:01:52 +0100
Subject: [PATCH 42/87] Remove last separator if next block is empty

---
 src/app/profile/profile.component.scss | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/app/profile/profile.component.scss b/src/app/profile/profile.component.scss
index 694378c13..04d7635da 100644
--- a/src/app/profile/profile.component.scss
+++ b/src/app/profile/profile.component.scss
@@ -102,6 +102,10 @@
         border-bottom: 1px solid $grey-7;
         padding-bottom: 24px;
         gap: 8px;
+        &:last-child {
+          border-bottom: none;
+          padding-bottom: 0;
+        }
 
         .row {
           display: flex;
-- 
GitLab


From 7ae7aa818dea655526ca4bb5cfe754808544acd5 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 16:16:10 +0100
Subject: [PATCH 43/87] Some more responsive styles

---
 .../profile-structure/profile-structure.component.scss        | 1 +
 src/app/profile/profile.component.scss                        | 4 ++++
 2 files changed, 5 insertions(+)

diff --git a/src/app/profile/profile-structure/profile-structure.component.scss b/src/app/profile/profile-structure/profile-structure.component.scss
index d35904f7a..c810c9c17 100644
--- a/src/app/profile/profile-structure/profile-structure.component.scss
+++ b/src/app/profile/profile-structure/profile-structure.component.scss
@@ -12,6 +12,7 @@
   .left {
     display: flex;
     gap: 1.5rem;
+    flex-wrap: wrap;
     .structureInfos {
       display: flex;
       flex-direction: column;
diff --git a/src/app/profile/profile.component.scss b/src/app/profile/profile.component.scss
index 04d7635da..ebedab3b7 100644
--- a/src/app/profile/profile.component.scss
+++ b/src/app/profile/profile.component.scss
@@ -26,6 +26,9 @@
       padding: 32px;
       width: 100%;
       max-width: 916px;
+      @media #{$phone} {
+        padding: 12px;
+      }
     }
 
     .structuresContainer {
@@ -128,6 +131,7 @@
         flex-direction: row;
         line-height: 120%;
         gap: 16px;
+        flex-wrap: wrap;
 
         .user {
           display: flex;
-- 
GitLab


From 1df8768e66897727d644d44095608f3ce6fe40ec Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 16:22:23 +0100
Subject: [PATCH 44/87] Minor fixes

---
 src/app/profile/my-structures/my-structures.component.html | 5 ++++-
 src/app/profile/profile-nav/profile-nav.component.html     | 2 +-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/app/profile/my-structures/my-structures.component.html b/src/app/profile/my-structures/my-structures.component.html
index bad234591..89246cd52 100644
--- a/src/app/profile/my-structures/my-structures.component.html
+++ b/src/app/profile/my-structures/my-structures.component.html
@@ -50,7 +50,10 @@
           [isExpanded]="i === 0"
         />
       </div>
-      <div *ngIf="userProfile.pendingStructuresLink.length <= 0" class="structuresContainer">
+      <div
+        *ngIf="userProfile.structuresLink.length === 0 && userProfile.pendingStructuresLink.length === 0"
+        class="structuresContainer"
+      >
         Vous n'avez pas encore de structure(s).
       </div>
       <app-button
diff --git a/src/app/profile/profile-nav/profile-nav.component.html b/src/app/profile/profile-nav/profile-nav.component.html
index 307522f5f..61dc343a5 100644
--- a/src/app/profile/profile-nav/profile-nav.component.html
+++ b/src/app/profile/profile-nav/profile-nav.component.html
@@ -6,7 +6,7 @@
   <a
     routerLinkActive="selected"
     [routerLink]="'/profil/mes-structures'"
-    [ngPlural]="(userProfile$ | async)?.structuresLink?.length"
+    [ngPlural]="(userProfile$ | async)?.structuresLink?.length || 0"
   >
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myStructures'" />
     <ng-template ngPluralCase="1">Ma structure</ng-template>
-- 
GitLab


From 320c54570dfbb28549df37197df14ec8cf73663e Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Tue, 25 Feb 2025 16:53:32 +0100
Subject: [PATCH 45/87] Avoid fetching user profile for the nav since we
 already have it in the page

---
 .../my-structures.component.html              |  2 +-
 .../my-structures/my-structures.component.ts  | 41 ++++++-------------
 .../profile-nav/profile-nav.component.html    |  2 +-
 .../profile-nav/profile-nav.component.ts      | 17 ++------
 src/app/profile/profile.component.html        |  2 +-
 5 files changed, 20 insertions(+), 44 deletions(-)

diff --git a/src/app/profile/my-structures/my-structures.component.html b/src/app/profile/my-structures/my-structures.component.html
index 89246cd52..8fad0edc2 100644
--- a/src/app/profile/my-structures/my-structures.component.html
+++ b/src/app/profile/my-structures/my-structures.component.html
@@ -1,5 +1,5 @@
 <div *ngIf="userProfile" class="content-container full-screen">
-  <app-profile-nav />
+  <app-profile-nav [userProfile]="userProfile" />
 
   <div class="structures-container">
     <div class="header">
diff --git a/src/app/profile/my-structures/my-structures.component.ts b/src/app/profile/my-structures/my-structures.component.ts
index c4240e1ca..61f5c98fe 100644
--- a/src/app/profile/my-structures/my-structures.component.ts
+++ b/src/app/profile/my-structures/my-structures.component.ts
@@ -1,7 +1,5 @@
 import { Component, OnInit } from '@angular/core';
 import { Router } from '@angular/router';
-import { Observable, forkJoin } from 'rxjs';
-import { tap } from 'rxjs/operators';
 import { StructureWithOwners } from '../../models/structureWithOwners.model';
 import { User } from '../../models/user.model';
 import { NotificationService } from '../../services/notification.service';
@@ -38,38 +36,25 @@ export class MyStructuresComponent implements OnInit {
   }
 
   private getStructuresFromProfile(): void {
-    const structures$: Observable<any>[] = [];
-    this.structures = [];
-
-    this.userProfile.structuresLink.forEach((structureId) => {
-      structures$.push(
-        this.structureService.getStructureWithOwners(structureId).pipe(
-          tap((structure) => {
-            this.structures.push(structure);
-          }),
-        ),
-      );
-    });
-    forkJoin(structures$).subscribe(() => {
-      this.structures.sort((a, b) => a.structure.structureName.localeCompare(b.structure.structureName));
+    const fetchStructures = this.userProfile.structuresLink.map((structureId) =>
+      this.structureService.getStructureWithOwners(structureId).toPromise(),
+    );
+    Promise.all(fetchStructures).then((structures) => {
+      // Sort structures alphabetically
+      this.structures = structures.sort((a, b) => a.structure.structureName.localeCompare(b.structure.structureName));
     });
   }
 
   private getPendingStructuresFromProfile(): void {
-    const structures$: Observable<any>[] = [];
-    this.structures = [];
-    this.userProfile.pendingStructuresLink.forEach((pending) => {
-      structures$.push(
-        this.structureService.getStructureWithOwners(pending.id).pipe(
-          tap((structure) => {
-            this.pendingStructures.push(structure);
-          }),
-        ),
+    const fetchPendingStructures = this.userProfile.pendingStructuresLink.map((pending) =>
+      this.structureService.getStructureWithOwners(pending.id).toPromise(),
+    );
+    Promise.all(fetchPendingStructures).then((structures) => {
+      // Sort pending structures alphabetically
+      this.pendingStructures = structures.sort((a, b) =>
+        a.structure.structureName.localeCompare(b.structure.structureName),
       );
     });
-    forkJoin(structures$).subscribe(() => {
-      this.pendingStructures.sort((a, b) => a.structure.structureName.localeCompare(b.structure.structureName));
-    });
   }
 
   public goToStructuresManagement(): void {
diff --git a/src/app/profile/profile-nav/profile-nav.component.html b/src/app/profile/profile-nav/profile-nav.component.html
index 61dc343a5..326e916b2 100644
--- a/src/app/profile/profile-nav/profile-nav.component.html
+++ b/src/app/profile/profile-nav/profile-nav.component.html
@@ -6,7 +6,7 @@
   <a
     routerLinkActive="selected"
     [routerLink]="'/profil/mes-structures'"
-    [ngPlural]="(userProfile$ | async)?.structuresLink?.length || 0"
+    [ngPlural]="userProfile?.structuresLink?.length || 0"
   >
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myStructures'" />
     <ng-template ngPluralCase="1">Ma structure</ng-template>
diff --git a/src/app/profile/profile-nav/profile-nav.component.ts b/src/app/profile/profile-nav/profile-nav.component.ts
index 1e06818c5..16577b2f9 100644
--- a/src/app/profile/profile-nav/profile-nav.component.ts
+++ b/src/app/profile/profile-nav/profile-nav.component.ts
@@ -1,8 +1,6 @@
-import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';
-import { Observable, from } from 'rxjs';
+import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
 import { User } from '../../models/user.model';
 import { Utils } from '../../utils/utils';
-import { ProfileService } from '../services/profile.service';
 
 @Component({
   selector: 'app-profile-nav',
@@ -10,16 +8,9 @@ import { ProfileService } from '../services/profile.service';
   styleUrls: ['./profile-nav.component.scss'],
   changeDetection: ChangeDetectionStrategy.OnPush,
 })
-export class ProfileNavComponent implements OnInit {
+export class ProfileNavComponent {
   @Input() isPublic!: boolean;
-  public userProfile$: Observable<User>;
+  @Input() userProfile!: User;
 
-  constructor(
-    public utils: Utils,
-    private profileService: ProfileService,
-  ) {}
-
-  ngOnInit(): void {
-    this.userProfile$ = from(this.profileService.getProfile());
-  }
+  constructor(public utils: Utils) {}
 }
diff --git a/src/app/profile/profile.component.html b/src/app/profile/profile.component.html
index c4ea4690b..a6750f463 100644
--- a/src/app/profile/profile.component.html
+++ b/src/app/profile/profile.component.html
@@ -3,7 +3,7 @@
     <app-go-back (action)="goBack()" />
   </div>
 
-  <app-profile-nav [isPublic]="isPublic" />
+  <app-profile-nav [isPublic]="isPublic" [userProfile]="userProfile" />
 
   <div class="profile-container">
     <div class="header">
-- 
GitLab


From 162377d12e936d1cc2f023e5117ed7294538ed8e Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Wed, 26 Feb 2025 16:19:09 +0100
Subject: [PATCH 46/87] Add,profile nav to general modules

---
 src/app/app.module.ts | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 81d4c9a1a..fccb09a6b 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -31,6 +31,7 @@ import { LoginComponent } from './login/login.component';
 import { MapModule } from './map/map.module';
 import { NewsletterSubscriptionComponent } from './newsletter-subscription/newsletter-subscription.component';
 import { PageComponent } from './page/page.component';
+import { ProfileNavComponent } from './profile/profile-nav/profile-nav.component';
 import { ForgotPasswordComponent } from './reset-password/forgot-password.component';
 import { ResetPasswordComponent } from './reset-password/reset-password.component';
 import { PersonalOfferResolver } from './resolvers/personal-offer.resolver';
@@ -66,6 +67,7 @@ import { StructureJoinComponent } from './structure/structure-join/structure-joi
     StructureListSearchPrintComponent,
     StructureListDataComponent,
     DataComponent,
+    ProfileNavComponent,
   ],
   imports: [
     BrowserModule,
-- 
GitLab


From 9b52113d1a820d84eb8236084be64981b0836363 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Wed, 26 Feb 2025 16:21:56 +0100
Subject: [PATCH 47/87] Add job & employer to user auth model

---
 src/app/models/user-auth.model.ts | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/app/models/user-auth.model.ts b/src/app/models/user-auth.model.ts
index f705eddfa..b32dfa51a 100644
--- a/src/app/models/user-auth.model.ts
+++ b/src/app/models/user-auth.model.ts
@@ -2,6 +2,8 @@ export class UserAuth {
   username: string;
   name: string;
   surname: string;
+  job?: string;
+  employer?: string;
   avatar?: string;
   accessToken: string;
   expiresAt: string;
-- 
GitLab


From 07732a611ef851331d50030c5cd476910b4038d5 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Wed, 26 Feb 2025 16:22:41 +0100
Subject: [PATCH 48/87] get job and employer

---
 src/app/services/auth.service.ts | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts
index 4e007021e..34900361f 100644
--- a/src/app/services/auth.service.ts
+++ b/src/app/services/auth.service.ts
@@ -72,6 +72,10 @@ export class AuthService {
     return `${this.userValue.username}`;
   }
 
+  public getJobAndEmployer(): string {
+    return this.userValue.job ? `${this.userValue.job}, ${this.userValue.employer}` : this.userValue.employer;
+  }
+
   public getUserAvatar(): string {
     return this.userValue.avatar;
   }
-- 
GitLab


From ef10a35f9f5c7cb3bfec02868744e0a647206316 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Wed, 26 Feb 2025 16:23:16 +0100
Subject: [PATCH 49/87] remove module profile nav from profile modules

---
 src/app/profile/profile.module.ts | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/app/profile/profile.module.ts b/src/app/profile/profile.module.ts
index ed6a4b2ac..c2716e736 100644
--- a/src/app/profile/profile.module.ts
+++ b/src/app/profile/profile.module.ts
@@ -6,7 +6,7 @@ import { DashboardComponent } from './dashboard/dashboard.component';
 import { EditComponent } from './edit/edit.component';
 import { MyStructuresComponent } from './my-structures/my-structures.component';
 import { PersonalOfferEditionComponent } from './personal-offer-edition/personal-offer-edition.component';
-import { ProfileNavComponent } from './profile-nav/profile-nav.component';
+
 import { ProfileNewsletterComponent } from './profile-newsletter/profile-newsletter.component';
 import { ProfileRoutingModule } from './profile-routing.module';
 import { PersonalOfferComponent } from './profile-structure/personal-offer/personal-offer.component';
@@ -32,7 +32,6 @@ import { StructuresManagementComponent } from './structures-management/structure
     StructuresManagementComponent,
     PersonalOfferComponent,
     PersonalOfferEditionComponent,
-    ProfileNavComponent,
     ProfileNewsletterComponent,
     ResetEmailComponent,
     MyStructuresComponent,
-- 
GitLab


From b87d0fd09c686287ac955d9e1e76887d89b88358 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Wed, 26 Feb 2025 16:23:49 +0100
Subject: [PATCH 50/87] get job and employer in header

---
 src/app/header/header.component.ts | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/app/header/header.component.ts b/src/app/header/header.component.ts
index 0fd015500..bdc123160 100644
--- a/src/app/header/header.component.ts
+++ b/src/app/header/header.component.ts
@@ -127,6 +127,10 @@ export class HeaderComponent {
     return this.authService.getUserFullNameDisplay();
   }
 
+  public get displayJobAndEmployer(): string {
+    return this.authService.getJobAndEmployer();
+  }
+
   public get avatar(): string {
     return this.authService.getUserAvatar();
   }
-- 
GitLab


From 6c56ae9f418650cf2bc2d19ef39753ad9f13b353 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Wed, 26 Feb 2025 16:24:55 +0100
Subject: [PATCH 51/87] add a new input for the location of the profile nav
 elements

---
 src/app/profile/profile-nav/profile-nav.component.ts | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/app/profile/profile-nav/profile-nav.component.ts b/src/app/profile/profile-nav/profile-nav.component.ts
index 16577b2f9..243db48ea 100644
--- a/src/app/profile/profile-nav/profile-nav.component.ts
+++ b/src/app/profile/profile-nav/profile-nav.component.ts
@@ -9,8 +9,9 @@ import { Utils } from '../../utils/utils';
   changeDetection: ChangeDetectionStrategy.OnPush,
 })
 export class ProfileNavComponent {
-  @Input() isPublic!: boolean;
-  @Input() userProfile!: User;
+  @Input() isPublic?: boolean;
+  @Input() userProfile?: User;
+  @Input() location?: string;
 
   constructor(public utils: Utils) {}
 }
-- 
GitLab


From f51a47980ac56d04675c292f0ec80d40e8e1a26b Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Wed, 26 Feb 2025 16:26:38 +0100
Subject: [PATCH 52/87] new connection button

---
 src/app/header/header.component.html | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html
index b1a5a0f34..c10a7b4b3 100644
--- a/src/app/header/header.component.html
+++ b/src/app/header/header.component.html
@@ -122,8 +122,9 @@
       />
       <app-button
         *ngIf="!isLoggedIn"
+        class="login"
         ariaLabel="Se connecter"
-        [variant]="'primaryBlack'"
+        [variant]="'secondary'"
         [label]="'Se connecter'"
         [size]="'small'"
         (action)="clickProfileButton()"
-- 
GitLab


From 835f1bee86bac3c235fa61baa33f2f5e49cf493c Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Wed, 26 Feb 2025 16:27:24 +0100
Subject: [PATCH 53/87] styles adaptations for new connection button

---
 src/app/header/header.component.scss | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/app/header/header.component.scss b/src/app/header/header.component.scss
index 927939a34..16dcc4a6e 100644
--- a/src/app/header/header.component.scss
+++ b/src/app/header/header.component.scss
@@ -38,8 +38,15 @@ header > nav {
       gap: 3vw;
     }
   }
-  .connected {
-    box-shadow: 0px 4px 8px 0px $red-20;
+
+  .login {
+    ::ng-deep button.secondary {
+      border-radius: 24px;
+      border: 1px solid $grey-4;
+      width: 130px;
+      height: 40px;
+    }
+  }
   }
 }
 
-- 
GitLab


From bedf493022569b30295e4e50754675b6c6f62600 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 09:45:31 +0100
Subject: [PATCH 54/87] Add notif svg

---
 src/assets/ico/sprite.svg | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/assets/ico/sprite.svg b/src/assets/ico/sprite.svg
index 204dd66cf..69e47a0bb 100644
--- a/src/assets/ico/sprite.svg
+++ b/src/assets/ico/sprite.svg
@@ -417,5 +417,9 @@
       <path d="M8.0026 1.33398C4.3226 1.33398 1.33594 4.32065 1.33594 8.00065C1.33594 11.6807 4.3226 14.6673 8.0026 14.6673C11.6826 14.6673 14.6693 11.6807 14.6693 8.00065C14.6693 4.32065 11.6826 1.33398 8.0026 1.33398ZM8.0026 3.33398C9.10927 3.33398 10.0026 4.22732 10.0026 5.33398C10.0026 6.44065 9.10927 7.33398 8.0026 7.33398C6.89594 7.33398 6.0026 6.44065 6.0026 5.33398C6.0026 4.22732 6.89594 3.33398 8.0026 3.33398ZM8.0026 12.8007C6.33594 12.8007 4.8626 11.9473 4.0026 10.654C4.0226 9.32732 6.66927 8.60065 8.0026 8.60065C9.32927 8.60065 11.9826 9.32732 12.0026 10.654C11.1426 11.9473 9.66927 12.8007 8.0026 12.8007Z" fill="#333333"/>
     </symbol>
 
+    <symbol id="notification" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
+        <path d="M12 22C13.1 22 14 21.1 14 20H10C10 21.1 10.9 22 12 22ZM18 16V11C18 7.93 16.37 5.36 13.5 4.68V4C13.5 3.17 12.83 2.5 12 2.5C11.17 2.5 10.5 3.17 10.5 4V4.68C7.64 5.36 6 7.92 6 11V16L4 18V19H20V18L18 16ZM16 17H8V11C8 8.52 9.51 6.5 12 6.5C14.49 6.5 16 8.52 16 11V17Z" fill="#949494"/>
+    </symbol>
+
 
 </svg>
-- 
GitLab


From cb420c7a3ce3aae639e2deb862c446d01a62f196 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 09:46:08 +0100
Subject: [PATCH 55/87] New header and styles

---
 src/app/header/header.component.html | 30 ++++++----
 src/app/header/header.component.scss | 85 ++++++++++++++++++++++------
 2 files changed, 88 insertions(+), 27 deletions(-)

diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html
index c10a7b4b3..0e22abf11 100644
--- a/src/app/header/header.component.html
+++ b/src/app/header/header.component.html
@@ -111,15 +111,20 @@
           Administration
         </a>
       </div>
-      <app-button
+      <a class="notifications" aria-label="notifications" role="menuitem" [routerLink]="'/profil/tableau-de-bord/'">
+        <app-svg-icon [iconClass]="'icon-24'" [folder]="'ico'" [icon]="'notification'" />
+      </a>
+      <button
         *ngIf="isLoggedIn"
+        type="button"
         class="connected"
         ariaLabel="Ouvrir le menu Mon compte - {{ displayName }}"
-        [variant]="'primary'"
-        [label]="displayName"
-        [size]="'small'"
-        (action)="clickProfileButton()"
-      />
+        (click)="clickProfileButton()"
+      >
+        <app-svg-icon [iconClass]="'icon-32'" [folder]="'avatar'" [icon]="avatar || 'avatar1'" />
+        <span>{{ displayName }}</span>
+      </button>
+
       <app-button
         *ngIf="!isLoggedIn"
         class="login"
@@ -277,11 +282,16 @@
   <div class="profileMenu" [@fadeInOut]>
     <div class="profileInformation">
       <app-svg-icon alt="" [folder]="'avatar'" [icon]="avatar || 'avatar1'" [iconClass]="'icon-40'" />
-      <span class="name">{{ displayFullName }}</span>
+      <span class="profileDetails">
+        <span class="name">{{ displayFullName }}</span>
+        <span class="job">toto, {{ displayJobAndEmployer }}</span>
+      </span>
+    </div>
+    <div class="profileLinks">
+      <app-profile-nav [isPublic]="false" [location]="'header'" />
     </div>
-    <div class="profileMenuButtons">
-      <app-button [variant]="'primaryBlack'" [label]="'Voir mon compte'" [size]="'small'" (action)="goToProfile()" />
-      <app-button [variant]="'secondary'" [label]="'Se déconnecter'" [size]="'small'" (action)="logout()" />
+    <div class="profileButton">
+      <app-button [variant]="'tertiary'" [label]="'Se déconnecter'" [size]="'small'" (action)="logout()" />
     </div>
   </div>
 </div>
diff --git a/src/app/header/header.component.scss b/src/app/header/header.component.scss
index 16dcc4a6e..49cccb435 100644
--- a/src/app/header/header.component.scss
+++ b/src/app/header/header.component.scss
@@ -39,6 +39,20 @@ header > nav {
     }
   }
 
+  .notifications {
+    width: 32px;
+    height: 32px;
+    border: 1px solid transparent;
+    place-content: center;
+    &:hover {
+      border-radius: 4px;
+      border: 1px solid $grey-3;
+    }
+    &:active {
+      background-color: $grey-8;
+    }
+  }
+
   .login {
     ::ng-deep button.secondary {
       border-radius: 24px;
@@ -47,6 +61,28 @@ header > nav {
       height: 40px;
     }
   }
+
+  button.connected {
+    display: flex;
+    align-items: center;
+    min-width: fit-content;
+    max-width: 150px;
+    padding: 4px 8px 4px 4px;
+    gap: 8px;
+    border-radius: 24px;
+    border: 1px solid $grey-1;
+    background: $grey-10;
+    box-shadow: $box-shadow;
+    overflow: hidden;
+    cursor: pointer;
+    app-svg-icon {
+      flex-shrink: 0;
+    }
+    span {
+      overflow: hidden;
+      text-overflow: ellipsis;
+      min-width: 0;
+    }
   }
 }
 
@@ -161,48 +197,63 @@ a {
     flex-direction: column;
     .overlay-header {
       height: $header-height;
-      background-color: $modal-background-transparent;
+      //background-color: $modal-background-transparent;
     }
     .overlay-content {
       flex-grow: 1;
-      background-color: $modal-background;
+      //background-color: $modal-background;
     }
   }
-
   .profileMenu {
     position: absolute;
     top: 8 + $header-height;
     z-index: $modal-z-index;
     right: 8px;
-    width: 184px;
+    width: 300px;
     display: flex;
     flex-direction: column;
     align-items: center;
     justify-content: center;
-    gap: 1.5rem;
-    padding: 1rem;
     background: $white;
     border-radius: 8px;
     box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.35);
-
+    div {
+      padding: 12px 20px;
+      border-top: 1px solid $grey-7;
+      box-sizing: border-box;
+    }
     .profileInformation {
       display: flex;
       align-items: center;
-      gap: 12px;
-      .name {
-        @include font-bold-16;
-        display: -webkit-box;
-        -webkit-line-clamp: 2;
-        -webkit-box-orient: vertical;
-        overflow: hidden;
+      gap: 16px;
+      width: 100%;
+      max-width: 100%;
+      padding: 12px 20px;
+      .profileDetails {
+        display: flex;
+        flex-direction: column;
+        gap: 8px;
+        .name {
+          @include font-bold-16;
+          overflow: hidden;
+        }
+        .job {
+          @include font-regular-12;
+          color: $grey-4-5-1;
+          overflow: hidden;
+        }
       }
     }
-
-    .profileMenuButtons {
+    .profileLinks {
+      padding: 16px 20px;
+      width: 100%;
+    }
+    .profileButton {
       display: inline-flex;
       flex-direction: column;
-      margin: auto;
       gap: 12px;
+      width: 100%;
+      align-items: center;
     }
   }
 }
-- 
GitLab


From 46efb4184fcb12508869c04a3ecb00789cd18ef0 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 09:46:39 +0100
Subject: [PATCH 56/87] add job and employer

---
 src/app/models/user-auth.model.ts | 7 +++++--
 src/app/services/auth.service.ts  | 5 ++++-
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/app/models/user-auth.model.ts b/src/app/models/user-auth.model.ts
index b32dfa51a..d11044b4a 100644
--- a/src/app/models/user-auth.model.ts
+++ b/src/app/models/user-auth.model.ts
@@ -1,9 +1,12 @@
+import { Employer } from './employer.model';
+import { Job } from './job.model';
+
 export class UserAuth {
   username: string;
   name: string;
   surname: string;
-  job?: string;
-  employer?: string;
+  job?: Job;
+  employer?: Employer;
   avatar?: string;
   accessToken: string;
   expiresAt: string;
diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts
index 34900361f..082a8e7d1 100644
--- a/src/app/services/auth.service.ts
+++ b/src/app/services/auth.service.ts
@@ -73,7 +73,10 @@ export class AuthService {
   }
 
   public getJobAndEmployer(): string {
-    return this.userValue.job ? `${this.userValue.job}, ${this.userValue.employer}` : this.userValue.employer;
+    console.log(this.userValue);
+    const job = this.userValue.job?.name || '';
+    const employer = this.userValue.employer?.name || '';
+    return [job, employer].filter(Boolean).join(', ');
   }
 
   public getUserAvatar(): string {
-- 
GitLab


From c15c538e3a1379dc846f6092b5f239e8ed3e0d2b Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 09:47:22 +0100
Subject: [PATCH 57/87] changes to profile nav

---
 .../profile-nav/profile-nav.component.html    |  2 +-
 .../profile-nav/profile-nav.component.scss    | 24 +++++++++++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/app/profile/profile-nav/profile-nav.component.html b/src/app/profile/profile-nav/profile-nav.component.html
index 326e916b2..7c76769c7 100644
--- a/src/app/profile/profile-nav/profile-nav.component.html
+++ b/src/app/profile/profile-nav/profile-nav.component.html
@@ -1,4 +1,4 @@
-<nav *ngIf="!isPublic" class="hide-on-mobile">
+<nav *ngIf="!isPublic" class="hide-on-mobile" [ngClass]="location">
   <a routerLinkActive="selected" [routerLink]="'/profil/tableau-de-bord'">
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'dashboard'" />
     Tableau de bord
diff --git a/src/app/profile/profile-nav/profile-nav.component.scss b/src/app/profile/profile-nav/profile-nav.component.scss
index f3ad718da..cc8407a7b 100644
--- a/src/app/profile/profile-nav/profile-nav.component.scss
+++ b/src/app/profile/profile-nav/profile-nav.component.scss
@@ -30,6 +30,7 @@ nav {
       background: $grey-8;
       border-radius: 4px;
       color: $grey-1;
+      font-weight: bold;
     }
     &.selected {
       background: $grey-7;
@@ -38,4 +39,27 @@ nav {
       font-weight: bold;
     }
   }
+
+  // location : header
+  &.header {
+    padding: 0;
+    height: fit-content;
+    border: none;
+    width: 100%;
+    a {
+      @include font-regular-14;
+      padding: 0 12px;
+      &.selected {
+        background: none;
+        font-weight: normal;
+        color: $grey-4-5-1;
+      }
+      &:hover {
+        background: $grey-8;
+        border-radius: 4px;
+        color: $grey-1;
+        font-weight: bold;
+      }
+    }
+  }
 }
-- 
GitLab


From 88df80489081bd1994bfb14f8103531c348a7bc1 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 09:49:09 +0100
Subject: [PATCH 58/87] Cleanup

---
 src/app/profile/my-structures/my-structures.component.scss | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/src/app/profile/my-structures/my-structures.component.scss b/src/app/profile/my-structures/my-structures.component.scss
index a280ce842..d72c8f52e 100644
--- a/src/app/profile/my-structures/my-structures.component.scss
+++ b/src/app/profile/my-structures/my-structures.component.scss
@@ -62,13 +62,6 @@
     margin: auto;
   }
 
-  .structuresContainer {
-    display: flex;
-    flex-direction: column;
-    gap: 2rem;
-    width: 100%;
-  }
-
   .centerButton {
     margin: auto;
   }
-- 
GitLab


From 4eefd197e47a53725ce315fe33ca424aa3564a97 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 09:51:53 +0100
Subject: [PATCH 59/87] Cleanup

---
 src/app/profile/my-structures/my-structures.component.html | 2 +-
 src/app/profile/my-structures/my-structures.component.scss | 7 +++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/app/profile/my-structures/my-structures.component.html b/src/app/profile/my-structures/my-structures.component.html
index 8fad0edc2..7110f8595 100644
--- a/src/app/profile/my-structures/my-structures.component.html
+++ b/src/app/profile/my-structures/my-structures.component.html
@@ -30,7 +30,7 @@
     <section>
       <div
         *ngIf="userProfile.structuresLink.length > 0 || userProfile.pendingStructuresLink.length > 0"
-        class="structuresContainer"
+        class="structures-details"
       >
         <app-profile-structure
           *ngFor="let structure of pendingStructures; let i = index"
diff --git a/src/app/profile/my-structures/my-structures.component.scss b/src/app/profile/my-structures/my-structures.component.scss
index d72c8f52e..a64517e24 100644
--- a/src/app/profile/my-structures/my-structures.component.scss
+++ b/src/app/profile/my-structures/my-structures.component.scss
@@ -62,6 +62,13 @@
     margin: auto;
   }
 
+  .structures-details {
+    display: flex;
+    flex-direction: column;
+    gap: 2rem;
+    width: 100%;
+  }
+
   .centerButton {
     margin: auto;
   }
-- 
GitLab


From 5b1de7a0a5d3926713baa47a5037d20ab692a223 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 10:20:08 +0100
Subject: [PATCH 60/87] cleanup

---
 src/app/header/header.component.html | 2 +-
 src/app/services/auth.service.ts     | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html
index 0e22abf11..d19f89b82 100644
--- a/src/app/header/header.component.html
+++ b/src/app/header/header.component.html
@@ -284,7 +284,7 @@
       <app-svg-icon alt="" [folder]="'avatar'" [icon]="avatar || 'avatar1'" [iconClass]="'icon-40'" />
       <span class="profileDetails">
         <span class="name">{{ displayFullName }}</span>
-        <span class="job">toto, {{ displayJobAndEmployer }}</span>
+        <span class="job">{{ displayJobAndEmployer }}</span>
       </span>
     </div>
     <div class="profileLinks">
diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts
index 082a8e7d1..001e2db14 100644
--- a/src/app/services/auth.service.ts
+++ b/src/app/services/auth.service.ts
@@ -73,7 +73,6 @@ export class AuthService {
   }
 
   public getJobAndEmployer(): string {
-    console.log(this.userValue);
     const job = this.userValue.job?.name || '';
     const employer = this.userValue.employer?.name || '';
     return [job, employer].filter(Boolean).join(', ');
-- 
GitLab


From 2014d930bab6adee124e6788c2ac800ac89e58eb Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 10:20:49 +0100
Subject: [PATCH 61/87] Declare profile nav component in shard to have i in
 header, as well as profile

---
 src/app/app.module.ts           | 2 --
 src/app/shared/shared.module.ts | 3 +++
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index fccb09a6b..81d4c9a1a 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -31,7 +31,6 @@ import { LoginComponent } from './login/login.component';
 import { MapModule } from './map/map.module';
 import { NewsletterSubscriptionComponent } from './newsletter-subscription/newsletter-subscription.component';
 import { PageComponent } from './page/page.component';
-import { ProfileNavComponent } from './profile/profile-nav/profile-nav.component';
 import { ForgotPasswordComponent } from './reset-password/forgot-password.component';
 import { ResetPasswordComponent } from './reset-password/reset-password.component';
 import { PersonalOfferResolver } from './resolvers/personal-offer.resolver';
@@ -67,7 +66,6 @@ import { StructureJoinComponent } from './structure/structure-join/structure-joi
     StructureListSearchPrintComponent,
     StructureListDataComponent,
     DataComponent,
-    ProfileNavComponent,
   ],
   imports: [
     BrowserModule,
diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts
index 741c7c8ef..82d601599 100644
--- a/src/app/shared/shared.module.ts
+++ b/src/app/shared/shared.module.ts
@@ -3,6 +3,7 @@ import { CommonModule } from '@angular/common';
 import { NgModule } from '@angular/core';
 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 import { RouterModule } from '@angular/router';
+import { ProfileNavComponent } from '../profile/profile-nav/profile-nav.component';
 import { SharedComponents } from './components';
 import { AddressAutocompleteComponent } from './components/address-autocomplete/address-autocomplete.component';
 import { AppointmentChoiceComponent } from './components/appointment-choice/appointment-choice.component';
@@ -31,6 +32,7 @@ import { SharedPipes } from './pipes';
     RadioOptionComponent,
     SelectOrCreateComponent,
     YesNoComponent,
+    ProfileNavComponent,
   ],
   exports: [
     ...SharedPipes,
@@ -40,6 +42,7 @@ import { SharedPipes } from './pipes';
     RouterModule,
     FormsModule,
     ReactiveFormsModule,
+    ProfileNavComponent,
   ],
 })
 export class SharedModule {}
-- 
GitLab


From b96c94c0b56bb08a61c522f4c09b223cb77b76f8 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 13:26:21 +0100
Subject: [PATCH 62/87] Add styles for location : mobile menu

---
 .../profile-nav/profile-nav.component.html    |  2 +-
 .../profile-nav/profile-nav.component.scss    | 27 +++++++++++++++++++
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/src/app/profile/profile-nav/profile-nav.component.html b/src/app/profile/profile-nav/profile-nav.component.html
index 7c76769c7..e4067d563 100644
--- a/src/app/profile/profile-nav/profile-nav.component.html
+++ b/src/app/profile/profile-nav/profile-nav.component.html
@@ -1,4 +1,4 @@
-<nav *ngIf="!isPublic" class="hide-on-mobile" [ngClass]="location">
+<nav *ngIf="!isPublic" [ngClass]="location">
   <a routerLinkActive="selected" [routerLink]="'/profil/tableau-de-bord'">
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'dashboard'" />
     Tableau de bord
diff --git a/src/app/profile/profile-nav/profile-nav.component.scss b/src/app/profile/profile-nav/profile-nav.component.scss
index cc8407a7b..f5d912c58 100644
--- a/src/app/profile/profile-nav/profile-nav.component.scss
+++ b/src/app/profile/profile-nav/profile-nav.component.scss
@@ -17,6 +17,9 @@ nav {
   padding: 32px;
   gap: 16px;
   border-right: 1px solid $grey-7;
+  @media #{$tablet} {
+    display: none;
+  }
   a {
     display: flex;
     padding: 4px 12px;
@@ -46,6 +49,9 @@ nav {
     height: fit-content;
     border: none;
     width: 100%;
+    @media #{$tablet} {
+      display: flex;
+    }
     a {
       @include font-regular-14;
       padding: 0 12px;
@@ -62,4 +68,25 @@ nav {
       }
     }
   }
+
+  // location : mobile menu
+  &.mobile-menu {
+    padding: 16px;
+    height: fit-content;
+    border: none;
+    gap: 8px;
+    width: 100%;
+    border-top: 1px solid $grey-9;
+    @media #{$tablet} {
+      display: flex;
+    }
+    a {
+      @include font-regular-14;
+      color: $grey-1;
+      padding: 0 12px;
+      app-svg-icon {
+        display: none;
+      }
+    }
+  }
 }
-- 
GitLab


From a7ed337b5be8aad99d4f77224ca1fe9d67203b2b Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 13:27:25 +0100
Subject: [PATCH 63/87] Add goToAccountCreation function

---
 src/app/header/header.component.ts | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/app/header/header.component.ts b/src/app/header/header.component.ts
index bdc123160..5e405c127 100644
--- a/src/app/header/header.component.ts
+++ b/src/app/header/header.component.ts
@@ -114,6 +114,11 @@ export class HeaderComponent {
   }
   public goToLoginPage(): void {
     this.router.navigateByUrl('connexion');
+    this.closeMenu();
+  }
+  public goToAccountCreation(): void {
+    this.router.navigateByUrl('formulaire/creation-compte');
+    this.closeMenu();
   }
   public get isAdmin(): boolean {
     return this.profileService.isAdmin();
-- 
GitLab


From 3e97e876ab132aa9ff9371c10938efcfa12e8a09 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 13:28:22 +0100
Subject: [PATCH 64/87] Logged out menu

---
 src/app/header/header.component.html |  44 ++++++++---
 src/app/header/header.component.scss | 110 +++++++++++++++------------
 2 files changed, 93 insertions(+), 61 deletions(-)

diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html
index d19f89b82..eba44782e 100644
--- a/src/app/header/header.component.html
+++ b/src/app/header/header.component.html
@@ -1,6 +1,6 @@
 <header class="hide-on-print">
   <nav aria-label="Site">
-    <div class="containerIconMenu">
+    <div class="containerIconMenu hide-on-desktop">
       <app-svg-icon
         [asButton]="true"
         [ariaLabel]="'Ouvrir le menu'"
@@ -28,15 +28,10 @@
         alt
       />
     </div>
-    <div class="containerIconMenu profile">
-      <app-svg-icon
-        [asButton]="true"
-        [ariaLabel]="isLoggedIn ? 'Ouvrir le menu Mon compte' : 'Se connecter'"
-        [folder]="'ico'"
-        [icon]="'profile'"
-        [iconClass]="'icon-32'"
-        (action)="clickProfileButton()"
-      />
+    <div *ngIf="isLoggedIn" class="notifications hide-on-desktop">
+      <a class="notifications" aria-label="notifications" role="menuitem" [routerLink]="'/profil/tableau-de-bord/'">
+        <app-svg-icon [iconClass]="'icon-24'" [folder]="'ico'" [icon]="'notification'" />
+      </a>
     </div>
     <div class="rightHeader">
       <div class="menuItems" role="menu">
@@ -149,8 +144,31 @@
         role="button"
         (click)="closeMenu()"
         (keyup.enter)="closeMenu()"
-      ></div>
+      >
+        <app-svg-icon [iconClass]="'icon-28'" [folder]="'ico'" [icon]="'cross'" />
+      </div>
     </div>
+
+    <div *ngIf="!isLoggedIn" class="connexion">
+      <app-button [variant]="'primaryBlack'" [label]="'Se connecter'" [size]="'small'" (action)="goToLoginPage()" />
+      <app-button
+        [variant]="'tertiary'"
+        [label]="'Se créer un compte'"
+        [size]="'small'"
+        (action)="goToAccountCreation()"
+      />
+    </div>
+
+    <div *ngIf="isLoggedIn" class="profileInformation menu">
+      <app-svg-icon alt="" [folder]="'avatar'" [icon]="avatar || 'avatar1'" [iconClass]="'icon-32'" />
+      <span class="profileDetails">
+        <span class="name">{{ displayFullName }}</span>
+        <span class="job">{{ displayJobAndEmployer }}</span>
+      </span>
+    </div>
+
+    <app-profile-nav *ngIf="isLoggedIn" [location]="'mobile-menu'" (click)="closeMenu()" />
+
     <div class="links">
       <a
         routerLink="/actualites"
@@ -256,6 +274,10 @@
         >Contact</a
       >
     </div>
+
+    <div *ngIf="isLoggedIn" class="profileButton menu">
+      <app-button [variant]="'tertiary'" [label]="'Se déconnecter'" [size]="'small'" (action)="logout()" />
+    </div>
   </div>
   <div
     class="outside"
diff --git a/src/app/header/header.component.scss b/src/app/header/header.component.scss
index 49cccb435..1e4f19ab5 100644
--- a/src/app/header/header.component.scss
+++ b/src/app/header/header.component.scss
@@ -132,20 +132,6 @@ a {
   }
 }
 
-.containerIconMenu {
-  &.profile {
-    border-radius: 50%;
-    box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.12);
-    ::ng-deep div {
-      height: 32px;
-    }
-  }
-  display: none;
-  @media #{$tablet} {
-    display: block;
-  }
-}
-
 .mobileMenu {
   display: flex;
   position: fixed;
@@ -159,11 +145,14 @@ a {
   .menuContent {
     overflow-y: scroll;
     max-width: 80vw;
+    background-color: $white;
+    width: 280px;
     .title {
-      margin-bottom: 35px;
       display: flex;
+      padding: calc($header-height + 16px) 16px 16px;
       justify-content: space-between;
-      @include font-regular-26;
+      align-items: center;
+      @include font-regular-24;
       span {
         color: $grey-2;
       }
@@ -172,17 +161,18 @@ a {
     .links {
       display: flex;
       flex-direction: column;
-      gap: 2rem;
       align-items: flex-start;
+      padding: 16px;
+      border-top: 1px solid $grey-7;
+      a {
+        text-decoration: none;
+        padding: 8px 0;
+      }
     }
-
-    background-color: $white;
-    width: 350px;
-    padding: 27px 25px;
   }
   .outside {
     position: absolute;
-    left: 350px;
+    left: 280px;
     width: 100vw;
     height: 100vh;
   }
@@ -222,39 +212,59 @@ a {
       border-top: 1px solid $grey-7;
       box-sizing: border-box;
     }
-    .profileInformation {
-      display: flex;
-      align-items: center;
-      gap: 16px;
-      width: 100%;
-      max-width: 100%;
-      padding: 12px 20px;
-      .profileDetails {
-        display: flex;
-        flex-direction: column;
-        gap: 8px;
-        .name {
-          @include font-bold-16;
-          overflow: hidden;
-        }
-        .job {
-          @include font-regular-12;
-          color: $grey-4-5-1;
-          overflow: hidden;
-        }
-      }
-    }
     .profileLinks {
       padding: 16px 20px;
       width: 100%;
     }
-    .profileButton {
-      display: inline-flex;
-      flex-direction: column;
-      gap: 12px;
-      width: 100%;
-      align-items: center;
+  }
+}
+
+.connexion {
+  display: flex;
+  flex-direction: column;
+  border-top: 1px solid $grey-7;
+  gap: 16px;
+  padding: 16px 0;
+  width: 100%;
+  align-items: center;
+}
+
+.profileInformation {
+  display: flex;
+  align-items: center;
+  box-sizing: border-box;
+  gap: 16px;
+  width: 100%;
+  max-width: 100%;
+  padding: 12px 20px;
+  &.menu {
+    border-top: 1px solid $grey-7;
+  }
+  .profileDetails {
+    display: flex;
+    flex-direction: column;
+    gap: 8px;
+    .name {
+      @include font-bold-16;
+      overflow: hidden;
     }
+    .job {
+      @include font-regular-12;
+      color: $grey-4-5-1;
+      overflow: hidden;
+    }
+  }
+}
+.profileButton {
+  display: inline-flex;
+  flex-direction: column;
+  gap: 12px;
+  width: 100%;
+  align-items: center;
+  &.menu {
+    border-top: 1px solid $grey-7;
+    padding: 12px 20px;
+    box-sizing: border-box;
   }
 }
 
-- 
GitLab


From 3c9ef762baf508a611d74ba8fa20d8e2fc0a00a8 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 14:14:20 +0100
Subject: [PATCH 65/87] Improve header's responsive

---
 src/app/header/header.component.scss | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/app/header/header.component.scss b/src/app/header/header.component.scss
index 1e4f19ab5..4dfdd76a0 100644
--- a/src/app/header/header.component.scss
+++ b/src/app/header/header.component.scss
@@ -105,6 +105,7 @@ a {
   color: $grey-2;
   height: 100%;
   align-content: center;
+  text-align: center;
   // "display: grid;" : aligns menu link items vertically in Firefox 115 (current metropole version) without affecting any other style/layout. Can be removed when Firefox is upgraded.
   display: grid;
   &:hover {
@@ -301,3 +302,16 @@ a {
     display: none !important;
   }
 }
+
+// styles for header between tablet and desktop size with long menu
+@media only screen and (min-width: #{$width-tablet}) and (max-width: #{$width-desktop}) {
+  header > nav {
+    padding: 0 1rem;
+    .rightHeader > .menuItems {
+      gap: 2vw;
+    }
+  }
+  .logo {
+    margin-right: 40px;
+  }
+}
-- 
GitLab


From 6d8681df0eb9f31189fff15ee3b8aabba794a10b Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 14:22:25 +0100
Subject: [PATCH 66/87] Minor improvements

---
 src/app/header/header.component.scss | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/app/header/header.component.scss b/src/app/header/header.component.scss
index 4dfdd76a0..0cdb544b7 100644
--- a/src/app/header/header.component.scss
+++ b/src/app/header/header.component.scss
@@ -188,18 +188,16 @@ a {
     flex-direction: column;
     .overlay-header {
       height: $header-height;
-      //background-color: $modal-background-transparent;
     }
     .overlay-content {
       flex-grow: 1;
-      //background-color: $modal-background;
     }
   }
   .profileMenu {
     position: absolute;
     top: 8 + $header-height;
     z-index: $modal-z-index;
-    right: 8px;
+    right: 16px;
     width: 300px;
     display: flex;
     flex-direction: column;
@@ -307,8 +305,11 @@ a {
 @media only screen and (min-width: #{$width-tablet}) and (max-width: #{$width-desktop}) {
   header > nav {
     padding: 0 1rem;
-    .rightHeader > .menuItems {
+    .rightHeader {
       gap: 2vw;
+      .menuItems {
+        gap: 2vw;
+      }
     }
   }
   .logo {
-- 
GitLab


From 3255ccc02233ebb78caa732ed632407d684c064a Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 14:33:00 +0100
Subject: [PATCH 67/87] Minor improvements

---
 src/app/header/header.component.scss | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/app/header/header.component.scss b/src/app/header/header.component.scss
index 0cdb544b7..83297cbf8 100644
--- a/src/app/header/header.component.scss
+++ b/src/app/header/header.component.scss
@@ -82,6 +82,7 @@ header > nav {
       overflow: hidden;
       text-overflow: ellipsis;
       min-width: 0;
+      max-width: 100px;
     }
   }
 }
-- 
GitLab


From 89a34cf975dd24c680dd56aec253d5b184b71c3a Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 15:09:48 +0100
Subject: [PATCH 68/87] Accessibility

---
 src/app/profile/profile-nav/profile-nav.component.html | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/app/profile/profile-nav/profile-nav.component.html b/src/app/profile/profile-nav/profile-nav.component.html
index 326e916b2..abc084656 100644
--- a/src/app/profile/profile-nav/profile-nav.component.html
+++ b/src/app/profile/profile-nav/profile-nav.component.html
@@ -1,9 +1,10 @@
 <nav *ngIf="!isPublic" class="hide-on-mobile">
-  <a routerLinkActive="selected" [routerLink]="'/profil/tableau-de-bord'">
+  <a routerLinkActive="selected" role="menuitem" [routerLink]="'/profil/tableau-de-bord'">
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'dashboard'" />
     Tableau de bord
   </a>
   <a
+    role="menuitem"
     routerLinkActive="selected"
     [routerLink]="'/profil/mes-structures'"
     [ngPlural]="userProfile?.structuresLink?.length || 0"
@@ -12,7 +13,7 @@
     <ng-template ngPluralCase="1">Ma structure</ng-template>
     <ng-template ngPluralCase="other">Mes structures</ng-template>
   </a>
-  <a routerLinkActive="selected" [routerLinkActiveOptions]="{ exact: true }" [routerLink]="'/profil'">
+  <a role="menuitem" routerLinkActive="selected" [routerLinkActiveOptions]="{ exact: true }" [routerLink]="'/profil'">
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myProfile'" />
     Mon profil
   </a>
-- 
GitLab


From 0487ea0c5714d10211d0101fb81146a4aafbad59 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 27 Feb 2025 15:12:06 +0100
Subject: [PATCH 69/87] Accessibility

---
 src/app/header/header.component.html |  9 +++++++++
 src/app/header/header.component.scss | 11 +++++++++++
 2 files changed, 20 insertions(+)

diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html
index eba44782e..cb71148f5 100644
--- a/src/app/header/header.component.html
+++ b/src/app/header/header.component.html
@@ -315,6 +315,15 @@
     <div class="profileButton">
       <app-button [variant]="'tertiary'" [label]="'Se déconnecter'" [size]="'small'" (action)="logout()" />
     </div>
+    <a
+      tabindex="0"
+      class="visually-hidden"
+      role="menuitem"
+      (click)="showProfileMenu = false"
+      (keyup.enter)="showProfileMenu = false"
+    >
+      Fermer le menu Mon compte
+    </a>
   </div>
 </div>
 
diff --git a/src/app/header/header.component.scss b/src/app/header/header.component.scss
index 83297cbf8..15c65aea5 100644
--- a/src/app/header/header.component.scss
+++ b/src/app/header/header.component.scss
@@ -296,6 +296,17 @@ a {
   }
 }
 
+.visually-hidden {
+  clip-path: inset(100%);
+  clip: rect(0 0 0 0);
+  height: 1px;
+  width: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+}
+
 @media print {
   .hide-on-print {
     display: none !important;
-- 
GitLab


From a8e25c5d75cd26bcc216f1f2aff9bdaf25c85e5c Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 3 Mar 2025 17:09:08 +0100
Subject: [PATCH 70/87] Widen page a bit

---
 src/app/profile/profile.component.scss | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/app/profile/profile.component.scss b/src/app/profile/profile.component.scss
index ebedab3b7..89c26d5c0 100644
--- a/src/app/profile/profile.component.scss
+++ b/src/app/profile/profile.component.scss
@@ -16,7 +16,7 @@
   &.public {
     display: flex;
     flex-direction: column;
-    max-width: 980px;
+    max-width: 1030px;
     margin: 0 auto;
 
     section {
@@ -40,7 +40,7 @@
   }
 
   .goBack {
-    max-width: 980px;
+    max-width: 1030px;
     width: 100%;
   }
 
@@ -51,7 +51,7 @@
     padding: 32px 48px;
     gap: 32px;
     width: 100%;
-    max-width: 980px;
+    max-width: 1030px;
     @media #{$tablet} {
       padding: 24px;
     }
@@ -83,7 +83,7 @@
         box-sizing: border-box;
         border-radius: 8px;
         border: 1px solid $grey-6;
-        max-width: 980px;
+        max-width: 1030px;
         @media #{$phone} {
           padding: 32px 0 0;
           border: none;
-- 
GitLab


From cc48eaf76542617f60286d6b3cc052c020c29303 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 3 Mar 2025 17:09:35 +0100
Subject: [PATCH 71/87] Widen page a bit

---
 src/app/profile/my-structures/my-structures.component.scss | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/app/profile/my-structures/my-structures.component.scss b/src/app/profile/my-structures/my-structures.component.scss
index a64517e24..105a19369 100644
--- a/src/app/profile/my-structures/my-structures.component.scss
+++ b/src/app/profile/my-structures/my-structures.component.scss
@@ -17,7 +17,7 @@
     padding: 32px 48px;
     gap: 32px;
     width: 100%;
-    max-width: 980px;
+    max-width: 1030px;
     @media #{$tablet} {
       padding: 24px;
     }
@@ -41,7 +41,7 @@
 
   section {
     width: 100%;
-    max-width: 980px;
+    max-width: 1030px;
     display: flex;
     gap: 2em;
     flex-direction: column;
-- 
GitLab


From 3cd6a30f1f18fffdb7abd63c4032dd36687178f9 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Thu, 6 Mar 2025 14:44:55 +0100
Subject: [PATCH 72/87] Retour Luc sur le lien actif en mobile

---
 src/app/header/header.component.scss | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/app/header/header.component.scss b/src/app/header/header.component.scss
index 15c65aea5..9955d2a28 100644
--- a/src/app/header/header.component.scss
+++ b/src/app/header/header.component.scss
@@ -118,6 +118,9 @@ a {
     color: $grey-1;
     border-bottom: 3px solid $red;
     text-decoration: none;
+    @media #{$tablet} {
+      border-bottom-width: 1px;
+    }
   }
   &::before {
     display: block;
-- 
GitLab


From 9d1fb1762fa763bb09158434c3825e9baedbce9f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marl=C3=A8ne=20SIMONDANT?= <msimondant@grandlyon.com>
Date: Mon, 10 Mar 2025 09:00:12 +0000
Subject: [PATCH 73/87] Modif maquette Luc

---
 src/app/header/header.component.scss | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/app/header/header.component.scss b/src/app/header/header.component.scss
index 9955d2a28..75b58e083 100644
--- a/src/app/header/header.component.scss
+++ b/src/app/header/header.component.scss
@@ -70,7 +70,7 @@ header > nav {
     padding: 4px 8px 4px 4px;
     gap: 8px;
     border-radius: 24px;
-    border: 1px solid $grey-1;
+    border: 1px solid $grey-8;
     background: $grey-10;
     box-shadow: $box-shadow;
     overflow: hidden;
-- 
GitLab


From 4187825f46239732f5151f5899b35882e080762e Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 10 Mar 2025 10:30:50 +0100
Subject: [PATCH 74/87] Review : fix goBack padding

---
 src/app/profile/profile.component.scss | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/app/profile/profile.component.scss b/src/app/profile/profile.component.scss
index ebedab3b7..bde3668b6 100644
--- a/src/app/profile/profile.component.scss
+++ b/src/app/profile/profile.component.scss
@@ -42,6 +42,7 @@
   .goBack {
     max-width: 980px;
     width: 100%;
+    padding: 32px 0 0 48px;
   }
 
   .profile-container {
-- 
GitLab


From 1e29f39856122523d2967a7949f7b96a6caf18c4 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 10 Mar 2025 10:49:28 +0100
Subject: [PATCH 75/87] Review : userProfile + pending structures

---
 .../my-structures.component.html              |  2 +-
 .../profile-nav/profile-nav.component.html    |  2 +-
 .../profile-nav/profile-nav.component.ts      | 19 +++++++++++++++----
 src/app/profile/profile.component.html        |  2 +-
 4 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/src/app/profile/my-structures/my-structures.component.html b/src/app/profile/my-structures/my-structures.component.html
index 7110f8595..5a0eda180 100644
--- a/src/app/profile/my-structures/my-structures.component.html
+++ b/src/app/profile/my-structures/my-structures.component.html
@@ -1,5 +1,5 @@
 <div *ngIf="userProfile" class="content-container full-screen">
-  <app-profile-nav [userProfile]="userProfile" />
+  <app-profile-nav />
 
   <div class="structures-container">
     <div class="header">
diff --git a/src/app/profile/profile-nav/profile-nav.component.html b/src/app/profile/profile-nav/profile-nav.component.html
index abc084656..291ac9c0a 100644
--- a/src/app/profile/profile-nav/profile-nav.component.html
+++ b/src/app/profile/profile-nav/profile-nav.component.html
@@ -7,7 +7,7 @@
     role="menuitem"
     routerLinkActive="selected"
     [routerLink]="'/profil/mes-structures'"
-    [ngPlural]="userProfile?.structuresLink?.length || 0"
+    [ngPlural]="userProfile.structuresLink.length + this.userProfile.pendingStructuresLink.length"
   >
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myStructures'" />
     <ng-template ngPluralCase="1">Ma structure</ng-template>
diff --git a/src/app/profile/profile-nav/profile-nav.component.ts b/src/app/profile/profile-nav/profile-nav.component.ts
index 16577b2f9..1fa54a102 100644
--- a/src/app/profile/profile-nav/profile-nav.component.ts
+++ b/src/app/profile/profile-nav/profile-nav.component.ts
@@ -1,6 +1,7 @@
-import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
+import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';
 import { User } from '../../models/user.model';
 import { Utils } from '../../utils/utils';
+import { ProfileService } from '../services/profile.service';
 
 @Component({
   selector: 'app-profile-nav',
@@ -8,9 +9,19 @@ import { Utils } from '../../utils/utils';
   styleUrls: ['./profile-nav.component.scss'],
   changeDetection: ChangeDetectionStrategy.OnPush,
 })
-export class ProfileNavComponent {
+export class ProfileNavComponent implements OnInit {
   @Input() isPublic!: boolean;
-  @Input() userProfile!: User;
 
-  constructor(public utils: Utils) {}
+  public userProfile: User;
+
+  constructor(
+    public utils: Utils,
+    private profileService: ProfileService,
+  ) {}
+
+  ngOnInit(): void {
+    this.profileService.getProfile().then((profile) => {
+      this.userProfile = new User(profile);
+    });
+  }
 }
diff --git a/src/app/profile/profile.component.html b/src/app/profile/profile.component.html
index a6750f463..c4ea4690b 100644
--- a/src/app/profile/profile.component.html
+++ b/src/app/profile/profile.component.html
@@ -3,7 +3,7 @@
     <app-go-back (action)="goBack()" />
   </div>
 
-  <app-profile-nav [isPublic]="isPublic" [userProfile]="userProfile" />
+  <app-profile-nav [isPublic]="isPublic" />
 
   <div class="profile-container">
     <div class="header">
-- 
GitLab


From 94c4e2e539c29c11bc18b71b9019f7e8f06c5e9e Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 10 Mar 2025 10:57:05 +0100
Subject: [PATCH 76/87] Review : pending structures

---
 src/app/profile/my-structures/my-structures.component.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/app/profile/my-structures/my-structures.component.html b/src/app/profile/my-structures/my-structures.component.html
index 5a0eda180..8542d7fca 100644
--- a/src/app/profile/my-structures/my-structures.component.html
+++ b/src/app/profile/my-structures/my-structures.component.html
@@ -3,7 +3,7 @@
 
   <div class="structures-container">
     <div class="header">
-      <h1 [ngPlural]="userProfile.structuresLink.length">
+      <h1 [ngPlural]="userProfile.structuresLink.length + userProfile.pendingStructuresLink.length">
         <ng-template ngPluralCase="1">Ma structure</ng-template>
         <ng-template ngPluralCase="other">Mes structures</ng-template>
       </h1>
-- 
GitLab


From 07e29465f89a60b0762cbe1461b6646fd8f014e4 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 10 Mar 2025 12:15:05 +0100
Subject: [PATCH 77/87] Merge branch
 '659-mon-compte-nouvelle-navigation-colonne-g' into
 658-changement-interface-acces

---
 src/app/profile/profile-nav/profile-nav.component.ts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/app/profile/profile-nav/profile-nav.component.ts b/src/app/profile/profile-nav/profile-nav.component.ts
index 1fa54a102..de561bea9 100644
--- a/src/app/profile/profile-nav/profile-nav.component.ts
+++ b/src/app/profile/profile-nav/profile-nav.component.ts
@@ -11,6 +11,7 @@ import { ProfileService } from '../services/profile.service';
 })
 export class ProfileNavComponent implements OnInit {
   @Input() isPublic!: boolean;
+  @Input() location?: string;
 
   public userProfile: User;
 
-- 
GitLab


From 63aae88295afff8c3eb048133c34dcb87a14cc41 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 10 Mar 2025 12:25:54 +0100
Subject: [PATCH 78/87] Review : nav should scroll

---
 src/app/profile/profile-nav/profile-nav.component.scss | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/app/profile/profile-nav/profile-nav.component.scss b/src/app/profile/profile-nav/profile-nav.component.scss
index f5d912c58..ffe3ecb02 100644
--- a/src/app/profile/profile-nav/profile-nav.component.scss
+++ b/src/app/profile/profile-nav/profile-nav.component.scss
@@ -4,8 +4,6 @@
 @import 'layout';
 
 nav {
-  position: sticky;
-  top: 0;
   overflow-y: auto;
   display: flex;
   flex-direction: column;
-- 
GitLab


From dbd4aa073c76e373aa05edfab80e57c4a10daaa4 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 10 Mar 2025 13:21:06 +0100
Subject: [PATCH 79/87] review : remove no longer used function

---
 src/app/header/header.component.ts | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/src/app/header/header.component.ts b/src/app/header/header.component.ts
index 5e405c127..93af4da0e 100644
--- a/src/app/header/header.component.ts
+++ b/src/app/header/header.component.ts
@@ -60,10 +60,6 @@ export class HeaderComponent {
     this.closeMenu();
     this.router.navigateByUrl('/home');
   }
-  public goToProfile(): void {
-    this.showProfileMenu = false;
-    this.router.navigateByUrl('/profil');
-  }
 
   public toggleMenu(): void {
     this.showMenu = !this.showMenu;
-- 
GitLab


From 6508fbf64bef5093472bc9560800d09c80efbd0f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marl=C3=A8ne=20SIMONDANT?= <msimondant@grandlyon.com>
Date: Mon, 10 Mar 2025 13:23:25 +0000
Subject: [PATCH 80/87] Review ; suggestion

---
 src/app/header/header.component.html | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html
index cb71148f5..46dadffc4 100644
--- a/src/app/header/header.component.html
+++ b/src/app/header/header.component.html
@@ -290,7 +290,22 @@
 </div>
 
 <div *ngIf="showProfileMenu && isLoggedIn" class="profileModal" role="menu" cdkTrapFocus [@toggle]>
+<div
+  *ngIf="showProfileMenu && isLoggedIn"
+  class="profileModal"
+  role="menu"
+  cdkTrapFocus
+  [cdkTrapFocusAutoCapture]="true"
+  [@toggle]
+>
   <div
+    class="overlay"
+    tabindex="-1"
+    role="button"
+    aria-label="Fermer le menu Mon compte"
+    (click)="closeProfileMenu()"
+    (keyup.enter)="closeProfileMenu()"
+  ></div>
     class="overlay"
     tabindex="0"
     role="button"
-- 
GitLab


From 8eb7480da1334e4b7cf66ae024560fe809da5283 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 10 Mar 2025 14:34:56 +0100
Subject: [PATCH 81/87] Review : suggestion merge

---
 src/app/header/header.component.html | 39 +++++++++++-----------------
 1 file changed, 15 insertions(+), 24 deletions(-)

diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html
index 46dadffc4..6aea58d2e 100644
--- a/src/app/header/header.component.html
+++ b/src/app/header/header.component.html
@@ -290,31 +290,22 @@
 </div>
 
 <div *ngIf="showProfileMenu && isLoggedIn" class="profileModal" role="menu" cdkTrapFocus [@toggle]>
-<div
-  *ngIf="showProfileMenu && isLoggedIn"
-  class="profileModal"
-  role="menu"
-  cdkTrapFocus
-  [cdkTrapFocusAutoCapture]="true"
-  [@toggle]
->
   <div
-    class="overlay"
-    tabindex="-1"
-    role="button"
-    aria-label="Fermer le menu Mon compte"
-    (click)="closeProfileMenu()"
-    (keyup.enter)="closeProfileMenu()"
-  ></div>
-    class="overlay"
-    tabindex="0"
-    role="button"
-    aria-label="Fermer le menu Mon compte"
-    (click)="closeProfileMenu()"
-    (keyup.enter)="closeProfileMenu()"
+    *ngIf="showProfileMenu && isLoggedIn"
+    class="profileModal"
+    role="menu"
+    cdkTrapFocus
+    [cdkTrapFocusAutoCapture]="true"
+    [@toggle]
   >
-    <div class="overlay-header"></div>
-    <div class="overlay-content" [@fadeInOut]></div>
+    <div
+      class="overlay"
+      tabindex="-1"
+      role="button"
+      aria-label="Fermer le menu Mon compte"
+      (click)="closeProfileMenu()"
+      (keyup.enter)="closeProfileMenu()"
+    ></div>
   </div>
   <div class="profileMenu" [@fadeInOut]>
     <div class="profileInformation">
@@ -325,7 +316,7 @@
       </span>
     </div>
     <div class="profileLinks">
-      <app-profile-nav [isPublic]="false" [location]="'header'" />
+      <app-profile-nav [isPublic]="false" [location]="'header'" (onLinkClick)="closeProfileMenu()" />
     </div>
     <div class="profileButton">
       <app-button [variant]="'tertiary'" [label]="'Se déconnecter'" [size]="'small'" (action)="logout()" />
-- 
GitLab


From 73e79601b2cd5338c542fd6159fbe3a9768c1e0f Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 10 Mar 2025 14:41:17 +0100
Subject: [PATCH 82/87] Review

---
 src/app/profile/profile-nav/profile-nav.component.html | 2 +-
 src/app/profile/profile-nav/profile-nav.component.ts   | 4 ++++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/app/profile/profile-nav/profile-nav.component.html b/src/app/profile/profile-nav/profile-nav.component.html
index 3b20c661a..6701af42f 100644
--- a/src/app/profile/profile-nav/profile-nav.component.html
+++ b/src/app/profile/profile-nav/profile-nav.component.html
@@ -7,7 +7,7 @@
     role="menuitem"
     routerLinkActive="selected"
     [routerLink]="'/profil/mes-structures'"
-    [ngPlural]="userProfile.structuresLink.length + this.userProfile.pendingStructuresLink.length"
+    [ngPlural]="totalStructuresCount"
   >
     <app-svg-icon [iconClass]="'icon-16'" [folder]="'ico'" [icon]="'myStructures'" />
     <ng-template ngPluralCase="1">Ma structure</ng-template>
diff --git a/src/app/profile/profile-nav/profile-nav.component.ts b/src/app/profile/profile-nav/profile-nav.component.ts
index de561bea9..73788cc87 100644
--- a/src/app/profile/profile-nav/profile-nav.component.ts
+++ b/src/app/profile/profile-nav/profile-nav.component.ts
@@ -25,4 +25,8 @@ export class ProfileNavComponent implements OnInit {
       this.userProfile = new User(profile);
     });
   }
+
+  get totalStructuresCount(): number {
+    return (this.userProfile.structuresLink?.length ?? 0) + (this.userProfile.pendingStructuresLink?.length ?? 0);
+  }
 }
-- 
GitLab


From 8ebf8e8f11523d5da83c7fbf1b8f9174dbe9bca2 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 10 Mar 2025 14:45:16 +0100
Subject: [PATCH 83/87] add safety in case there is a pb with the user profile

---
 src/app/profile/profile-nav/profile-nav.component.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/app/profile/profile-nav/profile-nav.component.ts b/src/app/profile/profile-nav/profile-nav.component.ts
index 73788cc87..9bd25ff9b 100644
--- a/src/app/profile/profile-nav/profile-nav.component.ts
+++ b/src/app/profile/profile-nav/profile-nav.component.ts
@@ -27,6 +27,6 @@ export class ProfileNavComponent implements OnInit {
   }
 
   get totalStructuresCount(): number {
-    return (this.userProfile.structuresLink?.length ?? 0) + (this.userProfile.pendingStructuresLink?.length ?? 0);
+    return (this.userProfile?.structuresLink?.length ?? 0) + (this.userProfile?.pendingStructuresLink?.length ?? 0);
   }
 }
-- 
GitLab


From 0f322bd7704923fdfe1aca59479729d46f809cdf Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 10 Mar 2025 15:27:06 +0100
Subject: [PATCH 84/87] Review : new component for notifications

---
 src/app/app.module.ts                         |  2 ++
 src/app/header/header.component.html          | 10 ++------
 src/app/header/header.component.scss          | 14 -----------
 .../notifications.component.html              |  5 ++++
 .../notifications.component.scss              | 23 +++++++++++++++++++
 .../notifications/notifications.component.ts  |  8 +++++++
 6 files changed, 40 insertions(+), 22 deletions(-)
 create mode 100644 src/app/header/notifications/notifications.component.html
 create mode 100644 src/app/header/notifications/notifications.component.scss
 create mode 100644 src/app/header/notifications/notifications.component.ts

diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 81d4c9a1a..7921148a4 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -26,6 +26,7 @@ import { DeactivateGuard } from './guards/deactivate.guard';
 import { ResetPasswordTokenGuard } from './guards/resetPasswordToken.guard';
 import { RoleGuard } from './guards/role.guard';
 import { HeaderComponent } from './header/header.component';
+import { NotificationsComponent } from './header/notifications/notifications.component';
 import { LegalNoticeComponent } from './legal-notice/legal-notice.component';
 import { LoginComponent } from './login/login.component';
 import { MapModule } from './map/map.module';
@@ -49,6 +50,7 @@ import { StructureJoinComponent } from './structure/structure-join/structure-joi
   declarations: [
     AppComponent,
     HeaderComponent,
+    NotificationsComponent,
     FooterComponent,
     StructureDetailsComponent,
     LegalNoticeComponent,
diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html
index 6aea58d2e..5a58ccd93 100644
--- a/src/app/header/header.component.html
+++ b/src/app/header/header.component.html
@@ -28,11 +28,7 @@
         alt
       />
     </div>
-    <div *ngIf="isLoggedIn" class="notifications hide-on-desktop">
-      <a class="notifications" aria-label="notifications" role="menuitem" [routerLink]="'/profil/tableau-de-bord/'">
-        <app-svg-icon [iconClass]="'icon-24'" [folder]="'ico'" [icon]="'notification'" />
-      </a>
-    </div>
+    <app-notifications *ngIf="isLoggedIn" class="hide-on-desktop" />
     <div class="rightHeader">
       <div class="menuItems" role="menu">
         <a
@@ -106,9 +102,7 @@
           Administration
         </a>
       </div>
-      <a class="notifications" aria-label="notifications" role="menuitem" [routerLink]="'/profil/tableau-de-bord/'">
-        <app-svg-icon [iconClass]="'icon-24'" [folder]="'ico'" [icon]="'notification'" />
-      </a>
+      <app-notifications *ngIf="isLoggedIn" class="hide-on-mobile" />
       <button
         *ngIf="isLoggedIn"
         type="button"
diff --git a/src/app/header/header.component.scss b/src/app/header/header.component.scss
index 75b58e083..b06e1a475 100644
--- a/src/app/header/header.component.scss
+++ b/src/app/header/header.component.scss
@@ -39,20 +39,6 @@ header > nav {
     }
   }
 
-  .notifications {
-    width: 32px;
-    height: 32px;
-    border: 1px solid transparent;
-    place-content: center;
-    &:hover {
-      border-radius: 4px;
-      border: 1px solid $grey-3;
-    }
-    &:active {
-      background-color: $grey-8;
-    }
-  }
-
   .login {
     ::ng-deep button.secondary {
       border-radius: 24px;
diff --git a/src/app/header/notifications/notifications.component.html b/src/app/header/notifications/notifications.component.html
new file mode 100644
index 000000000..bec37e6f9
--- /dev/null
+++ b/src/app/header/notifications/notifications.component.html
@@ -0,0 +1,5 @@
+<div class="notifications">
+  <a aria-label="notifications" role="menuitem" [routerLink]="'/profil/tableau-de-bord/'">
+    <app-svg-icon [iconClass]="'icon-24'" [folder]="'ico'" [icon]="'notification'" />
+  </a>
+</div>
diff --git a/src/app/header/notifications/notifications.component.scss b/src/app/header/notifications/notifications.component.scss
new file mode 100644
index 000000000..b631572ce
--- /dev/null
+++ b/src/app/header/notifications/notifications.component.scss
@@ -0,0 +1,23 @@
+@import 'typography';
+@import 'layout';
+@import 'color';
+@import 'breakpoint';
+@import 'z-index';
+
+.notifications {
+  width: 32px;
+  height: 32px;
+  border: 1px solid transparent;
+  place-content: center;
+  a {
+    place-content: center;
+    display: flex;
+  }
+  &:hover {
+    border-radius: 4px;
+    border: 1px solid $grey-3;
+  }
+  &:active {
+    background-color: $grey-8;
+  }
+}
diff --git a/src/app/header/notifications/notifications.component.ts b/src/app/header/notifications/notifications.component.ts
new file mode 100644
index 000000000..78b7db0e8
--- /dev/null
+++ b/src/app/header/notifications/notifications.component.ts
@@ -0,0 +1,8 @@
+import { Component } from '@angular/core';
+
+@Component({
+  selector: 'app-notifications',
+  templateUrl: './notifications.component.html',
+  styleUrls: ['./notifications.component.scss'],
+})
+export class NotificationsComponent {}
-- 
GitLab


From 4004bf8904aa61875c1111c9b8f58b73ac297384 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 10 Mar 2025 15:36:00 +0100
Subject: [PATCH 85/87] Review : fix focus visibility

---
 src/app/profile/profile-nav/profile-nav.component.scss | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/app/profile/profile-nav/profile-nav.component.scss b/src/app/profile/profile-nav/profile-nav.component.scss
index ffe3ecb02..0594b32f1 100644
--- a/src/app/profile/profile-nav/profile-nav.component.scss
+++ b/src/app/profile/profile-nav/profile-nav.component.scss
@@ -4,7 +4,6 @@
 @import 'layout';
 
 nav {
-  overflow-y: auto;
   display: flex;
   flex-direction: column;
   align-self: stretch;
-- 
GitLab


From aad46baf2d286f63e08fc964953fa9011a104e63 Mon Sep 17 00:00:00 2001
From: Marlene Simondant <msimondant@grandlyon.com>
Date: Mon, 10 Mar 2025 16:46:38 +0100
Subject: [PATCH 86/87] Review : fix merge

---
 src/app/header/header.component.html          | 21 +++++++++++--------
 .../profile-nav/profile-nav.component.scss    |  4 +---
 2 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html
index 5a58ccd93..b3538306a 100644
--- a/src/app/header/header.component.html
+++ b/src/app/header/header.component.html
@@ -283,15 +283,18 @@
   ></div>
 </div>
 
-<div *ngIf="showProfileMenu && isLoggedIn" class="profileModal" role="menu" cdkTrapFocus [@toggle]>
-  <div
-    *ngIf="showProfileMenu && isLoggedIn"
-    class="profileModal"
-    role="menu"
-    cdkTrapFocus
-    [cdkTrapFocusAutoCapture]="true"
-    [@toggle]
-  >
+<div
+  *ngIf="showProfileMenu && isLoggedIn"
+  class="profileModal"
+  role="menu"
+  cdkTrapFocus
+  tabindex="-1"
+  [cdkTrapFocusAutoCapture]="true"
+  [@toggle]
+  (click)="closeProfileMenu()"
+  (keyup)="(0)"
+>
+  <div *ngIf="showProfileMenu && isLoggedIn" class="profileModal" role="menu">
     <div
       class="overlay"
       tabindex="-1"
diff --git a/src/app/profile/profile-nav/profile-nav.component.scss b/src/app/profile/profile-nav/profile-nav.component.scss
index 0594b32f1..34288c7e6 100644
--- a/src/app/profile/profile-nav/profile-nav.component.scss
+++ b/src/app/profile/profile-nav/profile-nav.component.scss
@@ -53,9 +53,7 @@ nav {
       @include font-regular-14;
       padding: 0 12px;
       &.selected {
-        background: none;
-        font-weight: normal;
-        color: $grey-4-5-1;
+        font-weight: bold;
       }
       &:hover {
         background: $grey-8;
-- 
GitLab


From 53d2502f67e1d88afe6b9fe03eaff2b5350aed08 Mon Sep 17 00:00:00 2001
From: Pierre Ecarlat <pecarlat@grandlyon.com>
Date: Tue, 11 Mar 2025 10:43:59 +0100
Subject: [PATCH 87/87] added trap for burger menu

---
 src/app/header/header.component.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html
index b3538306a..e5c890298 100644
--- a/src/app/header/header.component.html
+++ b/src/app/header/header.component.html
@@ -127,7 +127,7 @@
   </nav>
 </header>
 
-<div *ngIf="showMenu" role="menu" class="mobileMenu" [@slideInOut]>
+<div *ngIf="showMenu" role="menu" class="mobileMenu" cdkTrapFocus [@slideInOut]>
   <div class="menuContent">
     <div class="title">
       <span>Menu</span>
-- 
GitLab