From 67ca90483c23fa4781615e3ae2f179039143024b Mon Sep 17 00:00:00 2001
From: kaw67872 <kawtar.laariche@iais.fraunhofer.de>
Date: Fri, 7 Jun 2024 12:05:14 +0200
Subject: [PATCH] #19: :sparkles: implement delete model functionality

---
 .../core/services/private-catalogs.service.ts | 31 ++++++++
 .../delete-model-page.component.html          | 16 +++++
 .../delete-model-page.component.ts            | 71 +++++++++++++++++--
 .../share-with-team-page.component.ts         |  2 +-
 4 files changed, 115 insertions(+), 5 deletions(-)

diff --git a/src/app/core/services/private-catalogs.service.ts b/src/app/core/services/private-catalogs.service.ts
index 62f350e..d076e46 100644
--- a/src/app/core/services/private-catalogs.service.ts
+++ b/src/app/core/services/private-catalogs.service.ts
@@ -7,6 +7,7 @@ import {
   AuthorPublisherModel,
   CommentModel,
   PublicSolution,
+  PublicSolutionDetailsModel,
   PublicSolutionsRequestPayload,
   ThreadModel,
   UserDetails,
@@ -586,4 +587,34 @@ export class PrivateCatalogsService {
       }),
     );
   }
+
+  deleteSolution(solution: PublicSolutionDetailsModel, revisionId: string) {
+    const url =
+      apiConfig.apiBackendURL +
+      apiConfig.urlSolutions +
+      '/' +
+      solution.solutionId +
+      '/' +
+      revisionId;
+
+    let body = {
+      request_body: {
+        active: false,
+        created: solution.created,
+        name: solution.name,
+        ownerId: solution.ownerId,
+        solutionId: solution.solutionId,
+        revisionId,
+        tookitType: null,
+        modelType: null,
+      },
+    };
+
+    return this._httpSharedService.put(url, undefined, body).pipe(
+      tap(),
+      catchError((error) => {
+        throw error;
+      }),
+    );
+  }
 }
diff --git a/src/app/shared/components/delete-model-page/delete-model-page.component.html b/src/app/shared/components/delete-model-page/delete-model-page.component.html
index c819fd4..2c32aa8 100644
--- a/src/app/shared/components/delete-model-page/delete-model-page.component.html
+++ b/src/app/shared/components/delete-model-page/delete-model-page.component.html
@@ -1 +1,17 @@
 <div class="workflow-right-header workflow-header">Delete Model</div>
+<div style="display: flex; flex-direction: column; padding: 20px; gap: 20px">
+  <p>
+    Are you sure that you want to delete this model and all of its revisions,
+    public or private?
+  </p>
+  <div>
+    <button
+      style="width: 20%"
+      color="primary"
+      mat-raised-button
+      (click)="onDeleteModelClick()"
+    >
+      Delete Model
+    </button>
+  </div>
+</div>
diff --git a/src/app/shared/components/delete-model-page/delete-model-page.component.ts b/src/app/shared/components/delete-model-page/delete-model-page.component.ts
index 6561937..95f04df 100644
--- a/src/app/shared/components/delete-model-page/delete-model-page.component.ts
+++ b/src/app/shared/components/delete-model-page/delete-model-page.component.ts
@@ -1,13 +1,76 @@
-import { Component } from '@angular/core';
+import { Component, OnInit } from '@angular/core';
 import { CommonModule } from '@angular/common';
+import { MatButtonModule } from '@angular/material/button';
+import { MatDialog, MatDialogRef } from '@angular/material/dialog';
+import { DeleteUserDialogConfirmationActionComponent } from '../delete-user-dialog-confirmation-action/delete-user-dialog-confirmation-action.component';
+import { PublicSolutionDetailsModel } from '../../models';
+import { ActivatedRoute, Router } from '@angular/router';
+import { PublicSolutionsService } from 'src/app/core/services/public-solutions.service';
+import { PrivateCatalogsService } from 'src/app/core/services/private-catalogs.service';
+import { Observable } from 'rxjs';
 
 @Component({
   selector: 'gp-delete-model-page',
   standalone: true,
-  imports: [CommonModule],
+  imports: [CommonModule, MatButtonModule],
   templateUrl: './delete-model-page.component.html',
-  styleUrl: './delete-model-page.component.scss'
+  styleUrl: './delete-model-page.component.scss',
 })
-export class DeleteModelPageComponent {
+export class DeleteModelPageComponent implements OnInit {
+  solution!: PublicSolutionDetailsModel;
+  solutionId!: string;
+  revisionId!: string;
+  model!: any;
 
+  constructor(
+    public dialog: MatDialog,
+    private activatedRoute: ActivatedRoute,
+    private publicSolutionsService: PublicSolutionsService,
+    private privateCatalogsService: PrivateCatalogsService,
+    private router: Router,
+  ) {}
+
+  ngOnInit(): void {
+    this.activatedRoute.parent?.params.subscribe((params) => {
+      this.solutionId = params['solutionId'];
+      this.revisionId = params['revisionId'];
+      this.loadSolutionDetails(this.solutionId, this.revisionId);
+    });
+  }
+
+  deleteModel(): Observable<any> {
+    return this.privateCatalogsService.deleteSolution(
+      this.solution,
+      this.revisionId,
+    );
+  }
+
+  onDeleteModelClick() {
+    const dialogRef: MatDialogRef<DeleteUserDialogConfirmationActionComponent> =
+      this.dialog.open(DeleteUserDialogConfirmationActionComponent, {
+        data: {
+          dataKey: {
+            title: `Delete model ${this.solution.name}`,
+            content: `Are you sure that you want to delete this model and all of its revisions, public or private?' ${this.solution.name}`,
+            alertMessage: 'Model deleted successfully. ',
+
+            action: () => this.deleteModel(),
+          },
+        },
+        autoFocus: false,
+      });
+
+    dialogRef.afterClosed().subscribe((result) => {
+      this.router.navigate(['/dashboard/myModels']);
+    });
+  }
+
+  loadSolutionDetails(solutionId: string, revisionId: string) {
+    this.publicSolutionsService
+      .getSolutionDetails(solutionId, revisionId)
+      .subscribe((res) => {
+        this.solution = res;
+        console.log('solution', this.solution);
+      });
+  }
 }
diff --git a/src/app/shared/components/share-with-team-page/share-with-team-page.component.ts b/src/app/shared/components/share-with-team-page/share-with-team-page.component.ts
index c55ad3a..8a1f0cd 100644
--- a/src/app/shared/components/share-with-team-page/share-with-team-page.component.ts
+++ b/src/app/shared/components/share-with-team-page/share-with-team-page.component.ts
@@ -16,7 +16,7 @@ import {
 } from '@angular/material/autocomplete';
 import { Observable, Subscription, map, startWith } from 'rxjs';
 import { MatFormFieldModule } from '@angular/material/form-field';
-import { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';
+import { MatChipsModule } from '@angular/material/chips';
 import { LiveAnnouncer } from '@angular/cdk/a11y';
 import { COMMA, ENTER } from '@angular/cdk/keycodes';
 import { PrivateCatalogsService } from 'src/app/core/services/private-catalogs.service';
-- 
GitLab