У меня есть приложение для реагирования и я использую DraftJs.
На листинговых страницах мой компонент ContentCard отображает содержимое DraftJs как доступное только для чтения с помощью Editor из draft-js.
<Editor readOnly={true} editorState={contentState} />
Я хочу показать краткую версию contentState в виде краткого описания, максимум 400 символов на страницах списка. А на страницах сведений о содержимом — full contentState.
Я использовал этот метод усечения, но он обрезает только текст. Здесь я получаю блок, а затем тексты. Но как я могу получить блоки с ограничением по количеству символов.
Например; Первый блок содержит 820 символов со всеми разными словами стиля. Как я могу получить первые 400 символов со всей информацией о стилях. Я имею в виду блок из 400 символов.
truncate = (editorState, charCount) => {
const contentState = editorState.getCurrentContent();
const blocks = contentState.getBlocksAsArray();
let index = 0;
let currentLength = 0;
let isTruncated = false;
const truncatedBlocks = [];
while (!isTruncated && blocks[index]) {
const block = blocks[index];
const length = block.getLength();
if (currentLength + length > charCount) {
isTruncated = true;
const truncatedText = block
.getText()
.slice(0, charCount - currentLength);
const state = ContentState.createFromText(`${truncatedText}...`);
truncatedBlocks.push(state.getFirstBlock());
} else {
truncatedBlocks.push(block);
}
currentLength += length + 1;
index++;
}
if (isTruncated) {
const state = ContentState.createFromBlockArray(truncatedBlocks);
return EditorState.createWithContent(state);
}
return editorState;
};
Я хочу показать 400 символов жирным шрифтом, курсивом, ссылками и другими объектами и так далее.