%PDF- %PDF-
Direktori : /home/vacivi36/SiteVacivitta/vacivitta/src/pages/ |
Current File : /home/vacivi36/SiteVacivitta/vacivitta/src/pages/Vacinas.jsx |
import React, { useState } from 'react'; import styled from 'styled-components'; import { Link } from 'react-router-dom'; import { FaCalendarAlt, FaChild, FaUser, FaUserTie, FaSearch, FaSyringe } from 'react-icons/fa'; const PageContainer = styled.div` font-family: 'League Spartan', sans-serif; background-color: white; margin-top: 100px; padding-bottom: 50px; color: #333; `; const HeroSection = styled.section` display: flex; align-items: center; flex-direction: column; justify-content: center; text-align: center; padding: 100px 80px; background: linear-gradient( to right, rgba(0, 148, 217, 0.8), rgba(61, 153, 72, 0.8) ), url("/vacinas.png") center/cover no-repeat; height: 50vh; color: white; h1 { font-size: 3rem; margin-bottom: 1rem; } p { font-size: 1.2rem; max-width: 800px; margin: 0 auto; color: white; } @media (max-width: 768px) { padding: 80px 20px; height: auto; h1 { font-size: 2.2rem; } } `; const ContentSection = styled.section` max-width: 1200px; margin: 0 auto; padding: 50px 20px; `; const SearchContainer = styled.div` max-width: 600px; margin: 0 auto 40px; position: relative; `; const SearchInput = styled.input` width: 100%; padding: 15px 20px 15px 50px; border: 1px solid #ddd; border-radius: 30px; font-size: 1rem; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); &:focus { outline: none; border-color: #0094D9; } `; const SearchIcon = styled.div` position: absolute; left: 20px; top: 50%; transform: translateY(-50%); color: #999; `; const AgeGroupSection = styled.div` margin-bottom: 50px; `; const AgeGroupTitle = styled.h2` color: #0094D9; font-size: 1.8rem; margin-bottom: 20px; padding-bottom: 10px; border-bottom: 2px solid #3D9948; display: inline-block; `; const VaccineCardsContainer = styled.div` display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 20px; `; const VaccineCard = styled(Link)` background-color: white; border-radius: 15px; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); padding: 25px; transition: all 0.3s ease; text-decoration: none; color: #333; display: flex; flex-direction: column; position: relative; overflow: hidden; scroll-behavior: smooth; &:hover { transform: translateY(-5px); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15); } &::before { content: ""; position: absolute; top: 0; left: 0; width: 10px; height: 100%; background-color: ${props => props.accentColor || '#0094D9'}; } `; const VaccineTitle = styled.h3` font-size: 1.3rem; margin: 0 0 10px; color: #0094D9; `; const VaccineAgeInfo = styled.div` font-size: 0.9rem; color: #666; margin-bottom: 8px; display: flex; align-items: center; gap: 5px; `; const VaccineDescription = styled.p` font-size: 0.95rem; line-height: 1.5; flex-grow: 1; `; const VaccineRecommended = styled.div` margin-top: 15px; font-weight: 500; padding: 5px 10px; background-color: #e8f5e9; color: #3D9948; border-radius: 5px; font-size: 0.85rem; display: inline-block; `; // Dados das vacinas organizados por grupo etário const vaccinesByAgeGroup = { infants: [ { id: "bcg", name: "BCG", title: "Vacina BCG", ageRecommendation: "Ao nascer", description: "Protege contra as formas graves de tuberculose, principalmente tuberculose miliar e meníngea.", accentColor: "#FF9800", recommended: "Dose única" }, { id: "hepatiteb", name: "Hepatite B", title: "Vacina Hepatite B", ageRecommendation: "Ao nascer, 2 e 6 meses", description: "Previne a hepatite B, uma infecção que afeta o fígado e pode causar cirrose e câncer hepático.", accentColor: "#4CAF50", recommended: "3 doses" }, { id: "rotavirus", name: "Rotavírus", title: "Vacina Rotavírus", ageRecommendation: "2 e 4 meses", description: "Previne diarreia grave causada pelo rotavírus, principal causa de desidratação e internação em crianças.", accentColor: "#2196F3", recommended: "2 doses via oral" }, { id: "pentavalente", name: "Pentavalente", title: "Vacina Pentavalente", ageRecommendation: "2, 4 e 6 meses", description: "Protege contra difteria, tétano, coqueluche, hepatite B e doenças por Haemophilus influenzae tipo b.", accentColor: "#9C27B0", recommended: "3 doses" }, { id: "pneumococica", name: "Pneumocócica 10V", title: "Vacina Pneumocócica", ageRecommendation: "2, 4 e 12 meses", description: "Previne pneumonia, meningite e otite causadas por pneumococos.", accentColor: "#F44336", recommended: "2 doses + reforço" }, { id: "meningococica", name: "Meningocócica C", title: "Vacina Meningocócica C", ageRecommendation: "3, 5 e 12 meses", description: "Protege contra a meningite e outras doenças causadas pelo meningococo C.", accentColor: "#00BCD4", recommended: "2 doses + reforço" } ], children: [ { id: "triplice", name: "Tríplice Viral", title: "Vacina Tríplice Viral", ageRecommendation: "12 meses e 4-6 anos", description: "Protege contra sarampo, caxumba e rubéola, doenças que podem causar sérias complicações.", accentColor: "#E91E63", recommended: "2 doses" }, { id: "tetraviral", name: "Tetra Viral", title: "Vacina Tetraviral", ageRecommendation: "15 meses", description: "Protege contra sarampo, caxumba, rubéola e varicela (catapora).", accentColor: "#673AB7", recommended: "Dose única (substitui 2ª dose da Tríplice Viral)" }, { id: "hepatitea", name: "Hepatite A", title: "Vacina Hepatite A", ageRecommendation: "15 meses", description: "Previne a hepatite A, infecção que afeta o fígado e se transmite pela ingestão de água ou alimentos contaminados.", accentColor: "#8BC34A", recommended: "Dose única" }, { id: "varicela", name: "Varicela", title: "Vacina Varicela (Catapora)", ageRecommendation: "4 anos", description: "Previne a varicela, conhecida como catapora, uma doença altamente contagiosa.", accentColor: "#FF5722", recommended: "Dose única ou 2 doses" }, { id: "febre-amarela", name: "Febre Amarela", title: "Vacina Febre Amarela", ageRecommendation: "9 meses e 4 anos", description: "Protege contra a febre amarela, doença infecciosa febril transmitida por mosquitos.", accentColor: "#FFEB3B", recommended: "Dose inicial e reforço" } ], adolescents: [ { id: "hpv", name: "HPV", title: "Vacina HPV", ageRecommendation: "9 a 14 anos (meninas) e 11 a 14 anos (meninos)", description: "Previne o papilomavírus humano, que pode causar diversos tipos de câncer, principalmente o de colo do útero.", accentColor: "#3F51B5", recommended: "2 doses" }, { id: "meningococicab", name: "Meningocócica B", title: "Vacina Meningocócica B", ageRecommendation: "11 a 15 anos", description: "Protege contra a meningite e outras doenças causadas pelo meningococo B.", accentColor: "#009688", recommended: "2 doses" }, { id: "dengue", name: "Dengue", title: "Vacina Dengue", ageRecommendation: "10 a 14 anos", description: "Protege contra os quatro sorotipos do vírus da dengue, reduzindo risco de infecção e casos graves.", accentColor: "#FFC107", recommended: "2 doses" } ], adults: [ { id: "tifoide", name: "Febre Tifoide", title: "Vacina Febre Tifoide", ageRecommendation: "Adultos viajantes", description: "Previne a febre tifoide, doença transmitida por água e alimentos contaminados.", accentColor: "#795548", recommended: "Dose única a cada 3 anos" }, { id: "gripe", name: "Influenza", title: "Vacina Gripe", ageRecommendation: "Anualmente para todas as idades", description: "Protege contra os vírus da gripe sazonal, reduzindo complicações, hospitalizações e mortes.", accentColor: "#03A9F4", recommended: "Dose anual" }, { id: "triplicebacteriana", name: "Tríplice Bacteriana", title: "Vacina Tríplice Bacteriana Acelular", ageRecommendation: "Adultos (reforço a cada 10 anos)", description: "Protege contra difteria, tétano e coqueluche. Importante para gestantes e profissionais de saúde.", accentColor: "#607D8B", recommended: "Reforço a cada 10 anos" } ], elderly: [ { id: "herpes", name: "Herpes Zóster", title: "Vacina Herpes Zóster", ageRecommendation: "50 anos ou mais", description: "Previne o herpes-zóster (cobreiro) e a neuralgia pós-herpética, complicação dolorosa da doença.", accentColor: "#9E9E9E", recommended: "Dose única ou 2 doses" }, { id: "pneumococica", name: "Pneumocócica 23", title: "Vacina Pneumocócica 23", ageRecommendation: "60 anos ou mais", description: "Protege contra 23 tipos de pneumococos, prevenindo pneumonia e outras infecções graves.", accentColor: "#F44336", recommended: "Dose única ou esquema combinado" }, { id: "efluelda", name: "Efluelda", title: "Vacina Efluelda", ageRecommendation: "60 anos ou mais", description: "Vacina contra gripe de alta dose, formulada especialmente para idosos, oferecendo maior proteção.", accentColor: "#7986CB", recommended: "Dose anual" }, { id: "arexvy", name: "Arexvy", title: "Vacina Arexvy", ageRecommendation: "60 anos ou mais", description: "Protege contra o Vírus Sincicial Respiratório (VSR), importante causa de infecções respiratórias em idosos.", accentColor: "#4DB6AC", recommended: "Dose única por temporada" } ], special: [ { id: "abrysvo", name: "Abrysvo", title: "Vacina Abrysvo", ageRecommendation: "Gestantes", description: "Vacina contra o VSR para gestantes, protegendo o bebê nos primeiros meses de vida.", accentColor: "#BA68C8", recommended: "Dose única durante a gestação" }, { id: "hepatiteab", name: "Hepatite A e B", title: "Vacina Hepatite A e B", ageRecommendation: "Todas as idades", description: "Vacina combinada que protege contra as hepatites A e B, indicada para quem não teve contato prévio.", accentColor: "#66BB6A", recommended: "3 doses" }, { id: "haemophilus", name: "Haemophilus influenzae b", title: "Vacina Haemophilus", ageRecommendation: "Crianças e grupos de risco", description: "Protege contra doenças causadas pela bactéria Haemophilus influenzae tipo b, como meningite.", accentColor: "#42A5F5", recommended: "Esquema conforme idade" } ] }; function Vacinas() { const [searchTerm, setSearchTerm] = useState(''); // Add scroll to top handler const handleCardClick = () => { window.scrollTo({ top: 0, behavior: 'smooth' }); }; // Filter vaccines based on search term const filteredInfants = vaccinesByAgeGroup.infants.filter(vaccine => vaccine.name.toLowerCase().includes(searchTerm.toLowerCase()) || vaccine.description.toLowerCase().includes(searchTerm.toLowerCase()) ); const filteredChildren = vaccinesByAgeGroup.children.filter(vaccine => vaccine.name.toLowerCase().includes(searchTerm.toLowerCase()) || vaccine.description.toLowerCase().includes(searchTerm.toLowerCase()) ); const filteredAdolescents = vaccinesByAgeGroup.adolescents.filter(vaccine => vaccine.name.toLowerCase().includes(searchTerm.toLowerCase()) || vaccine.description.toLowerCase().includes(searchTerm.toLowerCase()) ); const filteredAdults = vaccinesByAgeGroup.adults.filter(vaccine => vaccine.name.toLowerCase().includes(searchTerm.toLowerCase()) || vaccine.description.toLowerCase().includes(searchTerm.toLowerCase()) ); const filteredElderly = vaccinesByAgeGroup.elderly.filter(vaccine => vaccine.name.toLowerCase().includes(searchTerm.toLowerCase()) || vaccine.description.toLowerCase().includes(searchTerm.toLowerCase()) ); const filteredSpecial = vaccinesByAgeGroup.special.filter(vaccine => vaccine.name.toLowerCase().includes(searchTerm.toLowerCase()) || vaccine.description.toLowerCase().includes(searchTerm.toLowerCase()) ); const filteredVaccines = searchTerm ? [ ...filteredInfants, ...filteredChildren, ...filteredAdolescents, ...filteredAdults, ...filteredElderly, ...filteredSpecial ] : null; return ( <PageContainer> <HeroSection> <h1>Calendário vacinal Vacivitta</h1> <p>Conheça todas as vacinas disponíveis por faixa etária e mantenha a sua saúde em dia</p> </HeroSection> <ContentSection> <SearchContainer> <SearchIcon> <FaSearch /> </SearchIcon> <SearchInput type="text" placeholder="Buscar vacinas..." value={searchTerm} onChange={(e) => setSearchTerm(e.target.value)} /> </SearchContainer> {!filteredVaccines && ( <> <AgeGroupSection> <AgeGroupTitle> <FaChild /> Bebês (0 a 2 anos) </AgeGroupTitle> <VaccineCardsContainer> {vaccinesByAgeGroup.infants.map((vaccine) => ( <VaccineCard key={vaccine.id} to={`/vacinas/${vaccine.id}`} accentColor={vaccine.accentColor} onClick={handleCardClick} > <VaccineTitle>{vaccine.title}</VaccineTitle> <VaccineAgeInfo> <FaCalendarAlt /> {vaccine.ageRecommendation} </VaccineAgeInfo> <VaccineDescription>{vaccine.description}</VaccineDescription> <VaccineRecommended> <FaSyringe /> {vaccine.recommended} </VaccineRecommended> </VaccineCard> ))} </VaccineCardsContainer> </AgeGroupSection> <AgeGroupSection> <AgeGroupTitle> <FaChild /> Crianças (2 a 10 anos) </AgeGroupTitle> <VaccineCardsContainer> {vaccinesByAgeGroup.children.map((vaccine) => ( <VaccineCard key={vaccine.id} to={`/vacinas/${vaccine.id}`} accentColor={vaccine.accentColor} onClick={handleCardClick} > <VaccineTitle>{vaccine.title}</VaccineTitle> <VaccineAgeInfo> <FaCalendarAlt /> {vaccine.ageRecommendation} </VaccineAgeInfo> <VaccineDescription>{vaccine.description}</VaccineDescription> <VaccineRecommended> <FaSyringe /> {vaccine.recommended} </VaccineRecommended> </VaccineCard> ))} </VaccineCardsContainer> </AgeGroupSection> <AgeGroupSection> <AgeGroupTitle> <FaUser /> Adolescentes (11 a 19 anos) </AgeGroupTitle> <VaccineCardsContainer> {vaccinesByAgeGroup.adolescents.map((vaccine) => ( <VaccineCard key={vaccine.id} to={`/vacinas/${vaccine.id}`} accentColor={vaccine.accentColor} onClick={handleCardClick} > <VaccineTitle>{vaccine.title}</VaccineTitle> <VaccineAgeInfo> <FaCalendarAlt /> {vaccine.ageRecommendation} </VaccineAgeInfo> <VaccineDescription>{vaccine.description}</VaccineDescription> <VaccineRecommended> <FaSyringe /> {vaccine.recommended} </VaccineRecommended> </VaccineCard> ))} </VaccineCardsContainer> </AgeGroupSection> <AgeGroupSection> <AgeGroupTitle> <FaUser /> Adultos (20 a 59 anos) </AgeGroupTitle> <VaccineCardsContainer> {vaccinesByAgeGroup.adults.map((vaccine) => ( <VaccineCard key={vaccine.id} to={`/vacinas/${vaccine.id}`} accentColor={vaccine.accentColor} onClick={handleCardClick} > <VaccineTitle>{vaccine.title}</VaccineTitle> <VaccineAgeInfo> <FaCalendarAlt /> {vaccine.ageRecommendation} </VaccineAgeInfo> <VaccineDescription>{vaccine.description}</VaccineDescription> <VaccineRecommended> <FaSyringe /> {vaccine.recommended} </VaccineRecommended> </VaccineCard> ))} </VaccineCardsContainer> </AgeGroupSection> <AgeGroupSection> <AgeGroupTitle> <FaUserTie /> Idosos (60 anos ou mais) </AgeGroupTitle> <VaccineCardsContainer> {vaccinesByAgeGroup.elderly.map((vaccine) => ( <VaccineCard key={vaccine.id} to={`/vacinas/${vaccine.id}`} accentColor={vaccine.accentColor} onClick={handleCardClick} > <VaccineTitle>{vaccine.title}</VaccineTitle> <VaccineAgeInfo> <FaCalendarAlt /> {vaccine.ageRecommendation} </VaccineAgeInfo> <VaccineDescription>{vaccine.description}</VaccineDescription> <VaccineRecommended> <FaSyringe /> {vaccine.recommended} </VaccineRecommended> </VaccineCard> ))} </VaccineCardsContainer> </AgeGroupSection> <AgeGroupSection> <AgeGroupTitle> <FaUser /> Vacinas especiais </AgeGroupTitle> <VaccineCardsContainer> {vaccinesByAgeGroup.special.map((vaccine) => ( <VaccineCard key={vaccine.id} to={`/vacinas/${vaccine.id}`} accentColor={vaccine.accentColor} onClick={handleCardClick} > <VaccineTitle>{vaccine.title}</VaccineTitle> <VaccineAgeInfo> <FaCalendarAlt /> {vaccine.ageRecommendation} </VaccineAgeInfo> <VaccineDescription>{vaccine.description}</VaccineDescription> <VaccineRecommended> <FaSyringe /> {vaccine.recommended} </VaccineRecommended> </VaccineCard> ))} </VaccineCardsContainer> </AgeGroupSection> </> )} {filteredVaccines && ( <AgeGroupSection> <AgeGroupTitle> <FaSearch /> Resultados da busca </AgeGroupTitle> <VaccineCardsContainer> {filteredVaccines.map((vaccine) => ( <VaccineCard key={vaccine.id} to={`/vacinas/${vaccine.id}`} accentColor={vaccine.accentColor} onClick={handleCardClick} > <VaccineTitle>{vaccine.title}</VaccineTitle> <VaccineAgeInfo> <FaCalendarAlt /> {vaccine.ageRecommendation} </VaccineAgeInfo> <VaccineDescription>{vaccine.description}</VaccineDescription> <VaccineRecommended> <FaSyringe /> {vaccine.recommended} </VaccineRecommended> </VaccineCard> ))} </VaccineCardsContainer> </AgeGroupSection> )} </ContentSection> </PageContainer> ); } export default Vacinas;