1 import { Component, OnInit } from '@angular/core';
2 import { FormControl, Validators } from '@angular/forms';
4 import { I18n } from '@ngx-translate/i18n-polyfill';
5 import { BsModalRef } from 'ngx-bootstrap/modal';
6 import { Subject } from 'rxjs';
8 import { RbdService } from '../../../shared/api/rbd.service';
9 import { ActionLabelsI18n } from '../../../shared/constants/app.constants';
10 import { CdFormGroup } from '../../../shared/forms/cd-form-group';
11 import { FinishedTask } from '../../../shared/models/finished-task';
12 import { NotificationService } from '../../../shared/services/notification.service';
13 import { TaskManagerService } from '../../../shared/services/task-manager.service';
16 selector: 'cd-rbd-snapshot-form',
17 templateUrl: './rbd-snapshot-form.component.html',
18 styleUrls: ['./rbd-snapshot-form.component.scss']
20 export class RbdSnapshotFormComponent implements OnInit {
26 snapshotForm: CdFormGroup;
32 public onSubmit: Subject<string>;
35 public modalRef: BsModalRef,
36 private rbdService: RbdService,
37 private taskManagerService: TaskManagerService,
38 private notificationService: NotificationService,
40 private actionLabels: ActionLabelsI18n
42 this.action = this.actionLabels.CREATE;
43 this.resource = this.i18n('RBD Snapshot');
48 this.snapshotForm = new CdFormGroup({
49 snapshotName: new FormControl('', {
50 validators: [Validators.required]
56 this.onSubmit = new Subject();
59 setSnapName(snapName) {
60 this.snapName = snapName;
61 this.snapshotForm.get('snapshotName').setValue(snapName);
65 * Set the 'editing' flag. If set to TRUE, the modal dialog is in
66 * 'Edit' mode, otherwise in 'Create' mode.
67 * @param {boolean} editing
69 setEditing(editing: boolean = true) {
70 this.editing = editing;
71 this.action = this.editing ? this.actionLabels.RENAME : this.actionLabels.CREATE;
75 const snapshotName = this.snapshotForm.getValue('snapshotName');
76 const finishedTask = new FinishedTask();
77 finishedTask.name = 'rbd/snap/edit';
78 finishedTask.metadata = {
79 image_spec: this.rbdService.getImageSpec(this.poolName, this.namespace, this.imageName),
80 snapshot_name: snapshotName
83 .renameSnapshot(this.poolName, this.namespace, this.imageName, this.snapName, snapshotName)
86 this.taskManagerService.subscribe(
88 finishedTask.metadata,
89 (asyncFinishedTask: FinishedTask) => {
90 this.notificationService.notifyTask(asyncFinishedTask);
94 this.onSubmit.next(this.snapName);
97 this.snapshotForm.setErrors({ cdSubmitButton: true });
102 const snapshotName = this.snapshotForm.getValue('snapshotName');
103 const finishedTask = new FinishedTask();
104 finishedTask.name = 'rbd/snap/create';
105 finishedTask.metadata = {
106 image_spec: this.rbdService.getImageSpec(this.poolName, this.namespace, this.imageName),
107 snapshot_name: snapshotName
110 .createSnapshot(this.poolName, this.namespace, this.imageName, snapshotName)
113 this.taskManagerService.subscribe(
115 finishedTask.metadata,
116 (asyncFinishedTask: FinishedTask) => {
117 this.notificationService.notifyTask(asyncFinishedTask);
120 this.modalRef.hide();
121 this.onSubmit.next(snapshotName);
124 this.snapshotForm.setErrors({ cdSubmitButton: true });