1 import { ChangeDetectorRef, Component, Inject, OnInit, Optional } from '@angular/core';
2 import { FormArray, FormControl, FormGroup, UntypedFormControl, Validators } from '@angular/forms';
3 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
4 import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
5 import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
6 import { CdValidators } from '~/app/shared/forms/cd-validators';
8 import { NotificationService } from '~/app/shared/services/notification.service';
9 import { RgwRealmService } from '~/app/shared/api/rgw-realm.service';
10 import { SmbService } from '~/app/shared/api/smb.service';
11 import { CdForm } from '~/app/shared/forms/cd-form';
12 import { DomainSettings, JoinSource, SMBJoinAuth } from '../smb.model';
13 import { Observable } from 'rxjs';
14 import { Router } from '@angular/router';
15 import { JOINAUTH_URL } from '../smb-join-auth-list/smb-join-auth-list.component';
18 selector: 'cd-smb-domain-setting-modal',
19 templateUrl: './smb-domain-setting-modal.component.html',
20 styleUrls: ['./smb-domain-setting-modal.component.scss']
22 export class SmbDomainSettingModalComponent extends CdForm implements OnInit {
23 domainSettingsForm: CdFormGroup;
25 joinAuths$: Observable<SMBJoinAuth[]>;
28 public activeModal: NgbActiveModal,
29 public actionLabels: ActionLabelsI18n,
30 public rgwRealmService: RgwRealmService,
31 public notificationService: NotificationService,
32 public smbService: SmbService,
33 private cd: ChangeDetectorRef,
34 private router: Router,
35 @Optional() @Inject('action') public action: string,
36 @Optional() @Inject('resource') public resource: string,
38 @Inject('domainSettingsObject')
39 public domainSettingsObject?: DomainSettings
42 this.action = this.actionLabels.UPDATE;
43 this.resource = $localize`Active Directory (AD) parameters`;
46 private createForm() {
47 this.domainSettingsForm = new CdFormGroup({
48 realm: new UntypedFormControl('', {
51 CdValidators.custom('uniqueName', (realm: string) => {
52 return this.realmNames && this.realmNames.indexOf(realm) !== -1;
56 join_sources: new FormArray([])
63 this.joinAuths$ = this.smbService.listJoinAuths();
64 this.domainSettingsForm.get('realm').setValue(this.domainSettingsObject?.realm);
65 const join_sources = this.domainSettingsForm.get('join_sources') as FormArray;
67 if (this.domainSettingsObject?.join_sources) {
68 this.domainSettingsObject.join_sources.forEach((source: JoinSource) => {
69 join_sources.push(this.newJoinSource(source));
73 if (!this.domainSettingsObject) {
76 this.action = this.actionLabels.EDIT;
81 this.smbService.passData(this.domainSettingsForm.value);
86 return this.domainSettingsForm.get('join_sources') as FormArray;
89 newJoinSource(joinSource?: JoinSource) {
90 return new FormGroup({
91 ref: new FormControl(joinSource?.ref || null, Validators.required)
96 this.join_sources.push(this.newJoinSource());
97 this.cd.detectChanges();
100 navigateCreateJoinSource() {
102 this.router.navigate([`${JOINAUTH_URL}/${URLVerbs.CREATE}`]);
105 removeJoinSource(index: number) {
106 const join_sources = this.domainSettingsForm.get('join_sources') as FormArray;
108 if (index >= 0 && index < join_sources.length) {
109 join_sources.removeAt(index);
112 this.cd.detectChanges();