From 04f5bcc810bc98ca1f9659cf8816043b3b1a532f Mon Sep 17 00:00:00 2001
From: Pierre Ecarlat <pecarlat@grandlyon.com>
Date: Tue, 11 Mar 2025 15:12:27 +0100
Subject: [PATCH 1/7] wip

---
 package-lock.json                                  | 14 +++++++++-----
 package.json                                       |  6 +++---
 .../manage-employers/manage-employers.component.ts |  2 +-
 .../manage-jobs/manage-jobs.component.ts           |  2 +-
 4 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 0ed5f96e6..08496c09a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,7 +8,7 @@
       "name": "pamn",
       "version": "3.4.1",
       "dependencies": {
-        "@ag-grid-community/csv-export": "^29.0.0",
+        "@ag-grid-community/csv-export": "^29.3.0",
         "@angular/animations": "^17.3.8",
         "@angular/cdk": "^17.3.6",
         "@angular/common": "^17.3.8",
@@ -22,8 +22,8 @@
         "@asymmetrik/ngx-leaflet": "^17.0.0",
         "@ngx-translate/core": "^14.0.0",
         "@storybook/addon-a11y": "^8.5.3",
-        "ag-grid-angular": "^29.0.0",
-        "ag-grid-community": "^29.0.0",
+        "ag-grid-angular": "^29.3.0",
+        "ag-grid-community": "^29.3.0",
         "jwt-decode": "^3.1.2",
         "leaflet": "^1.9.4",
         "leaflet.locatecontrol": "^0.83.1",
@@ -92,12 +92,14 @@
     "node_modules/@ag-grid-community/core": {
       "version": "29.3.5",
       "resolved": "https://registry.npmjs.org/@ag-grid-community/core/-/core-29.3.5.tgz",
-      "integrity": "sha512-r86bOCscnKVtaYyKqlN2UCtfbjf4UcmxHfVuXzJ94iN8Jy3iiQVrbQnbNArnjR589Bt/1VR/m+SdAMsOLcdpag=="
+      "integrity": "sha512-r86bOCscnKVtaYyKqlN2UCtfbjf4UcmxHfVuXzJ94iN8Jy3iiQVrbQnbNArnjR589Bt/1VR/m+SdAMsOLcdpag==",
+      "license": "MIT"
     },
     "node_modules/@ag-grid-community/csv-export": {
       "version": "29.3.5",
       "resolved": "https://registry.npmjs.org/@ag-grid-community/csv-export/-/csv-export-29.3.5.tgz",
       "integrity": "sha512-8NOAmioHhapqvYdu1QjAzwQH5jihuOlaKk6FpF/8ECvLQePhoIK6rOyhcktOot4ZWo5f8q/4Ph5LGK3oFzdU9g==",
+      "license": "MIT",
       "dependencies": {
         "@ag-grid-community/core": "~29.3.5"
       }
@@ -7613,6 +7615,7 @@
       "version": "29.3.5",
       "resolved": "https://registry.npmjs.org/ag-grid-angular/-/ag-grid-angular-29.3.5.tgz",
       "integrity": "sha512-UWDZvDSrS9Z+LFZ1G0HFOeamITD8kEHgO9eooJV4DxSmYoBGMGruLZV1QIPhjQwBVe8ib5TWw3Q1erSf/bcVSw==",
+      "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
       },
@@ -7625,7 +7628,8 @@
     "node_modules/ag-grid-community": {
       "version": "29.3.5",
       "resolved": "https://registry.npmjs.org/ag-grid-community/-/ag-grid-community-29.3.5.tgz",
-      "integrity": "sha512-LxUo21f2/CH31ACEs1C7Q/ggGGI1fQPSTB4aY5OThmM+lBkygZ7QszBE8jpfgWOIjvjdtcdIeQbmbjkHeMsA7A=="
+      "integrity": "sha512-LxUo21f2/CH31ACEs1C7Q/ggGGI1fQPSTB4aY5OThmM+lBkygZ7QszBE8jpfgWOIjvjdtcdIeQbmbjkHeMsA7A==",
+      "license": "MIT"
     },
     "node_modules/agent-base": {
       "version": "7.1.1",
diff --git a/package.json b/package.json
index 47d84a58a..e8040b181 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,7 @@
     "npm": "^10.2.0"
   },
   "dependencies": {
-    "@ag-grid-community/csv-export": "^29.0.0",
+    "@ag-grid-community/csv-export": "^29.3.0",
     "@angular/animations": "^17.3.8",
     "@angular/cdk": "^17.3.6",
     "@angular/common": "^17.3.8",
@@ -36,8 +36,8 @@
     "@asymmetrik/ngx-leaflet": "^17.0.0",
     "@ngx-translate/core": "^14.0.0",
     "@storybook/addon-a11y": "^8.5.3",
-    "ag-grid-angular": "^29.0.0",
-    "ag-grid-community": "^29.0.0",
+    "ag-grid-angular": "^29.3.0",
+    "ag-grid-community": "^29.3.0",
     "jwt-decode": "^3.1.2",
     "leaflet": "^1.9.4",
     "leaflet.locatecontrol": "^0.83.1",
diff --git a/src/app/admin/components/manage-employers/manage-employers.component.ts b/src/app/admin/components/manage-employers/manage-employers.component.ts
index afdd9b5d7..c89075dac 100644
--- a/src/app/admin/components/manage-employers/manage-employers.component.ts
+++ b/src/app/admin/components/manage-employers/manage-employers.component.ts
@@ -73,7 +73,7 @@ export class ManageEmployersComponent {
       },
       {
         headerName: 'Fusionner',
-        field: '_toMergeWith',
+        // field: '_toMergeWith',
         singleClickEdit: true,
         cellEditor: 'agSelectCellEditor',
         cellEditorParams: (): { values: string[] } => {
diff --git a/src/app/admin/components/manage-jobs/manage-jobs.component.ts b/src/app/admin/components/manage-jobs/manage-jobs.component.ts
index 7cad15234..5ca686adc 100644
--- a/src/app/admin/components/manage-jobs/manage-jobs.component.ts
+++ b/src/app/admin/components/manage-jobs/manage-jobs.component.ts
@@ -103,7 +103,7 @@ export class ManageJobsComponent {
       },
       {
         headerName: 'Fusionner',
-        field: '_toMergeWith',
+        // field: '_toMergeWith',
         cellEditor: 'agSelectCellEditor',
         singleClickEdit: true,
         cellEditorParams: (): { values: string[] } => {
-- 
GitLab


From 954b5d6c82993152a3ba7bd86a063ac364d38372 Mon Sep 17 00:00:00 2001
From: Pierre Ecarlat <pecarlat@grandlyon.com>
Date: Tue, 11 Mar 2025 17:33:05 +0100
Subject: [PATCH 2/7] update to 32

---
 package-lock.json                             | 56 ++++++++++++-------
 package.json                                  |  6 +-
 .../manage-employers.component.ts             |  2 +-
 .../manage-jobs/manage-jobs.component.ts      |  2 +-
 .../manage-users/manage-users.component.ts    |  6 +-
 .../admin-structures-list.component.ts        | 10 ++--
 6 files changed, 49 insertions(+), 33 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 08496c09a..ec93a8c9a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,7 +8,7 @@
       "name": "pamn",
       "version": "3.4.1",
       "dependencies": {
-        "@ag-grid-community/csv-export": "^29.3.0",
+        "@ag-grid-community/csv-export": "^32.2.0",
         "@angular/animations": "^17.3.8",
         "@angular/cdk": "^17.3.6",
         "@angular/common": "^17.3.8",
@@ -22,8 +22,8 @@
         "@asymmetrik/ngx-leaflet": "^17.0.0",
         "@ngx-translate/core": "^14.0.0",
         "@storybook/addon-a11y": "^8.5.3",
-        "ag-grid-angular": "^29.3.0",
-        "ag-grid-community": "^29.3.0",
+        "ag-grid-angular": "^32.2.0",
+        "ag-grid-community": "^32.2.0",
         "jwt-decode": "^3.1.2",
         "leaflet": "^1.9.4",
         "leaflet.locatecontrol": "^0.83.1",
@@ -90,18 +90,23 @@
       "dev": true
     },
     "node_modules/@ag-grid-community/core": {
-      "version": "29.3.5",
-      "resolved": "https://registry.npmjs.org/@ag-grid-community/core/-/core-29.3.5.tgz",
-      "integrity": "sha512-r86bOCscnKVtaYyKqlN2UCtfbjf4UcmxHfVuXzJ94iN8Jy3iiQVrbQnbNArnjR589Bt/1VR/m+SdAMsOLcdpag==",
-      "license": "MIT"
+      "version": "32.3.4",
+      "resolved": "https://registry.npmjs.org/@ag-grid-community/core/-/core-32.3.4.tgz",
+      "integrity": "sha512-g1CJOQuA4uRx1U3VP9SZLnTJBYdMwCTM348FsubdI6anaqxnHv3X0kridq9v1v26qXbl7yytm5X3v1hPcV8wVA==",
+      "license": "MIT",
+      "dependencies": {
+        "ag-charts-types": "10.3.4",
+        "tslib": "^2.3.0"
+      }
     },
     "node_modules/@ag-grid-community/csv-export": {
-      "version": "29.3.5",
-      "resolved": "https://registry.npmjs.org/@ag-grid-community/csv-export/-/csv-export-29.3.5.tgz",
-      "integrity": "sha512-8NOAmioHhapqvYdu1QjAzwQH5jihuOlaKk6FpF/8ECvLQePhoIK6rOyhcktOot4ZWo5f8q/4Ph5LGK3oFzdU9g==",
+      "version": "32.3.4",
+      "resolved": "https://registry.npmjs.org/@ag-grid-community/csv-export/-/csv-export-32.3.4.tgz",
+      "integrity": "sha512-LNVes/iz7y6F3Rbo1kcv/1WbvGTOp5QABPqvkqVEkQd6Fmj7gCkLYjfZ8HVRdcS+IssQq8v0ZLAi/qStC1zAaw==",
       "license": "MIT",
       "dependencies": {
-        "@ag-grid-community/core": "~29.3.5"
+        "@ag-grid-community/core": "32.3.4",
+        "tslib": "^2.3.0"
       }
     },
     "node_modules/@ampproject/remapping": {
@@ -7611,25 +7616,34 @@
         "node": ">=8.9.0"
       }
     },
+    "node_modules/ag-charts-types": {
+      "version": "10.3.4",
+      "resolved": "https://registry.npmjs.org/ag-charts-types/-/ag-charts-types-10.3.4.tgz",
+      "integrity": "sha512-MU+3gvKn1jEyLlMHS0Vu0nHmIQxiVJAnA6ftUatLZvV0c7hOWap4VWghqZ0cVZUJsCdMI59Iuq1u3xquKv4LOQ==",
+      "license": "MIT"
+    },
     "node_modules/ag-grid-angular": {
-      "version": "29.3.5",
-      "resolved": "https://registry.npmjs.org/ag-grid-angular/-/ag-grid-angular-29.3.5.tgz",
-      "integrity": "sha512-UWDZvDSrS9Z+LFZ1G0HFOeamITD8kEHgO9eooJV4DxSmYoBGMGruLZV1QIPhjQwBVe8ib5TWw3Q1erSf/bcVSw==",
+      "version": "32.3.4",
+      "resolved": "https://registry.npmjs.org/ag-grid-angular/-/ag-grid-angular-32.3.4.tgz",
+      "integrity": "sha512-47dzr7UEmZ+PTQOY2gYgO/IvcF9CN0EWrA0Uii834/oLRz7B1ubS6jvAA10KOuTk/botwf///KqKnmi848Wgbw==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
       },
       "peerDependencies": {
-        "@angular/common": ">= 12.0.0",
-        "@angular/core": ">= 12.0.0",
-        "ag-grid-community": "~29.3.5"
+        "@angular/common": ">= 16.0.0",
+        "@angular/core": ">= 16.0.0",
+        "ag-grid-community": "32.3.4"
       }
     },
     "node_modules/ag-grid-community": {
-      "version": "29.3.5",
-      "resolved": "https://registry.npmjs.org/ag-grid-community/-/ag-grid-community-29.3.5.tgz",
-      "integrity": "sha512-LxUo21f2/CH31ACEs1C7Q/ggGGI1fQPSTB4aY5OThmM+lBkygZ7QszBE8jpfgWOIjvjdtcdIeQbmbjkHeMsA7A==",
-      "license": "MIT"
+      "version": "32.3.4",
+      "resolved": "https://registry.npmjs.org/ag-grid-community/-/ag-grid-community-32.3.4.tgz",
+      "integrity": "sha512-iYQYFapKkqtCml1BvIX/nyNO6SvZYe/Z/1hLa7/7Dpzj2uqABJZIPGgW/ZTOc+/YiM9JYJWMkD7c+5E23GzkAw==",
+      "license": "MIT",
+      "dependencies": {
+        "ag-charts-types": "10.3.4"
+      }
     },
     "node_modules/agent-base": {
       "version": "7.1.1",
diff --git a/package.json b/package.json
index e8040b181..cd43b4744 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,7 @@
     "npm": "^10.2.0"
   },
   "dependencies": {
-    "@ag-grid-community/csv-export": "^29.3.0",
+    "@ag-grid-community/csv-export": "^32.2.0",
     "@angular/animations": "^17.3.8",
     "@angular/cdk": "^17.3.6",
     "@angular/common": "^17.3.8",
@@ -36,8 +36,8 @@
     "@asymmetrik/ngx-leaflet": "^17.0.0",
     "@ngx-translate/core": "^14.0.0",
     "@storybook/addon-a11y": "^8.5.3",
-    "ag-grid-angular": "^29.3.0",
-    "ag-grid-community": "^29.3.0",
+    "ag-grid-angular": "^32.2.0",
+    "ag-grid-community": "^32.2.0",
     "jwt-decode": "^3.1.2",
     "leaflet": "^1.9.4",
     "leaflet.locatecontrol": "^0.83.1",
diff --git a/src/app/admin/components/manage-employers/manage-employers.component.ts b/src/app/admin/components/manage-employers/manage-employers.component.ts
index c89075dac..e646a82d6 100644
--- a/src/app/admin/components/manage-employers/manage-employers.component.ts
+++ b/src/app/admin/components/manage-employers/manage-employers.component.ts
@@ -73,7 +73,7 @@ export class ManageEmployersComponent {
       },
       {
         headerName: 'Fusionner',
-        // field: '_toMergeWith',
+        field: '_toMergeWith' as any,
         singleClickEdit: true,
         cellEditor: 'agSelectCellEditor',
         cellEditorParams: (): { values: string[] } => {
diff --git a/src/app/admin/components/manage-jobs/manage-jobs.component.ts b/src/app/admin/components/manage-jobs/manage-jobs.component.ts
index 5ca686adc..32dff02b5 100644
--- a/src/app/admin/components/manage-jobs/manage-jobs.component.ts
+++ b/src/app/admin/components/manage-jobs/manage-jobs.component.ts
@@ -103,7 +103,7 @@ export class ManageJobsComponent {
       },
       {
         headerName: 'Fusionner',
-        // field: '_toMergeWith',
+        field: '_toMergeWith' as any,
         cellEditor: 'agSelectCellEditor',
         singleClickEdit: true,
         cellEditorParams: (): { values: string[] } => {
diff --git a/src/app/admin/components/manage-users/manage-users.component.ts b/src/app/admin/components/manage-users/manage-users.component.ts
index cd3b2f7b1..de2b9d022 100644
--- a/src/app/admin/components/manage-users/manage-users.component.ts
+++ b/src/app/admin/components/manage-users/manage-users.component.ts
@@ -121,7 +121,7 @@ export class ManageUsersComponent {
         structures: 'structures',
       },
       minWidth: 350,
-      field: 'structures',
+      field: 'structures' as any,
     },
     {
       headerName: 'Fonction',
@@ -210,7 +210,7 @@ export class ManageUsersComponent {
     {
       minWidth: 200,
       headerName: 'Structure(s)',
-      field: 'structures',
+      field: 'structures' as any,
       valueGetter: this.getStructureNames.bind(this),
       cellRenderer: 'agGroupCellRenderer',
       autoHeight: true,
@@ -240,7 +240,7 @@ export class ManageUsersComponent {
 
     this.columnDefsUnattached.splice(this.columnDefsUnattached.length - 1, 0, {
       headerName: 'Non rattaché depuis',
-      field: 'unattachedSince',
+      field: 'unattachedSince' as any,
       minWidth: 180,
       valueGetter: this.dateValueGetter,
       valueFormatter: this.dateValueFormatter,
diff --git a/src/app/admin/components/structures-list/admin-structures-list.component.ts b/src/app/admin/components/structures-list/admin-structures-list.component.ts
index 52ff04234..a25a5c340 100644
--- a/src/app/admin/components/structures-list/admin-structures-list.component.ts
+++ b/src/app/admin/components/structures-list/admin-structures-list.component.ts
@@ -88,7 +88,7 @@ export class AdminStructuresListComponent implements OnInit {
     },
     {
       headerName: 'Mettre à jour la date',
-      field: 'updateDateButton',
+      field: 'updateDateButton' as any,
       cellRenderer: ButtonCellRendererComponent,
       cellRendererParams: { label: 'Update', type: 'default' } as ButtonCellRendererParams,
       flex: 1,
@@ -97,7 +97,7 @@ export class AdminStructuresListComponent implements OnInit {
     },
     {
       headerName: 'Commentaire',
-      field: 'comment',
+      field: 'comment' as any,
       flex: 1,
       editable: true,
       cellEditor: 'agLargeTextCellEditor',
@@ -187,7 +187,8 @@ export class AdminStructuresListComponent implements OnInit {
   private handleReminder(params: ICellRendererParams): void {
     this.adminService.updateLastUpdateMail(params.data.structureId).subscribe({
       next: () => {
-        params.api.getRowNode(String(params.rowIndex)).setDataValue('lastUpdateMail', new Date());
+        // params.api.getRowNode(String(params.rowIndex)).setDataValue('lastUpdateMail', new Date());
+        params.node.setDataValue('lastUpdateMail', new Date());
         this.notificationService.showSuccess('Relance effectuée');
       },
       error: (error) => {
@@ -200,7 +201,8 @@ export class AdminStructuresListComponent implements OnInit {
   private handleUpdatedAt(params: ICellRendererParams): void {
     this.adminService.touchStructure(params.data.structureId).subscribe({
       next: () => {
-        const rowNode = params.api.getRowNode(String(params.rowIndex));
+        // const rowNode = params.api.getRowNode(String(params.rowIndex));
+        const rowNode = params.node;
         rowNode.setDataValue('updatedAt', new Date());
         params.data.isOutdated = false;
         params.api.redrawRows({
-- 
GitLab


From ee173c4e04c83ac0d0da5a536b03fb64f89dcc5f Mon Sep 17 00:00:00 2001
From: Pierre Ecarlat <pecarlat@grandlyon.com>
Date: Wed, 12 Mar 2025 14:55:21 +0100
Subject: [PATCH 3/7] fixed update to 32

---
 .../manage-users/manage-users.component.ts    | 21 +++++++------------
 .../admin-structures-list.component.ts        | 10 ++++-----
 src/app/models/user.model.ts                  |  1 +
 3 files changed, 13 insertions(+), 19 deletions(-)

diff --git a/src/app/admin/components/manage-users/manage-users.component.ts b/src/app/admin/components/manage-users/manage-users.component.ts
index de2b9d022..a8fbae0d6 100644
--- a/src/app/admin/components/manage-users/manage-users.component.ts
+++ b/src/app/admin/components/manage-users/manage-users.component.ts
@@ -121,7 +121,7 @@ export class ManageUsersComponent {
         structures: 'structures',
       },
       minWidth: 350,
-      field: 'structures' as any,
+      editable: false,
     },
     {
       headerName: 'Fonction',
@@ -208,12 +208,12 @@ export class ManageUsersComponent {
       field: 'email',
     },
     {
-      minWidth: 200,
       headerName: 'Structure(s)',
-      field: 'structures' as any,
-      valueGetter: this.getStructureNames.bind(this),
       cellRenderer: 'agGroupCellRenderer',
+      minWidth: 200,
       autoHeight: true,
+      valueGetter: (params) => params.data.structuresLink,
+      editable: false,
     },
     {
       minWidth: 50,
@@ -240,11 +240,12 @@ export class ManageUsersComponent {
 
     this.columnDefsUnattached.splice(this.columnDefsUnattached.length - 1, 0, {
       headerName: 'Non rattaché depuis',
-      field: 'unattachedSince' as any,
+      field: 'unattachedSince',
       minWidth: 180,
       valueGetter: this.dateValueGetter,
       valueFormatter: this.dateValueFormatter,
       comparator: this.dateComparator,
+      editable: false,
     });
     this.components = {
       deleteUserComponent: DeleteUserComponent,
@@ -257,15 +258,6 @@ export class ManageUsersComponent {
     this.findTempUsers();
   }
 
-  private getStructureNames(params): string {
-    const structuresLink = params.data?.structuresLink;
-    if (!structuresLink || structuresLink.length === 0) {
-      return '';
-    }
-    const structureNames = structuresLink.map((structure) => (structure as Structure)?.structureName);
-    return structureNames.join('\n');
-  }
-
   public onDeleteButtonClick(arg): void {
     this.deleteUser(arg.data, false);
   }
@@ -447,6 +439,7 @@ export class ManageUsersComponent {
   }
 
   public findTempUsers(): void {
+    // TODO: Change server side so it returns structureNames instead of ids
     this.tempUserService.getAllTempUsers().subscribe((data) => {
       this.tempUsers = data;
     });
diff --git a/src/app/admin/components/structures-list/admin-structures-list.component.ts b/src/app/admin/components/structures-list/admin-structures-list.component.ts
index a25a5c340..850b60e1e 100644
--- a/src/app/admin/components/structures-list/admin-structures-list.component.ts
+++ b/src/app/admin/components/structures-list/admin-structures-list.component.ts
@@ -187,8 +187,9 @@ export class AdminStructuresListComponent implements OnInit {
   private handleReminder(params: ICellRendererParams): void {
     this.adminService.updateLastUpdateMail(params.data.structureId).subscribe({
       next: () => {
-        // params.api.getRowNode(String(params.rowIndex)).setDataValue('lastUpdateMail', new Date());
-        params.node.setDataValue('lastUpdateMail', new Date());
+        const rowNode = params.node;
+        const updatedData = { ...params.data, lastUpdateMail: new Date() };
+        rowNode.setData(updatedData);
         this.notificationService.showSuccess('Relance effectuée');
       },
       error: (error) => {
@@ -201,10 +202,9 @@ export class AdminStructuresListComponent implements OnInit {
   private handleUpdatedAt(params: ICellRendererParams): void {
     this.adminService.touchStructure(params.data.structureId).subscribe({
       next: () => {
-        // const rowNode = params.api.getRowNode(String(params.rowIndex));
         const rowNode = params.node;
-        rowNode.setDataValue('updatedAt', new Date());
-        params.data.isOutdated = false;
+        const updatedData = { ...params.data, updatedAt: new Date(), isOutdated: false };
+        rowNode.setData(updatedData);
         params.api.redrawRows({
           rowNodes: [rowNode],
         });
diff --git a/src/app/models/user.model.ts b/src/app/models/user.model.ts
index 3f7b18292..546cf6cee 100644
--- a/src/app/models/user.model.ts
+++ b/src/app/models/user.model.ts
@@ -28,6 +28,7 @@ export class User {
   avatar?: string;
   withAppointment?: boolean;
   lastLoginDate?: Date;
+  unattachedSince?: Date;
   constructor(obj?: any) {
     Object.assign(this, obj);
     this.surname = this.surname.toUpperCase();
-- 
GitLab


From 6ffb94e1cc80c4c755a2e6df15a24a96ec40177c Mon Sep 17 00:00:00 2001
From: Pierre Ecarlat <pecarlat@grandlyon.com>
Date: Wed, 12 Mar 2025 15:44:28 +0100
Subject: [PATCH 4/7] wip

---
 package-lock.json                             | 32 +++++++++++--------
 package.json                                  |  6 ++--
 .../espace-coop-cnfs.component.html           |  4 +--
 .../espace-coop-cnfs.component.ts             |  3 ++
 4 files changed, 27 insertions(+), 18 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index ec93a8c9a..6e428b9d3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,7 +8,7 @@
       "name": "pamn",
       "version": "3.4.1",
       "dependencies": {
-        "@ag-grid-community/csv-export": "^32.2.0",
+        "@ag-grid-community/csv-export": "^32.3.4",
         "@angular/animations": "^17.3.8",
         "@angular/cdk": "^17.3.6",
         "@angular/common": "^17.3.8",
@@ -22,8 +22,8 @@
         "@asymmetrik/ngx-leaflet": "^17.0.0",
         "@ngx-translate/core": "^14.0.0",
         "@storybook/addon-a11y": "^8.5.3",
-        "ag-grid-angular": "^32.2.0",
-        "ag-grid-community": "^32.2.0",
+        "ag-grid-angular": "^33.1.1",
+        "ag-grid-community": "^33.1.1",
         "jwt-decode": "^3.1.2",
         "leaflet": "^1.9.4",
         "leaflet.locatecontrol": "^0.83.1",
@@ -7623,28 +7623,34 @@
       "license": "MIT"
     },
     "node_modules/ag-grid-angular": {
-      "version": "32.3.4",
-      "resolved": "https://registry.npmjs.org/ag-grid-angular/-/ag-grid-angular-32.3.4.tgz",
-      "integrity": "sha512-47dzr7UEmZ+PTQOY2gYgO/IvcF9CN0EWrA0Uii834/oLRz7B1ubS6jvAA10KOuTk/botwf///KqKnmi848Wgbw==",
+      "version": "33.1.1",
+      "resolved": "https://registry.npmjs.org/ag-grid-angular/-/ag-grid-angular-33.1.1.tgz",
+      "integrity": "sha512-6U0oM4ofcXB1q318dYkWnsFuz6Ne2aKZ9E8A+6IPsx5/9UaF9VlBaA2hIlKXDf2O1JPdoO6gnkm81OAyVu81wQ==",
       "license": "MIT",
       "dependencies": {
+        "ag-grid-community": "33.1.1",
         "tslib": "^2.3.0"
       },
       "peerDependencies": {
-        "@angular/common": ">= 16.0.0",
-        "@angular/core": ">= 16.0.0",
-        "ag-grid-community": "32.3.4"
+        "@angular/common": ">= 17.0.0",
+        "@angular/core": ">= 17.0.0"
       }
     },
     "node_modules/ag-grid-community": {
-      "version": "32.3.4",
-      "resolved": "https://registry.npmjs.org/ag-grid-community/-/ag-grid-community-32.3.4.tgz",
-      "integrity": "sha512-iYQYFapKkqtCml1BvIX/nyNO6SvZYe/Z/1hLa7/7Dpzj2uqABJZIPGgW/ZTOc+/YiM9JYJWMkD7c+5E23GzkAw==",
+      "version": "33.1.1",
+      "resolved": "https://registry.npmjs.org/ag-grid-community/-/ag-grid-community-33.1.1.tgz",
+      "integrity": "sha512-CNubIro0ipj4nfQ5WJPG9Isp7UI6MMDvNzrPdHNf3W+IoM8Uv3RUhjEn7xQqpQHuu6o/tMjrqpacipMUkhzqnw==",
       "license": "MIT",
       "dependencies": {
-        "ag-charts-types": "10.3.4"
+        "ag-charts-types": "11.1.1"
       }
     },
+    "node_modules/ag-grid-community/node_modules/ag-charts-types": {
+      "version": "11.1.1",
+      "resolved": "https://registry.npmjs.org/ag-charts-types/-/ag-charts-types-11.1.1.tgz",
+      "integrity": "sha512-bRmUcf5VVhEEekhX8Vk0NSwa8Te8YM/zchjyYKR2CX4vDYiwoohM1Jg9RFvbIhVbLC1S6QrPEbx5v2C6RDfpSA==",
+      "license": "MIT"
+    },
     "node_modules/agent-base": {
       "version": "7.1.1",
       "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
diff --git a/package.json b/package.json
index cd43b4744..0acfff6e4 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,7 @@
     "npm": "^10.2.0"
   },
   "dependencies": {
-    "@ag-grid-community/csv-export": "^32.2.0",
+    "@ag-grid-community/csv-export": "^32.3.4",
     "@angular/animations": "^17.3.8",
     "@angular/cdk": "^17.3.6",
     "@angular/common": "^17.3.8",
@@ -36,8 +36,8 @@
     "@asymmetrik/ngx-leaflet": "^17.0.0",
     "@ngx-translate/core": "^14.0.0",
     "@storybook/addon-a11y": "^8.5.3",
-    "ag-grid-angular": "^32.2.0",
-    "ag-grid-community": "^32.2.0",
+    "ag-grid-angular": "^33.1.1",
+    "ag-grid-community": "^33.1.1",
     "jwt-decode": "^3.1.2",
     "leaflet": "^1.9.4",
     "leaflet.locatecontrol": "^0.83.1",
diff --git a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.html b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.html
index 0a41926ad..a99877f58 100644
--- a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.html
+++ b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.html
@@ -4,12 +4,12 @@
   <ag-grid-angular
     *ngIf="unregisteredCNFS.length"
     class="ag-theme-alpine user-table"
-    rowSelection="multiple"
     domLayout="autoHeight"
     style="width: 100%"
     [rowData]="unregisteredCNFS"
     [columnDefs]="unregisteredColumnDefs"
     [getRowHeight]="getRowHeight"
+    [gridOptions]="gridOptions"
   />
   <p *ngIf="!unregisteredCNFS.length">Tous les CNFS dans Espace Coop ont un compte Rés'in</p>
 
@@ -17,11 +17,11 @@
   <ag-grid-angular
     *ngIf="cnfsNotInEspaceCoop.length"
     class="ag-theme-alpine user-table"
-    rowSelection="multiple"
     domLayout="autoHeight"
     style="width: 100%"
     [rowData]="cnfsNotInEspaceCoop"
     [columnDefs]="notInEspaceCoopColumnDefs"
+    [gridOptions]="gridOptions"
   />
   <p *ngIf="!cnfsNotInEspaceCoop.length">Tous les CNFS dans Rés'in sont présents dans Espace Coop</p>
 </div>
diff --git a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts
index 33000db2b..d4ab9b4c1 100644
--- a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts
+++ b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts
@@ -69,6 +69,9 @@ export class EspaceCoopCNFSComponent implements OnInit {
       field: 'phone',
     },
   ];
+  public gridOptions = {
+    rowSelection: 'multiple',
+  };
 
   public getRowHeight(params: { data: EspaceCoopCNFS }): number {
     const structures = params.data.structures || [];
-- 
GitLab


From a723ce0a1ebc102a0b14daffb68570150efa3b3d Mon Sep 17 00:00:00 2001
From: Pierre Ecarlat <pecarlat@grandlyon.com>
Date: Wed, 12 Mar 2025 15:45:24 +0100
Subject: [PATCH 5/7] wip

---
 .../components/espace-coop-cnfs/espace-coop-cnfs.component.ts   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts
index d4ab9b4c1..ec9ca2266 100644
--- a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts
+++ b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts
@@ -70,7 +70,7 @@ export class EspaceCoopCNFSComponent implements OnInit {
     },
   ];
   public gridOptions = {
-    rowSelection: 'multiple',
+    rowSelection: { type: 'multiple' },
   };
 
   public getRowHeight(params: { data: EspaceCoopCNFS }): number {
-- 
GitLab


From 6d5e4ef74f47101b93e9a5b1344672c75237f661 Mon Sep 17 00:00:00 2001
From: Pierre Ecarlat <pecarlat@grandlyon.com>
Date: Wed, 12 Mar 2025 16:12:45 +0100
Subject: [PATCH 6/7] register all modules

---
 src/app/admin/admin.module.ts                                | 5 +++++
 .../espace-coop-cnfs/espace-coop-cnfs.component.html         | 4 ++--
 .../espace-coop-cnfs/espace-coop-cnfs.component.ts           | 3 ---
 3 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/app/admin/admin.module.ts b/src/app/admin/admin.module.ts
index e7a208a54..5a470702f 100644
--- a/src/app/admin/admin.module.ts
+++ b/src/app/admin/admin.module.ts
@@ -1,6 +1,7 @@
 import { CommonModule } from '@angular/common';
 import { NgModule } from '@angular/core';
 import { AgGridModule } from 'ag-grid-angular';
+import { AllCommunityModule, ModuleRegistry, provideGlobalGridOptions } from 'ag-grid-community';
 import { SharedModule } from '../shared/shared.module';
 import { AdminRoutingModule } from './admin-routing.module';
 import { AdminHeaderComponent } from './components/admin-header/admin-header.component';
@@ -24,6 +25,10 @@ import { DeleteUserComponent } from './components/manage-users/delete-user/delet
 import { ManageUsersComponent } from './components/manage-users/manage-users.component';
 import { AdminStructuresListComponent } from './components/structures-list/admin-structures-list.component';
 
+// Since version 33.0 of ag-grid, the modules need to be registered in order to keep the legacy behavior
+ModuleRegistry.registerModules([AllCommunityModule]);
+provideGlobalGridOptions({ theme: 'legacy' });
+
 @NgModule({
   declarations: [
     ClaimStructureComponent,
diff --git a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.html b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.html
index a99877f58..0a41926ad 100644
--- a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.html
+++ b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.html
@@ -4,12 +4,12 @@
   <ag-grid-angular
     *ngIf="unregisteredCNFS.length"
     class="ag-theme-alpine user-table"
+    rowSelection="multiple"
     domLayout="autoHeight"
     style="width: 100%"
     [rowData]="unregisteredCNFS"
     [columnDefs]="unregisteredColumnDefs"
     [getRowHeight]="getRowHeight"
-    [gridOptions]="gridOptions"
   />
   <p *ngIf="!unregisteredCNFS.length">Tous les CNFS dans Espace Coop ont un compte Rés'in</p>
 
@@ -17,11 +17,11 @@
   <ag-grid-angular
     *ngIf="cnfsNotInEspaceCoop.length"
     class="ag-theme-alpine user-table"
+    rowSelection="multiple"
     domLayout="autoHeight"
     style="width: 100%"
     [rowData]="cnfsNotInEspaceCoop"
     [columnDefs]="notInEspaceCoopColumnDefs"
-    [gridOptions]="gridOptions"
   />
   <p *ngIf="!cnfsNotInEspaceCoop.length">Tous les CNFS dans Rés'in sont présents dans Espace Coop</p>
 </div>
diff --git a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts
index ec9ca2266..33000db2b 100644
--- a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts
+++ b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts
@@ -69,9 +69,6 @@ export class EspaceCoopCNFSComponent implements OnInit {
       field: 'phone',
     },
   ];
-  public gridOptions = {
-    rowSelection: { type: 'multiple' },
-  };
 
   public getRowHeight(params: { data: EspaceCoopCNFS }): number {
     const structures = params.data.structures || [];
-- 
GitLab


From 75ebd561dce988a89ebd9588a44e05a979472fd7 Mon Sep 17 00:00:00 2001
From: Pierre Ecarlat <pecarlat@grandlyon.com>
Date: Wed, 12 Mar 2025 16:35:42 +0100
Subject: [PATCH 7/7] removed incorrect cellRenderer

---
 .../admin/components/manage-users/manage-users.component.ts    | 3 +--
 src/app/models/user.model.ts                                   | 1 -
 2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/src/app/admin/components/manage-users/manage-users.component.ts b/src/app/admin/components/manage-users/manage-users.component.ts
index a8fbae0d6..3992db61c 100644
--- a/src/app/admin/components/manage-users/manage-users.component.ts
+++ b/src/app/admin/components/manage-users/manage-users.component.ts
@@ -209,7 +209,6 @@ export class ManageUsersComponent {
     },
     {
       headerName: 'Structure(s)',
-      cellRenderer: 'agGroupCellRenderer',
       minWidth: 200,
       autoHeight: true,
       valueGetter: (params) => params.data.structuresLink,
@@ -240,7 +239,7 @@ export class ManageUsersComponent {
 
     this.columnDefsUnattached.splice(this.columnDefsUnattached.length - 1, 0, {
       headerName: 'Non rattaché depuis',
-      field: 'unattachedSince',
+      field: 'unattachedSince' as any,
       minWidth: 180,
       valueGetter: this.dateValueGetter,
       valueFormatter: this.dateValueFormatter,
diff --git a/src/app/models/user.model.ts b/src/app/models/user.model.ts
index 546cf6cee..3f7b18292 100644
--- a/src/app/models/user.model.ts
+++ b/src/app/models/user.model.ts
@@ -28,7 +28,6 @@ export class User {
   avatar?: string;
   withAppointment?: boolean;
   lastLoginDate?: Date;
-  unattachedSince?: Date;
   constructor(obj?: any) {
     Object.assign(this, obj);
     this.surname = this.surname.toUpperCase();
-- 
GitLab