development #7

Merged
WellingtonDuarteSantos merged 12 commits from development into main 2022-12-19 02:48:24 +00:00
12 changed files with 26563 additions and 17093 deletions

View File

@ -7,19 +7,188 @@ export default class Footer {
async init() { async init() {
await this.selectors(); await this.selectors();
// this.onUpdate(); //this.onUpdate();
// await this.hideCartTitle();
this.addCreditCards();
this.addCredits();
this.createPrateleira();
await this.addCarrossel();
// this.changeButtonText();
} }
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.checkoutTitle = await waitElement("#cart-title");
// this.productName = await waitElement("#product-name");
this.creditCardSection = await waitElement(".footerCheckout__stamps");
this.creditsSection = await waitElement(".footerCheckout__developedBy");
this.prateleira = await waitElement(".footerCheckout__prateleira");
console.log(this.creditCardSection);
this.cartChooseProducts = await waitElement("a#cart-choose-products");
}
// Oculta o titulo quando o carrinho está vazio
async hideCartTitle() {
if (this.checkoutVazio) {
console.log("Carrinho Vazio, removendo título");
this.checkoutTitle.classList.add("hidden");
}
// if (this.productName) {
// console.log("Produto Encontrado, adicionando título");
// if (this.checkoutTitle.classList.contains("hidden")) {
// console.log("Titulo tá escondido");
// this.checkoutTitle.classList.remove("hidden");
// this.checkoutTitle.classList.add("visible");
// }
// }
}
// Muda o texto do botão do carrinho vazio
changeButtonText() {
// console.log("Mudando texto do botão");
this.cartChooseProducts.innerText = "Continue Comprando";
}
// Adiciona as imagens das bandeiras dos cartões
addCreditCards() {
this.creditCardSection.innerHTML = `
<div class="credit-cards">
<figure class="cards-logo">
<img
src="https://agenciamagma.vteximg.com.br/arquivos/masterCardM3Academy.png"
alt="MasterCard logo"
/>
</figure>
<figure class="cards-logo">
<img
src="https://agenciamagma.vteximg.com.br/arquivos/visaM3Academy.png"
alt="Visa logo"
/>
</figure>
<figure class="cards-logo">
<img
src="https://agenciamagma.vteximg.com.br/arquivos/amexM3Academy.png"
alt="American Express logo"
/>
</figure>
<figure class="cards-logo">
<img
class="cards-logo"
src="https://agenciamagma.vteximg.com.br/arquivos/eloM3Academy.png"
alt="Elo logo"
/>
</figure>
<figure class="cards-logo">
<img
src="https://agenciamagma.vteximg.com.br/arquivos/payPalM3Academy.png"
alt="PayPal logo"
/>
</figure>
<figure class="cards-logo">
<img
src="https://agenciamagma.vteximg.com.br/arquivos/boletoM3Academy.png"
alt="Boleto logo"
/>
</figure>
<figure class="cards-logo">
<img
src="https://agenciamagma.vteximg.com.br/arquivos/vtexPCIM3Academy.png"
alt="Vtex Certified logo"
/>
</figure>
</div>`;
}
// Adiciona as informações de copyrigth
addCredits() {
this.creditsSection.innerHTML = `<div class="credits">
<div class="credit-text">Powered By</div>
<div class="logo">
<figure>
<img
src="https://agenciamagma.vteximg.com.br/arquivos/logoVTEXM3Academy.png"
alt="VTex Logo"
/>
</figure>
</div>
<div class="credit-text">Developed by</div>
<div class="logo">
<figure>
<img
src="https://agenciamagma.vteximg.com.br/arquivos/logoM3M3Academy.png"
alt="M3 Logo"
/>
</figure>
</div>`;
}
// API
createPrateleira() {
fetch(
"https://m3academy.myvtex.com/api/catalog_system/pub/products/search/?fq=productClusterIds:319"
)
.then(function () {
console.log("Consumindo API");
})
.catch(function () {});
fetch(
`https://m3academy.myvtex.com/api/catalog_system/pub/products/search/?fq=productClusterIds:319`
)
.then((response) => response.json())
.then((data) => {
console.log(data[0].items[0].images[0].imageUrl);
let content = "";
for (let i = 0; i < data.length; i++) {
content += `
<div class="card-item">
<figure class="item-image">
<img src="${data[i].items[0].images[0].imageUrl}" alt="" />
</figure>
<div class="item-name">
<p>${data[i].productName}</p>
</div>
<div class="item-sizes">
<div class="item-size-name">
<p>${data[i].items[0].name}</p>
</div>
</div>
<a href="${data[i].items[0].link}" class="item-link">
<div>VER PRODUTO</div>
</a>
</div>
`;
}
this.prateleira.innerHTML = content;
console.log(content);
});
} }
onUpdate() { onUpdate() {
//Função qeu fará a verificação se o carrinho está vazio para remover a prateleira de produtos: // 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 // 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 // sempre que o carrinho estiver vazio o elemento checkoutVazio fica display: none e isso pode ser usado como atributo para a MutationObserver
let target = this.checkoutVazio; let target = this.checkoutVazio;
let config = { childList: true, attributes: true }; let config = { childList: true, attributes: true };
let observer = new MutationObserver((mutations) => { let observer = new MutationObserver((mutations) => {
@ -29,11 +198,14 @@ export default class Footer {
}); });
observer.observe(target, config); observer.observe(target, config);
this.cartChooseProducts.innerHTML = "Continuar Comprando";
} }
async addCarrossel() { async addCarrossel() {
const elemento = await waitElement("#my-element"); const elemento = await waitElement(".footerCheckout__prateleira");
$(elemento).slick({ $(elemento).slick({
slidesToShow: 4, slidesToShow: 2,
slidesToScroll: 1, slidesToScroll: 1,
}); });
} }

View File

@ -8,14 +8,175 @@ export default class Header {
async init() { async init() {
await this.selectors(); await this.selectors();
console.log(this.item); this.progressBarHTML();
await this.progressbarProgress();
this.changeButtonText();
} }
async selectors() { async selectors() {
this.item = await waitElement("#my-element", { this.item = await waitElement("#progressBar", {
//#my-element pode ser a class ou o id do elemento html qeu vocÊ quer pegar //#my-element pode ser a class ou o id do elemento html qeu vocÊ quer pegar
timeout: 5000, // vai esperar 5 segundos antes de rejeitar a promise timeout: 5000, // vai esperar 5 segundos antes de rejeitar a promise
interval: 1000, // vai verificar a cada 1 segundo se o elemento existe interval: 1000, // vai verificar a cada 1 segundo se o elemento existe
}); });
this.header = await waitElement(".headerCheckout");
this.progressBar = await waitElement("#progressBar");
// CART TITLE
this.cartChooseProducts = await waitElement("a#cart-choose-products");
}
changeButtonText() {
// console.log("Mudando texto do botão");
this.cartChooseProducts.innerText = "Continue Comprando";
}
progressBarHTML() {
if (this.progressBar && window.innerWidth > 1024) {
console.log("Gerando barra de progresso");
this.progressBar.innerHTML = `
<ul>
<li>
<div class="containerLi">
<div>
<p class="progress-bar-text">Meu Carrinho</p>
<p id="progress-bar-circle-1" class="progress-bar-circle-1"></p>
<p class=" progress-bar-line-1"></p>
</div>
</div>
</li>
<li class="central">
<div class="containerLi">
<div>
<p class="progress-bar-text">Dados Pessoais</p>
<p id="progress-bar-circle-2" class="progress-bar-circle-1"></p>
<p class=" progress-bar-line-2"></p>
</div>
</div>
</li>
<li>
<div class="containerLi">
<div>
<p class="progress-bar-text">Pagamento</p>
<p id="progress-bar-circle-3" class="progress-bar-circle-1"></p>
<p class=" progress-bar-line-3"></p>
</div>
</div>
</li>
</ul>
`;
}
if (this.progressBar && window.innerWidth <= 1024) {
this.progressBar.innerHTML = "";
}
}
async progressbarProgress() {
if (this.progressBar && window.innerWidth > 1024) {
const progressBarLista = document.querySelectorAll("#progressBar ul li");
progressBarLista.forEach((li) => {
if (window.location.href === "https://m3academy.myvtex.com/checkout/#/cart") {
console.log("Cheguei no carrinho");
if (li.children[0].children[0].children["progress-bar-circle-1"]) {
li.children[0].children[0].children["progress-bar-circle-1"].classList.add(
"active"
);
}
if (li.children[0].children[0].children["progress-bar-circle-2"]) {
if (
li.children[0].children[0].children[
"progress-bar-circle-2"
].classList.contains("active")
) {
li.children[0].children[0].children[
"progress-bar-circle-2"
].classList.remove("active");
}
}
if (li.children[0].children[0].children["progress-bar-circle-3"]) {
if (
li.children[0].children[0].children[
"progress-bar-circle-3"
].classList.contains("active")
) {
li.children[0].children[0].children[
"progress-bar-circle-3"
].classList.remove("active");
}
}
} else if (
window.location.href === "https://m3academy.myvtex.com/checkout/#/email" ||
window.location.href === "https://m3academy.myvtex.com/checkout/#/profile" ||
window.location.href === "https://m3academy.myvtex.com/checkout/#/shipping"
) {
console.log("Cheguei nas informações pessoais");
if (li.children[0].children[0].children["progress-bar-circle-1"]) {
if (
li.children[0].children[0].children[
"progress-bar-circle-1"
].classList.contains("active")
) {
li.children[0].children[0].children[
"progress-bar-circle-1"
].classList.remove("active");
}
}
if (li.children[0].children[0].children["progress-bar-circle-2"]) {
li.children[0].children[0].children["progress-bar-circle-2"].classList.add(
"active"
);
}
if (li.children[0].children[0].children["progress-bar-circle-3"]) {
if (
li.children[0].children[0].children[
"progress-bar-circle-3"
].classList.contains("active")
) {
li.children[0].children[0].children[
"progress-bar-circle-3"
].classList.remove("active");
}
}
} else if (
window.location.href === "https://m3academy.myvtex.com/checkout/#/payment"
) {
console.log("Cheguei no pagamento");
if (li.children[0].children[0].children["progress-bar-circle-1"]) {
if (
li.children[0].children[0].children[
"progress-bar-circle-1"
].classList.contains("active")
) {
li.children[0].children[0].children[
"progress-bar-circle-1"
].classList.remove("active");
}
}
if (li.children[0].children[0].children["progress-bar-circle-2"]) {
if (
li.children[0].children[0].children[
"progress-bar-circle-2"
].classList.contains("active")
) {
li.children[0].children[0].children[
"progress-bar-circle-2"
].classList.remove("active");
}
}
if (li.children[0].children[0].children["progress-bar-circle-3"]) {
li.children[0].children[0].children["progress-bar-circle-3"].classList.add(
"active"
);
}
}
});
}
} }
} }

