%PDF- %PDF-
Direktori : /home/vacivi36/SiteVacivitta/vacivitta/node_modules/vacivitta/src/components/ |
Current File : /home/vacivi36/SiteVacivitta/vacivitta/node_modules/vacivitta/src/components/Header.jsx |
import { useState } from 'react' import { NavLink } from 'react-router-dom' import styled from 'styled-components' import { AnimatePresence, motion } from 'framer-motion' import MegaMenu from './MegaMenu' import MegaMenuServices from './MegaMenuServices' import { FaArrowAltCircleDown, FaArrowDown, FaChevronUp, FaChevronDown } from 'react-icons/fa' const HeaderContainer = styled.header` position: fixed; top: 0; left: 0; right: 0; height: 100px; display: flex; justify-content: space-between; align-items: center; background: rgba(255, 255, 255, 0.9); backdrop-filter: blur(5px); padding: 10px 80px; z-index: 100; @media (max-width: 768px) { padding: 10px 40px; } ` const Logo = styled.img` width: 160px; ` const Nav = styled.nav` display: flex; align-items: center; gap: 10px; @media (max-width: 768px) { display: none; } ` const NavItem = styled(NavLink)` text-decoration: none; color: #0094d9; font-size: 17px; font-weight: 500; padding: 8px 15px; transition: all 0.3s ease; &.active { color: #3d9948; font-weight: 700; } &:hover { transform: translateY(-3px); color: #3d9948; } ` const DisabledNavItem = styled.span` text-decoration: none; color: #93c5e0; font-size: 17px; font-weight: 500; padding: 8px 15px; cursor: not-allowed; ` const ExternalNavItem = styled.a` text-decoration: none; color: #0094d9; font-size: 17px; font-weight: 500; padding: 8px 15px; transition: all 0.3s ease; &:hover { transform: translateY(-3px); color: #3d9948; } ` const ServicesContainer = styled.div` position: relative; display: flex; align-items: center; &:hover .mega-menu { display: block; } ` const ServicesContainer2 = styled.div` position: relative; display: flex; align-items: center; &:hover .mega-menu { display: block; } ` const MobileMenuIcon = styled.div` display: none; cursor: pointer; width: 35px; height: 30px; flex-direction: column; justify-content: space-between; align-items: center; div { width: 100%; height: 4px; background: #0094d9; border-radius: 2px; transition: all 0.3s ease; } @media (max-width: 768px) { display: flex; } ` const MobileMenuContainer = styled(motion.div)` position: fixed; top: 0; right: 0; width: 270px; height: 100vh; background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(10px); box-shadow: -4px 0px 10px rgba(0, 0, 0, 0.1); padding: 80px 20px; display: flex; flex-direction: column; gap: 15px; z-index: 200; ` const CloseButton = styled.button` position: absolute; top: 0px; right: 0px; background: none; border: none; font-size: 54px; cursor: pointer; color: #0094d9; &:hover { background-color: transparent; border: none; } ` const SubMenuContainer = styled(motion.div)` display: flex; flex-direction: column; padding-left: 15px; max-height: 300px; /* Ajuste conforme necessário */ overflow-y: auto; scrollbar-width: thin; scrollbar-color: #ccc transparent; /* Estilizando a scrollbar para navegadores WebKit (Chrome, Safari) */ &::-webkit-scrollbar { width: 6px; } &::-webkit-scrollbar-thumb { background-color: #aaa; border-radius: 4px; } &::-webkit-scrollbar-track { background: transparent; } `; function Header() { const [isMegaMenuOpen, setIsMegaMenuOpen] = useState(false) const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false) const [isMegaMenuMobileOpen, setIsMegaMenuMobileOpen] = useState(false) const [isMegaMenuOpen2, setIsMegaMenuOpen2] = useState(false) const [isMobileMenuOpen2, setIsMobileMenuOpen2] = useState(false) const [isMegaMenuMobileOpen2, setIsMegaMenuMobileOpen2] = useState(false) // Add function to scroll to top when logo is clicked const scrollToTop = () => { window.scrollTo({ top: 0, behavior: 'smooth' }); }; return ( <HeaderContainer> <NavLink to="/" onClick={scrollToTop}> <Logo src="/logo.png" alt="Vacivitta Logo" /> </NavLink> {/* Menu Desktop */} <Nav> <NavItem to="/" end onClick={scrollToTop}>Home</NavItem> <NavItem to="/quem-somos" onClick={scrollToTop}>Quem Somos</NavItem> <NavItem to="/produtos" onClick={scrollToTop}>Produtos</NavItem> <ServicesContainer2 onMouseEnter={() => setIsMegaMenuOpen2(true)} onMouseLeave={() => setIsMegaMenuOpen2(false)} > <NavItem to="/servicos" onClick={scrollToTop}>Serviços<FaArrowDown style={{marginLeft: '5px'}} size={10}/></NavItem> <AnimatePresence> {isMegaMenuOpen2 && <MegaMenuServices />} </AnimatePresence> </ServicesContainer2> <ServicesContainer onMouseEnter={() => setIsMegaMenuOpen(true)} onMouseLeave={() => setIsMegaMenuOpen(false)} > <NavItem to="/vacinas" onClick={scrollToTop}>Vacinas<FaArrowDown style={{marginLeft: '5px'}} size={10}/></NavItem> <AnimatePresence> {isMegaMenuOpen && <MegaMenu />} </AnimatePresence> </ServicesContainer> <NavItem to="/fale-conosco" onClick={scrollToTop}>Fale Conosco</NavItem> <NavItem to="/unidades" onClick={scrollToTop}>Unidades</NavItem> <ExternalNavItem href="https://amandaconde.com.br" target="_blank" rel="noopener noreferrer" onClick={scrollToTop}>Dra. Amanda</ExternalNavItem> <DisabledNavItem>Blog</DisabledNavItem> </Nav> {/* Ícone do Menu Mobile */} <MobileMenuIcon onClick={() => setIsMobileMenuOpen(true)}> <div></div> <div></div> <div></div> </MobileMenuIcon> {/* Menu Mobile */} <AnimatePresence> {isMobileMenuOpen && ( <MobileMenuContainer initial={{ x: "100%" }} animate={{ x: 0 }} exit={{ x: "100%" }} transition={{ duration: 0.3 }} > <CloseButton onClick={() => setIsMobileMenuOpen(false)}>×</CloseButton> <NavItem to="/" end onClick={() => {setIsMobileMenuOpen(false); scrollToTop();}}>Home</NavItem> <NavItem to="/quem-somos" onClick={() => {setIsMobileMenuOpen(false); scrollToTop();}}>Quem Somos</NavItem> <NavItem to="/produtos" onClick={() => {setIsMobileMenuOpen(false); scrollToTop();}}>Produtos</NavItem> {/* Serviços no Menu Mobile */} <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}> <NavItem to="/servicos" onClick={() => {setIsMobileMenuOpen(false); scrollToTop();}} style={{ flex: 1 }} > Serviços </NavItem> <div onClick={() => setIsMegaMenuMobileOpen2(!isMegaMenuMobileOpen2)} style={{ padding: '10px', cursor: 'pointer' }} > {isMegaMenuMobileOpen2 ? <FaChevronUp /> : <FaChevronDown />} </div> </div> {/* Mega Menu Serviços Mobile */} <AnimatePresence> {isMegaMenuMobileOpen2 && ( <SubMenuContainer initial={{ opacity: 0, height: 0 }} animate={{ opacity: 1, height: "auto" }} exit={{ opacity: 0, height: 0 }} transition={{ duration: 0.3 }} > {[ { to: "/servicos/consultoria-amamentacao", label: "👶 Consultoria em amamentação" }, { to: "/servicos/exames-clinicos", label: "🩺 Exames clínicos" }, { to: "/servicos/aplicacao-medicacao", label: "💉 Aplicação de medicação e infusão" }, { to: "/servicos/pediatria", label: "👨⚕️ Pediatria Especializada" }, { to: "/servicos/vacinacao-corporativa", label: "🏢 Vacinação em empresas" }, { to: "/servicos/consulta-especialistas", label: "👩⚕️ Consulta com especialistas" } ].map((service, index) => ( <NavItem key={index} to={service.to} onClick={() => {setIsMobileMenuOpen(false); scrollToTop();}}> {service.label} </NavItem> ))} </SubMenuContainer> )} </AnimatePresence> {/* Vacinas no Menu Mobile */} <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}> <NavItem to="/vacinas" onClick={() => {setIsMobileMenuOpen(false); scrollToTop();}} style={{ flex: 1 }} > Vacinas </NavItem> <div onClick={() => setIsMegaMenuMobileOpen(!isMegaMenuMobileOpen)} style={{ padding: '10px', cursor: 'pointer' }} > {isMegaMenuMobileOpen ? <FaChevronUp /> : <FaChevronDown />} </div> </div> {/* Mega Menu Vacinas Mobile */} <AnimatePresence> {isMegaMenuMobileOpen && ( <SubMenuContainer initial={{ opacity: 0, height: 0 }} animate={{ opacity: 1, height: "auto" }} exit={{ opacity: 0, height: 0 }} transition={{ duration: 0.3 }} > {[ { to: "/vacinas/febre-amarela", label: "💉 Vacina febre amarela" }, { to: "/vacinas/tifoide", label: "🦠 Vacina tifoide" }, { to: "/vacinas/arexvy", label: "🫁 Vacina arexvy (vírus respiratório)" }, { to: "/vacinas/tetravalente", label: "💉 Vacina tetravalente" }, { to: "/vacinas/triplicebacteriana", label: "🛡️ Vacina tríplice bacteriana acelular" }, { to: "/vacinas/meningococica", label: "🧠 Vacina meningocócica" }, { to: "/vacinas/gripe", label: "🤒 Vacina influenza (gripe)" }, { to: "/vacinas/meningococicab", label: "🧠 Vacina meningocócica b" }, { to: "/vacinas/triplice", label: "🦠 Vacina tríplice viral" }, { to: "/vacinas/varicela", label: "🩹 Vacina varicela (catapora)" }, { to: "/vacinas/pneumococica", label: "🫁 Vacina pneumocócica 23" }, { to: "/vacinas/pentavalente", label: "💉 Vacina pentavalente" }, { to: "/vacinas/rotavirus", label: "💧 Vacina rotavírus" }, { to: "/vacinas/tetraviral", label: "💉 Vacina tetra viral" }, { to: "/vacinas/hpv", label: "🧬 Vacina hpv" }, { to: "/vacinas/hexavalente", label: "💉 Vacina hexavalente" }, { to: "/vacinas/herpes", label: "🩺 Vacina herpes zóster" }, { to: "/vacinas/hepatiteab", label: "🩺 Vacina hepatite a e b" }, { to: "/vacinas/hepatitea", label: "🩺 Vacina hepatite a" }, { to: "/vacinas/hepatiteb", label: "🩺 Vacina hepatite b" }, { to: "/vacinas/haemophilus", label: "🦠 Vacina haemophilus" }, { to: "/vacinas/efluelda", label: "💉 Vacina efluelda" }, { to: "/vacinas/dengue", label: "🦟 Vacina dengue" }, { to: "/vacinas/abrysvo", label: "🫁 Vacina abrysvo" }, { to: "/vacinas/tripliceinfantil", label: "👶 Vacina tríplice bacteriana acelular infantil" }, ].map((service, index) => ( <NavItem key={index} to={service.to} onClick={() => {setIsMobileMenuOpen(false); scrollToTop();}}> {service.label} </NavItem> ))} </SubMenuContainer> )} </AnimatePresence> <NavItem to="/fale-conosco" onClick={() => {setIsMobileMenuOpen(false); scrollToTop();}}>Fale Conosco</NavItem> <NavItem to="/unidades" onClick={() => {setIsMobileMenuOpen(false); scrollToTop();}}>Unidades</NavItem> <ExternalNavItem href="https://amandaconde.com.br" target="_blank" rel="noopener noreferrer" onClick={() => {setIsMobileMenuOpen(false); scrollToTop();}} > Dra. Amanda </ExternalNavItem> <DisabledNavItem>Blog</DisabledNavItem> </MobileMenuContainer> )} </AnimatePresence> </HeaderContainer> ) } export default Header