55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
// This plugin is responsible for adding a “Preview” tab to the document pane
|
||
// You can add any React component to `S.view.component` and it will be rendered in the pane
|
||
// and have access to content in the form in real-time.
|
||
// It's part of the Studio's “Structure Builder API” and is documented here:
|
||
// https://www.sanity.io/docs/structure-builder-reference
|
||
|
||
import { DefaultDocumentNodeResolver } from 'sanity/desk'
|
||
import authorType from 'schemas/author'
|
||
import postType from 'schemas/post'
|
||
|
||
import AuthorAvatarPreviewPane from './AuthorAvatarPreviewPane'
|
||
import PostPreviewPane from './PostPreviewPane'
|
||
|
||
export const previewDocumentNode = ({
|
||
apiVersion,
|
||
previewSecretId,
|
||
}: {
|
||
apiVersion: string
|
||
previewSecretId: `${string}.${string}`
|
||
}): DefaultDocumentNodeResolver => {
|
||
return (S, { schemaType }) => {
|
||
switch (schemaType) {
|
||
case authorType.name:
|
||
return S.document().views([
|
||
S.view.form(),
|
||
S.view
|
||
.component(({ document }) => (
|
||
<AuthorAvatarPreviewPane
|
||
name={document.displayed.name as any}
|
||
picture={document.displayed.picture as any}
|
||
/>
|
||
))
|
||
.title('Preview'),
|
||
])
|
||
|
||
case postType.name:
|
||
return S.document().views([
|
||
S.view.form(),
|
||
S.view
|
||
.component(({ document }) => (
|
||
<PostPreviewPane
|
||
slug={document.displayed.slug?.current}
|
||
apiVersion={apiVersion}
|
||
previewSecretId={previewSecretId}
|
||
/>
|
||
))
|
||
.title('Preview'),
|
||
])
|
||
|
||
default:
|
||
return null
|
||
}
|
||
}
|
||
}
|