Skip to content

Instantly share code, notes, and snippets.

@mzbac
Created August 24, 2016 00:49
Show Gist options
  • Save mzbac/f5eb7885dbaf0e76404a5a2c2058b937 to your computer and use it in GitHub Desktop.
Save mzbac/f5eb7885dbaf0e76404a5a2c2058b937 to your computer and use it in GitHub Desktop.
insertMedia(type, src, cb) {
let editorState = this.state.editorState
let contentState = editorState.getCurrentContent();
let selectionState = editorState.getSelection();
let afterRemoval = Modifier.removeRange(contentState, selectionState, 'backward');
let targetSelection = afterRemoval.getSelectionAfter();
let afterSplit = Modifier.splitBlock(afterRemoval, targetSelection);
let insertionTarget = afterSplit.getSelectionAfter();
let asMedia = Modifier.setBlockType(afterSplit, insertionTarget, `media-${type}`);
let entityKey = Entity.create('TOKEN', 'IMMUTABLE', {
src: src
});
let charData = CharacterMetadata.create({entity: entityKey});
let fragmentArray = [
new ContentBlock({
key: genKey(),
type: `media-${type}`,
text: '',
characterList: List(Repeat(charData, 1))
}),
new ContentBlock({
key: genKey(),
type: 'unstyled',
text: '',
characterList: List()
})
];
let fragment = BlockMapBuilder.createFromArray(fragmentArray);
let withMedia = Modifier.replaceWithFragment(asMedia, insertionTarget, fragment);
let newContent = withMedia.merge({
selectionBefore: selectionState,
selectionAfter: withMedia.getSelectionAfter().set('hasFocus', true)
});
this.onChange(EditorState.push(editorState, newContent, 'insert-fragment'), cb);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment