import { IscsiService } from '~/app/shared/api/iscsi.service';
import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { TableComponent } from '~/app/shared/datatable/table/table.component';
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
deleteIscsiTargetModal() {
const target_iqn = this.selection.first().target_iqn;
- this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: $localize`iSCSI target`,
itemNames: [target_iqn],
submitActionObservable: () =>
import { RbdMirroringService } from '~/app/shared/api/rbd-mirroring.service';
import { TableStatusViewCache } from '~/app/shared/classes/table-status-view-cache';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { URLVerbs } from '~/app/shared/constants/app.constants';
import { Icons } from '~/app/shared/enum/icons.enum';
import { CdTableAction } from '~/app/shared/models/cd-table-action';
import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
import { PoolEditPeerModalComponent } from '../pool-edit-peer-modal/pool-edit-peer-modal.component';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
+import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impact.enum';
const BASE_URL = '/block/mirroring';
@Component({
const poolName = this.selection.first().name;
const peerUUID = this.getPeerUUID();
- this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalService.show(DeleteConfirmationModalComponent, {
impact: DeletionImpact.high,
itemDescription: $localize`mirror peer`,
itemNames: [`${poolName} (${peerUUID})`],
import { Component, Input, OnInit, TemplateRef, ViewChild } from '@angular/core';
import { Router } from '@angular/router';
import { NvmeofService } from '~/app/shared/api/nvmeof.service';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
import { Icons } from '~/app/shared/enum/icons.enum';
import { CdTableAction } from '~/app/shared/models/cd-table-action';
hostNQNs.splice(allowAllHostIndex, 1);
itemNames = [...hostNQNs, $localize`Allow any host(*)`];
}
- this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: 'Initiator',
itemNames,
actionDescription: 'remove',
import { Component, Input, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { NvmeofService } from '~/app/shared/api/nvmeof.service';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
import { Icons } from '~/app/shared/enum/icons.enum';
deleteListenerModal() {
const listener = this.selection.first();
- this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: 'Listener',
actionDescription: 'delete',
itemNames: [`listener ${listener.host_name} (${listener.traddr}:${listener.trsvcid})`],
import { Component, Input, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { NvmeofService } from '~/app/shared/api/nvmeof.service';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
import { Icons } from '~/app/shared/enum/icons.enum';
import { CdTableAction } from '~/app/shared/models/cd-table-action';
deleteNamespaceModal() {
const namespace = this.selection.first();
- this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: 'Namespace',
itemNames: [namespace.nsid],
actionDescription: 'delete',
import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
import { CdTableAction } from '~/app/shared/models/cd-table-action';
import { Icons } from '~/app/shared/enum/icons.enum';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { FinishedTask } from '~/app/shared/models/finished-task';
import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
import { NvmeofService } from '~/app/shared/api/nvmeof.service';
deleteSubsystemModal() {
const subsystem = this.selection.first();
- this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: 'Subsystem',
itemNames: [subsystem.nqn],
actionDescription: 'delete',
import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
import { TableStatus } from '~/app/shared/classes/table-status';
import { ConfirmationModalComponent } from '~/app/shared/components/confirmation-modal/confirmation-modal.component';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { TableComponent } from '~/app/shared/datatable/table/table.component';
import { Icons } from '~/app/shared/enum/icons.enum';
import { RBDImageFormat, RbdModel } from './rbd-model';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
import { RBDActionHelpers } from '../rbd-contants';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
+import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impact.enum';
const BASE_URL = 'block/rbd';
@Component({
const imageName = this.selection.first().name;
const imageSpec = new ImageSpec(poolName, namespace, imageName);
- this.cdsModalService.show(CriticalConfirmationModalComponent, {
+ this.cdsModalService.show(DeleteConfirmationModalComponent, {
impact: DeletionImpact.high,
itemDescription: 'RBD',
itemNames: [imageSpec.imageName],
const imageName = this.selection.first().name;
const imageSpec = new ImageSpec(poolName, namespace, imageName);
- this.cdsModalService.show(CriticalConfirmationModalComponent, {
+ this.cdsModalService.show(DeleteConfirmationModalComponent, {
itemDescription: 'RBD',
itemNames: [imageSpec],
actionDescription: 'resync',
this.selection.first().name
);
- this.cdsModalService.show(CriticalConfirmationModalComponent, {
+ this.cdsModalService.show(DeleteConfirmationModalComponent, {
actionDescription: 'remove scheduling on',
itemDescription: $localize`image`,
itemNames: [`${imageName}`],
import { PoolService } from '~/app/shared/api/pool.service';
import { RbdService } from '~/app/shared/api/rbd.service';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { Icons } from '~/app/shared/enum/icons.enum';
import { NotificationType } from '~/app/shared/enum/notification-type.enum';
deleteModal() {
const pool = this.selection.first().pool;
const namespace = this.selection.first().namespace;
- const modalRef = this.cdsModalService.show(CriticalConfirmationModalComponent, {
+ const modalRef = this.cdsModalService.show(DeleteConfirmationModalComponent, {
itemDescription: 'Namespace',
itemNames: [`${pool}/${namespace}`],
submitAction: () =>
import { RbdService } from '~/app/shared/api/rbd.service';
import { CdHelperClass } from '~/app/shared/classes/cd-helper.class';
import { ConfirmationModalComponent } from '~/app/shared/components/confirmation-modal/confirmation-modal.component';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
import { CdTableAction } from '~/app/shared/models/cd-table-action';
import { RbdSnapshotActionsModel } from './rbd-snapshot-actions.model';
import { RbdSnapshotModel } from './rbd-snapshot.model';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
+import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impact.enum';
@Component({
selector: 'cd-rbd-snapshot-list',
deleteSnapshotModal() {
const snapshotName = this.selection.selected[0].name;
- this.modalRef = this.cdsModalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.cdsModalService.show(DeleteConfirmationModalComponent, {
impact: DeletionImpact.high,
itemDescription: $localize`RBD snapshot`,
itemNames: [snapshotName],
import { RbdService } from '~/app/shared/api/rbd.service';
import { TableStatusViewCache } from '~/app/shared/classes/table-status-view-cache';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { TableComponent } from '~/app/shared/datatable/table/table.component';
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
const isExpired = moment().isAfter(expiresAt);
const imageIdSpec = new ImageSpec(poolName, namespace, imageId);
- this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: 'RBD',
itemNames: [imageIdSpec],
bodyTemplate: this.deleteTpl,
import { CephfsService } from '~/app/shared/api/cephfs.service';
import { TableStatusViewCache } from '~/app/shared/classes/table-status-view-cache';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { Icons } from '~/app/shared/enum/icons.enum';
import { NotificationType } from '~/app/shared/enum/notification-type.enum';
evictClientModal() {
const clientId = this.selection.first().id;
- this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: 'client',
itemNames: [clientId],
actionDescription: 'evict',
import { CephfsService } from '~/app/shared/api/cephfs.service';
import { ConfirmationModalComponent } from '~/app/shared/components/confirmation-modal/confirmation-modal.component';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { FormModalComponent } from '~/app/shared/components/form-modal/form-modal.component';
import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
+import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impact.enum';
import { Icons } from '~/app/shared/enum/icons.enum';
import { NotificationType } from '~/app/shared/enum/notification-type.enum';
import { CdValidators } from '~/app/shared/forms/cd-validators';
}
deleteSnapshotModal() {
- this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalService.show(DeleteConfirmationModalComponent, {
impact: DeletionImpact.high,
itemDescription: $localize`CephFs Snapshot`,
itemNames: this.snapshot.selection.selected.map((snapshot: CephfsSnapshot) => snapshot.name),
import { CdTableSelection } from '~/app/shared/models/cd-table-selection';
import { SharedModule } from '~/app/shared/shared.module';
import { configureTestBed } from '~/testing/unit-test-helper';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { CephfsVolumeFormComponent } from '../cephfs-form/cephfs-form.component';
import { ModalService } from '~/app/shared/services/modal.service';
import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
const callDeletion = () => {
component.removeVolumeModal();
expect(modalRef).toBeTruthy();
- const deletion: CriticalConfirmationModalComponent = modalRef && modalRef.componentInstance;
+ const deletion: DeleteConfirmationModalComponent = modalRef && modalRef.componentInstance;
deletion.submitActionObservable();
};
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { Icons } from '~/app/shared/enum/icons.enum';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { CdTableAction } from '~/app/shared/models/cd-table-action';
import { CdTableColumn } from '~/app/shared/models/cd-table-column';
import { CdTableFetchDataContext } from '~/app/shared/models/cd-table-fetch-data-context';
import { HealthService } from '~/app/shared/api/health.service';
import { CephfsAuthModalComponent } from '~/app/ceph/cephfs/cephfs-auth-modal/cephfs-auth-modal.component';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
+import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impact.enum';
const BASE_URL = 'cephfs/fs';
removeVolumeModal() {
const volName = this.selection.first().mdsmap['fs_name'];
- this.cdsModalService.show(CriticalConfirmationModalComponent, {
+ this.cdsModalService.show(DeleteConfirmationModalComponent, {
impact: DeletionImpact.high,
itemDescription: 'File System',
itemNames: [volName],
import { NotificationType } from '~/app/shared/enum/notification-type.enum';
import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
import { CephfsSnapshotscheduleFormComponent } from '../cephfs-snapshotschedule-form/cephfs-snapshotschedule-form.component';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
import { FinishedTask } from '~/app/shared/models/finished-task';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
deactivateSnapshotSchedule() {
const { path, start, fs, schedule, subvol, group } = this.selection.first();
- this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: $localize`snapshot schedule`,
actionDescription: this.actionLabels.DEACTIVATE,
submitActionObservable: () =>
activateSnapshotSchedule() {
const { path, start, fs, schedule, subvol, group } = this.selection.first();
- this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: $localize`snapshot schedule`,
actionDescription: this.actionLabels.ACTIVATE,
submitActionObservable: () =>
})
?.join('|');
- this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: $localize`snapshot schedule`,
submitActionObservable: () =>
this.taskWrapper.wrapTaskAroundCall({
import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
import { Permissions } from '~/app/shared/models/permissions';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { FinishedTask } from '~/app/shared/models/finished-task';
import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
import { CephfsSubvolumeGroup } from '~/app/shared/models/cephfs-subvolume-group.model';
import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
import _ from 'lodash';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
+import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impact.enum';
@Component({
selector: 'cd-cephfs-subvolume-group',
removeSubVolumeModal() {
const name = this.selection.first().name;
- this.cdsModalService.show(CriticalConfirmationModalComponent, {
+ this.cdsModalService.show(DeleteConfirmationModalComponent, {
impact: DeletionImpact.high,
itemDescription: 'subvolume group',
itemNames: [name],
import { FormControl } from '@angular/forms';
import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
import { CdForm } from '~/app/shared/forms/cd-form';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { CephfsSubvolumeGroupService } from '~/app/shared/api/cephfs-subvolume-group.service';
import { CephfsSubvolumeGroup } from '~/app/shared/models/cephfs-subvolume-group.model';
import { CephfsMountDetailsComponent } from '../cephfs-mount-details/cephfs-mount-details.component';
import _ from 'lodash';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
import { DEFAULT_SUBVOLUME_GROUP } from '~/app/shared/constants/cephfs.constant';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
+import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impact.enum';
@Component({
selector: 'cd-cephfs-subvolume-list',
});
this.errorMessage = '';
this.selectedName = this.selection.first().name;
- this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalService.show(DeleteConfirmationModalComponent, {
impact: DeletionImpact.high,
actionDescription: 'remove',
itemNames: [this.selectedName],
import { CdTableSelection } from '~/app/shared/models/cd-table-selection';
import { CdDatePipe } from '~/app/shared/pipes/cd-date.pipe';
import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { FinishedTask } from '~/app/shared/models/finished-task';
import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
import { FormModalComponent } from '~/app/shared/components/form-modal/form-modal.component';
import { CdValidators } from '~/app/shared/forms/cd-validators';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
import { DEFAULT_SUBVOLUME_GROUP } from '~/app/shared/constants/cephfs.constant';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
+import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impact.enum';
@Component({
selector: 'cd-cephfs-subvolume-snapshots-list',
const subVolumeName = this.activeSubVolumeName;
const subVolumeGroupName = this.activeGroupName;
const fsName = this.fsName;
- this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.modalService.show(DeleteConfirmationModalComponent, {
impact: DeletionImpact.high,
actionDescription: 'remove',
itemNames: [snapshotName],
import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
import { NotificationService } from '~/app/shared/services/notification.service';
import { ConfigFormCreateRequestModel } from './configuration-form-create-request.model';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
const RGW = 'rgw';
}
openCriticalConfirmModal() {
- this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalService.show(DeleteConfirmationModalComponent, {
buttonText: $localize`Force Edit`,
actionDescription: $localize`force edit`,
itemDescription: $localize`configuration`,
import { OrchestratorService } from '~/app/shared/api/orchestrator.service';
import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
import { ConfirmationModalComponent } from '~/app/shared/components/confirmation-modal/confirmation-modal.component';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { FormModalComponent } from '~/app/shared/components/form-modal/form-modal.component';
import { SelectMessages } from '~/app/shared/components/select/select-messages.model';
import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
import { URLBuilderService } from '~/app/shared/services/url-builder.service';
import { HostFormComponent } from './host-form/host-form.component';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
+import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impact.enum';
const BASE_URL = 'hosts';
deleteAction() {
const hostname = this.selection.first().hostname;
- this.modalRef = this.cdsModalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.cdsModalService.show(DeleteConfirmationModalComponent, {
impact: DeletionImpact.high,
itemDescription: 'Host',
itemNames: [hostname],
import { TableComponent } from '~/app/shared/datatable/table/table.component';
import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
import { Permissions } from '~/app/shared/models/permissions';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { NotificationService } from '~/app/shared/services/notification.service';
import { NotificationType } from '~/app/shared/enum/notification-type.enum';
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
openDeleteClusterModal() {
const cluster = this.selection.first();
- this.modalRef = this.cdsModalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.cdsModalService.show(DeleteConfirmationModalComponent, {
infoMessage: $localize`Please note that the data for the disconnected cluster will be visible for a duration of ~ 5 minutes. After this period, it will be automatically removed.`,
actionDescription: $localize`Disconnect`,
itemDescription: $localize`Cluster`,
import { OrchestratorService } from '~/app/shared/api/orchestrator.service';
import { OsdService } from '~/app/shared/api/osd.service';
import { ConfirmationModalComponent } from '~/app/shared/components/confirmation-modal/confirmation-modal.component';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { FormModalComponent } from '~/app/shared/components/form-modal/form-modal.component';
import { TableActionsComponent } from '~/app/shared/datatable/table-actions/table-actions.component';
import { CdTableSelection } from '~/app/shared/models/cd-table-selection';
});
it.skip('opens all critical confirmation modals', () => {
- const modalClass = CriticalConfirmationModalComponent;
+ const modalClass = DeleteConfirmationModalComponent;
mockSafeToDestroy();
expectOpensModal('Mark Lost', modalClass);
expectOpensModal('Purge', modalClass);
import { OsdService } from '~/app/shared/api/osd.service';
import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
import { ConfirmationModalComponent } from '~/app/shared/components/confirmation-modal/confirmation-modal.component';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { FormModalComponent } from '~/app/shared/components/form-modal/form-modal.component';
import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
import { CdTableFetchDataContext } from '~/app/shared/models/cd-table-fetch-data-context';
import { Osd } from '~/app/shared/models/osd.model';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
+import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impact.enum';
const BASE_URL = 'osd';
): void {
check(this.getSelectedOsdIds()).subscribe((result) => {
const osdIds = this.getSelectedOsdIds();
- this.cdsModalService.show(CriticalConfirmationModalComponent, {
+ this.cdsModalService.show(DeleteConfirmationModalComponent, {
impact: DeletionImpact.high,
itemNames: osdIds,
actionDescription: actionDescription,
import { of } from 'rxjs';
import { PrometheusService } from '~/app/shared/api/prometheus.service';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { TableActionsComponent } from '~/app/shared/datatable/table-actions/table-actions.component';
import { NotificationType } from '~/app/shared/enum/notification-type.enum';
import { Permission } from '~/app/shared/models/permissions';
const expireSilence = () => {
component.expireSilence();
- const deletion: CriticalConfirmationModalComponent = component.modalRef.componentInstance;
+ const deletion: DeleteConfirmationModalComponent = component.modalRef.componentInstance;
// deletion.modalRef = new BsModalRef();
deletion.ngOnInit();
deletion.callSubmitAction();
import { PrometheusListHelper } from '~/app/shared/helpers/prometheus-list-helper';
import { SilenceFormComponent } from '~/app/ceph/cluster/prometheus/silence-form/silence-form.component';
import { PrometheusService } from '~/app/shared/api/prometheus.service';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n, SucceededActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
import { Icons } from '~/app/shared/enum/icons.enum';
const id = this.selection.first().id;
const i18nSilence = $localize`Silence`;
const applicationName = 'Prometheus';
- this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: i18nSilence,
itemNames: [id],
actionDescription: this.actionLabels.EXPIRE,
import { CephServiceService } from '~/app/shared/api/ceph-service.service';
import { OrchestratorService } from '~/app/shared/api/orchestrator.service';
import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
import { TableComponent } from '~/app/shared/datatable/table/table.component';
import { Icons } from '~/app/shared/enum/icons.enum';
import { SettingsService } from '~/app/shared/api/settings.service';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
const BASE_URL = 'services';
deleteAction() {
const service = this.selection.first();
- this.cdsModalService.show(CriticalConfirmationModalComponent, {
- impact: DeletionImpact.high,
+ this.cdsModalService.show(DeleteConfirmationModalComponent, {
itemDescription: $localize`Service`,
itemNames: [service.service_name],
actionDescription: 'delete',
import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
import { Icons } from '~/app/shared/enum/icons.enum';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
import { Permission } from '~/app/shared/models/permissions';
import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
stopUpgradeModal() {
// pause the upgrade meanwhile we get stop confirmation from user
this.pauseUpgrade();
- this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: 'Upgrade',
actionDescription: 'stop',
submitAction: () => this.stopUpgrade(),
import { NfsService } from '~/app/shared/api/nfs.service';
import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { TableComponent } from '~/app/shared/datatable/table/table.component';
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
import { getFsalFromRoute, getPathfromFsal } from '../utils';
import { SUPPORTED_FSAL } from '../models/nfs.fsal';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
+import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impact.enum';
export enum RgwExportType {
BUCKET = 'bucket',
const cluster_id = this.selection.first().cluster_id;
const export_id = this.selection.first().export_id;
- this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.modalService.show(DeleteConfirmationModalComponent, {
impact: DeletionImpact.high,
itemDescription: $localize`NFS export`,
itemNames: [`${cluster_id}:${export_id}`],
import { CrushRuleService } from '~/app/shared/api/crush-rule.service';
import { ErasureCodeProfileService } from '~/app/shared/api/erasure-code-profile.service';
import { PoolService } from '~/app/shared/api/pool.service';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { SelectBadgesComponent } from '~/app/shared/components/select-badges/select-badges.component';
import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
import { ErasureCodeProfile } from '~/app/shared/models/erasure-code-profile';
describe('crush rule deletion', () => {
let taskWrapper: TaskWrapperService;
- let deletion: CriticalConfirmationModalComponent;
+ let deletion: DeleteConfirmationModalComponent;
let deleteSpy: jasmine.Spy;
let modalSpy: jasmine.Spy;
describe('ecp deletion', () => {
let taskWrapper: TaskWrapperService;
- let deletion: CriticalConfirmationModalComponent;
+ let deletion: DeleteConfirmationModalComponent;
let deleteSpy: jasmine.Spy;
let modalSpy: jasmine.Spy;
let modal: NgbModalRef;
import { ErasureCodeProfileService } from '~/app/shared/api/erasure-code-profile.service';
import { PoolService } from '~/app/shared/api/pool.service';
import { CrushNodeSelectionClass } from '~/app/shared/classes/crush.node.selection.class';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { SelectOption } from '~/app/shared/components/select/select-option.model';
import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
import { Icons } from '~/app/shared/enum/icons.enum';
return;
}
const name = value[nameAttribute];
- this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription,
itemNames: [name],
submitActionObservable: () => {
import { ConfigurationService } from '~/app/shared/api/configuration.service';
import { ErasureCodeProfileService } from '~/app/shared/api/erasure-code-profile.service';
import { PoolService } from '~/app/shared/api/pool.service';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ErasureCodeProfile } from '~/app/shared/models/erasure-code-profile';
import { ExecutingTask } from '~/app/shared/models/executing-task';
import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
const callDeletion = () => {
component.deletePoolModal();
expect(modalRef).toBeTruthy();
- const deletion: CriticalConfirmationModalComponent = modalRef && modalRef.componentInstance;
+ const deletion: DeleteConfirmationModalComponent = modalRef && modalRef.componentInstance;
deletion.submitActionObservable();
};
import { PoolService } from '~/app/shared/api/pool.service';
import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
import { TableStatusViewCache } from '~/app/shared/classes/table-status-view-cache';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
import { TableComponent } from '~/app/shared/datatable/table/table.component';
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
import { Pool } from '../pool';
import { PoolStat, PoolStats } from '../pool-stat';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
+import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impact.enum';
const BASE_URL = 'pool';
deletePoolModal() {
const name = this.selection.first().pool_name;
- this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalService.show(DeleteConfirmationModalComponent, {
impact: DeletionImpact.high,
itemDescription: 'Pool',
itemNames: [name],
import { RgwBucketService } from '~/app/shared/api/rgw-bucket.service';
import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { TableComponent } from '~/app/shared/datatable/table/table.component';
import { Icons } from '~/app/shared/enum/icons.enum';
import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
import { URLBuilderService } from '~/app/shared/services/url-builder.service';
import { Bucket } from '../models/rgw-bucket';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
+import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impact.enum';
const BASE_URL = 'rgw/bucket';
deleteAction() {
const itemNames = this.selection.selected.map((bucket: any) => bucket['bid']);
- this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: $localize`bucket`,
impact: DeletionImpact.high,
itemNames: itemNames,
import { RgwRealmService } from '~/app/shared/api/rgw-realm.service';
import { RgwZoneService } from '~/app/shared/api/rgw-zone.service';
import { RgwZonegroupService } from '~/app/shared/api/rgw-zonegroup.service';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n, TimerServiceInterval } from '~/app/shared/constants/app.constants';
import { Icons } from '~/app/shared/enum/icons.enum';
import { NotificationType } from '~/app/shared/enum/notification-type.enum';
delete(node: Node) {
if (node?.data?.type === 'realm') {
- const modalRef = this.cdsModalService.show(CriticalConfirmationModalComponent, {
+ const modalRef = this.cdsModalService.show(DeleteConfirmationModalComponent, {
itemDescription: $localize`${node?.data?.type} ${node?.data?.name}`,
itemNames: [`${node?.data?.name}`],
submitAction: () => {
import { Permission } from '~/app/shared/models/permissions';
import { ModalService } from '~/app/shared/services/modal.service';
import { RgwMultisiteService } from '~/app/shared/api/rgw-multisite.service';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { FinishedTask } from '~/app/shared/models/finished-task';
import { Observable, Subscriber, forkJoin as observableForkJoin } from 'rxjs';
import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
selection = this.dirFlowSelection;
}
const flowIds = selection.selected.map((flow: any) => flow.id);
- this.cdsModalService.show(CriticalConfirmationModalComponent, {
+ this.cdsModalService.show(DeleteConfirmationModalComponent, {
itemDescription: selection.hasSingleSelection ? $localize`Flow` : $localize`Flows`,
itemNames: flowIds,
bodyTemplate: this.deleteTpl,
deletePipe() {
this.resourceType = MultisiteResourceType.pipe;
const pipeIds = this.pipeSelection.selected.map((pipe: any) => pipe.id);
- this.cdsModalService.show(CriticalConfirmationModalComponent, {
+ this.cdsModalService.show(DeleteConfirmationModalComponent, {
itemDescription: this.pipeSelection.hasSingleSelection ? $localize`Pipe` : $localize`Pipes`,
itemNames: pipeIds,
bodyTemplate: this.deleteTpl,
import { RgwDaemonService } from '~/app/shared/api/rgw-daemon.service';
import { RgwMultisiteService } from '~/app/shared/api/rgw-multisite.service';
import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
import { TableComponent } from '~/app/shared/datatable/table/table.component';
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
deleteAction() {
const groupNames = this.selection.selected.map((policy: any) => policy.groupName);
- this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: this.selection.hasSingleSelection
? $localize`Policy Group`
: $localize`Policy Groups`,
import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { FinishedTask } from '~/app/shared/models/finished-task';
import { Icons } from '~/app/shared/enum/icons.enum';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
import { RgwZonegroupService } from '~/app/shared/api/rgw-zonegroup.service';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
import { RgwStorageClassService } from '~/app/shared/api/rgw-storage-class.service';
removeStorageClassModal() {
const storage_class = this.selection.first().storage_class;
const placement_target = this.selection.first().placement_target;
- this.cdsModalService.show(CriticalConfirmationModalComponent, {
+ this.cdsModalService.show(DeleteConfirmationModalComponent, {
itemDescription: $localize`Tiering Storage Class`,
itemNames: [storage_class],
actionDescription: 'remove',
import { Icons } from '~/app/shared/enum/icons.enum';
import { Router } from '@angular/router';
import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
import { Observable, Subscriber, forkJoin as observableForkJoin } from 'rxjs';
import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
deleteAction() {
const account_name = this.selection.first().name;
- this.cdsModalService.show(CriticalConfirmationModalComponent, {
+ this.cdsModalService.show(DeleteConfirmationModalComponent, {
itemDescription: $localize`Account`,
itemNames: [account_name],
submitActionObservable: () => {
import { RgwUserService } from '~/app/shared/api/rgw-user.service';
import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { TableComponent } from '~/app/shared/datatable/table/table.component';
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
+import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impact.enum';
import { Icons } from '~/app/shared/enum/icons.enum';
import { CdTableAction } from '~/app/shared/models/cd-table-action';
import { CdTableColumn } from '~/app/shared/models/cd-table-column';
}
deleteAction() {
- this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalService.show(DeleteConfirmationModalComponent, {
impact: DeletionImpact.high,
itemDescription: this.selection.hasSingleSelection ? $localize`user` : $localize`users`,
itemNames: this.selection.selected.map((user: any) => user['uid']),
import { SMBCluster } from '../smb.model';
import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
import { FinishedTask } from '~/app/shared/models/finished-task';
removeSMBClusterModal() {
const cluster_id = this.selection.first().cluster_id;
- this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: $localize`Cluster`,
itemNames: [cluster_id],
actionDescription: $localize`remove`,
import { RoleService } from '~/app/shared/api/role.service';
import { ScopeService } from '~/app/shared/api/scope.service';
import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { FormModalComponent } from '~/app/shared/components/form-modal/form-modal.component';
import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
deleteRoleModal() {
const name = this.selection.first().name;
- this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: 'Role',
itemNames: [name],
submitAction: () => this.deleteRole(name)
import { SettingsService } from '~/app/shared/api/settings.service';
import { UserService } from '~/app/shared/api/user.service';
-import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
-import { DeletionImpact } from '~/app/shared/enum/critical-confirmation-modal-impact.enum';
+import { DeletionImpact } from '~/app/shared/enum/delete-confirmation-modal-impact.enum';
import { Icons } from '~/app/shared/enum/icons.enum';
import { NotificationType } from '~/app/shared/enum/notification-type.enum';
import { CdTableAction } from '~/app/shared/models/cd-table-action';
return;
}
- this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.modalService.show(DeleteConfirmationModalComponent, {
impact: DeletionImpact.high,
itemDescription: 'User',
itemNames: [username],
import { ConfigOptionComponent } from './config-option/config-option.component';
import { ConfirmationModalComponent } from './confirmation-modal/confirmation-modal.component';
import { Copy2ClipboardButtonComponent } from './copy2clipboard-button/copy2clipboard-button.component';
-import { CriticalConfirmationModalComponent } from './critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from './delete-confirmation-modal/delete-confirmation-modal.component';
import { CustomLoginBannerComponent } from './custom-login-banner/custom-login-banner.component';
import { DateTimePickerComponent } from './date-time-picker/date-time-picker.component';
import { DocComponent } from './doc/doc.component';
LoadingPanelComponent,
ModalComponent,
NotificationsSidebarComponent,
- CriticalConfirmationModalComponent,
+ DeleteConfirmationModalComponent,
ConfirmationModalComponent,
LanguageSelectorComponent,
GrafanaComponent,
+++ /dev/null
-<cds-modal size="sm"
- [open]="open"
- (overlaySelected)="closeModal()">
- <cds-modal-header (closeSelect)="closeModal()">
- <ng-container *ngTemplateOutlet="deletionHeading"></ng-container>
- </cds-modal-header>
-
- <section cdsModalContent>
- <form name="deletionForm"
- #formDir="ngForm"
- [formGroup]="deletionForm"
- novalidate>
- <cd-alert-panel *ngIf="infoMessage"
- type="info"
- spacingClass="mb-3"
- i18n>
- <p>{{ infoMessage }}</p>
- </cd-alert-panel>
- <ng-container *ngTemplateOutlet="bodyTemplate; context: bodyContext"></ng-container>
- <div class="question">
- <span *ngIf="itemNames; else noNames">
- <p *ngIf="itemNames.length === 1; else manyNames"
- i18n>Are you sure that you want to {{ actionDescription | lowercase }} <strong>{{ itemNames[0] }}</strong>?</p>
- <ng-template #manyNames>
- <p i18n>Are you sure that you want to {{ actionDescription | lowercase }} the selected items?</p>
- <ul>
- <li *ngFor="let itemName of itemNames"><strong>{{ itemName }}</strong></li>
- </ul>
- </ng-template >
- </span>
- <ng-template #noNames>
- <p i18n>Are you sure that you want to {{ actionDescription | lowercase }} the selected {{ itemDescription }}?</p>
- </ng-template>
- <ng-container *ngTemplateOutlet="childFormGroupTemplate; context:{form:deletionForm}"></ng-container>
- <div class="form-item">
- <ng-container *ngIf="impact == impactEnum.normal; else highImpactDeletion">
- <cds-checkbox id="confirmation"
- name="confirmation"
- formControlName="confirmation"
- autofocus
- [required]="true"
- modal-primary-focus
- i18n>Yes, I am sure.</cds-checkbox>
- </ng-container>
- <ng-template #highImpactDeletion>
- <cds-text-label label="Resource Name"
- for="resource_name"
- cdRequiredField="Resource Name"
- [invalid]="!deletionForm.controls.confirmInput.valid && deletionForm.controls.confirmInput.dirty"
- [invalidText]="ResourceError"
- i18n>Resource Name
- <input cdsText
- type="text"
- placeholder="Enter resource name to delete"
- id="resource_name"
- formControlName="confirmInput"/>
- </cds-text-label>
- <ng-template #ResourceError>
- <span *ngIf="deletionForm.showError('confirmInput', formDir, 'required')"
- class="invalid-feedback">
- <ng-container i18n>This field is required.</ng-container>
- </span>
- <span *ngIf="deletionForm.showError('confirmInput', formDir, 'matchResource')"
- class="invalid-feedback">
- <ng-container i18n>Enter the correct resource name.</ng-container>
- </span>
- </ng-template>
- </ng-template>
- </div>
- </div>
- </form>
- </section>
- <cd-form-button-panel (submitActionEvent)="callSubmitAction()"
- (backActionEvent)="backAction ? callBackAction() : hideModal()"
- [form]="deletionForm"
- [submitText]="(actionDescription | titlecase) + ' ' + itemDescription"
- [modalForm]="true"
- [submitBtnType]="(actionDescription === 'delete' || actionDescription === 'remove') ? 'danger' : 'primary'"></cd-form-button-panel>
-
-</cds-modal>
-
-<ng-template #deletionHeading>
- <h3 cdsModalHeaderHeading
- i18n>
- {{ actionDescription | titlecase }} {{ itemDescription }}
- </h3>
-</ng-template>
+++ /dev/null
-.modal-body .question {
- margin-top: 1em;
-}
-
-.modal-body label {
- font-weight: bold;
-}
-
-.modal-body .question .form-check {
- padding-top: 7px;
-}
+++ /dev/null
-import { Component, NgModule, TemplateRef, ViewChild } from '@angular/core';
-import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
-import { NgForm, ReactiveFormsModule } from '@angular/forms';
-
-import { Observable, Subscriber, timer as observableTimer } from 'rxjs';
-
-import { DirectivesModule } from '~/app/shared/directives/directives.module';
-import { configureTestBed, modalServiceShow } from '~/testing/unit-test-helper';
-import { AlertPanelComponent } from '../alert-panel/alert-panel.component';
-import { LoadingPanelComponent } from '../loading-panel/loading-panel.component';
-import { CriticalConfirmationModalComponent } from './critical-confirmation-modal.component';
-import { CheckboxModule, ModalService, PlaceholderService } from 'carbon-components-angular';
-import { ModalCdsService } from '../../services/modal-cds.service';
-import { DeletionImpact } from '../../enum/critical-confirmation-modal-impact.enum';
-
-@NgModule({})
-export class MockModule {}
-
-@Component({
- template: `
- <button type="button" class="btn btn-danger" (click)="openCtrlDriven()">
- <i class="fa fa-times"></i>Deletion Ctrl-Test
- <ng-template #ctrlDescription>
- The spinner is handled by the controller if you have use the modal as ViewChild in order to
- use it's functions to stop the spinner or close the dialog.
- </ng-template>
- </button>
-
- <button type="button" class="btn btn-danger" (click)="openModalDriven()">
- <i class="fa fa-times"></i>Deletion Modal-Test
- <ng-template #modalDescription>
- The spinner is handled by the modal if your given deletion function returns a Observable.
- </ng-template>
- </button>
- `
-})
-class MockComponent {
- @ViewChild('ctrlDescription', { static: true })
- ctrlDescription: TemplateRef<any>;
- @ViewChild('modalDescription', { static: true })
- modalDescription: TemplateRef<any>;
- someData = [1, 2, 3, 4, 5];
- finished: number[];
- ctrlRef: any;
- modalRef: any;
-
- // Normally private - public was needed for the tests
- constructor(public modalService: ModalCdsService) {}
-
- openCtrlDriven() {
- this.ctrlRef = this.modalService.show(CriticalConfirmationModalComponent, {
- submitAction: this.fakeDeleteController.bind(this),
- bodyTemplate: this.ctrlDescription
- });
- }
-
- openModalDriven() {
- this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
- submitActionObservable: this.fakeDelete(),
- bodyTemplate: this.modalDescription
- });
- }
-
- finish() {
- this.finished = [6, 7, 8, 9];
- }
-
- fakeDelete() {
- return (): Observable<any> => {
- return new Observable((observer: Subscriber<any>) => {
- observableTimer(100).subscribe(() => {
- observer.next(this.finish());
- observer.complete();
- });
- });
- };
- }
-
- fakeDeleteController() {
- observableTimer(100).subscribe(() => {
- this.finish();
- this.ctrlRef.close();
- });
- }
-}
-
-describe('CriticalConfirmationModalComponent', () => {
- let mockComponent: MockComponent;
- let component: CriticalConfirmationModalComponent;
- let mockFixture: ComponentFixture<MockComponent>;
-
- configureTestBed({
- declarations: [
- MockComponent,
- CriticalConfirmationModalComponent,
- LoadingPanelComponent,
- AlertPanelComponent
- ],
- imports: [ReactiveFormsModule, MockModule, DirectivesModule, CheckboxModule],
- providers: [
- ModalService,
- PlaceholderService,
- { provide: 'itemNames', useValue: [] },
- { provide: 'itemDescription', useValue: 'entry' },
- { provide: 'actionDescription', useValue: 'delete' }
- ]
- });
-
- beforeEach(() => {
- mockFixture = TestBed.createComponent(MockComponent);
- mockComponent = mockFixture.componentInstance;
- spyOn(mockComponent.modalService, 'show').and.callFake((_modalComp, config) => {
- const data = modalServiceShow(CriticalConfirmationModalComponent, config);
- component = data.componentInstance;
- return data;
- });
- mockComponent.openCtrlDriven();
- mockFixture.detectChanges();
- });
-
- it('should create', () => {
- expect(component).toBeTruthy();
- });
-
- it('should throw an error if no action is defined', () => {
- component = Object.assign(component, {
- submitAction: null,
- submitActionObservable: null
- });
- expect(() => component.ngOnInit()).toThrowError('No submit action defined');
- });
-
- it('should test if the ctrl driven mock is set correctly through mock component', () => {
- expect(component.bodyTemplate).toBeTruthy();
- expect(component.submitAction).toBeTruthy();
- expect(component.submitActionObservable).not.toBeTruthy();
- });
-
- it('should test if the modal driven mock is set correctly through mock component', () => {
- mockComponent.openModalDriven();
- expect(component.bodyTemplate).toBeTruthy();
- expect(component.submitActionObservable).toBeTruthy();
- expect(component.submitAction).not.toBeTruthy();
- });
-
- describe('component functions', () => {
- const changeValue = (formControl: string, value: any) => {
- const ctrl = component.deletionForm.get(formControl);
- ctrl.setValue(value);
- ctrl.markAsDirty();
- ctrl.updateValueAndValidity();
- };
-
- it('should test hideModal', () => {
- expect(component.hideModal).toBeTruthy();
- spyOn(component, 'closeModal').and.callThrough();
- expect(component.closeModal).not.toHaveBeenCalled();
- component.hideModal();
- expect(component.closeModal).toHaveBeenCalled();
- });
-
- describe('validate confirmation', () => {
- const testValidation = (submitted: boolean, error: string, expected: boolean) => {
- expect(
- component.deletionForm.showError('confirmation', <NgForm>{ submitted: submitted }, error)
- ).toBe(expected);
- };
-
- beforeEach(() => {
- component.deletionForm.reset();
- const ctrl = component.deletionForm.get('impact');
- ctrl.setValue(DeletionImpact.normal);
- ctrl.markAsDirty();
- ctrl.updateValueAndValidity();
- component.deletionForm.get('confirmation').updateValueAndValidity();
- });
-
- it('should test empty values', () => {
- testValidation(true, 'required', true);
- changeValue('confirmation', true);
- changeValue('confirmation', false);
- testValidation(true, 'required', true);
- });
- });
-
- describe('validate confirmInput', () => {
- const testValidation = (submitted: boolean, error: string, expected: boolean) => {
- expect(
- component.deletionForm.showError('confirmInput', <NgForm>{ submitted: submitted }, error)
- ).toBe(expected);
- };
-
- beforeEach(() => {
- component.deletionForm.reset();
- const ctrl = component.deletionForm.get('impact');
- ctrl.setValue(DeletionImpact.high);
- ctrl.markAsDirty();
- ctrl.updateValueAndValidity();
- component.deletionForm.get('confirmInput').updateValueAndValidity();
- });
-
- it('should test empty values', () => {
- testValidation(true, 'required', true);
- changeValue('confirmInput', 'dummytext');
- changeValue('confirmInput', '');
- testValidation(true, 'required', true);
- });
-
- it('should give error, if entered resource name is wrong', () => {
- component.itemNames = ['resource1'];
- changeValue('confirmInput', 'dummytext');
- testValidation(true, 'matchResource', true);
- });
-
- it('should give error, if entered resource name is correct', () => {
- component.itemNames = ['resource1'];
- changeValue('confirmInput', 'resource1');
- testValidation(true, 'matchResource', false);
- });
- });
-
- describe('deletion call', () => {
- beforeEach(() => {
- spyOn(component, 'stopLoadingSpinner').and.callThrough();
- spyOn(component, 'hideModal').and.callThrough();
- });
-
- describe('Controller driven', () => {
- beforeEach(() => {
- spyOn(component, 'submitAction').and.callThrough();
- spyOn(mockComponent.ctrlRef, 'close').and.callThrough();
- });
-
- it('should test fake deletion that closes modal', fakeAsync(() => {
- // Before deletionCall
- expect(component.submitAction).not.toHaveBeenCalled();
- // During deletionCall
- component.callSubmitAction();
- expect(component.stopLoadingSpinner).not.toHaveBeenCalled();
- expect(component.hideModal).not.toHaveBeenCalled();
- expect(mockComponent.ctrlRef.close).not.toHaveBeenCalled();
- expect(component.submitAction).toHaveBeenCalled();
- expect(mockComponent.finished).toBe(undefined);
- // After deletionCall
- tick(2000);
- expect(component.hideModal).not.toHaveBeenCalled();
- expect(mockComponent.ctrlRef.close).toHaveBeenCalled();
- expect(mockComponent.finished).toEqual([6, 7, 8, 9]);
- }));
- });
-
- describe('Modal driven', () => {
- beforeEach(() => {
- mockComponent.openModalDriven();
- spyOn(component, 'stopLoadingSpinner').and.callThrough();
- spyOn(component, 'hideModal').and.callThrough();
- spyOn(mockComponent, 'fakeDelete').and.callThrough();
- });
-
- it('should delete and close modal', fakeAsync(() => {
- // During deletionCall
- component.callSubmitAction();
- expect(mockComponent.finished).toBe(undefined);
- expect(component.hideModal).not.toHaveBeenCalled();
- // After deletionCall
- tick(2000);
- expect(mockComponent.finished).toEqual([6, 7, 8, 9]);
- expect(component.stopLoadingSpinner).not.toHaveBeenCalled();
- expect(component.hideModal).toHaveBeenCalled();
- }));
- });
- });
- });
-});
+++ /dev/null
-import { Component, Inject, OnInit, Optional, TemplateRef, ViewChild } from '@angular/core';
-import { UntypedFormControl, AbstractControl, ValidationErrors, Validators } from '@angular/forms';
-import { Observable } from 'rxjs';
-
-import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
-import { SubmitButtonComponent } from '../submit-button/submit-button.component';
-import { BaseModal } from 'carbon-components-angular';
-import { CdValidators } from '../../forms/cd-validators';
-import { DeletionImpact } from '../../enum/critical-confirmation-modal-impact.enum';
-
-@Component({
- selector: 'cd-deletion-modal',
- templateUrl: './critical-confirmation-modal.component.html',
- styleUrls: ['./critical-confirmation-modal.component.scss']
-})
-export class CriticalConfirmationModalComponent extends BaseModal implements OnInit {
- @ViewChild(SubmitButtonComponent, { static: true })
- submitButton: SubmitButtonComponent;
- deletionForm: CdFormGroup;
- impactEnum = DeletionImpact;
- childFormGroup: CdFormGroup;
- childFormGroupTemplate: TemplateRef<any>;
-
- constructor(
- @Optional() @Inject('impact') public impact: DeletionImpact,
- @Optional() @Inject('itemDescription') public itemDescription: 'entry',
- @Optional() @Inject('itemNames') public itemNames: string[],
- @Optional() @Inject('actionDescription') public actionDescription = 'delete',
- @Optional() @Inject('submitAction') public submitAction?: Function,
- @Optional() @Inject('backAction') public backAction?: Function,
- @Optional() @Inject('bodyTemplate') public bodyTemplate?: TemplateRef<any>,
- @Optional() @Inject('bodyContext') public bodyContext?: object,
- @Optional() @Inject('infoMessage') public infoMessage?: string,
- @Optional()
- @Inject('submitActionObservable')
- public submitActionObservable?: () => Observable<any>,
- @Optional()
- @Inject('callBackAtionObservable')
- public callBackAtionObservable?: () => Observable<any>
- ) {
- super();
- this.actionDescription = actionDescription || 'delete';
- this.impact = this.impact || DeletionImpact.normal;
- }
-
- ngOnInit() {
- const controls = {
- impact: new UntypedFormControl(this.impact),
- confirmation: new UntypedFormControl(false, {
- validators: [
- CdValidators.composeIf(
- {
- impact: DeletionImpact.normal
- },
- [Validators.requiredTrue]
- )
- ]
- }),
- confirmInput: new UntypedFormControl('', [
- CdValidators.composeIf({ impact: this.impactEnum.high }, [
- this.matchResourceName.bind(this),
- Validators.required
- ])
- ])
- };
- if (this.childFormGroup) {
- controls['child'] = this.childFormGroup;
- }
- this.deletionForm = new CdFormGroup(controls);
- if (!(this.submitAction || this.submitActionObservable)) {
- throw new Error('No submit action defined');
- }
- }
-
- matchResourceName(control: AbstractControl): ValidationErrors | null {
- if (this.itemNames && control.value != this.itemNames[0]) {
- return { matchResource: true };
- }
- return null;
- }
-
- callSubmitAction() {
- if (this.submitActionObservable) {
- this.submitActionObservable().subscribe({
- error: this.stopLoadingSpinner.bind(this),
- complete: this.hideModal.bind(this)
- });
- } else {
- this.submitAction();
- }
- }
-
- callBackAction() {
- if (this.callBackAtionObservable) {
- this.callBackAtionObservable().subscribe({
- error: this.stopLoadingSpinner.bind(this),
- complete: this.hideModal.bind(this)
- });
- } else {
- this.backAction();
- }
- }
-
- hideModal() {
- this.closeModal();
- }
-
- stopLoadingSpinner() {
- this.deletionForm.setErrors({ cdSubmitButton: true });
- }
-}
--- /dev/null
+<cds-modal size="sm"
+ [open]="open"
+ (overlaySelected)="closeModal()">
+ <cds-modal-header (closeSelect)="closeModal()">
+ <ng-container *ngTemplateOutlet="deletionHeading"></ng-container>
+ </cds-modal-header>
+
+ <section cdsModalContent>
+ <form name="deletionForm"
+ #formDir="ngForm"
+ [formGroup]="deletionForm"
+ novalidate>
+ <cd-alert-panel *ngIf="infoMessage"
+ type="info"
+ spacingClass="mb-3"
+ i18n>
+ <p>{{ infoMessage }}</p>
+ </cd-alert-panel>
+ <ng-container *ngTemplateOutlet="bodyTemplate; context: bodyContext"></ng-container>
+ <div class="question">
+ <span *ngIf="itemNames; else noNames">
+ <p *ngIf="itemNames.length === 1; else manyNames"
+ i18n>Are you sure that you want to {{ actionDescription | lowercase }} <strong>{{ itemNames[0] }}</strong>?</p>
+ <ng-template #manyNames>
+ <p i18n>Are you sure that you want to {{ actionDescription | lowercase }} the selected items?</p>
+ <ul>
+ <li *ngFor="let itemName of itemNames"><strong>{{ itemName }}</strong></li>
+ </ul>
+ </ng-template >
+ </span>
+ <ng-template #noNames>
+ <p i18n>Are you sure that you want to {{ actionDescription | lowercase }} the selected {{ itemDescription }}?</p>
+ </ng-template>
+ <ng-container *ngTemplateOutlet="childFormGroupTemplate; context:{form:deletionForm}"></ng-container>
+ <div class="form-item">
+ <ng-container *ngIf="impact == impactEnum.medium; else highImpactDeletion">
+ <cds-checkbox id="confirmation"
+ formControlName="confirmation"
+ autofocus
+ [required]="true"
+ modal-primary-focus
+ i18n>Yes, I am sure.</cds-checkbox>
+ </ng-container>
+ <ng-template #highImpactDeletion>
+ <cds-text-label label="Resource Name"
+ labelInputID="resource_name"
+ cdRequiredField="Resource Name"
+ [invalid]="!deletionForm.controls.confirmInput.valid && deletionForm.controls.confirmInput.dirty"
+ [invalidText]="ResourceError"
+ i18n
+ i18n-label>Resource Name
+ <input cdsText
+ type="text"
+ placeholder="Enter resource name to delete"
+ id="resource_name"
+ formControlName="confirmInput"
+ i18n-placeholder/>
+ </cds-text-label>
+ <ng-template #ResourceError>
+ <span *ngIf="deletionForm.showError('confirmInput', formDir, 'required')"
+ class="invalid-feedback">
+ <ng-container i18n>This field is required.</ng-container>
+ </span>
+ <span *ngIf="deletionForm.showError('confirmInput', formDir, 'matchResource')"
+ class="invalid-feedback">
+ <ng-container i18n>Enter the correct resource name.</ng-container>
+ </span>
+ </ng-template>
+ </ng-template>
+ </div>
+ </div>
+ </form>
+ </section>
+ <cd-form-button-panel (submitActionEvent)="callSubmitAction()"
+ (backActionEvent)="backAction ? callBackAction() : hideModal()"
+ [form]="deletionForm"
+ [submitText]="(actionDescription | titlecase) + ' ' + itemDescription"
+ [modalForm]="true"
+ [submitBtnType]="(actionDescription === 'delete' || actionDescription === 'remove') ? 'danger' : 'primary'"></cd-form-button-panel>
+
+</cds-modal>
+
+<ng-template #deletionHeading>
+ <h3 cdsModalHeaderHeading
+ i18n>
+ {{ actionDescription | titlecase }} {{ itemDescription }}
+ </h3>
+</ng-template>
--- /dev/null
+.modal-body .question {
+ margin-top: 1em;
+}
+
+.modal-body label {
+ font-weight: bold;
+}
+
+.modal-body .question .form-check {
+ padding-top: 7px;
+}
--- /dev/null
+import { Component, NgModule, NO_ERRORS_SCHEMA, TemplateRef, ViewChild } from '@angular/core';
+import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
+import { NgForm, ReactiveFormsModule } from '@angular/forms';
+
+import { Observable, Subscriber, timer as observableTimer } from 'rxjs';
+
+import { DirectivesModule } from '~/app/shared/directives/directives.module';
+import { configureTestBed, modalServiceShow } from '~/testing/unit-test-helper';
+import { AlertPanelComponent } from '../alert-panel/alert-panel.component';
+import { LoadingPanelComponent } from '../loading-panel/loading-panel.component';
+import { DeleteConfirmationModalComponent } from './delete-confirmation-modal.component';
+import { ModalService, PlaceholderService } from 'carbon-components-angular';
+import { ModalCdsService } from '../../services/modal-cds.service';
+import { DeletionImpact } from '../../enum/delete-confirmation-modal-impact.enum';
+
+@NgModule({})
+export class MockModule {}
+
+@Component({
+ template: `
+ <button type="button" class="btn btn-danger" (click)="openCtrlDriven()">
+ <i class="fa fa-times"></i>Deletion Ctrl-Test
+ <ng-template #ctrlDescription>
+ The spinner is handled by the controller if you have use the modal as ViewChild in order to
+ use it's functions to stop the spinner or close the dialog.
+ </ng-template>
+ </button>
+
+ <button type="button" class="btn btn-danger" (click)="openModalDriven()">
+ <i class="fa fa-times"></i>Deletion Modal-Test
+ <ng-template #modalDescription>
+ The spinner is handled by the modal if your given deletion function returns a Observable.
+ </ng-template>
+ </button>
+ `
+})
+class MockComponent {
+ @ViewChild('ctrlDescription', { static: true })
+ ctrlDescription: TemplateRef<any>;
+ @ViewChild('modalDescription', { static: true })
+ modalDescription: TemplateRef<any>;
+ someData = [1, 2, 3, 4, 5];
+ finished: number[];
+ ctrlRef: any;
+ modalRef: any;
+
+ // Normally private - public was needed for the tests
+ constructor(public modalService: ModalCdsService) {}
+
+ openCtrlDriven() {
+ this.ctrlRef = this.modalService.show(DeleteConfirmationModalComponent, {
+ submitAction: this.fakeDeleteController.bind(this),
+ bodyTemplate: this.ctrlDescription
+ });
+ }
+
+ openModalDriven() {
+ this.modalRef = this.modalService.show(DeleteConfirmationModalComponent, {
+ submitActionObservable: this.fakeDelete(),
+ bodyTemplate: this.modalDescription
+ });
+ }
+
+ finish() {
+ this.finished = [6, 7, 8, 9];
+ }
+
+ fakeDelete() {
+ return (): Observable<any> => {
+ return new Observable((observer: Subscriber<any>) => {
+ observableTimer(100).subscribe(() => {
+ observer.next(this.finish());
+ observer.complete();
+ });
+ });
+ };
+ }
+
+ fakeDeleteController() {
+ observableTimer(100).subscribe(() => {
+ this.finish();
+ this.ctrlRef.close();
+ });
+ }
+}
+
+describe('DeleteConfirmationModalComponent', () => {
+ let mockComponent: MockComponent;
+ let component: DeleteConfirmationModalComponent;
+ let mockFixture: ComponentFixture<MockComponent>;
+
+ configureTestBed({
+ declarations: [
+ MockComponent,
+ DeleteConfirmationModalComponent,
+ LoadingPanelComponent,
+ AlertPanelComponent
+ ],
+ schemas: [NO_ERRORS_SCHEMA],
+ imports: [ReactiveFormsModule, MockModule, DirectivesModule],
+ providers: [
+ ModalService,
+ PlaceholderService,
+ { provide: 'itemNames', useValue: [] },
+ { provide: 'itemDescription', useValue: 'entry' },
+ { provide: 'actionDescription', useValue: 'delete' },
+ { provide: 'impact', useValue: DeletionImpact.medium }
+ ]
+ });
+
+ beforeEach(() => {
+ mockFixture = TestBed.createComponent(MockComponent);
+ mockComponent = mockFixture.componentInstance;
+ spyOn(mockComponent.modalService, 'show').and.callFake((_modalComp, config) => {
+ const data = modalServiceShow(DeleteConfirmationModalComponent, config);
+ component = data.componentInstance;
+ return data;
+ });
+ mockComponent.openCtrlDriven();
+ mockFixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+
+ it('should throw an error if no action is defined', () => {
+ component = Object.assign(component, {
+ submitAction: null,
+ submitActionObservable: null
+ });
+ expect(() => component.ngOnInit()).toThrowError('No submit action defined');
+ });
+
+ it('should test if the ctrl driven mock is set correctly through mock component', () => {
+ expect(component.bodyTemplate).toBeTruthy();
+ expect(component.submitAction).toBeTruthy();
+ expect(component.submitActionObservable).not.toBeTruthy();
+ });
+
+ it('should test if the modal driven mock is set correctly through mock component', () => {
+ mockComponent.openModalDriven();
+ expect(component.bodyTemplate).toBeTruthy();
+ expect(component.submitActionObservable).toBeTruthy();
+ expect(component.submitAction).not.toBeTruthy();
+ });
+
+ describe('component functions', () => {
+ const changeValue = (formControl: string, value: string | boolean) => {
+ const ctrl = component.deletionForm.get(formControl);
+ ctrl.setValue(value);
+ ctrl.markAsDirty();
+ ctrl.updateValueAndValidity();
+ };
+
+ it('should test hideModal', () => {
+ expect(component.hideModal).toBeTruthy();
+ spyOn(component, 'closeModal').and.callThrough();
+ expect(component.closeModal).not.toHaveBeenCalled();
+ component.hideModal();
+ expect(component.closeModal).toHaveBeenCalled();
+ });
+
+ describe('validate confirmation', () => {
+ const testValidation = (submitted: boolean, error: string, expected: boolean) => {
+ expect(
+ component.deletionForm.showError('confirmation', <NgForm>{ submitted: submitted }, error)
+ ).toBe(expected);
+ };
+
+ beforeEach(() => {
+ component.deletionForm.reset();
+ const ctrl = component.deletionForm.get('impact');
+ ctrl.setValue(DeletionImpact.medium);
+ ctrl.markAsDirty();
+ ctrl.updateValueAndValidity();
+ component.deletionForm.get('confirmation').updateValueAndValidity();
+ });
+
+ it('should test empty values', () => {
+ testValidation(true, 'required', true);
+ changeValue('confirmation', true);
+ changeValue('confirmation', false);
+ testValidation(true, 'required', true);
+ });
+ });
+
+ describe('validate confirmInput', () => {
+ const testValidation = (submitted: boolean, error: string, expected: boolean) => {
+ expect(
+ component.deletionForm.showError('confirmInput', <NgForm>{ submitted: submitted }, error)
+ ).toBe(expected);
+ };
+
+ beforeEach(() => {
+ component.deletionForm.reset();
+ const ctrl = component.deletionForm.get('impact');
+ ctrl.setValue(DeletionImpact.high);
+ ctrl.markAsDirty();
+ ctrl.updateValueAndValidity();
+ component.deletionForm.get('confirmInput').updateValueAndValidity();
+ });
+
+ it('should test empty values', () => {
+ testValidation(true, 'required', true);
+ changeValue('confirmInput', 'dummytext');
+ changeValue('confirmInput', '');
+ testValidation(true, 'required', true);
+ });
+
+ it('should give error, if entered resource name is wrong', () => {
+ component.itemNames = ['resource1'];
+ changeValue('confirmInput', 'dummytext');
+ testValidation(true, 'matchResource', true);
+ });
+
+ it('should give error, if entered resource name is correct', () => {
+ component.itemNames = ['resource1'];
+ changeValue('confirmInput', 'resource1');
+ testValidation(true, 'matchResource', false);
+ });
+ });
+
+ describe('deletion call', () => {
+ beforeEach(() => {
+ spyOn(component, 'stopLoadingSpinner').and.callThrough();
+ spyOn(component, 'hideModal').and.callThrough();
+ });
+
+ describe('Controller driven', () => {
+ beforeEach(() => {
+ spyOn(component, 'submitAction').and.callThrough();
+ spyOn(mockComponent.ctrlRef, 'close').and.callThrough();
+ });
+
+ it('should test fake deletion that closes modal', fakeAsync(() => {
+ // Before deletionCall
+ expect(component.submitAction).not.toHaveBeenCalled();
+ // During deletionCall
+ component.callSubmitAction();
+ expect(component.stopLoadingSpinner).not.toHaveBeenCalled();
+ expect(component.hideModal).not.toHaveBeenCalled();
+ expect(mockComponent.ctrlRef.close).not.toHaveBeenCalled();
+ expect(component.submitAction).toHaveBeenCalled();
+ expect(mockComponent.finished).toBe(undefined);
+ // After deletionCall
+ tick(2000);
+ expect(component.hideModal).not.toHaveBeenCalled();
+ expect(mockComponent.ctrlRef.close).toHaveBeenCalled();
+ expect(mockComponent.finished).toEqual([6, 7, 8, 9]);
+ }));
+ });
+
+ describe('Modal driven', () => {
+ beforeEach(() => {
+ mockComponent.openModalDriven();
+ spyOn(component, 'stopLoadingSpinner').and.callThrough();
+ spyOn(component, 'hideModal').and.callThrough();
+ spyOn(mockComponent, 'fakeDelete').and.callThrough();
+ });
+
+ it('should delete and close modal', fakeAsync(() => {
+ // During deletionCall
+ component.callSubmitAction();
+ expect(mockComponent.finished).toBe(undefined);
+ expect(component.hideModal).not.toHaveBeenCalled();
+ // After deletionCall
+ tick(2000);
+ expect(mockComponent.finished).toEqual([6, 7, 8, 9]);
+ expect(component.stopLoadingSpinner).not.toHaveBeenCalled();
+ expect(component.hideModal).toHaveBeenCalled();
+ }));
+ });
+ });
+ });
+});
--- /dev/null
+import { Component, Inject, OnInit, Optional, TemplateRef, ViewChild } from '@angular/core';
+import { UntypedFormControl, AbstractControl, ValidationErrors, Validators } from '@angular/forms';
+import { Observable } from 'rxjs';
+
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { SubmitButtonComponent } from '../submit-button/submit-button.component';
+import { BaseModal } from 'carbon-components-angular';
+import { CdValidators } from '../../forms/cd-validators';
+import { DeletionImpact } from '../../enum/delete-confirmation-modal-impact.enum';
+
+@Component({
+ selector: 'cd-deletion-modal',
+ templateUrl: './delete-confirmation-modal.component.html',
+ styleUrls: ['./delete-confirmation-modal.component.scss']
+})
+export class DeleteConfirmationModalComponent extends BaseModal implements OnInit {
+ @ViewChild(SubmitButtonComponent, { static: true })
+ submitButton: SubmitButtonComponent;
+ deletionForm: CdFormGroup;
+ impactEnum = DeletionImpact;
+ childFormGroup: CdFormGroup;
+ childFormGroupTemplate: TemplateRef<any>;
+
+ constructor(
+ @Optional() @Inject('impact') public impact: DeletionImpact,
+ @Optional() @Inject('itemDescription') public itemDescription: 'entry',
+ @Optional() @Inject('itemNames') public itemNames: string[],
+ @Optional() @Inject('actionDescription') public actionDescription = 'delete',
+ @Optional() @Inject('submitAction') public submitAction?: Function,
+ @Optional() @Inject('backAction') public backAction?: Function,
+ @Optional() @Inject('bodyTemplate') public bodyTemplate?: TemplateRef<any>,
+ @Optional() @Inject('bodyContext') public bodyContext?: object,
+ @Optional() @Inject('infoMessage') public infoMessage?: string,
+ @Optional()
+ @Inject('submitActionObservable')
+ public submitActionObservable?: () => Observable<any>,
+ @Optional()
+ @Inject('callBackAtionObservable')
+ public callBackAtionObservable?: () => Observable<any>
+ ) {
+ super();
+ this.actionDescription = actionDescription || 'delete';
+ this.impact = this.impact || DeletionImpact.medium;
+ }
+
+ ngOnInit() {
+ const controls = {
+ impact: new UntypedFormControl(this.impact),
+ confirmation: new UntypedFormControl(false, {
+ validators: [
+ CdValidators.composeIf(
+ {
+ impact: DeletionImpact.medium
+ },
+ [Validators.requiredTrue]
+ )
+ ]
+ }),
+ confirmInput: new UntypedFormControl('', [
+ CdValidators.composeIf({ impact: this.impactEnum.high }, [
+ this.matchResourceName.bind(this),
+ Validators.required
+ ])
+ ])
+ };
+ if (this.childFormGroup) {
+ controls['child'] = this.childFormGroup;
+ }
+ this.deletionForm = new CdFormGroup(controls);
+ if (!(this.submitAction || this.submitActionObservable)) {
+ throw new Error('No submit action defined');
+ }
+ }
+
+ matchResourceName(control: AbstractControl): ValidationErrors | null {
+ if (this.itemNames && control.value !== String(this.itemNames?.[0])) {
+ return { matchResource: true };
+ }
+ return null;
+ }
+
+ callSubmitAction() {
+ if (this.submitActionObservable) {
+ this.submitActionObservable().subscribe({
+ error: this.stopLoadingSpinner.bind(this),
+ complete: this.hideModal.bind(this)
+ });
+ } else {
+ this.submitAction();
+ }
+ }
+
+ callBackAction() {
+ if (this.callBackAtionObservable) {
+ this.callBackAtionObservable().subscribe({
+ error: this.stopLoadingSpinner.bind(this),
+ complete: this.hideModal.bind(this)
+ });
+ } else {
+ this.backAction();
+ }
+ }
+
+ hideModal() {
+ this.closeModal();
+ }
+
+ stopLoadingSpinner() {
+ this.deletionForm.setErrors({ cdSubmitButton: true });
+ }
+}
import { Permission, Permissions } from '../../models/permissions';
import { AuthStorageService } from '../../services/auth-storage.service';
import { TaskWrapperService } from '../../services/task-wrapper.service';
-import { CriticalConfirmationModalComponent } from '../../components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { DeleteConfirmationModalComponent } from '../../components/delete-confirmation-modal/delete-confirmation-modal.component';
import { ModalCdsService } from '../../services/modal-cds.service';
import { BaseModal } from 'carbon-components-angular';
delete() {
const selectedKey = this.selection.first()[this.meta.columnKey];
- this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+ this.modalRef = this.modalService.show(DeleteConfirmationModalComponent, {
itemDescription: $localize`${this.meta.resource}`,
itemNames: [selectedKey],
submitAction: () => {
+++ /dev/null
-export enum DeletionImpact {
- normal = 'normal',
- high = 'high' // NOTE: User should be able to select only single resource while deleting
-}
--- /dev/null
+export enum DeletionImpact {
+ medium = 'medium',
+ high = 'high' // NOTE: User should be able to select only single resource while deleting
+}