From 502e45b4ff3e7226b498d7dd6b00408971332447 Mon Sep 17 00:00:00 2001 From: arraysid Date: Sat, 17 May 2025 08:46:07 +0700 Subject: [PATCH] feat: reforming hero section --- .../(home)/_components/community.tsx | 2 +- .../(frontend)/(home)/_components/hero.tsx | 149 ------------------ .../_components/hero/button-explore-event.tsx | 21 +++ .../hero/button-join-community.tsx | 21 +++ .../(home)/_components/hero/hero-badge.tsx | 7 + .../(home)/_components/hero/hero-image.tsx | 24 +++ .../_components/hero/hero-main-text.tsx | 16 ++ .../(home)/_components/hero/hero-wrapper.tsx | 40 +++++ .../(home)/_components/hero/index.tsx | 36 +++++ .../src/app/(frontend)/(home)/page.tsx | 6 +- 10 files changed, 168 insertions(+), 154 deletions(-) delete mode 100644 apps/landing/src/app/(frontend)/(home)/_components/hero.tsx create mode 100644 apps/landing/src/app/(frontend)/(home)/_components/hero/button-explore-event.tsx create mode 100644 apps/landing/src/app/(frontend)/(home)/_components/hero/button-join-community.tsx create mode 100644 apps/landing/src/app/(frontend)/(home)/_components/hero/hero-badge.tsx create mode 100644 apps/landing/src/app/(frontend)/(home)/_components/hero/hero-image.tsx create mode 100644 apps/landing/src/app/(frontend)/(home)/_components/hero/hero-main-text.tsx create mode 100644 apps/landing/src/app/(frontend)/(home)/_components/hero/hero-wrapper.tsx create mode 100644 apps/landing/src/app/(frontend)/(home)/_components/hero/index.tsx diff --git a/apps/landing/src/app/(frontend)/(home)/_components/community.tsx b/apps/landing/src/app/(frontend)/(home)/_components/community.tsx index de68595..48c54af 100644 --- a/apps/landing/src/app/(frontend)/(home)/_components/community.tsx +++ b/apps/landing/src/app/(frontend)/(home)/_components/community.tsx @@ -32,7 +32,7 @@ export function Community(props: CommunitiesSection) { return (
diff --git a/apps/landing/src/app/(frontend)/(home)/_components/hero.tsx b/apps/landing/src/app/(frontend)/(home)/_components/hero.tsx deleted file mode 100644 index 937a530..0000000 --- a/apps/landing/src/app/(frontend)/(home)/_components/hero.tsx +++ /dev/null @@ -1,149 +0,0 @@ -'use client'; - -import { formatCMSImageDataToMedia } from '@/lib/format'; -import { HeroSection } from '@/payload-types'; -import { Button, CodeIcon, SparklesIcon, UsersIcon } from '@components/atoms'; -import { motion } from 'framer-motion'; -import Image from 'next/image'; -import { Fragment, useEffect, useState } from 'react'; - -export function Hero(props: HeroSection) { - const { - badgeText, - buttons, - description, - highlight, - title, - stats, - heroImage, - } = props; - - const [scrollY, setScrollY] = useState(0); - - useEffect(() => { - const handleScroll = () => { - setScrollY(window.scrollY); - }; - - window.addEventListener('scroll', handleScroll); - return () => window.removeEventListener('scroll', handleScroll); - }, []); - - return ( -
-
-
-
-
-
-
- -
-
- -
- - {badgeText} -
- -
-

- {title}
- - {highlight} - -

-

- {description} -

-
- -
- - -
- -
- {stats?.map(({ value, label }, i) => ( - -
-
- {value} -
-
{label}
-
- {i < stats.length - 1 && ( -
- )} - - ))} -
- - - -
-
- -
-
- -
-
-
- {(() => { - const media = formatCMSImageDataToMedia(heroImage); - if (!media) return null; - return ( - {media.alt} - ); - })()} -
-
- -
-
-
- ); -} diff --git a/apps/landing/src/app/(frontend)/(home)/_components/hero/button-explore-event.tsx b/apps/landing/src/app/(frontend)/(home)/_components/hero/button-explore-event.tsx new file mode 100644 index 0000000..4f609cd --- /dev/null +++ b/apps/landing/src/app/(frontend)/(home)/_components/hero/button-explore-event.tsx @@ -0,0 +1,21 @@ +'use client'; + +import { Button } from '@components/atoms'; +import { useRouter } from 'next/navigation'; +import { TbCalendarStar } from 'react-icons/tb'; + +export function ButtonExploreEvent() { + const router = useRouter(); + + return ( + + ); +} diff --git a/apps/landing/src/app/(frontend)/(home)/_components/hero/button-join-community.tsx b/apps/landing/src/app/(frontend)/(home)/_components/hero/button-join-community.tsx new file mode 100644 index 0000000..583d746 --- /dev/null +++ b/apps/landing/src/app/(frontend)/(home)/_components/hero/button-join-community.tsx @@ -0,0 +1,21 @@ +'use client'; + +import { Button } from '@components/atoms'; +import { useRouter } from 'next/navigation'; +import { TbLocationFilled } from 'react-icons/tb'; + +export function ButtonJoinCommunity() { + const router = useRouter(); + + return ( + + ); +} diff --git a/apps/landing/src/app/(frontend)/(home)/_components/hero/hero-badge.tsx b/apps/landing/src/app/(frontend)/(home)/_components/hero/hero-badge.tsx new file mode 100644 index 0000000..ff00e31 --- /dev/null +++ b/apps/landing/src/app/(frontend)/(home)/_components/hero/hero-badge.tsx @@ -0,0 +1,7 @@ +export function HeroBadge() { + return ( +
+ 🇮🇩 Komunitas Programmer Indonesia +
+ ); +} diff --git a/apps/landing/src/app/(frontend)/(home)/_components/hero/hero-image.tsx b/apps/landing/src/app/(frontend)/(home)/_components/hero/hero-image.tsx new file mode 100644 index 0000000..62da265 --- /dev/null +++ b/apps/landing/src/app/(frontend)/(home)/_components/hero/hero-image.tsx @@ -0,0 +1,24 @@ +'use client'; + +import { motion } from 'framer-motion'; +import Image from 'next/image'; + +export function HeroImage() { + return ( + + + + ); +} diff --git a/apps/landing/src/app/(frontend)/(home)/_components/hero/hero-main-text.tsx b/apps/landing/src/app/(frontend)/(home)/_components/hero/hero-main-text.tsx new file mode 100644 index 0000000..5962d3d --- /dev/null +++ b/apps/landing/src/app/(frontend)/(home)/_components/hero/hero-main-text.tsx @@ -0,0 +1,16 @@ +export function HeroMainText() { + return ( +
+

+ Programmer Handal
+ + Namun Enggan Ngoding + +

+

+ Bergabunglah bersama 180.000+ programmer Indonesia dan berkembang + bersama komunitas ini. +

+
+ ); +} diff --git a/apps/landing/src/app/(frontend)/(home)/_components/hero/hero-wrapper.tsx b/apps/landing/src/app/(frontend)/(home)/_components/hero/hero-wrapper.tsx new file mode 100644 index 0000000..109dc89 --- /dev/null +++ b/apps/landing/src/app/(frontend)/(home)/_components/hero/hero-wrapper.tsx @@ -0,0 +1,40 @@ +'use client'; + +import { ReactNode, useEffect, useState } from 'react'; + +export function HeroWrapper({ children }: { children: ReactNode }) { + const [scrollY, setScrollY] = useState(0); + + useEffect(() => { + const handleScroll = () => { + setScrollY(window.scrollY); + }; + + window.addEventListener('scroll', handleScroll); + return () => window.removeEventListener('scroll', handleScroll); + }, []); + + return ( +
+
+
+
+
+
+
+ {children} +
+ ); +} diff --git a/apps/landing/src/app/(frontend)/(home)/_components/hero/index.tsx b/apps/landing/src/app/(frontend)/(home)/_components/hero/index.tsx new file mode 100644 index 0000000..e59475a --- /dev/null +++ b/apps/landing/src/app/(frontend)/(home)/_components/hero/index.tsx @@ -0,0 +1,36 @@ +'use client'; + +import { motion } from 'framer-motion'; +import { ButtonExploreEvent } from './button-explore-event'; +import { ButtonJoinCommunity } from './button-join-community'; +import { HeroBadge } from './hero-badge'; +import { HeroImage } from './hero-image'; +import { HeroMainText } from './hero-main-text'; +import { HeroWrapper } from './hero-wrapper'; + +export function Hero() { + return ( + +
+
+ + + + +
+ + +
+
+ + +
+
+
+ ); +} diff --git a/apps/landing/src/app/(frontend)/(home)/page.tsx b/apps/landing/src/app/(frontend)/(home)/page.tsx index 8260224..e98d5cc 100644 --- a/apps/landing/src/app/(frontend)/(home)/page.tsx +++ b/apps/landing/src/app/(frontend)/(home)/page.tsx @@ -1,6 +1,5 @@ import { getGlobalsCallToActionSection } from '@/services/get-globals-call-to-action-section'; import { getGlobalsCommunitiesSection } from '@/services/get-globals-communitues-section'; -import { getGlobalsHeroSection } from '@/services/get-globals-hero-section'; import { getGlobalsTestimonialsSection } from '@/services/get-globals-testimonials-section'; import { CallToAction } from './_components/call-to-action'; import { Community } from './_components/community'; @@ -10,9 +9,8 @@ import { Testimonials } from './_components/testimonials'; export const revalidate = 10; // Seconds export default async function Page() { - const [heroData, communitiesData, testimonialsData, callToActionData] = + const [communitiesData, testimonialsData, callToActionData] = await Promise.all([ - getGlobalsHeroSection(), getGlobalsCommunitiesSection(), getGlobalsTestimonialsSection(), getGlobalsCallToActionSection(), @@ -20,7 +18,7 @@ export default async function Page() { return ( <> - +