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