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