Commit d464cc0a by amal

Merge branch 'amal' into 'master'

22-11-2019 See merge request !32
parents fcccf70a 9de87a4e
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
</div> </div>
<button class="nav_btn nav_search floatRight" *ngIf="!searchShow"> <button class="nav_btn nav_search floatRight" *ngIf="!searchShow">
</button> </button>
<button class="nav_btn nav_exit floatRight" *ngIf="searchShow" (click)="searchClose()"> <button class="nav_btn nav_close floatRight" *ngIf="searchShow" (click)="searchClose()">
</button> </button>
<div class="clear"></div> <div class="clear"></div>
</div> </div>
......
...@@ -14,14 +14,24 @@ ...@@ -14,14 +14,24 @@
<div class="product_banner"> <div class="product_banner">
<div [ngClass]="checkFavStatus(product.prodId)" (click)="changeFav(product.prodId)"></div> <div [ngClass]="checkFavStatus(product.prodId)" (click)="changeFav(product.prodId)"></div>
<div class="featured_badge" *ngIf="product.featured">Featured</div> <div class="featured_badge" *ngIf="product.featured">Featured</div>
<ion-slides pager="true" [options]="bannerOptions">
<ion-slide>
<img [src]="product.image" onerror="this.src='../assets/[email protected]'">
</ion-slide>
<ion-slide>
<img [src]="product.image" onerror="this.src='../assets/[email protected]'">
</ion-slide>
<ion-slide>
<img [src]="product.image" onerror="this.src='../assets/[email protected]'"> <img [src]="product.image" onerror="this.src='../assets/[email protected]'">
</ion-slide>
</ion-slides>
</div> </div>
<div class="product_header"> <div class="product_header">
<ion-row> <ion-row>
<ion-col size="8"> <ion-col size="8">
<h3>{{product.prodName}}</h3> <h3>{{product.prodName}}</h3>
<p><strong><span><img src="../assets/Path61_2.png"></span>0</strong>&nbsp; {{product.category}}, {{product.subCate}} <p><strong><span><img src="../assets/Path61_2.png"></span>0</strong>&nbsp; {{product.category}}, {{product.subCate}}
<br/> <br />
<span *ngFor="let tag of product.tag">#{{tag}}&nbsp;</span> <span *ngFor="let tag of product.tag">#{{tag}}&nbsp;</span>
</p> </p>
</ion-col> </ion-col>
...@@ -41,7 +51,8 @@ ...@@ -41,7 +51,8 @@
<li> <li>
<button id="custom_check_button"> <button id="custom_check_button">
<label> <label>
<input id="{{color}}" type="radio" name="color" value="{{color}}" (click)="cartService.choose_color(color)" [checked]="i==0"> <input id="{{color}}" type="radio" name="color" value="{{color}}"
(click)="cartService.choose_color(color)" [checked]="i==0">
<p>{{color}}</p> <p>{{color}}</p>
</label> </label>
</button> </button>
...@@ -58,7 +69,8 @@ ...@@ -58,7 +69,8 @@
<li> <li>
<button id="custom_check_button"> <button id="custom_check_button">
<label> <label>
<input id="{{size}}" type="radio" name="services" value="{{size}}" (click)="cartService.choose_size(size)" [checked]="i==0"> <input id="{{size}}" type="radio" name="services" value="{{size}}"
(click)="cartService.choose_size(size)" [checked]="i==0">
<p>{{size}}</p> <p>{{size}}</p>
</label> </label>
</button> </button>
...@@ -202,7 +214,8 @@ ...@@ -202,7 +214,8 @@
<li (click)="viewProd(similar)"> <li (click)="viewProd(similar)">
<div class="product_image"> <div class="product_image">
<img [src]="similar.image" onerror="this.src='../assets/[email protected]'"> <img [src]="similar.image" onerror="this.src='../assets/[email protected]'">
<div [ngClass]="checkFavStatus(similar.prodId)" (click)="changeFav(similar.prodId)"></div> <div [ngClass]="checkFavStatus(similar.prodId)" (click)="changeFav(similar.prodId)">
</div>
</div> </div>
<h5>{{similar.prodName}}</h5> <h5>{{similar.prodName}}</h5>
<p>{{similar.price}}</p> <p>{{similar.price}}</p>
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
position: absolute; position: absolute;
top: 15px; top: 15px;
right: 15px; right: 15px;
z-index: 2;
} }
.fav_fill { .fav_fill {
width: 30px; width: 30px;
...@@ -24,6 +25,7 @@ ...@@ -24,6 +25,7 @@
position: absolute; position: absolute;
top: 15px; top: 15px;
right: 15px; right: 15px;
z-index: 2;
} }
.featured_badge { .featured_badge {
position: absolute; position: absolute;
...@@ -35,6 +37,7 @@ ...@@ -35,6 +37,7 @@
padding-left: 5px; padding-left: 5px;
padding-right: 5px; padding-right: 5px;
font-size: 13px; font-size: 13px;
z-index: 2;
} }
img { img {
width: 100%; width: 100%;
......
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from "@angular/core";
import { Location } from '@angular/common'; import { Location } from "@angular/common";
import { Router, ActivatedRoute } from '@angular/router'; import { Router, ActivatedRoute } from "@angular/router";
import { Products } from './../../config/services/product'; import { Products } from "./../../config/services/product";
import { Order } from './../../config/services/order'; import { Order } from "./../../config/services/order";
import { CartsService } from './../../config/cart.service'; import { CartsService } from "./../../config/cart.service";
import { ProductsService } from './../../config/products.service'; import { ProductsService } from "./../../config/products.service";
import { ServiceService } from './../../config/service.service'; import { ServiceService } from "./../../config/service.service";
import { map } from 'rxjs/operators'; import { map } from "rxjs/operators";
@Component({ @Component({
selector: 'app-productdetail', selector: "app-productdetail",
templateUrl: './productdetail.page.html', templateUrl: "./productdetail.page.html",
styleUrls: ['./productdetail.page.scss'], styleUrls: ["./productdetail.page.scss"]
}) })
export class ProductdetailPage implements OnInit { export class ProductdetailPage implements OnInit {
product: Products; product: Products;
order: Order; order: Order;
data: any; data: any;
bannerOptions = {
slidesPerView: 1,
speed: 2000,
autoplay: true
};
slideOpts = { slideOpts = {
slidesPerView: 3.5 slidesPerView: 3.5
}; };
...@@ -35,8 +41,13 @@ export class ProductdetailPage implements OnInit { ...@@ -35,8 +41,13 @@ export class ProductdetailPage implements OnInit {
) { ) {
const params = this.prodService.selItem; const params = this.prodService.selItem;
this.service.state = true; this.service.state = true;
this.prodService.similarProd(params.shopperId, params.category, params.subCate, params.prodId); this.prodService.similarProd(
this.service.get('params').then((val) => { params.shopperId,
params.category,
params.subCate,
params.prodId
);
this.service.get("params").then(val => {
this.data = val; this.data = val;
}); });
this.cartService.cartList(); this.cartService.cartList();
...@@ -101,7 +112,7 @@ export class ProductdetailPage implements OnInit { ...@@ -101,7 +112,7 @@ export class ProductdetailPage implements OnInit {
buyNow(product: any, type: number) { buyNow(product: any, type: number) {
this.cartService.buyNow(product).then(() => { this.cartService.buyNow(product).then(() => {
if (type === 1) { if (type === 1) {
this.router.navigateByUrl('cart'); this.router.navigateByUrl("cart");
} else { } else {
// alert('Product added to cart'); // alert('Product added to cart');
} }
...@@ -115,7 +126,7 @@ export class ProductdetailPage implements OnInit { ...@@ -115,7 +126,7 @@ export class ProductdetailPage implements OnInit {
checkFavStatus(index) { checkFavStatus(index) {
const state = this.prodService.fav.findIndex(x => x === index); const state = this.prodService.fav.findIndex(x => x === index);
return state > -1 ? 'fav_fill' : 'fav_icon'; return state > -1 ? "fav_fill" : "fav_icon";
} }
changeFav(index) { changeFav(index) {
...@@ -124,13 +135,12 @@ export class ProductdetailPage implements OnInit { ...@@ -124,13 +135,12 @@ export class ProductdetailPage implements OnInit {
console.log(this.prodService.fav); console.log(this.prodService.fav);
if (state > -1) { if (state > -1) {
this.prodService.fav.splice(state, 1); this.prodService.fav.splice(state, 1);
this.prodService.changeFav(index, 'yes'); this.prodService.changeFav(index, "yes");
} else { } else {
this.prodService.fav.push(index); this.prodService.fav.push(index);
this.prodService.changeFav(index, 'no'); this.prodService.changeFav(index, "no");
} }
return; return;
console.log(this.prodService.fav); console.log(this.prodService.fav);
} }
} }
import { Injectable } from '@angular/core'; import { Injectable } from "@angular/core";
import { AngularFirestore, AngularFirestoreDocument, AngularFirestoreCollection } from '@angular/fire/firestore'; import {
import { Router, ActivatedRoute } from '@angular/router'; AngularFirestore,
import { Products } from './services/product'; AngularFirestoreDocument,
import { Cart, CartItem } from './services/cart'; AngularFirestoreCollection
import { ServiceService } from './service.service'; } from "@angular/fire/firestore";
import * as firebase from 'firebase'; import { Router, ActivatedRoute } from "@angular/router";
import { take } from 'rxjs/operators'; import { Products } from "./services/product";
import { User } from './services/user'; import { Cart, CartItem } from "./services/cart";
import { from } from 'rxjs'; import { ServiceService } from "./service.service";
import undefined = require('firebase/empty-import'); import * as firebase from "firebase";
import { take } from "rxjs/operators";
import { User } from "./services/user";
import { from } from "rxjs";
@Injectable({ @Injectable({
providedIn: 'root' providedIn: "root"
}) })
export class CartsService { export class CartsService {
size: string; size: string;
...@@ -28,35 +31,48 @@ export class CartsService { ...@@ -28,35 +31,48 @@ export class CartsService {
public router: Router, public router: Router,
public service: ServiceService public service: ServiceService
) { ) {
this.custId = ''; this.custId = "";
this.carts = []; this.carts = [];
const users = this.service.get('user').then((data) => { const users = this.service.get("user").then(data => {
if (data) { if (data) {
data = JSON.parse(data); data = JSON.parse(data);
this.custId = data.uid; this.custId = data.uid;
console.log(this.custId); console.log(this.custId);
} else { } else {
this.custId = 'WwHnLICVY2dvZGUHuKqasiTB91a2'; this.custId = "WwHnLICVY2dvZGUHuKqasiTB91a2";
} }
}); });
} }
public async buyNow(product: Products) { public async buyNow(product: Products) {
this.prodId = product.prodId; this.prodId = product.prodId;
const prodRef = firebase.firestore().collection('products').doc(this.prodId); const prodRef = firebase
.firestore()
.collection("products")
.doc(this.prodId);
this.size = this.size === undefined ? product.size[0] : this.size; this.size = this.size === undefined ? product.size[0] : this.size;
this.color = this.color === undefined ? product.color[0] : this.color; this.color = this.color === undefined ? product.color[0] : this.color;
const cartRef: AngularFirestoreCollection<any> = this.afs.collection('carts', ref => ref.where('size', '==', this.size) const cartRef: AngularFirestoreCollection<any> = this.afs.collection(
.where('color', '==', this.color) "carts",
.where('custId', '==', this.custId) ref =>
.where('product', '==', prodRef) ref
.where("size", "==", this.size)
.where("color", "==", this.color)
.where("custId", "==", this.custId)
.where("product", "==", prodRef)
); );
cartRef.valueChanges().pipe(take(1)).subscribe((value) => { cartRef
.valueChanges()
.pipe(take(1))
.subscribe(value => {
console.log(value); console.log(value);
if (value.length === 0) { if (value.length === 0) {
product.image = product.image === undefined ? '../assets/[email protected]' : product.image; product.image =
product.image === undefined
? "../assets/[email protected]"
: product.image;
const cart: Cart = { const cart: Cart = {
color: this.color, color: this.color,
custId: this.custId, custId: this.custId,
...@@ -71,14 +87,22 @@ export class CartsService { ...@@ -71,14 +87,22 @@ export class CartsService {
size: this.size size: this.size
}; };
console.log(cart); console.log(cart);
this.afs.collection('carts').add(cart).then((docRef) => { this.afs
.collection("carts")
.add(cart)
.then(docRef => {
const neworderId = docRef.id; const neworderId = docRef.id;
this.afs.collection('carts').doc(neworderId).update({cartId: docRef.id}).then(() => { this.afs
console.log('Booking Successfully'); .collection("carts")
.doc(neworderId)
.update({ cartId: docRef.id })
.then(() => {
console.log("Booking Successfully");
document.body.scrollTop = document.documentElement.scrollTop = 0; document.body.scrollTop = document.documentElement.scrollTop = 0;
}); });
}).catch((error) => { })
console.error('Error adding document: ', error); .catch(error => {
console.error("Error adding document: ", error);
}); });
} else { } else {
console.log(value); console.log(value);
...@@ -86,8 +110,12 @@ export class CartsService { ...@@ -86,8 +110,12 @@ export class CartsService {
const cartId = value[0].cartId; const cartId = value[0].cartId;
// tslint:disable-next-line:radix // tslint:disable-next-line:radix
const qty = parseInt(value[0].qty) + 1; const qty = parseInt(value[0].qty) + 1;
this.afs.collection('carts').doc(cartId).update({qty: `${qty}`}).then(() => { this.afs
console.log('Booking Successfully'); .collection("carts")
.doc(cartId)
.update({ qty: `${qty}` })
.then(() => {
console.log("Booking Successfully");
document.body.scrollTop = document.documentElement.scrollTop = 0; document.body.scrollTop = document.documentElement.scrollTop = 0;
}); });
} }
...@@ -95,13 +123,16 @@ export class CartsService { ...@@ -95,13 +123,16 @@ export class CartsService {
} }
public async cartList() { public async cartList() {
const cartRef: AngularFirestoreCollection<any> = this.afs.collection('carts', ref => ref.where('custId', '==', this.custId)); const cartRef: AngularFirestoreCollection<any> = this.afs.collection(
cartRef.valueChanges().subscribe((value) => { "carts",
ref => ref.where("custId", "==", this.custId)
);
cartRef.valueChanges().subscribe(value => {
this.carts = []; this.carts = [];
const res = value; const res = value;
this.cartTotal = 0; this.cartTotal = 0;
if (res.length > 0) { if (res.length > 0) {
res.forEach((item) => { res.forEach(item => {
const cartItem: CartItem = { const cartItem: CartItem = {
cartId: item.cartId, cartId: item.cartId,
color: item.color, color: item.color,
...@@ -112,7 +143,7 @@ export class CartsService { ...@@ -112,7 +143,7 @@ export class CartsService {
prodName: item.prodName, prodName: item.prodName,
image: item.image, image: item.image,
qty: item.qty, qty: item.qty,
size: item.size, size: item.size
}; };
console.log(item.price, item.qty); console.log(item.price, item.qty);
if (item.price) { if (item.price) {
...@@ -145,30 +176,36 @@ export class CartsService { ...@@ -145,30 +176,36 @@ export class CartsService {
removeCount(index) { removeCount(index) {
// tslint:disable-next-line:radix // tslint:disable-next-line:radix
const qty = this.carts[index].qty > 1 ? this.carts[index].qty - 1 : this.carts[index].qty; const qty =
this.carts[index].qty > 1
? this.carts[index].qty - 1
: this.carts[index].qty;
this.carts[index].qty = qty; this.carts[index].qty = qty;
console.log(this.carts[index].qty); console.log(this.carts[index].qty);
this.afs.collection('carts').doc(this.carts[index].cartId).update({ this.afs
.collection("carts")
.doc(this.carts[index].cartId)
.update({
qty: this.carts[index].qty qty: this.carts[index].qty
}); });
} }
addCount(index) { addCount(index) {
const qty = this.carts[index].qty + 1; const qty = this.carts[index].qty + 1;
this.cartTotal = 0; this.cartTotal = 0;
this.carts[index].qty = qty; this.carts[index].qty = qty;
this.afs.collection('carts').doc(this.carts[index].cartId).update({ this.afs
.collection("carts")
.doc(this.carts[index].cartId)
.update({
qty: this.carts[index].qty qty: this.carts[index].qty
}); });
} }
removeItem(index) { removeItem(index) {
this.afs.collection('carts').doc(this.carts[index].cartId).delete(); this.afs
.collection("carts")
.doc(this.carts[index].cartId)
.delete();
} }
} }
...@@ -141,6 +141,30 @@ button { ...@@ -141,6 +141,30 @@ button {
} }
} }
.product_banner {
ion-slides {
.swiper-pagination-bullets {
left: auto;
width: auto;
right: 15px;
bottom: 15px;
}
.swiper-pagination {
.swiper-pagination-bullet {
background-color: #fff;
width: 14px;
height: 3px;
border-radius: 0px;
opacity: 1;
margin: 0px;
}
.swiper-pagination-bullet-active {
background-color: rgba(41, 37, 81, 1);
}
}
}
}
/*------------------------------- /*-------------------------------
...@@ -513,6 +537,14 @@ app-deliverypop { ...@@ -513,6 +537,14 @@ app-deliverypop {
} }
} }
.nav_close {
background-image: url("./assets/close.png");
img {
width: 25px;
display: none;
}
}
.nav_cart { .nav_cart {
background-image: url("./assets/cart_icon.png"); background-image: url("./assets/cart_icon.png");
img { img {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment