feature/footer #6

Merged
cainamilech merged 3 commits from feature/footer into develop 2023-01-12 14:39:09 +00:00
26 changed files with 114 additions and 114 deletions

View File

@ -1,9 +1,20 @@
import { useState, useEffect } from "react";
import icons from "./assets/modules/FixedIcons.module.scss";
import whats from "./assets/svgs/whatsapp.svg";
import arrow from "./assets/svgs/arrow.svg";
const FixedIcons = () => {
const [scrollTop, setScrollTop] = useState(0);
useEffect(() => {
const handleScroll = () => {
setScrollTop(window.scrollY);
};
window.addEventListener("scroll", handleScroll);
});
return (
<div className={icons["icons"]}>
<a
@ -15,14 +26,16 @@ const FixedIcons = () => {
<img src={whats} alt="Ícone WhatsApp" />
</figure>
</a>
<div
onClick={() => window.scrollTo({ top: 0, behavior: "smooth" })}
className={icons["icons__arrow"]}
>
<figure>
<img src={arrow} alt="Ícone subir ao topo" />
</figure>
</div>
{scrollTop > 0 ? (
<div
onClick={() => window.scrollTo({ top: 0, behavior: "smooth" })}
className={icons["icons__arrow"]}
>
<figure>
<img src={arrow} alt="Ícone subir ao topo" />
</figure>
</div>
) : undefined}
</div>
);
};

View File

@ -2,6 +2,7 @@
position: fixed;
bottom: 200px;
right: 16px;
z-index: 9999;
@media screen and (min-width: 2500px) {
bottom: 215px;

View File

@ -3,14 +3,14 @@ import footer from "./assets/modules/FooterBottom.module.scss";
import { Payments } from "./Payments";
import { Developed } from "./Developed";
import master from "./assets/svgs/master.svg";
import visa from "./assets/svgs/visa.svg";
import diners from "./assets/svgs/diners.svg";
import elo from "./assets/svgs/elo.svg";
import hiper from "./assets/svgs/hiper.svg";
import paypal from "./assets/svgs/paypal.svg";
import boleto from "./assets/svgs/boleto.svg";
import vtexPci from "./assets/svgs/vtex-pci.svg";
import master from "./assets/svgs/master.png";
import visa from "./assets/svgs/visa.png";
import diners from "./assets/svgs/diners.png";
import elo from "./assets/svgs/elo.png";
import hiper from "./assets/svgs/hiper.png";
import paypal from "./assets/svgs/paypal.png";
import boleto from "./assets/svgs/boleto.png";
import vtexPci from "./assets/svgs/vtex-pci.png";
const FooterBottom = () => {
return (

View File

@ -1,7 +1,7 @@
import newsletter from "./assets/modules/Newsletter.module.scss";
import { Formik, Form, Field, ErrorMessage } from "formik";
import { useState } from "react";
import newsletter from "./assets/modules/Newsletter.module.scss";
import NewsletterSchema from "./assets/schemas/NewsletterSchema";
interface IEmailType {
@ -9,30 +9,44 @@ interface IEmailType {
}
const Newsletter = () => {
const [feedback, setFeedback] = useState(false);
const Feedback = () => {
setFeedback(!feedback);
};
return (
<div className={newsletter["newsletter"]}>
<div className={newsletter["newsletter__wrapper"]}>
<h3>ASSINE NOSSA NEWSLETTER</h3>
<Formik
onSubmit={(values: IEmailType, actions) => {
Feedback();
actions.resetForm();
const sent = document.querySelector(
"#emailsent"
) as HTMLSpanElement;
sent.innerHTML = "Email cadastrado com sucesso!";
}}
initialValues={{ email: "" }}
validationSchema={NewsletterSchema}
>
<Form>
<Field placeholder="E-mail" id="email" name="email" />
<Field
placeholder="E-mail"
id="email"
name="email"
onBlur={() => {
setFeedback(false);
}}
/>
<ErrorMessage
component="span"
name="email"
className={newsletter["invalid"]}
/>
<button type="submit">ENVIAR</button>
<span id="emailsent" className={newsletter["success"]}></span>
{feedback ? (
<span className={newsletter["success"]}>
Email cadastrado com sucesso!
</span>
) : undefined}
</Form>
</Formik>
</div>

View File

@ -4,6 +4,7 @@ import {
AccordionHeader,
AccordionItem,
} from "react-headless-accordion";
import { useState } from "react";
import { Link } from "./Link";
import links from "./assets/modules/SitemapAccordion.module.scss";
@ -11,12 +12,26 @@ import links from "./assets/modules/SitemapAccordion.module.scss";
import more from "./assets/svgs/more.svg";
const SitemapAccordion = () => {
const [institucional, setInstitucional] = useState(false);
const [duvidas, setDuvidas] = useState(false);
const [faleConosco, setFaleConosco] = useState(false);
const changeIcon1 = () => {
setInstitucional(!institucional);
};
const changeIcon2 = () => {
setDuvidas(!duvidas);
};
const changeIcon3 = () => {
setFaleConosco(!faleConosco);
};
return (
<Accordion className={links["accordion"]} alwaysOpen={true}>
<AccordionItem>
<AccordionHeader>
<AccordionHeader onClick={changeIcon1}>
<h4>Institucional</h4>
<img src={more} alt="Icone de +" />
{institucional ? <span>-</span> : <img src={more} alt="Icone de +" />}
</AccordionHeader>
<AccordionBody>
@ -30,9 +45,9 @@ const SitemapAccordion = () => {
</AccordionItem>
<AccordionItem>
<AccordionHeader>
<AccordionHeader onClick={changeIcon2}>
<h4>Dúvidas</h4>
<img src={more} alt="Icone de +" />
{duvidas ? <span>-</span> : <img src={more} alt="Icone de +" />}
</AccordionHeader>
<AccordionBody>
@ -46,9 +61,9 @@ const SitemapAccordion = () => {
</AccordionItem>
<AccordionItem>
<AccordionHeader>
<AccordionHeader onClick={changeIcon3}>
<h4>Fale Conosco</h4>
<img src={more} alt="Icone de +" />
{faleConosco ? <span>-</span> : <img src={more} alt="Icone de +" />}
</AccordionHeader>
<AccordionBody>

View File

@ -20,6 +20,12 @@
line-height: 16px;
color: var(--black-200);
}
span {
font-size: 21px;
font-weight: bold;
color: var(--black-200);
}
}
ul {

Binary file not shown.

After

Width:  |  Height:  |  Size: 816 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 92 KiB

View File

@ -1,3 +0,0 @@
<svg width="2" height="24" viewBox="0 0 2 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<line x1="0.908936" y1="2.18557e-08" x2="0.908934" y2="24" stroke="#C4C4C4"/>
</svg>

Before

Width:  |  Height:  |  Size: 179 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 888 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 745 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 739 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 888 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1000 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1,9 +0,0 @@
<svg width="56" height="34" viewBox="0 0 56 34" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect x="0.408936" width="54.6061" height="34" fill="url(#pattern0)"/>
<defs>
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0_6214_933" transform="translate(0 -0.00590909) scale(0.005 0.0080303)"/>
</pattern>
<image id="image0_6214_933" width="200" height="126" xlink:href="data:image/png;base64,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"/>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -11,7 +11,7 @@
.content {
position: absolute;
background-color: var(--white);
width: 97.4609%;
width: 96.4845%;
height: 585px;
@media screen and (max-width: 599px) {

View File

@ -1,5 +1,6 @@
import { Formik, Form, Field, ErrorMessage } from "formik";
import MaskedInput from "react-text-mask";
import { useState } from "react";
import FormSchema from "./assets/schemas/FormSchema";
@ -23,10 +24,20 @@ const initialValues = {
telefone: "",
instagram: "",
terms: false,
/*sent: false,*/
};
const dateMask = [/\d/, /\d/, ".", /\d/, /\d/, ".", /\d/, /\d/, /\d/, /\d/];
const dateMask = [
/[0-3]/,
/\d/,
".",
/[0-1]/,
/\d/,
".",
/[1-2]/,
/\d/,
/\d/,
/\d/,
];
const cpfMask = [
/\d/,
/\d/,
@ -62,16 +73,19 @@ const phoneNumberMask = [
];
const Contato = () => {
const [feedback, setFeedback] = useState(false);
const Feedback = () => {
setFeedback(true);
};
return (
<div className={contato["forms"]}>
<h2>Preencha o formulário</h2>
<Formik
onSubmit={(values: IFormikValues, actions) => {
console.log(values);
Feedback();
actions.resetForm();
const sent = document.querySelector("#sent") as HTMLSpanElement;
sent.innerHTML = "*Formulário enviado com sucesso!";
}}
initialValues={initialValues}
validationSchema={FormSchema}
@ -80,7 +94,14 @@ const Contato = () => {
<Form>
<div className={contato["forms__form-col"]}>
<label htmlFor="name">Nome</label>
<Field placeholder="Seu nome completo" id="name" name="name" />
<Field
onBlur={() => {
setFeedback(false);
}}
placeholder="Seu nome completo"
id="name"
name="name"
/>
<ErrorMessage
component="span"
name="name"
@ -183,7 +204,12 @@ const Contato = () => {
</div>
<button type="submit">CADASTRE-SE</button>
<span id="sent" className={contato["forms__success"]}></span>
{feedback ? (
<span className={contato["forms__success"]}>
*Formulário enviado com sucesso!
</span>
) : undefined}
</Form>
)}
</Formik>

View File

@ -17,7 +17,7 @@
.home {
@media screen and (min-width: 2500px) {
width: 31.25px;
width: 31.22px;
height: 31.25px;
}
}