From e0bae1609340ca134e0f596c35a0c4776e71a135 Mon Sep 17 00:00:00 2001 From: ziajka Date: Tue, 26 Feb 2019 16:04:05 +0100 Subject: [PATCH] Local and Remote server adding validation, Ref. #295 --- .../add-server-dialog.component.html | 67 +++++++++------- .../add-server-dialog.component.ts | 79 ++++++++++++++++--- 2 files changed, 110 insertions(+), 36 deletions(-) diff --git a/src/app/components/servers/add-server-dialog/add-server-dialog.component.html b/src/app/components/servers/add-server-dialog/add-server-dialog.component.html index 489531be..77586d19 100644 --- a/src/app/components/servers/add-server-dialog/add-server-dialog.component.html +++ b/src/app/components/servers/add-server-dialog/add-server-dialog.component.html @@ -1,34 +1,47 @@

Add server

+
- + + + You must enter a value + - - - {{ location.name }} - - + + + {{ location.name }} + + - - - + + + - - + + + - - - {{ auth.name }} - - + + + - - - - - - -
-
- - -
+ + + {{ auth.name }} + + + + + + + + + + + + +
+ + +
+
+ \ No newline at end of file diff --git a/src/app/components/servers/add-server-dialog/add-server-dialog.component.ts b/src/app/components/servers/add-server-dialog/add-server-dialog.component.ts index 9afedb7a..278efcd8 100644 --- a/src/app/components/servers/add-server-dialog/add-server-dialog.component.ts +++ b/src/app/components/servers/add-server-dialog/add-server-dialog.component.ts @@ -2,6 +2,7 @@ import { Component, Inject, OnInit } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; import { Server } from '../../../models/server'; import { ElectronService } from 'ngx-electron'; +import { FormGroup, FormControl, Validators } from '@angular/forms'; @Component({ @@ -9,11 +10,20 @@ import { ElectronService } from 'ngx-electron'; templateUrl: 'add-server-dialog.component.html' }) export class AddServerDialogComponent implements OnInit { - server: Server = new Server(); - authorizations = [{ key: 'none', name: 'No authorization' }, { key: 'basic', name: 'Basic authorization' }]; locations = []; + serverForm = new FormGroup({ + 'name': new FormControl('', [ Validators.required ]), + 'location': new FormControl(''), + 'path': new FormControl(''), + 'host': new FormControl(''), + 'port': new FormControl(''), + 'authorization': new FormControl('none'), + 'login': new FormControl(''), + 'password': new FormControl('') + }); + constructor( public dialogRef: MatDialogRef, private electronService: ElectronService, @@ -45,17 +55,68 @@ export class AddServerDialogComponent implements OnInit { async ngOnInit() { this.locations = this.getLocations(); - this.server.authorization = 'none'; - this.server.location = this.getDefaultLocation(); - this.server.path = await this.getDefaultLocalServerPath(); + + const defaultLocalServerPath = await this.getDefaultLocalServerPath(); + + this.serverForm.get('location').valueChanges.subscribe((location: string) => { + const pathControl = this.serverForm.get('path'); + const portControl = this.serverForm.get('port'); + const hostControl = this.serverForm.get('host'); + + if(location === 'local') { + pathControl.setValue(defaultLocalServerPath); + pathControl.setValidators([Validators.required]); + + portControl.clearValidators(); + hostControl.clearValidators(); + } + else { + pathControl.setValue(''); + pathControl.clearValidators(); + + portControl.setValidators([Validators.required, Validators.min(0)]); + hostControl.setValidators([Validators.required]); + } + + [pathControl, portControl, hostControl].forEach((control) => { + control.updateValueAndValidity({ + onlySelf: true + }); + }) + }); + + + this.serverForm.get('authorization').valueChanges.subscribe((authorization: string) => { + const loginControl = this.serverForm.get('login'); + const passwordControl = this.serverForm.get('password'); + + if(authorization === 'none') { + loginControl.clearValidators(); + passwordControl.clearValidators(); + } + else { + loginControl.setValidators([Validators.required]); + passwordControl.setValidators([Validators.required]); + } + + [loginControl, passwordControl].forEach((control) => { + control.updateValueAndValidity({ + onlySelf: true + }); + }) + }); + + this.serverForm.get('location').setValue(this.getDefaultLocation()); + this.serverForm.get('authorization').setValue('none'); } onAddClick(): void { - // clear path if not local server - if(this.server.location !== 'local') { - this.server.path = null; + if(!this.serverForm.valid) { + return; } - this.dialogRef.close(this.server); + + const server: Server = Object.assign({}, this.serverForm.value); + this.dialogRef.close(server); } onNoClick(): void {