diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/basket/basket.service.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/basket/basket.service.ts index 920fb5817..02b2b9877 100644 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/basket/basket.service.ts +++ b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/basket/basket.service.ts @@ -1,5 +1,6 @@ import { Injectable } from '@angular/core'; import { Response, Headers } from '@angular/http'; +import { Router } from '@angular/router'; import { DataService } from '../shared/services/data.service'; import { SecurityService } from '../shared/services/security.service'; @@ -22,7 +23,7 @@ export class BasketService { items: [] }; - constructor(private service: DataService, private authService: SecurityService, private basketEvents: BasketWrapperService) { + constructor(private service: DataService, private authService: SecurityService, private basketEvents: BasketWrapperService, private router: Router) { this.basket.items = []; // Init: @@ -35,7 +36,9 @@ export class BasketService { } } - this.basketEvents.orderCreated$.subscribe(x => this.dropBasket()); + this.basketEvents.orderCreated$.subscribe(x => { + this.dropBasket(); + }); } setBasket(item): Observable { diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/directives/page-heading.directive.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/directives/page-heading.directive.ts deleted file mode 100644 index b0d707f45..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/directives/page-heading.directive.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Component, Input } from '@angular/core'; - -@Component({ - selector: 'appc-page-heading', - template: `

{{text}}

` -}) -export class PageHeadingComponent { - @Input() text: string; - constructor() { } -} diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/directives/x-large.directive.spec.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/directives/x-large.directive.spec.ts deleted file mode 100644 index 1dbb9e44d..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/directives/x-large.directive.spec.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { - fakeAsync, - tick, - TestBed -} from '@angular/core/testing'; -import { Component } from '@angular/core'; -import { By } from '@angular/platform-browser/src/dom/debug/by'; - -// Load the implementations that should be tested -import { XLargeDirective } from './x-large.directive'; - -describe('x-large directive', () => { - // Create a test component to test directives - @Component({ - template: '
Content
' - }) - class TestComponent { } - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [ - XLargeDirective, - TestComponent - ] - }); - }); - - it('should sent font-size to x-large', fakeAsync(() => { - TestBed.compileComponents().then(() => { - - const fixture = TestBed.createComponent(TestComponent); - fixture.detectChanges(); - tick(); - const element = fixture.debugElement.query(By.css('div')); - - // expect(element.nativeElement.style.fontSize).toBe('x-large'); - - }); - })); - -}); diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/directives/x-large.directive.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/directives/x-large.directive.ts deleted file mode 100644 index 0cf58bcc5..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/directives/x-large.directive.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Directive, ElementRef, Renderer } from '@angular/core'; -/* - * Directive - * XLarge is a simple directive to show how one is made - */ -@Directive({ - selector: '[appdXlarge]' // using [ ] means selecting attributes -}) -export class XLargeDirective { - constructor(element: ElementRef, renderer: Renderer) { - // simple DOM manipulation to set font size to x-large - // `nativeElement` is the direct reference to the DOM element - // element.nativeElement.style.fontSize = 'x-large'; - - // for server/webworker support use the renderer - renderer.setElementStyle(element.nativeElement, 'fontSize', 'x-large'); - } -} diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/control-base.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/control-base.ts deleted file mode 100644 index 97ffcf111..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/control-base.ts +++ /dev/null @@ -1,36 +0,0 @@ -export class ControlBase{ - value: T; - key: string; - label: string; - placeholder: string; - required: boolean; - minlength: number; - maxlength: number; - order: number; - type: string; - class: string; - - constructor(options: { - value?: T, - key?: string, - label?: string, - placeholder?: string, - required?: boolean, - minlength?: number, - maxlength?: number, - order?: number, - type?: string, - class?: string; - } = {}) { - this.value = options.value; - this.key = options.key || ''; - this.label = options.label || ''; - this.placeholder = options.placeholder || ''; - this.required = !!options.required; - this.minlength = options.minlength; - this.maxlength = options.maxlength; - this.order = options.order === undefined ? 1 : options.order; - this.type = options.type || ''; - this.class = options.class || ''; - } -} diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/control-checkbox.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/control-checkbox.ts deleted file mode 100644 index dbff5e20e..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/control-checkbox.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ControlBase } from './control-base'; - -export class ControlCheckbox extends ControlBase { - type: string; - - constructor(options: any = {}) { - super(options); - this.type = 'checkbox'; - this.value = options.value || false; - } -} diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/control-dropdown.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/control-dropdown.ts deleted file mode 100644 index 793af39af..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/control-dropdown.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ControlBase } from './control-base'; - -export class ControlDropdown extends ControlBase { - options: { key: string, value: string }[] = []; - - constructor(options: any = {}) { - super(options); - this.type = 'dropdown'; - this.options = options.options || []; - } -} diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/control-textbox.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/control-textbox.ts deleted file mode 100644 index 135cd5432..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/control-textbox.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ControlBase } from './control-base'; - -export class ControlTextbox extends ControlBase { - constructor(options: any = {}) { - super(options); - this.type = options.type || 'textbox'; - } -} diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/dynamic-form-control.component.html b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/dynamic-form-control.component.html deleted file mode 100644 index dcfe683e2..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/dynamic-form-control.component.html +++ /dev/null @@ -1,26 +0,0 @@ - -
- - - - - - - - - - - - - - -
\ No newline at end of file diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/dynamic-form-control.component.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/dynamic-form-control.component.ts deleted file mode 100644 index 8df976694..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/dynamic-form-control.component.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Component, Input } from '@angular/core'; -import { FormGroup } from '@angular/forms'; -import { ControlBase } from './control-base'; -import { ErrorMessageComponent } from './error-message.component'; - -@Component({ - selector: 'appc-dynamic-control', - templateUrl: './dynamic-form-control.component.html' -}) -export class DynamicFormControlComponent { - @Input() control; - @Input() form; - - constructor() { - this.control = undefined; - this.form = undefined; - } - - get valid() { - return this.form.controls[this.control.key].valid; - } - - get invalid() { - return !this.form.controls[this.control.key].valid && this.form.controls[this.control.key].touched; - } -} diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/dynamic-form.component.html b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/dynamic-form.component.html deleted file mode 100644 index a3660cb01..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/dynamic-form.component.html +++ /dev/null @@ -1,5 +0,0 @@ -
- - - -
\ No newline at end of file diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/dynamic-form.component.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/dynamic-form.component.ts deleted file mode 100644 index bf2874d48..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/dynamic-form.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core'; -import { FormGroup } from '@angular/forms'; - -import { ControlBase } from './control-base'; -import { FormControlService } from './form-control.service'; - -@Component({ - selector: 'appc-dynamic-form', - templateUrl: './dynamic-form.component.html' -}) -export class DynamicFormComponent implements OnInit { - - @Input() controls: ControlBase[] = []; - @Input() btnText: string = 'Submit'; // Default value at least - @Input() formClass: string = 'form-horizontal'; - // Note: don't keep name of output events as same as native events such as submit etc. - @Output() formsubmit: EventEmitter = new EventEmitter(); - form: FormGroup; - - constructor(private _controlService: FormControlService) { } - - ngOnInit() { - let sortedControls = this.controls.sort((a, b) => a.order - b.order); - this.form = this._controlService.toControlGroup(sortedControls); - } - - onSubmit() { - this.formsubmit.emit(this.form.value); - } -} diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/error-message.component.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/error-message.component.ts deleted file mode 100644 index ff4a97f08..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/error-message.component.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Component, Host, Input } from '@angular/core'; -import { FormGroupDirective } from '@angular/forms'; - -import { ControlBase } from './control-base'; -import { ValidationService } from './validation.service'; - -@Component({ - selector: 'appc-control-error-message', - template: `` -}) -export class ErrorMessageComponent { - @Input() control: ControlBase; - @Input() form: FormGroupDirective; - constructor() { } - - get errorMessage() { - let c = this.form.form.get(this.control.key); - for (let propertyName in c.errors) { - if (c.errors.hasOwnProperty(propertyName) && c.touched) { - return ValidationService.getValidatorErrorMessage(propertyName, this.control.minlength || this.control.maxlength); - } - } - return undefined; - } -} diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/error-summary.component.html b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/error-summary.component.html deleted file mode 100644 index 638dd9cb6..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/error-summary.component.html +++ /dev/null @@ -1,7 +0,0 @@ -
-
    -
  • - {{error}} -
  • -
-
\ No newline at end of file diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/error-summary.component.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/error-summary.component.ts deleted file mode 100644 index 24d31a2ea..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/error-summary.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Component, Input } from '@angular/core'; - -@Component({ - selector: 'appc-error-summary', - templateUrl: './error-summary.component.html' -}) -export class ErrorSummaryComponent { - @Input() errors: string | string[]; - - constructor() { } -} diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/form-control.service.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/form-control.service.ts deleted file mode 100644 index 36c8ba92c..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/form-control.service.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Injectable } from '@angular/core'; -import { FormControl, FormGroup, Validators } from '@angular/forms'; - -import { ControlBase } from './control-base'; -import { ValidationService } from './validation.service'; - -@Injectable() -export class FormControlService { - constructor() { } - - toControlGroup(controls: ControlBase[]) { - let group: any = {}; - - controls.forEach(control => { - let validators = []; - // Required - if (control.required) { - validators.push(Validators.required); - } - // Minlength - if (control.minlength) { - validators.push(Validators.minLength(control.minlength)); - } - // Maxlength - if (control.maxlength) { - validators.push(Validators.minLength(control.maxlength)); - } - // Email - if (control.type === 'email') { - validators.push(ValidationService.emailValidator); - } - // Password - if (control.type === 'password') { - validators.push(ValidationService.passwordValidator); - } - group[control.key] = new FormControl(control.value || '', validators); - }); - - return new FormGroup(group); - } -} diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/validation.service.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/validation.service.ts deleted file mode 100644 index 79c35da7c..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/forms/validation.service.ts +++ /dev/null @@ -1,42 +0,0 @@ -export class ValidationService { - - static getValidatorErrorMessage(code: string, fieldLength: number) { - let config: any = { - 'required': 'This is a required field', - 'minlength': 'Minimum length is ' + fieldLength, - 'maxlength': 'Maximum length is ' + fieldLength, - 'invalidCreditCard': 'Invalid credit card number', - 'invalidEmailAddress': 'Invalid email address', - 'invalidPassword': 'Password must be at least 6 characters long, and contain a number and special character.' - }; - return config[code]; - } - - static creditCardValidator(control: any) { - // Visa, MasterCard, American Express, Diners Club, Discover, JCB - if (control.value.match(/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/)) { - return undefined; - } else { - return { 'invalidCreditCard': true }; - } - } - - static emailValidator(control: any) { - // RFC 2822 compliant regex - if (control.value.match(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/)) { - return undefined; - } else { - return { 'invalidEmailAddress': true }; - } - } - - static passwordValidator(control: any) { - // {6,100} - Assert password is between 6 and 100 characters - // (?=.*[0-9]) - Assert a string has at least one number - if (control.value.match(/^(?=.*[0-9])[a-zA-Z0-9!"@#$%^&*]{6,100}$/)) { - return undefined; - } else { - return { 'invalidPassword': true }; - } - } -} diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/services/data.service.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/services/data.service.ts index 064e024e1..97d854062 100644 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/services/data.service.ts +++ b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/services/data.service.ts @@ -42,7 +42,7 @@ export class DataService { }).catch(this.handleError); } - delete(url: string, params?: any): Observable { + delete(url: string, params?: any) { let options: RequestOptionsArgs = {}; if (this.securityService) { @@ -51,12 +51,13 @@ export class DataService { } console.log('data.service deleting'); - return this.http.delete(url, options).map( - (res: Response) => { - console.log('response from server in delete operation'); - console.log(res); - return res; - }).catch(this.handleError); + //return this.http.delete(url, options).subscribe( + // return res; + // ); + + this.http.delete(url, options).subscribe((res) => { + console.log('deleted'); + }); } private handleError(error: any) { diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/services/utility.service.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/services/utility.service.ts deleted file mode 100644 index fea7bbd49..000000000 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/services/utility.service.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Router } from '@angular/router'; - -@Injectable() -export class UtilityService { - - private _router: Router; - - constructor(router: Router) { - this._router = router; - } - - convertDateTime(date: Date) { - let _formattedDate = new Date(date.toString()); - return _formattedDate.toDateString(); - } - - navigate(path: string) { - this._router.navigate([path]); - } - - navigateToSignIn() { - this.navigate('/login'); - } -} diff --git a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/shared.module.ts b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/shared.module.ts index cde0b9a5e..9d9bb3851 100644 --- a/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/shared.module.ts +++ b/src/Web/WebSPA/eShopOnContainers.WebSPA/Client/modules/shared/shared.module.ts @@ -5,17 +5,8 @@ import { RouterModule } from '@angular/router'; import { HttpModule, JsonpModule } from '@angular/http'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { PageHeadingComponent } from './directives/page-heading.directive'; -import { DynamicFormComponent } from './forms/dynamic-form.component'; -import { DynamicFormControlComponent } from './forms/dynamic-form-control.component'; -import { ErrorMessageComponent } from './forms/error-message.component'; -import { ErrorSummaryComponent } from './forms/error-summary.component'; -import { FormControlService } from './forms/form-control.service'; - // Services import { DataService } from './services/data.service'; -import { UtilityService } from './services/utility.service'; -import { UppercasePipe } from './pipes/uppercase.pipe'; import { BasketWrapperService} from './services/basket.wrapper.service'; import { SecurityService } from './services/security.service'; @@ -36,12 +27,6 @@ import { Identity } from './components/identity/identity'; JsonpModule ], declarations: [ - DynamicFormComponent, - DynamicFormControlComponent, - ErrorMessageComponent, - ErrorSummaryComponent, - PageHeadingComponent, - UppercasePipe, Pager, Header, Identity @@ -54,14 +39,6 @@ import { Identity } from './components/identity/identity'; RouterModule, NgbModule, // Providers, Components, directive, pipes - DynamicFormComponent, - DynamicFormControlComponent, - ErrorSummaryComponent, - ErrorMessageComponent, - //FooterComponent, - //HeaderComponent, - PageHeadingComponent, - UppercasePipe, Pager, Header, Identity @@ -74,8 +51,6 @@ export class SharedModule { providers: [ // Providers DataService, - FormControlService, - UtilityService, BasketWrapperService, SecurityService ]