blocks-renderer.tsx (1050B)
1 import type { Page, PageBlocks } from "../tina/__generated__/types"; 2 import { Content } from "./blocks/content"; 3 import { Features } from "./blocks/features"; 4 import { Hero } from "./blocks/hero"; 5 import { Testimonial } from "./blocks/testimonial"; 6 import { tinaField } from "tinacms/dist/react"; 7 8 export const Blocks = (props: Omit<Page, "id" | "_sys" | "_values">) => { 9 return ( 10 <> 11 {props.blocks 12 ? props.blocks.map(function (block, i) { 13 return ( 14 <div key={i} data-tina-field={tinaField(block)}> 15 <Block {...block} /> 16 </div> 17 ); 18 }) 19 : null} 20 </> 21 ); 22 }; 23 24 const Block = (block: PageBlocks) => { 25 switch (block.__typename) { 26 case "PageBlocksContent": 27 return <Content data={block} />; 28 case "PageBlocksHero": 29 return <Hero data={block} />; 30 case "PageBlocksFeatures": 31 return <Features data={block} />; 32 case "PageBlocksTestimonial": 33 return <Testimonial data={block} />; 34 default: 35 return null; 36 } 37 };