-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
115 lines (100 loc) · 3.21 KB
/
index.js
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
const URLJSON = "./productos.json";
/* cart button */
const buttonShowCart = document.querySelector(".show-cart");
/* Wrapper cards */
const wrapperCards = document.querySelector(".row");
/* Productos */
let PRODUCTOS;
let CARRITO = [];
const setLocalStorage = (item, name) => {
localStorage.setItem(name, JSON.stringify(item));
};
const getLocalStorage = (name) => {
return JSON.parse(localStorage.getItem(name));
};
(function () {
const cartLocal = getLocalStorage("cart");
if (cartLocal) {
CARRITO = cartLocal;
}
})();
(async function () {
await fetch(URLJSON)
.then((response) => response.json())
.then((data) => {
PRODUCTOS = data;
return data.map((game) => {
const contenedor = document.createElement("div");
contenedor.classList.add("col-4");
contenedor.innerHTML = ` <div class="card mt-4" style="width: 13rem;">
<img src=${game.img} class="card-img-top" alt=${game.name}>
<div class="card-body">
<h6 class="card-title">${game.name}</h6>
<p class="card-text">$${game.price}</p>
<button id=${game.key} class="btn btn-primary buy-game">Buy Game</button>
</div>
</div>`;
wrapperCards.appendChild(contenedor);
});
});
addEvents();
})();
const addEvents = () => {
const buttons = document.querySelectorAll(".buy-game");
buttons.forEach((button) =>
button.addEventListener("click", async ({ target }) => {
await addToCart(target.id);
setLocalStorage(CARRITO, "cart");
})
);
console.log(buttons);
};
/* Search game by key*/
const searchGameByKey = (key, place = PRODUCTOS) => {
return place.find((producto) => producto.key === parseInt(key));
};
/* If the game already in the cart */
const isAlreadyInCart = (key) => {
const existGame = searchGameByKey(key, CARRITO);
return Boolean(existGame);
};
/* Add to cart */
const addToCart = (key) => {
if (isAlreadyInCart(key)) {
const game = searchGameByKey(key, CARRITO);
game.quantity += 1;
return;
}
const gameSearched = searchGameByKey(key);
CARRITO.push({ ...gameSearched, quantity: 1 });
};
/* Show cart items in dom */
const showItems = () => {
const list = document.querySelector(".items-cart");
const totalValue = document.querySelector(".total");
const total = getTotal();
totalValue.innerHTML = `Total: $${total}`;
list.innerHTML = "";
(getLocalStorage("cart") || []).map((item) => {
const listItem = document.createElement("li");
listItem.className = "item-cart";
listItem.innerHTML = `<p class='game-title'>Game: ${item.name}</p> <p>Items: ${item.quantity}</p>`;
list.appendChild(listItem);
});
};
buttonShowCart.addEventListener("click", showItems);
/* TITLE ANIMATION */
function myRepeat() {
$(".title-container").delay(150).fadeOut(1000).delay(150).fadeIn(1000);
}
setInterval(myRepeat, 1000);
const getTotal = () => {
let total = 0;
getLocalStorage("cart").map((game) => {
if (game.quantity > 1) {
total += game.quantity * game.price;
}
if (game.quantity <= 1) total += game.price;
});
return total;
};