@ -1,9 +0,0 @@ | |||
//import { Routes, RouterModule } from '@angular/router'; | |||
//import { BasketComponent } from './basket.component'; | |||
//const routes: Routes = [ | |||
// { path: '', component: BasketComponent } | |||
//]; | |||
//export const routing = RouterModule.forChild(routes); |
@ -1,9 +0,0 @@ | |||
//import { Routes, RouterModule } from '@angular/router'; | |||
//import { CatalogComponent } from './catalog.component'; | |||
//const routes: Routes = [ | |||
// { path: '', component: CatalogComponent } | |||
//]; | |||
//export const routing = RouterModule.forChild(routes); |
@ -0,0 +1,62 @@ | |||
<div class="esh-order-header"> | |||
<ul class="container"> | |||
<li class="esh-order-header-back" routerLink="/catalog">Back to list</li> | |||
</ul> | |||
</div> | |||
<div class="container esh-order-container"> | |||
<div class="row"> | |||
<div class="col-md-12"> | |||
<section> | |||
<table class="table"> | |||
<thead> | |||
<tr> | |||
<th class="esh-order-product-column"> | |||
PRODUCT | |||
</th> | |||
<th> | |||
</th> | |||
<th> | |||
BRAND | |||
</th> | |||
<th> | |||
PRICE | |||
</th> | |||
<th> | |||
QUANTITY | |||
</th> | |||
<th> | |||
COST | |||
</th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
<tr *ngFor="let item of order?.items"> | |||
<td class="esh-order-product-column"><img class="esh-order-product-image" src="{{item.pictureUrl}}" /></td> | |||
<td class="esh-order-product-column">{{item.productName}}</td> | |||
<td class="esh-order-product-column">ROSLYN</td> | |||
<td class="esh-order-product-column">$ {{item.unitPrice}}</td> | |||
<td class="esh-order-product-column"> | |||
<input type="number" style="width:100px" min="1" [(ngModel)]="item.quantity" (change)="itemQuantityChanged(item)" /> | |||
</td> | |||
<td class="esh-order-product-column esh-order-total-value">$ {{item.unitPrice * item.quantity}}</td> | |||
</tr> | |||
<tr class="esh-order-totals"> | |||
<td></td> | |||
<td></td> | |||
<td></td> | |||
<td></td> | |||
<td></td> | |||
<td> | |||
<div class="esh-order-total-value"> | |||
<div class="esh-order-total-label"><span>TOTAL</span></div> | |||
<span>$ {{totalPrice}}</span> | |||
</div> | |||
</td> | |||
</tr> | |||
</tbody> | |||
</table> | |||
</section> | |||
</div> | |||
</div> | |||
</div> |
@ -0,0 +1,80 @@ | |||
@import '../_variables.scss'; | |||
.esh-orders { | |||
&-header { | |||
background-color: #00A69C; | |||
height: 63px; | |||
li { | |||
list-style: none; | |||
display: inline; | |||
opacity: 0.5; | |||
margin-top: 25px; | |||
margin-left: 10px; | |||
float: right; | |||
cursor: pointer; | |||
color: white; | |||
} | |||
li a { | |||
color: white; | |||
} | |||
&-back { | |||
float: left !important; | |||
margin-top: 20px !important; | |||
text-transform: uppercase; | |||
} | |||
li a:hover { | |||
text-decoration: none; | |||
} | |||
} | |||
&-container { | |||
min-height: 70vh; | |||
padding-top: 40px; | |||
margin-bottom: 30px; | |||
min-width: 992px; | |||
} | |||
&-product-column { | |||
max-width: 120px; | |||
text-transform: uppercase; | |||
vertical-align: middle !important; | |||
} | |||
&-product-image { | |||
max-width: 210px; | |||
} | |||
&-total-value { | |||
font-size: 20px; | |||
color: #00a69c; | |||
} | |||
&-total-label { | |||
font-size: 14px; | |||
color: #404040; | |||
margin-top: 10px; | |||
} | |||
&-totals { | |||
border-bottom:none!important; | |||
} | |||
} | |||
.table td { | |||
border-top: solid 1px #ddd; | |||
} | |||
.table thead th { | |||
border: none !important; | |||
} | |||
@ -0,0 +1,92 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
import { OrdersService } from './orders.service'; | |||
import { ICatalog } from '../shared/models/catalog.model'; | |||
import { ICatalogItem } from '../shared/models/catalogItem.model'; | |||
import { ICatalogType } from '../shared/models/catalogType.model'; | |||
import { ICatalogBrand } from '../shared/models/catalogBrand.model'; | |||
import { IPager } from '../shared/models/pager.model'; | |||
import { BasketWrapperService} from '../shared/services/basket.wrapper.service'; | |||
@Component({ | |||
selector: 'esh-orders .orders', | |||
styleUrls: ['./orders.component.scss'], | |||
templateUrl: './orders.component.html' | |||
}) | |||
export class CatalogComponent implements OnInit { | |||
brands: ICatalogBrand[]; | |||
types: ICatalogType[]; | |||
catalog: ICatalog; | |||
brandSelected: number; | |||
typeSelected: number; | |||
paginationInfo: IPager; | |||
constructor(private service: OrdersService, private basketService: BasketWrapperService) { } | |||
ngOnInit() { | |||
this.getBrands(); | |||
this.getCatalog(10, 0); | |||
this.getTypes(); | |||
} | |||
onFilterApplied(event: any) { | |||
event.preventDefault(); | |||
this.getCatalog(this.paginationInfo.itemsPage, this.paginationInfo.actualPage, this.brandSelected, this.typeSelected); | |||
} | |||
onBrandFilterChanged(event: any, value: number) { | |||
event.preventDefault(); | |||
this.brandSelected = value; | |||
} | |||
onTypeFilterChanged(event: any, value: number) { | |||
event.preventDefault(); | |||
this.typeSelected = value; | |||
} | |||
onPageChanged(value: any) { | |||
console.log('catalog pager event fired' + value); | |||
event.preventDefault(); | |||
this.paginationInfo.actualPage = value; | |||
this.getCatalog(this.paginationInfo.itemsPage, value); | |||
} | |||
addToCart(item: ICatalogItem) { | |||
this.basketService.addItemToBasket(item); | |||
} | |||
getCatalog(pageSize:number, pageIndex: number, brand?: number, type?: number) { | |||
this.service.getCatalog(pageIndex, pageSize, brand, type).subscribe(catalog => { | |||
this.catalog = catalog; | |||
console.log('catalog items retrieved: ' + catalog.count); | |||
this.paginationInfo = { | |||
actualPage : catalog.pageIndex, | |||
itemsPage : catalog.pageSize, | |||
totalItems : catalog.count, | |||
totalPages: Math.ceil(catalog.count / catalog.pageSize), | |||
items: catalog.pageSize | |||
}; | |||
console.log(this.paginationInfo); | |||
}); | |||
} | |||
getTypes() { | |||
this.service.getTypes().subscribe(types => { | |||
this.types = types; | |||
let alltypes = { id: null, type: 'All' }; | |||
this.types.unshift(alltypes); | |||
console.log('types retrieved: ' + types.length); | |||
}); | |||
} | |||
getBrands() { | |||
this.service.getBrands().subscribe(brands => { | |||
this.brands = brands; | |||
let allBrands = { id: null, brand: 'All' }; | |||
this.brands.unshift(allBrands); | |||
console.log('brands retrieved: ' + brands.length); | |||
}); | |||
} | |||
} | |||
@ -0,0 +1,14 @@ | |||
import { NgModule } from '@angular/core'; | |||
import { BrowserModule } from '@angular/platform-browser'; | |||
import { SharedModule } from '../shared/shared.module'; | |||
import { OrdersComponent } from './orders.component'; | |||
import { OrdersService } from './orders.service'; | |||
import { Pager } from '../shared/components/pager/pager'; | |||
@NgModule({ | |||
imports: [BrowserModule, SharedModule], | |||
declarations: [OrdersComponent], | |||
providers: [OrdersService] | |||
}) | |||
export class CatalogModule { } |
@ -0,0 +1,48 @@ | |||
import { Injectable } from '@angular/core'; | |||
import { Response } from '@angular/http'; | |||
import { DataService } from '../shared/services/data.service'; | |||
import { ICatalog } from '../shared/models/catalog.model'; | |||
import { ICatalogBrand } from '../shared/models/catalogBrand.model'; | |||
import { ICatalogType } from '../shared/models/catalogType.model'; | |||
import 'rxjs/Rx'; | |||
import { Observable } from 'rxjs/Observable'; | |||
import 'rxjs/add/observable/throw'; | |||
import { Observer } from 'rxjs/Observer'; | |||
import 'rxjs/add/operator/map'; | |||
@Injectable() | |||
export class OrdersService { | |||
private catalogUrl: string = 'http://eshopcontainers:5101/api/v1/catalog/items'; | |||
private brandUrl: string = 'http://eshopcontainers:5101/api/v1/catalog/catalogbrands'; | |||
private typesUrl: string = 'http://eshopcontainers:5101/api/v1/catalog/catalogtypes'; | |||
constructor(private service: DataService) { | |||
} | |||
getCatalog(pageIndex: number, pageSize: number, brand: number, type: number): Observable<ICatalog> { | |||
var url = this.catalogUrl; | |||
if (brand || type) { | |||
url = this.catalogUrl + '/type/' + ((type) ? type.toString() : 'null') + '/brand/' + ((brand) ? brand.toString() : 'null'); | |||
} | |||
url = url + '?pageIndex=' + pageIndex + '&pageSize=' + pageSize; | |||
return this.service.get(url).map((response: Response) => { | |||
return response.json(); | |||
}); | |||
} | |||
getBrands(): Observable<ICatalogBrand[]> { | |||
return this.service.get(this.brandUrl).map((response: Response) => { | |||
return response.json(); | |||
}); | |||
} | |||
getTypes(): Observable<ICatalogType[]> { | |||
return this.service.get(this.typesUrl).map((response: Response) => { | |||
return response.json(); | |||
}); | |||
}; | |||
} |