--- group: Customization title: Creating Custom Previews weight: 50 --- The Static CMS exposes a `window.CMS` global object that you can use to register custom previews for an entire collection (or file within a file collection) via `registerPreviewTemplate`. ### React Components Inline The `registerPreviewTemplate` requires you to provide a React component. If you have a build process in place for your project, it is possible to integrate with this build process. However, although possible, it may be cumbersome or even impractical to add a React build phase. For this reason, Static CMS exposes some constructs globally to allow you to create components inline: `h` (alias for React.createElement) as well some basic hooks (`useState`, `useMemo`, `useEffect`, `useCallback`). **NOTE**: `createClass` is still provided, allowing for the creation of react class components. However it has now been deprecated and will be removed in `v2.0.0`. ## Params | Param | Type | Description | | --------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | name | string | The name of the collection (or file for file collections) which this preview component will be used for
| | react_component | [React Function Component](https://reactjs.org/docs/components-and-props.html) | A React functional component that renders the collection data. | The following parameters will be passed to your `react_component` during render: | Param | Type | Description | | ---------- | -------------- | ---------------------------------------------------------------------------------------------------- | | entry | object | Object with a `data` field that contains the current value of all widgets in the editor | | document | Document | The document object the preview is within. If rendered with a frame, it will be the frame's document | | window | Window | The window object the preview is within. If rendered with a frame, it will be the frame's window | | getAsset | Async function | Function that given a url returns (as a promise) a loaded asset | | widgetFor | Function | Given a field name, returns the rendered preview of that field's widget and value | | widgetsFor | Function | Given a field name, returns the rendered previews of that field's nested child widgets and values | ### Example ```html ``` ### Lists and Objects The API for accessing the individual fields of list- and object-type entries is similar to the API for accessing fields in standard entries, but there are a few key differences. Access to these nested fields is facilitated through the `widgetsFor` function, which is passed to the preview template component during render. **List Example:** ```html ``` **Object Example:** ```html ```