Render Blocks
uifoundry/renderblocksFreeComponent
Custom component to render PayloadCMS Blocks
Live preview
live · rendered by the registry
Rendered by uifoundry on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://uifoundry.dev/r/renderblocks.jsonSource
1import type { User as PayloadUser } from "~/payload-types";2import React, { type ComponentPropsWithRef, type ElementType } from "react";3import { type Block } from "payload";45type Params = Promise<{ slug: string }>;6type PageParams = Partial<Awaited<Params>>;7type SearchParams = Promise<Record<string, string | string[] | undefined>>;8type PageSearchParams = Partial<Awaited<SearchParams>>;910export interface RenderBlocksContext extends ComponentPropsWithRef<"div"> {11 blocks: Block[] | unknown[];12 blockComponents: Record<string, ElementType>;13 user?: PayloadUser | null;14 params?: PageParams;15 searchParams?: PageSearchParams;16 mobileView?: boolean;17}1819const RenderBlocks: React.FC<RenderBlocksContext> = (props) => {20 const {21 blocks,22 blockComponents,23 params,24 searchParams,25 user,26 mobileView = false,27 ...divProps28 } = props;29 const hasBlocks = blocks && Array.isArray(blocks) && blocks.length > 0;3031 if (blocks.length && hasBlocks) {32 return (33 blocks34 // @ts-expect-error check if block has custom 'hidden' field35 .filter((b) => !Boolean(b?.hidden))36 .map((block, index) => {37 // eslint-disable-next-line @typescript-eslint/ban-ts-comment38 // @ts-expect-error39 const { blockName, blockType, key: blockKey } = block;4041 if (blockType && blockType in blockComponents) {42 // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access43 const Block = blockComponents[blockType];4445 if (Block) {46 return (47 <Block48 // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment49 id={blockName}50 params={params}51 searchParams={searchParams}52 user={user}53 // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment54 key={blockKey ?? index}55 block={block}56 index={index}57 mobileView={mobileView}58 {...(block as Block)}59 {...divProps}60 />61 );62 }63 }64 return null;65 })66 );67 }6869 return null;70};7172export default RenderBlocks;
What it pulls in
npm packages
Files it writes
More from uifoundry
All 54 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Animated Groupanimated-group | uifoundry | Components | Free | 2 deps | |
| Buttonbutton | uifoundry | Components | Free | 3 deps | |
| Call To Action Pair Fieldcall-to-action-pair-field | uifoundry | Components | Free | 3 deps | |
| Cardcard | uifoundry | Components | Free | 1 dep | |
| Description Fielddescription-field | uifoundry | Components | Free | 2 deps | |
| Flickering Gridflickering-grid | uifoundry | Components | Free | 1 dep | |
| Header Fieldheader-field | uifoundry | Components | Free | 2 deps | |
| Icon Componenticon | uifoundry | Components | Free | 2 deps |
