This plugin is a custom input component which converts HTML into Portable Text on the fly.
Sanity is using the Portable Text-format whenever you use the block-type.
In Sanity-Studio there is a WYSIWYG-Block Content Editor which makes editing very convenient. But if you are just migrating to sanity and your source is HTML, this plugin may come in handy.
Your schema needs to define at least one block-type field to allow persisting to your schema.
Install the Sanity Plugin HTML to Portable Text with the sanity CLI
sanity install sanity-plugin-html-to-portable-textJust add a field of htmlPortableText-type to your fields-array.
fields: [
{
name: 'htmlToArticleBody',
title: 'HTML to Article Body',
type: 'htmlToPortableText',
{
name: 'articleBody',
title: 'Article Body',
type: 'array',
of: [ { type: 'block' } ]
}
]If you have multiple block-type fields, you may want to have one selected as the default.
options: { defaultrefblock: '<name>' },| Parameter | Type | Description | Default |
|---|---|---|---|
defaultrefblock |
string |
Optional. Name of referenced block | First block-type as defined in your schema |
fields: [
{
name: 'htmlToArticleBody',
title: 'HTML to Article Body',
type: 'htmlToPortableText',
// no need to reference the block
// all block-types get picked up automatically
// but you can specify which one is pre-selected
{
name: 'articleBody',
title: 'Article Body',
type: 'array',
of: [
{
type: 'block',
styles: [
// enable only below styles
{ title: 'Unstyled', value: 'normal' },
{ title: 'H1', value: 'h1' },
{ title: 'H2', value: 'h2' },
]
}
]
}
]This example show how you may radically limit the available styles in Portable Text.
fields: [
{
name: 'htmlToArticleBody',
title: 'HTML to Article Body',
type: 'htmlToPortableText',
},
{
name: 'articleBody',
title: 'Article Body',
type: 'array',
of: [
{
type: 'block',
// Disallow all styles
styles: [],
// Disallow all lists
lists: [],
marks: {
// Only allow these decorators
decorators: [
{ title: 'Bold', value: 'strong' },
{
title: 'Superscript',
value: 'sup',
// Define custom icon and renderer for the blockEditor
blockEditor: {
icon: () => <div>⤴</div>,
render: ({ children }) => <span><sup>{children}</sup></span>
}
},
],
// disallow links
annotations: []
}
]
}
]- provides a custom input component
- converts
HTMLinto Portable Text on the fly - introspects the
schemaof the parent document and finds allblock-type fields - persist converted
HTMLto selectedblock-type field of yourschema
