@portabletext/toolkit
Version:
Toolkit of handy utility functions for dealing with Portable Text
25 lines (23 loc) • 876 B
text/typescript
import {isPortableTextToolkitSpan, isPortableTextToolkitTextNode} from './asserters'
import type {ToolkitNestedPortableTextSpan} from './types'
/**
* Returns the plain-text representation of a
* {@link ToolkitNestedPortableTextSpan | toolkit-specific Portable Text span}.
*
* Useful if you have a subset of nested nodes and want the text from just those,
* instead of for the entire Portable Text block.
*
* @param span - Span node to get text from (Portable Text toolkit specific type)
* @returns The plain-text version of the span
*/
export function spanToPlainText(span: ToolkitNestedPortableTextSpan): string {
let text = ''
span.children.forEach((current) => {
if (isPortableTextToolkitTextNode(current)) {
text += current.text
} else if (isPortableTextToolkitSpan(current)) {
text += spanToPlainText(current)
}
})
return text
}