Advertisement
Guest User

Untitled

a guest
Apr 5th, 2021
455
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import BaseBlockContent from "@sanity/block-content-to-react";
  2. import React from "react";
  3. import { Text, Heading, Link } from "@chakra-ui/react";
  4. import { ExternalLinkIcon } from "@chakra-ui/icons";
  5. import LinkBlock from "./linkBlock";
  6. import Headings from "./headings";
  7. import { List, ListItem, OrderedList, UnorderedList } from "@chakra-ui/react";
  8. import Code from "./code";
  9.  
  10. import { Link as NextLink } from "next/link";
  11. import Image from "../image";
  12.  
  13. // import getYouTubeId from "get-youtube-id";
  14. // import YouTube from "react-youtube";
  15.  
  16. const BlockContent = ({ blocks, heading, text }) => {
  17.   const serializers = {
  18.     list: (props) => {
  19.       const { type } = props;
  20.       const bullet = type === "bullet";
  21.       if (bullet) {
  22.         return <UnorderedList>{props.children}</UnorderedList>;
  23.       }
  24.       return <OrderedList>{props.children}</OrderedList>;
  25.     },
  26.     listItem: (props) => <ListItem>{props.children}</ListItem>,
  27.  
  28.     types: {
  29.       block(props) {
  30.         switch (props.node.style) {
  31.           case "h1":
  32.             return (
  33.               <Headings
  34.                 headingStyle={heading}
  35.                 type={props.node.style}
  36.                 children={props.children}
  37.               />
  38.             );
  39.           case "h2":
  40.             // return <Heading as="h2" {...heading}>{props.children}</Heading>;
  41.             return (
  42.               <Headings
  43.                 headingStyle={heading}
  44.                 type={props.node.style}
  45.                 children={props.children}
  46.               />
  47.             );
  48.           case "h3":
  49.             return (
  50.               <Headings
  51.                 headingStyle={heading}
  52.                 type={props.node.style}
  53.                 children={props.children}
  54.               />
  55.             );
  56.           case "h4":
  57.             return (
  58.               <Headings
  59.                 headingStyle={heading}
  60.                 type={props.node.style}
  61.                 children={props.children}
  62.               />
  63.             );
  64.           case "blockquote":
  65.             return (
  66.               <Text {...text} as="cite">
  67.                 {props.children}
  68.               </Text>
  69.             );
  70.           case "b":
  71.             return (
  72.               <Text {...text} fontWeight="bold">
  73.                 {children}
  74.               </Text>
  75.             );
  76.           case "strong":
  77.             return (
  78.               <Text {...text} fontWeight="bold">
  79.                 {children}
  80.               </Text>
  81.             );
  82.  
  83.           case "listItem":
  84.             return <BulletList mark={mark} children={children} />;
  85.           default:
  86.             return <Text {...text}>{props.children}</Text>;
  87.         }
  88.       },
  89.       youtube: ({ node }) => {
  90.         const { url } = node;
  91.         const id = getYouTubeId(url);
  92.         return <YouTube videoId={id} />;
  93.       },
  94.       figure(props) {
  95.         return <Image image={props.node} />;
  96.       },
  97.       codeExample(props) {
  98.         return <Code props={props.node} smallCode={false} />;
  99.       },
  100.       smallCode(props) {
  101.         return <Code props={props.node} smallCode={true} />;
  102.       },
  103.     },
  104.     marks: {
  105.       link: ({ mark, children }) => {
  106.         // Read https://css-tricks.com/use-target_blank/
  107.         return <LinkBlock link={mark} children={children} />;
  108.       },
  109.     },
  110.   };
  111.   return <BaseBlockContent blocks={blocks} serializers={serializers} />;
  112. };
  113. export default BlockContent;
  114.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement