diff --git a/src/app/appmarket/domains/domains.module.ts b/src/app/appmarket/domains/domains.module.ts index af01e1f53eece3f2c3727782c3e1374a34e36e9c..7d7dbf47029cf6a452720fa33a906f0591408f4b 100644 --- a/src/app/appmarket/domains/domains.module.ts +++ b/src/app/appmarket/domains/domains.module.ts @@ -17,6 +17,7 @@ import { DomainGroupsComponent } from './domain-groups/domain-groups.component'; import { DomainGroupViewComponent } from './domain-group-view/domain-group-view.component'; import {DropdownModule} from 'primeng/dropdown'; import {MultiSelectModule} from 'primeng/multiselect'; +import { RemovalConfirmationModalComponent } from './modals/removal-confirmation-modal/removal-confirmation-modal.component'; @@ -26,6 +27,7 @@ import {MultiSelectModule} from 'primeng/multiselect'; DomainComponent, DomainGroupsComponent, DomainGroupViewComponent, + RemovalConfirmationModalComponent, ], imports: [ CommonModule, diff --git a/src/app/appmarket/domains/list/domainslist.component.html b/src/app/appmarket/domains/list/domainslist.component.html index d68a53741d5848fc1d85268787e363f8c35fd96a..3993ed5159c51184a6f8baaf9b891548fcf5f034 100644 --- a/src/app/appmarket/domains/list/domainslist.component.html +++ b/src/app/appmarket/domains/list/domainslist.component.html @@ -34,7 +34,7 @@ <li><a *roles="['ROLE_SYSTEM_ADMIN']" (click)="$event.stopPropagation(); changeState(domain)" class="">{{ getStateLabel(domain?.active) }}</a> </li> - <li><a *roles="['ROLE_SYSTEM_ADMIN']" (click)="$event.stopPropagation(); softDeleteDomain(domain.id)" + <li><a *roles="['ROLE_SYSTEM_ADMIN']" (click)="$event.stopPropagation(); openRemovalModal(domain)" class="">{{ 'DOMAINS.DELETE_BUTTON' | translate }}</a> </li> </ul> @@ -45,3 +45,5 @@ </tbody> </table> </div> + +<app-removal-confirmation-modal [domain]="domainToRemove" (onConfirm)="update()"></app-removal-confirmation-modal> diff --git a/src/app/appmarket/domains/list/domainslist.component.ts b/src/app/appmarket/domains/list/domainslist.component.ts index ab855567d79f7ccd872731158111fb2cf8ef7675..ae21395b6974d8216b80aa78a1e510a3a2433566 100644 --- a/src/app/appmarket/domains/list/domainslist.component.ts +++ b/src/app/appmarket/domains/list/domainslist.component.ts @@ -2,10 +2,14 @@ import {AuthService} from '../../../auth/auth.service'; import {Domain} from '../../../model/domain'; import {Role} from '../../../model/userrole'; import {DomainService} from '../../../service/domain.service'; -import {Component, OnInit} from '@angular/core'; +import {Component, OnInit, ViewChild} from '@angular/core'; import {Observable} from 'rxjs'; import {map} from 'rxjs/operators'; import {TranslateService} from '@ngx-translate/core'; +import {ModalComponent} from "../../../shared"; +import { + RemovalConfirmationModalComponent +} from "../modals/removal-confirmation-modal/removal-confirmation-modal.component"; @Component({ selector: 'app-domains-list', @@ -16,6 +20,11 @@ export class DomainsListComponent implements OnInit { public domains: Observable<Domain[]>; + @ViewChild(RemovalConfirmationModalComponent) + public readonly modal: ModalComponent; + + public domainToRemove: Domain + constructor(protected domainService: DomainService, protected authService: AuthService, public translate: TranslateService) { } @@ -33,7 +42,7 @@ export class DomainsListComponent implements OnInit { } } - protected update(): void { + public update(): void { this.domains = this.getDomainsObservable().pipe( map((domains) => [...domains].sort( (a, b) => { @@ -59,10 +68,15 @@ export class DomainsListComponent implements OnInit { return active ? this.translate.instant('DOMAINS.DISABLE_BUTTON') : this.translate.instant('DOMAINS.ENABLE_BUTTON'); } - public softDeleteDomain(id: number): void { + public softRemoveDomain(id: number): void { this.domainService.remove(id, true).subscribe({ next: () => this.update(), error: err => console.error(err) }); } + + openRemovalModal(domain: Domain) { + this.domainToRemove = domain + this.modal.show() + } } diff --git a/src/app/appmarket/domains/modals/removal-confirmation-modal/removal-confirmation-modal.component.css b/src/app/appmarket/domains/modals/removal-confirmation-modal/removal-confirmation-modal.component.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/app/appmarket/domains/modals/removal-confirmation-modal/removal-confirmation-modal.component.html b/src/app/appmarket/domains/modals/removal-confirmation-modal/removal-confirmation-modal.component.html new file mode 100644 index 0000000000000000000000000000000000000000..57bb6c8310495d27c1c48320ee12f71f6bea1290 --- /dev/null +++ b/src/app/appmarket/domains/modals/removal-confirmation-modal/removal-confirmation-modal.component.html @@ -0,0 +1,12 @@ +<nmaas-modal styleModal="warning"> +<!-- <div class="nmaas-modal-header">{{'APP_ACCESS_METHODS_MODAL.HEADER' | translate}}</div>--> + <div class="nmaas-modal-header">{{ 'DOMAIN_DETAILS.MODAL.HEADER' | translate }}</div> + <div class="nmaas-modal-body"> + <p>{{ 'DOMAIN_DETAILS.MODAL.DESCRIPTION' | translate}}</p> + </div> + <div class="nmaas-modal-footer"> + <button role="button" type="button" class="btn btn-success" (click)="removeDomain()">{{ 'DOMAIN_DETAILS.MODAL.BUTTONS.CONFIRM' | translate}}</button> + <button type="button" class="btn btn-primary" (click)="modal.hide()">{{ 'DOMAIN_DETAILS.MODAL.BUTTONS.CANCEL' | translate}}</button> + </div> +</nmaas-modal> + diff --git a/src/app/appmarket/domains/modals/removal-confirmation-modal/removal-confirmation-modal.component.spec.ts b/src/app/appmarket/domains/modals/removal-confirmation-modal/removal-confirmation-modal.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..572ebc13fdfc3bc24101c49b981c45a3ffb49cb9 --- /dev/null +++ b/src/app/appmarket/domains/modals/removal-confirmation-modal/removal-confirmation-modal.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RemovalConfirmationModalComponent } from './removal-confirmation-modal.component'; + +describe('RemovalConfirmationModalComponent', () => { + let component: RemovalConfirmationModalComponent; + let fixture: ComponentFixture<RemovalConfirmationModalComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ RemovalConfirmationModalComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(RemovalConfirmationModalComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/appmarket/domains/modals/removal-confirmation-modal/removal-confirmation-modal.component.ts b/src/app/appmarket/domains/modals/removal-confirmation-modal/removal-confirmation-modal.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..e925c3e469965bff892c26fdc739b47fe66b3dce --- /dev/null +++ b/src/app/appmarket/domains/modals/removal-confirmation-modal/removal-confirmation-modal.component.ts @@ -0,0 +1,39 @@ +import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core'; +import {ModalComponent} from "../../../../shared"; +import {Domain} from "../../../../model/domain"; +import {DomainService} from "../../../../service"; + +@Component({ + selector: 'app-removal-confirmation-modal', + templateUrl: './removal-confirmation-modal.component.html', + styleUrls: ['./removal-confirmation-modal.component.css'] +}) +export class RemovalConfirmationModalComponent { + + @ViewChild(ModalComponent, { static: true }) + public readonly modal: ModalComponent; + + @Input() + public domain: Domain; + + @Output() + public onConfirm: EventEmitter<void> = new EventEmitter<void>(); + + constructor(private readonly domainService: DomainService) { } + + public show() { + this.modal.show(); + } + + public hide() { + this.modal.hide(); + this.onConfirm.emit() + } + + removeDomain() { + this.domainService.remove(this.domain.id, true).subscribe({ + next: () => this.hide(), + error: err => console.error(err) + }); + } +} diff --git a/src/app/service/domain.service.ts b/src/app/service/domain.service.ts index 820e7119fd230857a7f37c6d0661f600cc2494d9..3337b1902762aa14cb17b9662962d0b686c4568c 100644 --- a/src/app/service/domain.service.ts +++ b/src/app/service/domain.service.ts @@ -61,10 +61,10 @@ export class DomainService extends GenericDataService { return this.patch<Domain, Id>(this.url + domain.id + '/state?active=' + !domain.active, null); } - public remove(domainId: number, softDelete?: boolean): Observable<any> { + public remove(domainId: number, softRemove?: boolean): Observable<any> { let params = new HttpParams() - if (softDelete !== undefined) { - params = params.append("softDelete", softDelete.toString()) + if (softRemove !== undefined) { + params = params.append("softRemove", softRemove.toString()) } return this.http.delete(this.url + domainId, {params}) }