WordPressBlocksProvider
WordPressBlocksProvider
is a React Context Provider that exposes the data that WordPressBlocksViewer
needs to render WordPress blocks, namely which blocks have been defined as a part of your Faust app.
Usage
The below example shows how you can setup the WordPressBlocksProvider
in your Faust app's _app.js
file:
import "../faust.config";
import React from "react";
import { useRouter } from "next/router";
import { WordPressBlocksProvider } from "@faustwp/blocks";
import { FaustProvider } from "@faustwp/core";
import blocks from "../wp-blocks/index.js";
export default function MyApp({ Component, pageProps }) {
const router = useRouter();
return (
<FaustProvider pageProps={pageProps}>
<WordPressBlocksProvider
config={{
blocks,
}}
>
{" "}
<Component {...pageProps} key={router.asPath} />
</WordPressBlocksProvider>{" "}
</FaustProvider>
);
}
Props
Below are WordPressBlocksProvider
's props defined as a TypeScript interface:
interface WordPressBlocksProviderProps {
config: {
blocks?: { [key: string]: WordPressBlock };
theme?: BlocksTheme;
};
}
The config
prop accepts a blocks
property, which is an map of block names to WordPressBlock
components:
type WordPressBlock = React.FC & {
displayName?: string;
name?: string;
config?: {
name: string;
};
};
The blocks
property is typically set to a path of wp-blocks/index.js
:
import { WordPressBlocksProvider } from "@faustwp/blocks";
import blocks from "../wp-blocks/index.js";
<WordPressBlocksProvider
config={{
blocks,
}}
/>;
The theme property is an optional parameter that is used to assign a ThemeProvider for a theme.json and will be available in the useBlocksTheme
hook. You will need to use the fromThemeJson
helper to transform a theme.json
object into the BlocksTheme
type:
import { WordPressBlocksProvider } from "@faustwp/blocks";
import blocks from "../wp-blocks/index.js";
import themeJson from "../theme.json";
<WordPressBlocksProvider
config={{
blocks,
theme: fromThemeJson(themeJson),
}}
/>;