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

100% Statements 35/35
76.47% Branches 13/17
100% Functions 7/7
100% Lines 32/32

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     2x       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();
      });
  }
}