forked from M3-Academy/m3-academy-template-checkout
Merge pull request 'feat: adiciona logica para as funcionalidades do carrinho e da prateleira' (#5) from feature/adiciona-logica-funcionalidades-carrinho-prateleira into development
Reviewed-on: #5
This commit is contained in:
commit
f1892966b8
@ -6,11 +6,15 @@ export default class Footer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async init() {
|
async init() {
|
||||||
await this.selectors();
|
|
||||||
// this.onUpdate();
|
|
||||||
this.list = await this.fetchApiData();
|
this.list = await this.fetchApiData();
|
||||||
this.renderPrateleira();
|
await this.selectors();
|
||||||
this.items = document.querySelector(".footerCheckout__prateleira-container");
|
this.events();
|
||||||
|
this.cartUpdate();
|
||||||
|
this.items = await waitElement(".footerCheckout__prateleira-container", {
|
||||||
|
timeout: 5000,
|
||||||
|
interval: 1,
|
||||||
|
});
|
||||||
|
console.log(this.items, "console de items");
|
||||||
this.renderItems();
|
this.renderItems();
|
||||||
await this.addCarrossel();
|
await this.addCarrossel();
|
||||||
}
|
}
|
||||||
@ -18,23 +22,19 @@ export default class Footer {
|
|||||||
async selectors() {
|
async selectors() {
|
||||||
//Para verificar se o carrinho está vazio e remover a prateleira de produtos:
|
//Para verificar se o carrinho está vazio e remover a prateleira de produtos:
|
||||||
// vocês devem olhar a doc fornecida no Desafio para aprender a usar o waitElement
|
// vocês devem olhar a doc fornecida no Desafio para aprender a usar o waitElement
|
||||||
this.checkoutVazio = await waitElement(".empty-cart-content");
|
this.checkoutVazio = await waitElement(".empty-cart-content", {
|
||||||
this.prateleira = await waitElement(".footerCheckout__prateleira");
|
timeout: 5000,
|
||||||
|
interval: 1,
|
||||||
|
});
|
||||||
|
this.cartTitle = await waitElement("#cart-title");
|
||||||
|
this.prateleira = await waitElement(".footerCheckout__prateleira", {
|
||||||
|
timeout: 5000,
|
||||||
|
interval: 1,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
onUpdate() {
|
events() {
|
||||||
//Função que fará a verificação se o carrinho está vazio para remover a prateleira de produtos:
|
window.addEventListener("hashchange", this.outPrateleira.bind(this));
|
||||||
// vocês devem olhar a doc fornecida no Desafio para aprender a usar a MutationObserver
|
|
||||||
// sempre que o carrinho estiver vazio o elemento chcekoutVazio fica display: none e isso pode ser usado como atributo para a MutationObserver
|
|
||||||
let target = this.checkoutVazio;
|
|
||||||
let config = { childList: true, attributes: true };
|
|
||||||
let observer = new MutationObserver((mutations) => {
|
|
||||||
mutations.forEach(function (mutation) {
|
|
||||||
console.log(mutation.type);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
observer.observe(target, config);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fetchApiData() {
|
async fetchApiData() {
|
||||||
@ -54,6 +54,32 @@ export default class Footer {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cartUpdate() {
|
||||||
|
console.log("cartUpdate");
|
||||||
|
//Função que fará a verificação se o carrinho está vazio para remover a prateleira de produtos:
|
||||||
|
// vocês devem olhar a doc fornecida no Desafio para aprender a usar a MutationObserver
|
||||||
|
// sempre que o carrinho estiver vazio o elemento chcekoutVazio fica display: none e isso pode ser usado como atributo para a MutationObserver
|
||||||
|
let target = this.checkoutVazio;
|
||||||
|
let config = { childList: true, attributes: true };
|
||||||
|
let observer = new MutationObserver((mutations) => {
|
||||||
|
mutations.map((mutation) => {
|
||||||
|
const cartStatus = mutation.target.attributes.style.nodeValue;
|
||||||
|
|
||||||
|
console.log(cartStatus);
|
||||||
|
|
||||||
|
if (cartStatus === "display: none;") {
|
||||||
|
this.cartTitle.classList.remove("inactive");
|
||||||
|
this.renderPrateleira();
|
||||||
|
} else if (cartStatus === "display: block;") {
|
||||||
|
this.cartTitle.classList.add("inactive");
|
||||||
|
this.removePrateleira();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
observer.observe(target, config);
|
||||||
|
}
|
||||||
|
|
||||||
renderPrateleira() {
|
renderPrateleira() {
|
||||||
let itemsStructure = `
|
let itemsStructure = `
|
||||||
<div class="footerCheckout__prateleira__title">
|
<div class="footerCheckout__prateleira__title">
|
||||||
@ -68,7 +94,7 @@ export default class Footer {
|
|||||||
this.prateleira.innerHTML = itemsStructure;
|
this.prateleira.innerHTML = itemsStructure;
|
||||||
}
|
}
|
||||||
|
|
||||||
renderItems() {
|
async renderItems() {
|
||||||
let itemsCards = ``;
|
let itemsCards = ``;
|
||||||
this.list.forEach((item) => {
|
this.list.forEach((item) => {
|
||||||
const sku = item.skus.map((resp) => `<li>${resp}</li>`);
|
const sku = item.skus.map((resp) => `<li>${resp}</li>`);
|
||||||
@ -88,7 +114,7 @@ export default class Footer {
|
|||||||
${sku}
|
${sku}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<button>
|
<button type="button">
|
||||||
<a href="${item.link}">VER PRODUTO</a>
|
<a href="${item.link}">VER PRODUTO</a>
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
@ -98,6 +124,19 @@ export default class Footer {
|
|||||||
this.items.innerHTML = itemsCards;
|
this.items.innerHTML = itemsCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
removePrateleira() {
|
||||||
|
this.prateleira.innerHTML = ``;
|
||||||
|
}
|
||||||
|
|
||||||
|
outPrateleira(e) {
|
||||||
|
console.log(e, "outPrateleira");
|
||||||
|
if (e.newURL !== "https://m3academy.myvtex.com/checkout/#/cart") {
|
||||||
|
this.prateleira.classList.add("inactive");
|
||||||
|
} else {
|
||||||
|
this.prateleira.classList.remove("inactive");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async addCarrossel() {
|
async addCarrossel() {
|
||||||
const elemento = await waitElement(".footerCheckout__prateleira-container");
|
const elemento = await waitElement(".footerCheckout__prateleira-container");
|
||||||
$(elemento).slick({
|
$(elemento).slick({
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
.container {
|
.container {
|
||||||
|
#cart-title.inactive {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
@include mq(md, max) {
|
@include mq(md, max) {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,10 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&__prateleira.inactive {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
&__prateleira-container {
|
&__prateleira-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
Loading…
Reference in New Issue
Block a user