Я разрабатываю текстовый редактор с 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} );
}
Буду очень признателен за любую помощь или предложения.