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 ( <> - +