import { PAGE_QUERY_RESULT } from "@/sanity.types"; import { type LivePerspective } from "next-sanity/live"; import Hero1 from "@/components/blocks/hero/hero-1"; import Hero2 from "@/components/blocks/hero/hero-2"; import SectionHeader from "@/components/blocks/section-header"; import SplitRow from "@/components/blocks/split/split-row"; import GridRow from "@/components/blocks/grid/grid-row"; import Carousel1 from "@/components/blocks/carousel/carousel-1"; import Carousel2 from "@/components/blocks/carousel/carousel-2"; import TimelineRow from "@/components/blocks/timeline/timeline-row"; import Cta1 from "@/components/blocks/cta/cta-1"; import LogoCloud1 from "@/components/blocks/logo-cloud/logo-cloud-1"; import FAQs from "@/components/blocks/faqs"; import FormNewsletter from "@/components/blocks/forms/newsletter"; import AllPosts from "@/components/blocks/all-posts"; type Block = NonNullable["blocks"]>[number]; type MappedBlock = Exclude; const componentMap: { [K in MappedBlock["_type"]]: React.ComponentType< Extract >; } = { "hero-1": Hero1, "hero-2": Hero2, "section-header": SectionHeader, "split-row": SplitRow, "grid-row": GridRow, "carousel-1": Carousel1, "carousel-2": Carousel2, "timeline-row": TimelineRow, "cta-1": Cta1, "logo-cloud-1": LogoCloud1, faqs: FAQs, "form-newsletter": FormNewsletter, }; export default function Blocks({ blocks, perspective, stega, }: { blocks: Block[]; perspective: LivePerspective; stega: boolean; }) { return ( <> {blocks?.map((block) => { if (block._type === "all-posts") { return ( ); } const Component = componentMap[block._type]; if (!Component) { // Fallback for development/debugging of new component types console.warn( `No component implemented for block type: ${block._type}`, ); return
; } return ; })} ); }