@dotcms/react
Version:
Official React Components library to render a dotCMS page.
28 lines (27 loc) • 1.31 kB
TypeScript
import { ReactNode } from 'react';
import { DotCMSBasicContentlet, DotCMSPageAssetContainers } from '@dotcms/types';
/**
* Builds a slots map of pre-rendered server component nodes keyed by contentlet identifier.
*
* Use this in Next.js server components to render async server components
* (e.g., components that fetch data) within a DotCMS page layout. Pass the
* resulting map to `DotCMSLayoutBody` via the `slots` prop.
*
* Each component is awaited, so the returned record contains resolved `ReactNode`
* values — safe to pass as props to client components without `React.use()`.
*
* @public
* @param containers - The containers map from `pageAsset.containers`
* @param serverComponents - A map of content type names to async server components
* @returns A promise resolving to a record mapping contentlet identifiers to pre-rendered ReactNodes
*
* @example
* ```tsx
* const slots = await buildSlots(pageContent.pageAsset.containers, {
* BlogList: BlogListContainer,
* });
*
* <DotCMSLayoutBody page={pageAsset} components={pageComponents} slots={slots} />
* ```
*/
export declare function buildSlots(containers: DotCMSPageAssetContainers, serverComponents: Record<string, (props: DotCMSBasicContentlet) => ReactNode | Promise<ReactNode>>): Promise<Record<string, ReactNode>>;