@dotcms/react
Version:
Official React Components library to render a dotCMS page.
45 lines (44 loc) • 2.1 kB
TypeScript
import { ReactNode } from 'react';
import { DotCMSBasicContentlet, DotCMSPageAsset, DotCMSPageRendererMode } from '@dotcms/types';
export interface DotCMSLayoutBodyProps<TContentlet extends DotCMSBasicContentlet = DotCMSBasicContentlet> {
page: DotCMSPageAsset;
components: {
[key: string]: React.ComponentType<TContentlet> | React.ComponentType<any>;
};
mode?: DotCMSPageRendererMode;
/**
* Pre-rendered server component nodes keyed by contentlet identifier.
* Use this to render Next.js async server components within the layout.
* Build this map using the `buildSlots` helper.
*
* @example
* ```tsx
* import { buildSlots } from '@dotcms/react';
*
* const slots = buildSlots(pageContent.pageAsset.containers, {
* BlogList: BlogListContainer,
* });
*
* <DotCMSLayoutBody page={pageAsset} components={pageComponents} slots={slots} />
* ```
*/
slots?: Record<string, ReactNode>;
}
/**
* DotCMSLayoutBody component renders the layout body for a DotCMS page.
*
* It utilizes the dotCMS page asset's layout body to render the page body.
* If the layout body does not exist, it renders an error message in the mode is `development`.
*
* @public
* @component
* @param {Object} props - Component properties.
* @param {DotCMSPageAsset} props.page - The DotCMS page asset containing the layout information.
* @param {Record<string, React.ComponentType<DotCMSContentlet>>} [props.components] - mapping of custom components for content rendering.
* @param {DotCMSPageRendererMode} [props.mode='production'] - The renderer mode; defaults to 'production'. Alternate modes might trigger different behaviors.
* @param {Record<string, ReactNode>} [props.slots] - Pre-rendered server component nodes keyed by contentlet identifier.
*
* @returns {JSX.Element} The rendered DotCMS page body or an error message if the layout body is missing.
*
*/
export declare const DotCMSLayoutBody: ({ page, components, mode, slots }: DotCMSLayoutBodyProps) => import("react/jsx-runtime").JSX.Element;