feature/footer #1

Merged
RamonDiasFerreira merged 5 commits from feature/footer into develop 2022-12-18 23:54:59 +00:00
Showing only changes of commit b4761dc6f0 - Show all commits

View File

@ -3,57 +3,75 @@ import { waitElement } from "m3-utils";
export default class Footer { export default class Footer {
constructor() { constructor() {
this.init(); this.init();
this.requestShelf();
this.addCarrossel();
} }
async init() { async init() {
this.list = await this.requestApi();
await this.selectors(); await this.selectors();
// this.onUpdate(); // this.onUpdate();
this.requestShelf(); this.createShelf();
this.shelfList = await waitElement(".footerCheckout__shelfList");
this.shelfItens();
this.addCarrossel(); this.addCarrossel();
} }
async selectors() { async selectors() {
this.itensShelf = await waitElement(".footerCheckout__prateleira", { this.itensShelf = await waitElement(".footerCheckout__prateleira", {
timeout: 5000, timeout: 5000,
interval: 1000}) interval: 1000,
// this.itensShelf = await waitElement(".empty-cart-content")
//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
// this.checkoutVazio = await waitElement(".container-cart", {
// });
}
requestShelf() {
let prateleira= this.itensShelf;
prateleira.innerHTML = `
<p class="footerChekout__prateleira-title">Você também pode gostar</p>
<ul class="carrosel-ul"></ul>
`;
const api = "https://m3academy.myvtex.com/api/catalog_system/pub/products/search/?fq=productClusterIds:319";
const prodUl = document.querySelector("carrosel-ul")
fetch(api)
.then((response) => response.json())
.then(function(data) {
return data.map(function(item) {
let li = document.createElement("li")
li.setAttribute("id", item.productId)
li.innerHTML = `
<img src="${item.items[0].images[0].imageUrl}" alt="${item.productName}" />
<p class="product-name">${item.productName}</p>
<div class="product-variation">${item.items.map((name) => {
return `<a name="product-variationvariation" class="product-variationvariation">${name.name}</a>`
}).join("")}</div>
<button class="show-product">Ver produto</button>
`;
prateleira.children[1].appendChild(li);
});
}); });
} }
createShelf() {
if(this.itensShelf) {
this.itensShelf.innerHTML = `
<div class="footerCheckout__prateleira-title">
<h2>Você também pode gostar:</h2>
</div>
<ul class="footerCheckout__shelfList"></ul>
`
}
}
async shelfItens() {
let structure = "";
this.list.forEach((response) => {
const sku = response.skus.map((item) => `<li>${item}</li>`);
structure += `
<li>
<figure><img src ="${response.img}"/></figure>
<figcaption>${response.name}</figcaption>
<div><ul>${sku}</ul></div>
<button type="button"><a href="${response.link}">Ver Produto</a></button>
</li>
`
})
this.shelfList.innerHTML = structure
}
async requestApi() {
const api =
"https://m3academy.myvtex.com/api/catalog_system/pub/products/search/?fq=productClusterIds:319";
return fetch(api)
.then((response) => response.json())
.then((data) => {
const prodInfo = data.map((response) => ({
name: response.productName,
skus: response.items.map((item) => item.name),
img: response.items[0].images[0].imageUrl,
link: response.link,
}));
return prodInfo
});
}
onUpdate() { onUpdate() {
//Função qeu fará a verificação se o carrinho está vazio para remover a prateleira de produtos: //Função qeu 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 // vocês devem olhar a doc fornecida no Desafio para aprender a usar a MutationObserver
@ -69,12 +87,11 @@ export default class Footer {
observer.observe(target, config); observer.observe(target, config);
} }
async addCarrossel() { async addCarrossel() {
const elemento = await waitElement(".carrosel-ul"); const elemento = await waitElement(".footerCheckout__shelfList");
$(elemento).slick({ $(elemento).slick({
slidesToShow: 4, slidesToShow: 4,
slidesToScroll: 1, slidesToScroll: 1,
arrows: true, arrows: true,
variableWidth: true,
infinite: false, infinite: false,
}); });
} }