Skip to content
This repository has been archived by the owner on Jul 23, 2019. It is now read-only.

Commit

Permalink
fix: introduced lower case directive
Browse files Browse the repository at this point in the history
  • Loading branch information
edewit authored and ia3andy committed Jul 5, 2018
1 parent f36aaa5 commit fe21c9d
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ <h3>Authorized Account Information</h3>
(click)="connectAccount($event)">Log In &amp; Authorize Account</button>
</div>
</div>
<form>
<form #form="ngForm">
<div class="form-group">
<label for="ghOrg" class="col-sm-2 control-label">Location</label>
<div class="col-sm-10">
Expand All @@ -65,11 +65,10 @@ <h3>Authorized Account Information</h3>
<label for="ghRepo" class="col-sm-2 control-label">Repository</label>
<div class="col-sm-10"
[class.has-error]="ghRepo.invalid && (ghRepo.dirty || ghRepo.touched)">
<input id="ghRepo" class="form-control" name="ghRepo" type="text" #ghRepo="ngModel" validateRepository
<input id="ghRepo" class="form-control" name="ghRepo" type="text" #ghRepo="ngModel" lowercase validateRepository required
placeholder="Enter a unique name for your repository"
[disabled]="!launcherComponent.summary.gitHubDetails.organization"
[(ngModel)]="launcherComponent.summary.gitHubDetails.repository"
[value]="launcherComponent.summary.gitHubDetails.repository | lowercase">
[(ngModel)]="launcherComponent.summary.gitHubDetails.repository">
<span class="help-block"
*ngIf="ghRepo.invalid && (ghRepo.dirty || ghRepo.touched)">
<span *ngIf="ghRepo.errors.duplicate">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
ViewChild,
ViewEncapsulation
} from '@angular/core';
import { NgForm } from '@angular/forms';
import { Subscription } from 'rxjs/Subscription';

import { DependencyCheckService } from '../../service/dependency-check.service';
Expand All @@ -24,6 +25,7 @@ import { broadcast } from '../../shared/telemetry.decorator';
styleUrls: ['./gitprovider-createapp-step.component.less']
})
export class GitproviderCreateappStepComponent extends LauncherStep implements AfterViewInit, OnDestroy, OnInit {
@ViewChild('form') form: NgForm;
@ViewChild('versionSelect') versionSelect: ElementRef;

private subscriptions: Subscription[] = [];
Expand Down Expand Up @@ -75,12 +77,7 @@ export class GitproviderCreateappStepComponent extends LauncherStep implements A
* @returns {boolean} True if step is completed
*/
get stepCompleted(): boolean {
return (this.launcherComponent.summary.gitHubDetails.authenticated === true
&& this.launcherComponent.summary.gitHubDetails.login !== undefined
&& this.launcherComponent.summary.gitHubDetails.organization !== undefined
&& this.launcherComponent.summary.gitHubDetails.repository !== undefined
&& this.launcherComponent.summary.gitHubDetails.repository.length > 0
&& this.launcherComponent.summary.gitHubDetails.repositoryAvailable === true);
return this.form.valid;
}

// Steps
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Directive, EventEmitter, HostListener, Output } from '@angular/core';

@Directive({
selector: '[ngModel][lowercase]'
})
export class LowerCaseDirective {
@Output() ngModelChange: EventEmitter<any> = new EventEmitter();
value: any;

@HostListener('input', ['$event'])
onInputChange($event: any) {
this.value = $event.target.value.toLowerCase();
this.ngModelChange.emit(this.value);
}
}
Original file line number Diff line number Diff line change
@@ -1,41 +1,38 @@
import { Directive } from '@angular/core';
import { Directive, forwardRef } from '@angular/core';
import { NG_ASYNC_VALIDATORS, Validator, ValidatorFn, AbstractControl } from '@angular/forms';
import { Observable } from 'rxjs';

import { GitProviderService } from '../../service/git-provider.service';

@Directive({
selector: '[validateRepository]',
providers: [{provide: NG_ASYNC_VALIDATORS, useExisting: GitProviderRepositoryValidatorDirective, multi: true}]
providers: [{ provide: NG_ASYNC_VALIDATORS, useExisting:
forwardRef(() => GitProviderRepositoryValidatorDirective), multi: true }]
})
export class GitProviderRepositoryValidatorDirective implements Validator {
private pattern = /^[a-zA-Z0-9][a-zA-Z0-9-._]{1,63}$/;

constructor(private gitProvider: GitProviderService) {}
constructor(private gitProvider: GitProviderService) { }

validate( control : AbstractControl ) : Observable<{[key : string] : any}> {
return Observable.timer(500).switchMap(()=>{
return this.validRepositoryName(control)
.mapTo(null)
.catch(err=>Observable.of({availability: true}));
});
validate(control: AbstractControl): Observable<{ [key: string]: any }> {
return this.validRepositoryName(control).debounceTime(500).distinctUntilChanged().first();
}

validRepositoryName(control: AbstractControl): Observable<{[key : string] : any}> {
validRepositoryName(control: AbstractControl): Observable<{ [key: string]: any }> {
return new Observable((resolve) => {
const valid = this.pattern.test(control.value);
const org = control.parent.get("ghOrg").value;
const org = control.parent.get('ghOrg').value;
if (!valid) {
resolve.next(this.createError(control.value, 'pattern', valid));
resolve.next(this.createError('pattern', control.value));
} else if (org) {
this.gitProvider.isGitHubRepo(org, control.value).subscribe(
duplicate => resolve.next(this.createError(control.value, 'duplicate', !duplicate))
duplicate => resolve.next(duplicate ? this.createError('duplicate', control.value) : {})
);
}
});
}

private createError(value: any, key: string, valid: boolean): any {
return valid ? null : {[key]: {value: value}};
private createError(key: string, value: any): any {
return { [key]: { value: value } };
}
}
5 changes: 4 additions & 1 deletion src/app/launcher/launcher.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,10 @@ import { DependencyEditorCreateappStepComponent }
from './create-app/dependency-editor-step/dependency-editor-step.component';
import { GitproviderCreateappStepComponent }
from './create-app/gitprovider-createapp-step/gitprovider-createapp-step.component';
import { GitProviderRepositoryValidatorDirective }
import { GitProviderRepositoryValidatorDirective }
from './create-app/gitprovider-createapp-step/gitprovider-repository.validator';
import { LowerCaseDirective }
from './create-app/gitprovider-createapp-step/gitprovider-lowercase';
import { MissionRuntimeCreateappStepComponent }
from './create-app/mission-runtime-createapp-step/mission-runtime-createapp-step.component';
import { ProjectProgressCreateappNextstepComponent }
Expand Down Expand Up @@ -82,6 +84,7 @@ export const providers: Provider[] = [
CancelOverlayComponent,
DependencyEditorCreateappStepComponent,
GitproviderCreateappStepComponent,
LowerCaseDirective,
GitProviderRepositoryValidatorDirective,
GitproviderImportappStepComponent,
MissionRuntimeCreateappStepComponent,
Expand Down

0 comments on commit fe21c9d

Please sign in to comment.