View File

@ -2,4 +2,5 @@
@import "./lib/slick"; @import "./lib/slick";
@import "./partials/header"; @import "./partials/header";
@import "./partials/footer"; @import "./partials/footer";
@import "./partials/prateleira";
@import "./checkout/checkout.scss"; @import "./checkout/checkout.scss";

View File

@ -114,7 +114,7 @@
color: $color-black; color: $color-black;
padding: 0 0 16px; padding: 0 0 16px;
font-style: normal; font-style: normal;
font-weight: bold; font-weight: 400;
font-size: 14px; font-size: 14px;
line-height: 16px; line-height: 16px;
@ -155,7 +155,7 @@
} }
a { a {
color: $color-blue; color: #000000;
font-style: normal; font-style: normal;
font-weight: normal; font-weight: normal;
font-size: 12px; font-size: 12px;
@ -217,15 +217,17 @@
td.quantity { td.quantity {
align-items: center; align-items: center;
border: 1px solid $color-gray3; width: 100px;
border-radius: 0; border: 1px solid #f0f0f0;
color: #ffffff;
border-radius: 8px;
box-sizing: border-box; box-sizing: border-box;
display: flex; display: flex;
justify-content: center; justify-content: center;
margin: 6px auto 0; margin: 6px auto 0;
max-height: 38px; max-height: 38px;
max-width: 118px; max-width: 118px;
padding: 0; padding: 9px;
width: max-content !important; width: max-content !important;
@media (max-width: 490px) { @media (max-width: 490px) {
@ -234,9 +236,9 @@
input { input {
background-color: $color-white; background-color: $color-white;
border: 1px solid $color-gray3; border: 0px solid $color-gray3;
border-radius: 0; border-radius: 0;
border-width: 0 1px; border-width: 0 0px;
display: block; display: block;
max-height: 38px; max-height: 38px;
margin: 0 !important; margin: 0 !important;
@ -263,18 +265,29 @@
.icon-minus-sign { .icon-minus-sign {
&:before { &:before {
content: "-"; content: "-";
font-size: 16px; font-size: 20px;
color: white;
background-color: #00c8ff;
border-radius: 50%;
font-weight: 900;
} }
} }
.icon-plus-sign { .icon-plus-sign {
&:before { &:before {
content: "+"; content: "+";
font-size: 14px; font-size: 20px;
color: white;
background-color: #00c8ff;
border-radius: 50%;
font-weight: 900;
} }
} }
.item-quantity-change { .item-quantity-change {
width: 100%;
height: 100%;
@media (max-width: 979px) and (min-width: 768px) { @media (max-width: 979px) and (min-width: 768px) {
position: inherit; position: inherit;
bottom: inherit; bottom: inherit;
@ -287,6 +300,13 @@
@media (max-width: 490px) { @media (max-width: 490px) {
padding: 0; padding: 0;
} }
.item-quantity-change-decrement {
background-color: #00c8ff;
border-radius: 50%;
width: 100%;
height: 100%;
}
} }
} }
@ -608,7 +628,7 @@
font-weight: normal; font-weight: normal;
font-size: 12px; font-size: 12px;
line-height: 14px; line-height: 14px;
color: $color-blue; color: #000000;
text-decoration: none; text-decoration: none;
} }
} }
@ -731,6 +751,7 @@
} }
tfoot { tfoot {
font-weight: 900 !important;
td.info, td.info,
td.monetary { td.monetary {
font-style: normal; font-style: normal;
@ -738,6 +759,7 @@
font-size: 18px; font-size: 18px;
line-height: 21px; line-height: 21px;
color: $color-black; color: $color-black;
font-weight: 900;
} }
} }
} }
@ -782,16 +804,17 @@
.btn-place-order-wrapper { .btn-place-order-wrapper {
a { a {
background: $color-green; background: #00c8ff;
border: none; border: none;
border-radius: 5px; border-radius: 5px;
display: block; display: block;
font-size: 0; font-size: 0;
transition: ease-in 0.22s all; transition: ease-in 0.22s all;
padding: 12px 19px; padding: 12px 19px;
cursor: pointer;
&:hover { &:hover {
background-color: darken($color-green, 5); background-color: darken(#00c8ff, 5);
} }
&:after { &:after {

View File

@ -10,29 +10,37 @@
} }
&-title { &-title {
font-size: 20px; text-transform: uppercase;
font-weight: 700;
font-size: 24px;
line-height: 33px;
} }
&-links { &-links {
.link-choose-products { .link-choose-products {
background: $color-black; background: white;
border: none; border: 1px solid #000000;
border-radius: 5px;
transition: ease-in 0.22s all; transition: ease-in 0.22s all;
outline: none; outline: none;
font-family: $font-family; font-family: "Tenor Sans";
font-style: normal; font-style: normal;
font-weight: 500; font-weight: 400;
font-size: 14px; font-size: 14px;
line-height: 16px; line-height: 16px;
text-align: center; text-align: center;
letter-spacing: 0.05em; letter-spacing: 0.05em;
color: $color-white; color: #000;
text-transform: uppercase; text-transform: uppercase;
cursor: pointer;
padding: 16px 65px;
&:hover { &:hover {
background: lighten($color-black, 5); background: white;
} }
} }
} }
&-message {
display: none;
}
} }

View File

@ -66,16 +66,24 @@ body {
color: $color-black !important; color: $color-black !important;
} }
.hidden {
display: none;
}
.visible {
display: block;
}
#cart-title, #cart-title,
#orderform-title { #orderform-title {
color: $color-gray2; color: #292929;
font-family: $font-family; font-family: $font-family;
font-weight: 500;
font-size: 36px;
line-height: 42px;
margin: 40px 0 30px; margin: 40px 0 30px;
letter-spacing: 0.1em; letter-spacing: 0.1em;
text-transform: uppercase; text-transform: uppercase;
font-weight: 700;
font-size: 24px;
line-height: 33px;
@include mq(md, max) { @include mq(md, max) {
margin-left: 30px; margin-left: 30px;

View File

@ -1,12 +1,62 @@
/* _footer.scss */ /* _footer.scss */
.footerCheckout { .footerCheckout {
border-top: none;
color: $color-gray2; color: $color-gray2;
width: 100%;
bottom: 0;
&__wrapper { &__wrapper {
border-top: 1px solid black;
padding-top: 16px;
padding-bottom: 16px;
align-items: center; align-items: center;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.container {
display: flex;
flex-direction: row;
width: 100%;
justify-content: space-between;
.credit-cards {
display: flex;
.cards-logo {
width: 36px;
height: 20px;
margin: 0;
margin-right: 13px;
}
}
}
.credits {
display: flex;
gap: 10px;
margin: 0;
padding: 0;
align-items: baseline;
.credit-text {
font-weight: 400;
font-size: 9px;
line-height: 12px;
}
.logo {
width: 44px;
height: 16px;
figure {
margin: 0;
width: 100%;
img {
height: 16px;
}
}
}
}
} }
&__address { &__address {

View File

@ -1,22 +1,115 @@
/* _header.scss */ /* _header.scss */
.headerCheckout { .headerCheckout {
width: 100%;
margin: 0;
border-bottom: 1px solid black;
.container { .container {
width: auto !important; width: 100% !important;
} }
&__wrapper { &__wrapper {
width: 80%;
align-items: center; align-items: center;
margin: 30px auto;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.progress-bar {
width: 100%;
& ul {
display: flex;
list-style-type: none;
justify-content: space-around;
margin: 0;
& li {
.containerLi {
& div {
display: flex;
flex-direction: column;
align-items: center;
position: relative;
.progress-bar-text {
font-weight: 400;
font-size: 12px;
line-height: 14px;
}
.progress-bar-circle-1 {
width: 16px;
height: 16px;
border: 1px solid black;
margin: 0;
border-radius: 50%;
background-color: white;
}
.progress-bar-circle-2 {
width: 16px;
height: 16px;
border: 1px solid black;
margin: 0;
border-radius: 50%;
background-color: white;
}
.progress-bar-circle-3 {
width: 16px;
height: 16px;
border: 1px solid black;
margin: 0;
border-radius: 50%;
background-color: white;
}
.progress-bar-line-1 {
border-bottom: 1px solid black;
width: 200px;
position: absolute;
bottom: 0;
left: 50%;
z-index: -1;
}
.progress-bar-line-2 {
border-bottom: 1px solid black;
width: 200px;
position: absolute;
bottom: 0;
z-index: -1;
}
.progress-bar-line-3 {
border-bottom: 1px solid black;
width: 200px;
position: absolute;
bottom: 0;
right: 50%;
z-index: -1;
}
.active {
background-color: black;
}
}
}
}
}
}
} }
&__logo { &__logo {
img { img {
height: 52px; height: 37px;
width: auto; width: 156px;
} }
} }
&__safeBuy { &__safeBuy {
display: flex;
flex-direction: row;
img {
width: 12px;
height: 15px;
}
span { span {
align-items: center; align-items: center;
display: flex; display: flex;
@ -27,6 +120,7 @@
font-size: 12px; font-size: 12px;
line-height: 14px; line-height: 14px;
color: $color-gray; color: $color-gray;
margin-left: 8px;
} }
i { i {

View File

@ -1 +1,70 @@
/* _prateleira.scss */ /* _prateleira.scss */
.footerCheckout__prateleira {
margin: 43px 132px;
display: flex;
justify-content: center;
color: #000000;
.prateleira-title {
font-weight: 400;
font-size: 24px;
line-height: 38px;
text-align: center;
}
.card-item {
margin-right: 16px;
width: 242px;
.item-image {
width: 242px;
height: 242px;
margin: 0;
img {
width: 100%;
}
}
.item-name {
margin-top: 20px;
font-weight: 400;
font-size: 13px;
line-height: 18px;
text-align: center;
}
.item-sizes {
.item-size-name {
margin-top: 20px;
align-items: center;
text-align: center;
font-weight: 700;
font-size: 13px;
line-height: 18px;
color: white;
padding: 6px;
background-color: #00c8ff;
width: auto;
}
}
.item-link {
margin-top: 20px;
display: block;
justify-content: center;
background-color: #00c8ff;
color: white;
text-decoration: none;
width: 100%;
padding: 12px 0px;
display: flex;
align-items: center;
text-align: center;
font-weight: 700;
font-size: 13px;
line-height: 18px;
}
}
}

View File

@ -1,20 +1,25 @@
<!-- Esse arquivo é só um demonstrativo de como está o html do header do checkout atualmente, <!-- Esse arquivo é só um demonstrativo de como está o html do header do checkout atualmente,
MODIFICA-LO NÃO CAUSARÁ EFEITO ALGUM, todo html que for modificado no header, deverá ser feito através de javaScript. --> MODIFICA-LO NÃO CAUSARÁ EFEITO ALGUM, todo html que for modificado no header, deverá ser feito através de javaScript. -->
<header class="headerCheckout"> <header class="headerCheckout">
<div class="container"> <div class="container">
<div class="headerCheckout__wrapper"> <div class="headerCheckout__wrapper">
<div class="headerCheckout__logo"> <div class="headerCheckout__logo">
<a href="/"> <a href="/">
<img src="https://agenciamagma.vteximg.com.br/arquivos/LogoM3Academy.png" alt="M3 Academy"/> <img
src="https://agenciamagma.vteximg.com.br/arquivos/LogoM3Academy.png"
alt="M3 Academy"
/>
</a> </a>
</div> </div>
<div id="progressBar" class="progress-bar"> Aqui entra a barra de progresso <div id="progressBar" class="progress-bar">Aqui entra a barra de progresso</div>
</div>
<div class="headerCheckout__safeBuy"> <div class="headerCheckout__safeBuy">
<img src="https://agenciamagma.vteximg.com.br/arquivos/cadeadoCompraSegM3Academy.png" alt="Cadeado"/> <img
src="https://agenciamagma.vteximg.com.br/arquivos/cadeadoCompraSegM3Academy.png"
alt="Cadeado"
/>
<span>Compra segura</span> <span>Compra segura</span>
</div> </div>
</div> </div>
</div> </div>
</header> </header>

32069
package-lock.json generated

File diff suppressed because it is too large Load Diff

9174
yarn.lock Normal file

File diff suppressed because it is too large Load Diff