import { createElement, RawHTML } from '@wordpress/element' import { withSelect } from '@wordpress/data' import { __ } from 'ct-i18n' import { useEntityProp } from '@wordpress/core-data' const strippedRenderedExcerpt = (content) => { if (!content) return '' const document = new window.DOMParser().parseFromString( content, 'text/html' ) return document.body.textContent || document.body.innerText || '' } const ExcerptPreview = ({ attributes: { excerpt_length }, postId, postType, fallback, }) => { const [ rawExcerpt, setExcerpt, { rendered: renderedExcerpt, protected: isProtected } = {}, ] = useEntityProp('postType', postType, 'excerpt', postId) const [rawContent, setContent, { rendered: renderedContent } = {}] = useEntityProp('postType', postType, 'content', postId) const rawOrRenderedExcerpt = ( rawExcerpt || strippedRenderedExcerpt(renderedExcerpt) || strippedRenderedExcerpt(renderedContent) ).trim() let trimmedExcerpt = rawOrRenderedExcerpt .split(' ', excerpt_length) .join(' ') const maybeMore = trimmedExcerpt !== rawOrRenderedExcerpt ? '...' : '' if (!trimmedExcerpt) { return fallback } return ( {trimmedExcerpt} {maybeMore} ) } export default ExcerptPreview