]> git.apps.os.sepia.ceph.com Git - ceph.git/blob
7514eada1e5ab3853a2c1f7a6b7abdaeba8a5521
[ceph.git] /
1 import { Component, EventEmitter, Output } from '@angular/core';
2 import { Validators } from '@angular/forms';
3
4 import * as _ from 'lodash';
5 import { BsModalRef } from 'ngx-bootstrap/modal/bs-modal-ref.service';
6
7 import { CdFormBuilder } from '../../../shared/forms/cd-form-builder';
8 import { CdFormGroup } from '../../../shared/forms/cd-form-group';
9 import { CdValidators } from '../../../shared/validators/cd-validators';
10 import { RgwUserS3Key } from '../models/rgw-user-s3-key';
11
12 @Component({
13   selector: 'cd-rgw-user-s3-key-modal',
14   templateUrl: './rgw-user-s3-key-modal.component.html',
15   styleUrls: ['./rgw-user-s3-key-modal.component.scss']
16 })
17 export class RgwUserS3KeyModalComponent {
18   /**
19    * The event that is triggered when the 'Add' button as been pressed.
20    */
21   @Output() submitAction = new EventEmitter();
22
23   formGroup: CdFormGroup;
24   viewing = true;
25   userCandidates: string[] = [];
26
27   constructor(private formBuilder: CdFormBuilder, public bsModalRef: BsModalRef) {
28     this.createForm();
29     this.listenToChanges();
30   }
31
32   createForm() {
33     this.formGroup = this.formBuilder.group({
34       user: [null, [Validators.required]],
35       generate_key: [true],
36       access_key: [null, [CdValidators.requiredIf({ generate_key: false })]],
37       secret_key: [null, [CdValidators.requiredIf({ generate_key: false })]]
38     });
39   }
40
41   listenToChanges() {
42     // Reset the validation status of various controls, especially those that are using
43     // the 'requiredIf' validator. This is necessary because the controls itself are not
44     // validated again if the status of their prerequisites have been changed.
45     this.formGroup.get('generate_key').valueChanges.subscribe(() => {
46       ['access_key', 'secret_key'].forEach((path) => {
47         this.formGroup.get(path).updateValueAndValidity({ onlySelf: true });
48       });
49     });
50   }
51
52   /**
53    * Set the 'viewing' flag. If set to TRUE, the modal dialog is in 'View' mode,
54    * otherwise in 'Add' mode. According to the mode the dialog and its controls
55    * behave different.
56    * @param {boolean} viewing
57    */
58   setViewing(viewing: boolean = true) {
59     this.viewing = viewing;
60   }
61
62   /**
63    * Set the values displayed in the dialog.
64    */
65   setValues(user: string, access_key: string, secret_key: string) {
66     this.formGroup.setValue({
67       user: user,
68       generate_key: _.isEmpty(access_key),
69       access_key: access_key,
70       secret_key: secret_key
71     });
72   }
73
74   /**
75    * Set the user candidates displayed in the 'Username' dropdown box.
76    */
77   setUserCandidates(candidates: string[]) {
78     this.userCandidates = candidates;
79   }
80
81   onSubmit() {
82     const key: RgwUserS3Key = this.formGroup.value;
83     this.submitAction.emit(key);
84     this.bsModalRef.hide();
85   }
86 }