-
Notifications
You must be signed in to change notification settings - Fork 909
Expand file tree
/
Copy pathamazon.js
More file actions
115 lines (93 loc) · 3.15 KB
/
amazon.js
File metadata and controls
115 lines (93 loc) · 3.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import {cart, addToCart} from '../data/cart.js';
import {products, loadProducts} from '../data/products.js';
import {formatCurrency} from './utils/money.js';
loadProducts(renderProductsGrid);
function renderProductsGrid() {
let productsHTML = '';
const url = new URL(window.location.href);
const search = url.searchParams.get('search');
let filteredProducts = products;
// If a search exists in the URL parameters,
// filter the products that match the search.
if (search) {
filteredProducts = products.filter((product) => {
let matchingKeyword = false;
product.keywords.forEach((keyword) => {
if (search.toLowerCase().includes(keyword.toLowerCase())) {
matchingKeyword = true;
}
});
return matchingKeyword ||
product.name.toLowerCase().includes(search.toLowerCase());
});
}
filteredProducts.forEach((product) => {
productsHTML += `
<div class="product-container">
<div class="product-image-container">
<img class="product-image"
src="${product.image}">
</div>
<div class="product-name limit-text-to-2-lines">
${product.name}
</div>
<div class="product-rating-container">
<img class="product-rating-stars"
src="${product.getStarsUrl()}">
<div class="product-rating-count link-primary">
${product.rating.count}
</div>
</div>
<div class="product-price">
${product.getPrice()}
</div>
<div class="product-quantity-container">
<select>
<option selected value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</div>
${product.extraInfoHTML()}
<div class="product-spacer"></div>
<div class="added-to-cart">
<img src="images/icons/checkmark.png">
Added
</div>
<button class="add-to-cart-button button-primary js-add-to-cart"
data-product-id="${product.id}">
Add to Cart
</button>
</div>
`;
});
document.querySelector('.js-products-grid').innerHTML = productsHTML;
function updateCartQuantity() {
let cartQuantity = 0;
cart.forEach((cartItem) => {
cartQuantity += cartItem.quantity;
});
document.querySelector('.js-cart-quantity')
.innerHTML = cartQuantity;
}
document.querySelectorAll('.js-add-to-cart')
.forEach((button) => {
button.addEventListener('click', () => {
const productId = button.dataset.productId;
addToCart(productId);
updateCartQuantity();
});
});
document.querySelector('.js-search-button')
.addEventListener('click', () => {
const search = document.querySelector('.js-search-bar').value;
window.location.href = `amazon.html?search=${search}`;
});
}