%PDF- %PDF-
| Direktori : /home/vacivi36/.trash/vacivitta/src/pages/ |
| Current File : /home/vacivi36/.trash/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;