diff --git a/apps/landing/public/hero.jpeg b/apps/landing/public/hero.jpeg deleted file mode 100644 index 5e4ccd0..0000000 Binary files a/apps/landing/public/hero.jpeg and /dev/null differ diff --git a/apps/landing/src/app/(frontend)/_components/hero.tsx b/apps/landing/src/app/(frontend)/_components/hero.tsx index a1cc87b..5463b6d 100644 --- a/apps/landing/src/app/(frontend)/_components/hero.tsx +++ b/apps/landing/src/app/(frontend)/_components/hero.tsx @@ -6,13 +6,22 @@ import { SparklesIcon, UsersIcon, } from '@imphnen-frontend-service/shadcn-ui/atoms'; +import { formatCMSImageDataToMedia } from 'apps/landing/src/lib/format'; import { HeroSection } from 'apps/landing/src/payload-types'; 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 } = props; + const { + badgeText, + buttons, + description, + highlight, + title, + stats, + heroImage, + } = props; const [scrollY, setScrollY] = useState(0); @@ -54,7 +63,7 @@ export function Hero(props: HeroSection) { animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.5 }} > -
+
{badgeText}
@@ -125,13 +134,19 @@ font-bold text-black hover:text-white cursor-pointer"
- IMPHNEN Programming Community + {(() => { + const media = formatCMSImageDataToMedia(heroImage); + if (!media) return null; + return ( + {media.alt} + ); + })()}
diff --git a/apps/landing/src/app/(payload)/admin/importMap.js b/apps/landing/src/app/(payload)/admin/importMap.js index fad9d10..bd56203 100644 --- a/apps/landing/src/app/(payload)/admin/importMap.js +++ b/apps/landing/src/app/(payload)/admin/importMap.js @@ -1,6 +1,5 @@ -import { S3ClientUploadHandler as S3ClientUploadHandler_f97aa6c64367fa259c5bc0567239ef24 } from '@payloadcms/storage-s3/client'; +import { S3ClientUploadHandler as S3ClientUploadHandler_f97aa6c64367fa259c5bc0567239ef24 } from '@payloadcms/storage-s3/client' export const importMap = { - '@payloadcms/storage-s3/client#S3ClientUploadHandler': - S3ClientUploadHandler_f97aa6c64367fa259c5bc0567239ef24, -}; + "@payloadcms/storage-s3/client#S3ClientUploadHandler": S3ClientUploadHandler_f97aa6c64367fa259c5bc0567239ef24 +} diff --git a/apps/landing/src/collections/HeroSection.ts b/apps/landing/src/collections/HeroSection.ts index 33c6490..6ba0109 100644 --- a/apps/landing/src/collections/HeroSection.ts +++ b/apps/landing/src/collections/HeroSection.ts @@ -4,6 +4,13 @@ export const HeroSection: GlobalConfig = { slug: 'hero-section', label: 'Hero Section', fields: [ + { + name: 'heroImage', + label: 'Hero Image', + type: 'upload', + relationTo: 'media', + required: true, + }, { name: 'badgeText', label: 'Badge Text', diff --git a/apps/landing/src/lib/format.ts b/apps/landing/src/lib/format.ts new file mode 100644 index 0000000..5c0dd9e --- /dev/null +++ b/apps/landing/src/lib/format.ts @@ -0,0 +1,10 @@ +import { Media } from '../payload-types'; + +export function formatCMSImageDataToMedia( + image: number | Media | null | undefined +): Media | null { + if (image && typeof image === 'object' && 'url' in image) { + return image as Media; + } + return null; +} diff --git a/apps/landing/src/payload-types.ts b/apps/landing/src/payload-types.ts index f9d36fa..3e3c26a 100644 --- a/apps/landing/src/payload-types.ts +++ b/apps/landing/src/payload-types.ts @@ -285,6 +285,7 @@ export interface PayloadMigrationsSelect { */ export interface HeroSection { id: number; + heroImage: number | Media; badgeText: string; title: string; highlight: string; @@ -351,6 +352,7 @@ export interface CommunitiesSection { * via the `definition` "hero-section_select". */ export interface HeroSectionSelect { + heroImage?: T; badgeText?: T; title?: T; highlight?: T;