1 import { Component, Input, OnInit } from '@angular/core';
2 import { Router } from '@angular/router';
3 import { NvmeofService } from '~/app/shared/api/nvmeof.service';
4 import { DeleteConfirmationModalComponent } from '~/app/shared/components/delete-confirmation-modal/delete-confirmation-modal.component';
5 import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
6 import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
7 import { Icons } from '~/app/shared/enum/icons.enum';
8 import { CdTableAction } from '~/app/shared/models/cd-table-action';
9 import { CdTableSelection } from '~/app/shared/models/cd-table-selection';
10 import { FinishedTask } from '~/app/shared/models/finished-task';
11 import { NvmeofListener } from '~/app/shared/models/nvmeof';
12 import { Permission } from '~/app/shared/models/permissions';
13 import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
14 import { ModalCdsService } from '~/app/shared/services/modal-cds.service';
15 import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
17 const BASE_URL = 'block/nvmeof/subsystems';
20 selector: 'cd-nvmeof-listeners-list',
21 templateUrl: './nvmeof-listeners-list.component.html',
22 styleUrls: ['./nvmeof-listeners-list.component.scss'],
25 export class NvmeofListenersListComponent implements OnInit {
32 tableActions: CdTableAction[];
33 selection = new CdTableSelection();
34 permission: Permission;
35 listeners: NvmeofListener[];
38 public actionLabels: ActionLabelsI18n,
39 private modalService: ModalCdsService,
40 private authStorageService: AuthStorageService,
41 private taskWrapper: TaskWrapperService,
42 private nvmeofService: NvmeofService,
43 private router: Router
45 this.permission = this.authStorageService.getPermissions().nvmeof;
49 this.listenerColumns = [
51 name: $localize`Host`,
55 name: $localize`Transport`,
59 name: $localize`Address`,
61 cellTransformation: CellTemplate.copy
66 name: this.actionLabels.CREATE,
71 [BASE_URL, { outlets: { modal: [URLVerbs.CREATE, this.subsystemNQN, 'listener'] } }],
72 { queryParams: { group: this.group } }
74 canBePrimary: (selection: CdTableSelection) => !selection.hasSelection
77 name: this.actionLabels.DELETE,
80 click: () => this.deleteListenerModal()
85 updateSelection(selection: CdTableSelection) {
86 this.selection = selection;
91 .listListeners(this.subsystemNQN, this.group)
92 .subscribe((listResponse: NvmeofListener[]) => {
93 this.listeners = listResponse.map((listener, index) => {
94 listener['id'] = index;
95 listener['full_addr'] = `${listener.traddr}:${listener.trsvcid}`;
101 deleteListenerModal() {
102 const listener = this.selection.first();
103 this.modalService.show(DeleteConfirmationModalComponent, {
104 itemDescription: $localize`Listener`,
105 actionDescription: 'delete',
106 infoMessage: $localize`This action will delete listener despite any active connections.`,
108 $localize`listener` + ' ' + `${listener.host_name} (${listener.traddr}:${listener.trsvcid})`
110 submitActionObservable: () =>
111 this.taskWrapper.wrapTaskAroundCall({
112 task: new FinishedTask('nvmeof/listener/delete', {
113 nqn: this.subsystemNQN,
114 host_name: listener.host_name
116 call: this.nvmeofService.deleteListener(