clean up block typing
This commit is contained in:
@@ -1,84 +1,168 @@
|
||||
import dynamic from "next/dynamic";
|
||||
import { RichTextBlock } from "./RichTextBlock";
|
||||
import { ImageWithTextBlock } from "./ImageWithTextBlock";
|
||||
import { HorizontalRuleBlock } from "./HorizontalRuleBlock";
|
||||
|
||||
const ImageSliderBlock = dynamic(() =>
|
||||
import("./ImageSliderBlock").then((m) => m.ImageSliderBlock)
|
||||
);
|
||||
import { FeaturedBlock } from "./FeaturedBlock";
|
||||
import type {
|
||||
AccordionBlockFragment,
|
||||
ContactEntityBlockFragment,
|
||||
ContactListBlockFragment,
|
||||
ContactSectionBlockFragment,
|
||||
ContactSubsectionBlockFragment,
|
||||
EmbedBlockFragment,
|
||||
FactBoxBlockFragment,
|
||||
FeaturedBlockFragment,
|
||||
HorizontalRuleBlockFragment,
|
||||
ImageSliderBlockFragment,
|
||||
ImageWithTextBlockFragment,
|
||||
PageSectionBlockFragment,
|
||||
RichTextBlockFragment,
|
||||
ScheduleBlockFragment,
|
||||
} from "@/gql/graphql";
|
||||
import { AccordionBlock } from "./AccordionBlock";
|
||||
import { ContactEntityBlock } from "./ContactEntityBlock";
|
||||
import { ContactListBlock } from "./ContactListBlock";
|
||||
import { ContactSectionBlock, ContactSubsectionBlock } from "./ContactSection";
|
||||
import { EmbedBlock } from "./EmbedBlock";
|
||||
import { FactBoxBlock } from "./FactBoxBlock";
|
||||
import { ScheduleBlock } from "./ScheduleBlock";
|
||||
import { PageSectionBlock, PageSectionNavigationBlock } from "./PageSection";
|
||||
import { ContactSectionBlock, ContactSubsectionBlock } from "./ContactSection";
|
||||
import { ContactListBlock } from "./ContactListBlock";
|
||||
import { ContactEntityBlock } from "./ContactEntityBlock";
|
||||
import { FeaturedBlock } from "./FeaturedBlock";
|
||||
import { HorizontalRuleBlock } from "./HorizontalRuleBlock";
|
||||
import { ImageWithTextBlock } from "./ImageWithTextBlock";
|
||||
import { NeufAddressSectionBlock } from "./NeufAddressSectionBlock";
|
||||
import { OpeningHoursSectionBlock } from "./OpeningHoursSectionBlock";
|
||||
import { PageSectionBlock, PageSectionNavigationBlock } from "./PageSection";
|
||||
import { RichTextBlock } from "./RichTextBlock";
|
||||
import { ScheduleBlock } from "./ScheduleBlock";
|
||||
|
||||
export const Blocks = ({ blocks, pageContent }: { blocks: any, pageContent?: boolean }) => {
|
||||
const sections = blocks.filter(
|
||||
(block: any) => block?.__typename === "PageSectionBlock"
|
||||
);
|
||||
const ImageSliderBlock = dynamic(() =>
|
||||
import("./ImageSliderBlock").then((m) => m.ImageSliderBlock),
|
||||
);
|
||||
|
||||
return blocks.map((block: any) => {
|
||||
switch (block?.blockType) {
|
||||
export type StreamFieldBlock = {
|
||||
id?: string | null;
|
||||
blockType?: string;
|
||||
__typename?: string;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
|
||||
export const Blocks = ({
|
||||
blocks,
|
||||
pageContent,
|
||||
}: {
|
||||
blocks?: Array<StreamFieldBlock | null> | null;
|
||||
pageContent?: boolean;
|
||||
}) => {
|
||||
const sections = (blocks ?? []).filter(
|
||||
(block) => block?.__typename === "PageSectionBlock",
|
||||
) as PageSectionBlockFragment[];
|
||||
|
||||
return (blocks ?? []).map((block) => {
|
||||
if (!block) {
|
||||
return null;
|
||||
}
|
||||
switch (block.blockType) {
|
||||
case "RichTextBlock":
|
||||
return <RichTextBlock key={block.id} block={block} />;
|
||||
break;
|
||||
return (
|
||||
<RichTextBlock
|
||||
key={block.id}
|
||||
block={block as RichTextBlockFragment}
|
||||
/>
|
||||
);
|
||||
case "ImageWithTextBlock":
|
||||
return <ImageWithTextBlock key={block.id} block={block} />;
|
||||
break;
|
||||
case "EmbedBlock":
|
||||
return <EmbedBlock key={block.id} block={block} />;
|
||||
break;
|
||||
return (
|
||||
<ImageWithTextBlock
|
||||
key={block.id}
|
||||
block={block as ImageWithTextBlockFragment}
|
||||
/>
|
||||
);
|
||||
case "EmbedBlock":
|
||||
return (
|
||||
<EmbedBlock key={block.id} block={block as EmbedBlockFragment} />
|
||||
);
|
||||
case "ImageSliderBlock":
|
||||
return <ImageSliderBlock key={block.id} block={block} pageContent />;
|
||||
break;
|
||||
return (
|
||||
<ImageSliderBlock
|
||||
key={block.id}
|
||||
block={block as ImageSliderBlockFragment}
|
||||
pageContent
|
||||
/>
|
||||
);
|
||||
case "HorizontalRuleBlock":
|
||||
return <HorizontalRuleBlock key={block.id} block={block} />;
|
||||
break;
|
||||
return (
|
||||
<HorizontalRuleBlock
|
||||
key={block.id}
|
||||
block={block as HorizontalRuleBlockFragment}
|
||||
/>
|
||||
);
|
||||
case "FeaturedBlock":
|
||||
return <FeaturedBlock key={block.id} block={block} />;
|
||||
break;
|
||||
return (
|
||||
<FeaturedBlock
|
||||
key={block.id}
|
||||
block={block as FeaturedBlockFragment}
|
||||
/>
|
||||
);
|
||||
case "AccordionBlock":
|
||||
return <AccordionBlock key={block.id} block={block} />;
|
||||
break;
|
||||
return (
|
||||
<AccordionBlock
|
||||
key={block.id}
|
||||
block={block as AccordionBlockFragment}
|
||||
/>
|
||||
);
|
||||
case "FactBoxBlock":
|
||||
return <FactBoxBlock key={block.id} block={block} />;
|
||||
break;
|
||||
return (
|
||||
<FactBoxBlock key={block.id} block={block as FactBoxBlockFragment} />
|
||||
);
|
||||
case "ScheduleBlock":
|
||||
return <ScheduleBlock key={block.id} block={block} />;
|
||||
break;
|
||||
return (
|
||||
<ScheduleBlock
|
||||
key={block.id}
|
||||
block={block as ScheduleBlockFragment}
|
||||
/>
|
||||
);
|
||||
case "PageSectionBlock":
|
||||
return <PageSectionBlock key={block.id} block={block} />;
|
||||
break;
|
||||
return (
|
||||
<PageSectionBlock
|
||||
key={block.id}
|
||||
block={block as PageSectionBlockFragment}
|
||||
/>
|
||||
);
|
||||
case "PageSectionNavigationBlock":
|
||||
return <PageSectionNavigationBlock sections={sections} />;
|
||||
break;
|
||||
return (
|
||||
<PageSectionNavigationBlock key={block.id} sections={sections} />
|
||||
);
|
||||
case "ContactSectionBlock":
|
||||
return <ContactSectionBlock key={block.id} block={block} />;
|
||||
break;
|
||||
return (
|
||||
<ContactSectionBlock
|
||||
key={block.id}
|
||||
block={block as ContactSectionBlockFragment}
|
||||
/>
|
||||
);
|
||||
case "ContactSubsectionBlock":
|
||||
return <ContactSubsectionBlock key={block.id} block={block} />;
|
||||
break;
|
||||
return (
|
||||
<ContactSubsectionBlock
|
||||
key={block.id}
|
||||
block={block as ContactSubsectionBlockFragment}
|
||||
/>
|
||||
);
|
||||
case "ContactListBlock":
|
||||
return <ContactListBlock key={block.id} block={block} />;
|
||||
break;
|
||||
return (
|
||||
<ContactListBlock
|
||||
key={block.id}
|
||||
block={block as ContactListBlockFragment}
|
||||
/>
|
||||
);
|
||||
case "ContactEntityBlock":
|
||||
return <ContactEntityBlock key={block.id} block={block} />;
|
||||
break;
|
||||
return (
|
||||
<ContactEntityBlock
|
||||
key={block.id}
|
||||
block={block as ContactEntityBlockFragment}
|
||||
/>
|
||||
);
|
||||
case "NeufAddressSectionBlock":
|
||||
return <NeufAddressSectionBlock />;
|
||||
break;
|
||||
return <NeufAddressSectionBlock key={block.id} />;
|
||||
case "OpeningHoursSectionBlock":
|
||||
return <OpeningHoursSectionBlock />;
|
||||
break;
|
||||
return <OpeningHoursSectionBlock key={block.id} />;
|
||||
default:
|
||||
console.log("unsupported block", block);
|
||||
return <div>Unsupported block type {block?.blockType}</div>;
|
||||
return (
|
||||
<div key={block.id}>Unsupported block type {block.blockType}</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,7 +1,13 @@
|
||||
import { Blocks } from "@/components/blocks/Blocks";
|
||||
import { Blocks, type StreamFieldBlock } from "@/components/blocks/Blocks";
|
||||
import styles from './pageContent.module.scss';
|
||||
|
||||
export const PageContent = ({ blocks, className }: { blocks: any; className?: string }) => {
|
||||
export const PageContent = ({
|
||||
blocks,
|
||||
className,
|
||||
}: {
|
||||
blocks?: Array<StreamFieldBlock | null> | null;
|
||||
className?: string;
|
||||
}) => {
|
||||
return (
|
||||
<div className={`${styles.pageContent}${className ? ` ${className}` : ''}`}>
|
||||
<Blocks blocks={blocks} pageContent />
|
||||
|
||||
Reference in New Issue
Block a user