All files / src/app/ceph/block/rbd-trash-move-modal rbd-trash-move-modal.component.ts

100% Statements 37/37
81.82% Branches 18/22
100% Functions 8/8
100% Lines 34/34

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 895x   5x 5x   5x 5x   5x   5x 5x             5x             5x 5x             5x 5x 5x 5x   5x     5x 5x         11x 11x     11x 11x             5x 2x     5x 3x 3x   3x 2x     3x 1x     3x                 3x     5x  
import { Component, OnInit } from '@angular/core';
 
import * as moment from 'moment';
import { BsModalRef } from 'ngx-bootstrap/modal';
 
import { RbdService } from '../../../shared/api/rbd.service';
import { CdFormBuilder } from '../../../shared/forms/cd-form-builder';
import { CdFormGroup } from '../../../shared/forms/cd-form-group';
import { CdValidators } from '../../../shared/forms/cd-validators';
import { ExecutingTask } from '../../../shared/models/executing-task';
import { FinishedTask } from '../../../shared/models/finished-task';
import { TaskWrapperService } from '../../../shared/services/task-wrapper.service';
 
@Component({
  selector: 'cd-rbd-trash-move-modal',
  template: require('./rbd-trash-move-modal.component.html'),
  styles: []
})
export class RbdTrashMoveModalComponent implements OnInit {
  metaType: string;
  poolName: string;
  imageName: string;
  executingTasks: ExecutingTask[];
 
  moveForm: CdFormGroup;
  minDate = new Date();
  bsConfig = {
    dateInputFormat: 'YYYY-MM-DD HH:mm:ss',
    containerClass: 'theme-default'
  };
  pattern: string;
 
  constructor(
    private rbdService: RbdService,
    public modalRef: BsModalRef,
    private fb: CdFormBuilder,
    private taskWrapper: TaskWrapperService
  ) {
    this.createForm();
  }
 
  createForm() {
    this.moveForm = this.fb.group({
      expiresAt: [
        '',
        [
          CdValidators.custom('format', (expiresAt) => {
            const result = expiresAt === '' || moment(expiresAt, 'YYYY-MM-DD HH:mm:ss').isValid();
            return !result;
          }),
          CdValidators.custom('expired', (expiresAt) => {
            const result = moment().isAfter(expiresAt);
            return result;
          })
        ]
      ]
    });
  }
 
  ngOnInit() {
    this.pattern = `${this.poolName}/${this.imageName}`;
  }
 
  moveImage() {
    let delay = 0;
    const expiresAt = this.moveForm.getValue('expiresAt');
 
    if (expiresAt) {
      delay = moment(expiresAt).diff(moment(), 'seconds', true);
    }
 
    if (delay < 0) {
      delay = 0;
    }
 
    this.taskWrapper
      .wrapTaskAroundCall({
        task: new FinishedTask('rbd/trash/move', {
          pool_name: this.poolName,
          image_name: this.imageName
        }),
        call: this.rbdService.moveTrash(this.poolName, this.imageName, delay)
      })
      .subscribe(undefined, undefined, () => {
        this.modalRef.hide();
      });
  }
}