Skip to content

Commit f28dc1a

Browse files
authored
Merge pull request #71 from OCA-UFCG/refact/banner
Implements banner section and adapts preview cards section
2 parents e8725f0 + 32f95f2 commit f28dc1a

10 files changed

Lines changed: 783 additions & 761 deletions

File tree

package-lock.json

Lines changed: 490 additions & 630 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"@radix-ui/react-accordion": "^1.2.8",
2424
"@radix-ui/react-dialog": "^1.1.11",
2525
"@radix-ui/react-navigation-menu": "^1.2.10",
26+
"@radix-ui/react-select": "^2.2.4",
2627
"@radix-ui/react-slot": "^1.2.0",
2728
"@types/google-earth": "^0.0.8",
2829
"@types/next": "^8.0.7",
@@ -51,7 +52,6 @@
5152
"@eslint/js": "^9.1.1",
5253
"@tailwindcss/postcss": "^4.1.4",
5354
"@types/express": "^4.17.21",
54-
"@types/glidejs": "^1.0.34",
5555
"@types/node": "^20.17.24",
5656
"@types/nodemailer": "^6.4.15",
5757
"@types/react": "^18",

src/app/page.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { SectionHeader } from "@/utils/interfaces";
55
import { AboutSection } from "@/components/About/About";
66
import { RecentSection } from "@/components/RecentSection/RecentSection";
77
import PreviewSection from "@/components/PreviewSection/PreviewSection";
8-
import BannerImage from "@/components/BannerImage/BannerImage";
8+
import MainBanner from "@/components/BannerImage/BannerImage";
99
import DataSection from "@/components/DataSection/DataSection";
1010

1111
export const revalidate = 60;
@@ -18,19 +18,26 @@ export default async function Home() {
1818
post: posts,
1919
previewCards,
2020
theme,
21+
mainBanner,
2122
} = await getContent([
2223
"partners",
2324
"sectionHead",
2425
"post",
2526
"previewCards",
2627
"panels",
2728
"theme",
29+
"mainBanner",
2830
]);
2931

