-
Notifications
You must be signed in to change notification settings - Fork 31
Open
Labels
Description
Wondering how we would do something similar to this...
https://www.sanity.io/schemas/anchored-headings-for-portable-text-a6c70b6e - created by @kmelve
I think I understand how to create the new block definitions for h1, h2 etc..., or a complete handler like in the example above, but in the code below, I don't believe node is available from props? And I'm not sure what to return instead of return PortableText.defaultSerializers.types.block(props) (since defaultSerializers is no longer on PortableText)
const components: PortableTextComponents = {
block: props => {
const { node, children } = props
const { style, _key } = node
if (/^h\d/.test(style)) {
const HeadingTag = style
// Even though HTML5 allows id to start with a digit, we append it with a letter to avoid various JS methods to act up and make problems
const headingId = `h${_key}`
return (
<HeadingTag id={headingId}>
<a href={`#${headingId}`} aria-hidden="true" tabIndex={-1}>
#
</a>
<span>{children}</span>
</HeadingTag>
)
}
// ... you can put in other overrides here
// or return the default ones 👇
return PortableText.defaultSerializers.types.block(props)
}
}Any thoughts or suggestions greatly appreciated.