Skip to content

Commit 07380ff

Browse files
authored
Merge pull request #11 from jap-2024-grupo2/feature/ordenar-filtrar-productos
Ordenar productos asc, desc, rel
2 parents c76ddf0 + 9ee8689 commit 07380ff

File tree

2 files changed

+83
-10
lines changed

2 files changed

+83
-10
lines changed

js/products.js

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
const catID = localStorage.getItem("catID")
2+
let currentProductsArray = [];
3+
let minPrice = undefined;
4+
let maxPrice = undefined;
5+
26

37
fetch(`https://japceibal.github.io/emercado-api/cats_products/${catID}.json`)
48
.then((res) => res.json())
@@ -7,18 +11,27 @@ fetch(`https://japceibal.github.io/emercado-api/cats_products/${catID}.json`)
711
const categoryTitle = document.getElementById('categoryTitle')
812
categoryTitle.textContent = catName
913

10-
const productsContainer = document.getElementById('productsContainer')
11-
12-
const fragment = document.createDocumentFragment()
14+
currentProductsArray = products
1315

1416
if (products.length === 0) {
1517
showAlert("No hay productos disponibles para esta categoría")
1618
return
1719
}
1820

19-
products.forEach(
20-
({ image, name, description, currency, cost, soldCount }) => {
21+
showProductsList()
22+
})
23+
24+
function showProductsList() {
25+
const productsContainer = document.getElementById('productsContainer')
26+
productsContainer.innerHTML = ""
27+
28+
const fragment = document.createDocumentFragment()
2129

30+
currentProductsArray.forEach(
31+
({ image, name, description, currency, cost, soldCount }) => {
32+
33+
if (minPrice == undefined || (minPrice != undefined && parseFloat(cost) >= minPrice) &&
34+
maxPrice == undefined || (maxPrice != undefined && parseFloat(cost) >= maxPrice)) {
2235
const column = document.createElement('div')
2336
column.classList.add('col-12', 'col-md-6', 'col-lg-4', 'my-3')
2437

@@ -55,10 +68,35 @@ fetch(`https://japceibal.github.io/emercado-api/cats_products/${catID}.json`)
5568
column.appendChild(card)
5669
fragment.appendChild(column)
5770
}
58-
)
59-
60-
productsContainer.appendChild(fragment)
61-
})
71+
}
72+
)
73+
74+
productsContainer.appendChild(fragment)
75+
}
76+
77+
function sortProducts(criteria) {
78+
if (criteria === "ascPrice") {
79+
currentProductsArray.sort((a, b) => parseFloat(a.cost) - parseFloat(b.cost))
80+
} else if (criteria === "descPrice") {
81+
currentProductsArray.sort((a, b) => parseFloat(b.cost) - parseFloat(a.cost))
82+
} else if (criteria === "relevance") {
83+
currentProductsArray.sort((a, b) => parseFloat(b.soldCount) - parseFloat(a.soldCount))
84+
}
85+
86+
showProductsList();
87+
}
88+
89+
document.getElementById("sortAscPrice").addEventListener("click", function() {
90+
sortProducts("ascPrice");
91+
})
92+
93+
document.getElementById("sortDescPrice").addEventListener("click", function() {
94+
sortProducts("descPrice");
95+
})
96+
97+
document.getElementById("sortByRelevance").addEventListener("click", function() {
98+
sortProducts("relevance");
99+
})
62100

63101
function showAlert(message) {
64102
const alertContainer = document.createElement('div')

products.html

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
<a class="nav-link" href="sell.html">Vender</a>
3232
</li>
3333
<li class="nav-item">
34-
<p class="userName-navBar navbar-text m-0 text-white" ></p>
34+
<p class="userName-navBar navbar-text m-0 text-white"></p>
3535
</li>
3636
<li class="nav-item">
3737
<button onclick="logout()" class="btn btn-primary">Cerrar sesión</button>
@@ -43,6 +43,41 @@
4343

4444
<main class="my-3 container">
4545
<h1 id="categoryTitle" class="px-6 h1-font-size py-4 category-title"></h1>
46+
<div id="filterAndSortingContainer">
47+
<div class="row">
48+
<div class="col text-end">
49+
<div class="btn-group btn-group-toggle mb-4" data-bs-toggle="buttons">
50+
<input type="radio" class="btn-check" name="options" id="sortAscPrice">
51+
<label class="btn btn-light" for="sortAscPrice"><i class="fas fa-sort-amount-down mr-1"></i> $</label>
52+
<input type="radio" class="btn-check" name="options" id="sortDescPrice">
53+
<label class="btn btn-light" for="sortDescPrice"><i class="fas fa-sort-amount-up mr-1"></i> $</label>
54+
<input type="radio" class="btn-check" name="options" id="sortByRelevance" checked>
55+
<label class="btn btn-light" for="sortByRelevance"><i class="fas fa-sort-amount-down mr-1"></i> Rel.</label>
56+
</div>
57+
</div>
58+
</div>
59+
<div class="row">
60+
<div class="col-lg-6 offset-lg-6 col-md-12 mb-1 container">
61+
<div class="row container p-0 m-0">
62+
<div class="col">
63+
<p class="font-weight-normal text-end my-2">Precio</p>
64+
</div>
65+
<div class="col">
66+
<input class="form-control" type="number" placeholder="min." id="rangeFilterPriceMin">
67+
</div>
68+
<div class="col">
69+
<input class="form-control" type="number" placeholder="máx." id="rangeFilterPriceMax">
70+
</div>
71+
<div class="col-3 p-0">
72+
<div class="btn-group" role="group">
73+
<button class="btn btn-light btn-block" id="rangeFilterPrice">Filtrar</button>
74+
<button class="btn btn-link btn-sm" id="clearRangeFilterPrice">Limpiar</button>
75+
</div>
76+
</div>
77+
</div>
78+
</div>
79+
</div>
80+
</div>
4681
<div id="productsContainer" class="row"></div>
4782
</main>
4883

0 commit comments

Comments
 (0)