3032
return (
3133
<HubTemplate>
32-
<BannerImage />
33-
<PreviewSection cards={previewCards} />
34+
<MainBanner content={mainBanner[0]} />
35+
<PreviewSection
36+
header={sectionHead.find(
37+
(sec: { fields: SectionHeader }) => sec.fields.id == "preview",
38+
)}
39+
cards={previewCards}
40+
/>
3441
<RecentSection
3542
content={posts.slice(0, MAX_SiZE)}
3643
header={sectionHead.find(

src/components/BannerImage/BannerImage.styles.tsx

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,41 @@
1-
import { BannerContainer, Banner } from "./BannerImage.styles";
1+
import { IMainBanner } from "@/utils/interfaces";
2+
import { Icon } from "../Icon/Icon";
3+
import Image from "next/image";
4+
import { LinkButton } from "../LinkButton/LinkButton";
5+
6+
const MainBanner = ({ content }: { content: { fields: IMainBanner } }) => {
7+
const { title, subtitle, image } = content.fields;
28

3-
const BannerImage = () => {
49
return (
5-
<BannerContainer>
6-
<Banner src={"/banner.png"} />
7-
</BannerContainer>
10+
<div className="overflow-hidden relative flex justify-center items-center w-full lg:mt-4 min-h-[380px] lg:min-h-[510px]">
11+
<Image
12+
className="absolute w-full min-h-[450px] h-full object-cover rounded-t-md md:rounded-l-md md:rounded-tr-none z-0"
13+
src={`https:${image.fields.file.url}`}
14+
alt=""
15+
width={1400}
16+
height={1400}
17+
/>
18+
<div className="absolute top-0 right-0 h-full w-[100%] bg-gradient-to-l from-black via-transparent to-transparent"></div>
19+
<div className="absolute top-0 left-0 h-full w-[140%] bg-gradient-to-r from-black via-transparent to-transparent"></div>
20+
<div className="flex w-full p-6 2xl:p-0 h-full items-end justify-between max-w-[1440px] z-1">
21+
<div className="flex flex-col gap-4 lg:gap-8">
22+
<h1 className="text-white text-4xl leading-[40px] lg:leading-[68px] lg:text-6xl font-semibold lg:max-w-[50%]">
23+
{title}
24+
</h1>
25+
<p className="text-white text-lg font-medium">{subtitle}</p>
26+
<LinkButton href="/posts" className="md:max-w-fit">
27+
Explore os dados
28+
</LinkButton>
29+
</div>
30+
<Icon
31+
id="logo-DNE"
32+
width={200}
33+
height={100}
34+
className="hidden lg:block self-end filter brightness-0 invert"
35+
/>
36+
</div>
37+
</div>
838
);
939
};
1040

11-
export default BannerImage;
41+
export default MainBanner;

src/components/PreviewSection/PreviewSection.styles.tsx

Lines changed: 0 additions & 62 deletions
This file was deleted.

src/components/PreviewSection/PreviewSection.tsx

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { useMemo, useState } from "react";
33
import Autoplay from "embla-carousel-autoplay";
44
import { IPreviewCard, IPreviewCards } from "@/utils/interfaces";
55
import PreviewCard from "@/components/PreviewCard/PreviewCard";
6-
import { Header, Logo, LogoContainer, Name } from "./PreviewSection.styles";
76
import {
87
Carousel,
98
CarouselContent,
@@ -12,11 +11,24 @@ import {
1211
CarouselPrevious,
1312
DotButton,
1413
} from "../ui/carousel";
15-
import Filter from "./Filter/Filter";
14+
import {
15+
Select,
16+
SelectContent,
17+
SelectGroup,
18+
SelectItem,
19+
SelectLabel,
20+
SelectTrigger,
21+
SelectValue,
22+
} from "../ui/select";
1623

17-
const PreviewSection = ({ cards }: { cards: IPreviewCards[] }) => {
18-
const [selectedRegion, setSelectedRegion] = useState("Nordeste");
19-
const [selectedState, setSelectedState] = useState("");
24+
const PreviewSection = ({
25+
header,
26+
cards,
27+
}: {
28+
cards: IPreviewCards[];
29+
header: { fields: any };
30+
}) => {
31+
const [selectedState, setSelectedState] = useState("all");
2032

2133
const allCardsData = cards.map((card) => ({
2234
category: card.fields.category,
@@ -25,9 +37,10 @@ const PreviewSection = ({ cards }: { cards: IPreviewCards[] }) => {
2537

2638
const filteredCards = useMemo(() => {
2739
return allCardsData.map((regionData) => {
28-
const source = selectedState
29-
? regionData.states.find((state) => state.name === selectedState)
30-
: regionData;
40+
const source =
41+
selectedState !== "all"
42+
? regionData.states.find((state) => state.name === selectedState)
43+
: regionData;
3144

3245
return source
3346
? {
@@ -41,28 +54,35 @@ const PreviewSection = ({ cards }: { cards: IPreviewCards[] }) => {
4154
: null;
4255
}) as IPreviewCard[];
4356
// eslint-disable-next-line react-hooks/exhaustive-deps
44-
}, [selectedState, selectedRegion]);
57+
}, [selectedState]);
4558

46-
const handleFilterChange = (region: string, state: string) => {
47-
setSelectedRegion(region);
59+
const handleFilterChange = (state: string) => {
60+
// setSelectedRegion(region);
4861
setSelectedState(state);
4962
};
5063

5164
return (
52-
<div className="flex flex-col p-6 max-w-[1440px] w-full justify-center items-center">
53-
<Header>
54-
<LogoContainer>
55-
<Logo src="/logo.png" alt="datane logo" width={24} height={24} />
56-
<Name>Data Nordeste</Name>
57-
</LogoContainer>
58-
59-
<Filter
60-
data={allCardsData}
61-
selectedRegion={selectedRegion}
62-
selectedState={selectedState}
63-
onChange={handleFilterChange}
64-
/>
65-
</Header>
65+
<div className="flex flex-col bg-white px-3 lg:px-8 gap-3 border-box py-5 lg:py-10 max-w-[1440px] w-full justify-center items-center shadow-md rounded-lg -translate-y-4 lg:-translate-y-12">
66+
<div className="flex flex-col lg:flex-row gap-3 justify-between w-full">
67+
<h2 className="text-3xl font-semibold">{header.fields.title}</h2>
68+
<Select onValueChange={handleFilterChange}>
69+
<SelectTrigger className="w-full lg:w-[180px]">
70+
<SelectValue placeholder="Nordeste" />
71+
</SelectTrigger>
72+
<SelectContent>
73+
<SelectItem value="all">Nordeste</SelectItem>
74+
<SelectGroup>
75+
<SelectLabel>Estados</SelectLabel>
76+
{allCardsData &&
77+
allCardsData[0].states.map((state, i) => (
78+
<SelectItem value={state.name} key={i}>
79+
{state.name}
80+
</SelectItem>
81+
))}
82+
</SelectGroup>
83+
</SelectContent>
84+
</Select>
85+
</div>
6686

6787
<Carousel
6888
opts={{
@@ -80,7 +100,7 @@ const PreviewSection = ({ cards }: { cards: IPreviewCards[] }) => {
80100
{filteredCards.map((card, i) => (
81101
<CarouselItem
82102
key={i}
83-
className="basis-1/1 md:basis-1/2 lg:basis-1/4 p-2"
103+
className="basis-1/1 md:basis-1/2 lg:basis-1/4 p-1 md:p-2"
84104
>
85105
<PreviewCard content={card} />
86106
</CarouselItem>

0 commit comments

Comments
 (0)