Я разрабатываю редактор форматированного текста с помощью Draft.js (и это здорово!). Следующий код, который позволяет пользователю редактировать ссылку, логически работает нормально, но меня не устраивает пользовательский интерфейс.
Если пользователь выбирает часть ссылки и запускает этот код, этот код разделяет эту ссылку на несколько ссылок, что НЕ нужно пользователю.
Например, если этап «купить эту книгу» связан с URL-A, а пользователь выбирает «купить эту» и меняет его на URL-B, эта часть будет связана с URL-B, но «книга» по-прежнему связан с URL-A.
В идеале, когда пользователь выбирает часть связанного текста, я хотел бы автоматически расширить выделение на всю ссылку, а затем выполнить этот код.
Я, однако, не могу понять, как это сделать (разверните выделение на всю ссылку).
editLink = () => {
const { editorState } = this.state;
const selection = editorState.getSelection();
if (selection.isCollapsed()) {
return;
}
let url = ''; // default
const content = editorState.getCurrentContent();
const startKey = selection.getStartKey();
const startOffset = selection.getStartOffset();
const blockWithLinkAtBeginning = content.getBlockForKey(startKey);
const linkKey = blockWithLinkAtBeginning.getEntityAt(startOffset);
if (linkKey) {
const linkInstance = content.getEntity(linkKey);
url = linkInstance.getData().url;
}
let link = window.prompt("Paste the link", url);
if (!link) {
console.log("removing link");
const newEditorState = RichUtils.toggleLink(editorState, selection, null);
this.setState({ editorState: newEditorState });
return;
}
console.log("adding a link", link);
const contentWithEntity = content.createEntity('LINK', 'MUTABLE', { url: link });
const entityKey = contentWithEntity.getLastCreatedEntityKey();
const newEditorState = EditorState.set(editorState, { currentContent: contentWithEntity });
const yetNewEditorState = RichUtils.toggleLink(newEditorState, newEditorState.getSelection(), entityKey);
this.setState({ editorState: yetNewEditorState} );
}
Буду очень признателен за любую помощь или предложения.