From 553c303b93ed8bb7019eef8cf7b66fbebcb2e3dd Mon Sep 17 00:00:00 2001
From: Hugo SUBTIL <ext.sopra.husubtil@grandlyon.com>
Date: Tue, 26 Jan 2021 15:24:11 +0100
Subject: [PATCH] feat(structure): add admin delete

---
 src/app/services/structure.service.ts         |  7 +++++-
 .../structure-details.component.html          |  5 +++-
 .../structure-details.component.ts            | 23 +++++++++++++++----
 3 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/src/app/services/structure.service.ts b/src/app/services/structure.service.ts
index f767540dc..97caee520 100644
--- a/src/app/services/structure.service.ts
+++ b/src/app/services/structure.service.ts
@@ -40,8 +40,13 @@ export class StructureService {
   }
 
   public getStructure(id: string): Observable<Structure> {
-    return this.http.get(`${this.baseUrl}/${id}`).pipe(map((item: any) => new Structure(item)));
+    return this.http.get<Structure>(`${this.baseUrl}/${id}`);
   }
+
+  public delete(id: string): Observable<Structure> {
+    return this.http.delete<Structure>(`${this.baseUrl}/${id}`);
+  }
+
   public getStructures(filters: Filter[]): Observable<Structure[]> {
     if (filters && filters.length > 0) {
       let requestUrl = `${this.baseUrl}/search`;
diff --git a/src/app/structure-list/components/structure-details/structure-details.component.html b/src/app/structure-list/components/structure-details/structure-details.component.html
index 0d2659880..4a5fabdf3 100644
--- a/src/app/structure-list/components/structure-details/structure-details.component.html
+++ b/src/app/structure-list/components/structure-details/structure-details.component.html
@@ -9,7 +9,7 @@
 <div class="structrue-details-container" *ngIf="structure && !isLoading">
   <!-- Header info -->
   <div fxLayout="row" fxLayoutAlign="end center">
-    <div (click)="close()" class="ico-close-details"></div>
+    <div (click)="close(false)" class="ico-close-details"></div>
   </div>
   <div fxLayout="row" class="structure-details-block" fxLayoutAlign="baseline baseline" fxLayoutGap="8px">
     <div fxLayout="column" fxLayoutGap="10px" fxFlex="100%">
@@ -92,6 +92,9 @@
         >
           Modifier cette structure
         </a>
+        <a *ngIf="profileService.isAdmin()" (click)="deleteStructure()" class="primary" tabindex="0">
+          Supprimer cette structure
+        </a>
       </div>
       <div>
         {{ structure.description }}
diff --git a/src/app/structure-list/components/structure-details/structure-details.component.ts b/src/app/structure-list/components/structure-details/structure-details.component.ts
index 747ca0402..e714b327b 100644
--- a/src/app/structure-list/components/structure-details/structure-details.component.ts
+++ b/src/app/structure-list/components/structure-details/structure-details.component.ts
@@ -5,7 +5,7 @@ import { Category } from '../../models/category.model';
 import { AccessModality } from '../../enum/access-modality.enum';
 import { SearchService } from '../../services/search.service';
 import * as _ from 'lodash';
-import { ActivatedRoute } from '@angular/router';
+import { ActivatedRoute, Router } from '@angular/router';
 import { PrintService } from '../../../shared/service/print.service';
 import { Equipment } from '../../enum/equipment.enum';
 import { typeStructureEnum } from '../../../shared/enum/typeStructure.enum';
@@ -41,13 +41,14 @@ export class StructureDetailsComponent implements OnInit {
   public currentProfile: User = null;
 
   constructor(
-    route: ActivatedRoute,
     private printService: PrintService,
     private searchService: SearchService,
     private structureService: StructureService,
     private tclService: TclService,
     private profileService: ProfileService,
-    private authService: AuthService
+    private authService: AuthService,
+    private route: ActivatedRoute,
+    private router: Router
   ) {
     route.url.subscribe((url) => {
       if (url[0].path === 'structure') {
@@ -103,8 +104,8 @@ export class StructureDetailsComponent implements OnInit {
     }
   }
 
-  public close(): void {
-    this.closeDetails.emit(true);
+  public close(refreshRequired: boolean): void {
+    this.closeDetails.emit(refreshRequired);
   }
 
   public print(): void {
@@ -116,6 +117,18 @@ export class StructureDetailsComponent implements OnInit {
     this.displayForm();
   }
 
+  public deleteStructure(): void {
+    this.structureService.delete(this.structure._id).subscribe((res) => {
+      this.reload();
+    });
+  }
+
+  private reload(): void {
+    this.router.routeReuseStrategy.shouldReuseRoute = () => false;
+    this.router.onSameUrlNavigation = 'reload';
+    this.router.navigate(['./'], { relativeTo: this.route });
+  }
+
   public claimStructure(): void {
     this.isEditMode = false;
     this.displayForm();
-- 
GitLab