function editOnBlur()

in src/component/handlers/edit/editOnBlur.js [22:56]


function editOnBlur(editor: DraftEditor, e: SyntheticEvent<HTMLElement>): void {
  // In a contentEditable element, when you select a range and then click
  // another active element, this does trigger a `blur` event but will not
  // remove the DOM selection from the contenteditable.
  // This is consistent across all browsers, but we prefer that the editor
  // behave like a textarea, where a `blur` event clears the DOM selection.
  // We therefore force the issue to be certain, checking whether the active
  // element is `body` to force it when blurring occurs within the window (as
  // opposed to clicking to another tab or window).
  const {ownerDocument} = e.currentTarget;
  if (
    !Boolean(editor.props.preserveSelectionOnBlur) &&
    getActiveElement(ownerDocument) === ownerDocument.body
  ) {
    const selection: SelectionObject = ownerDocument.defaultView.getSelection();
    const editorNode = editor.editor;
    if (
      selection.rangeCount === 1 &&
      containsNode(editorNode, selection.anchorNode) &&
      containsNode(editorNode, selection.focusNode)
    ) {
      selection.removeAllRanges();
    }
  }

  const editorState = editor._latestEditorState;
  const currentSelection = editorState.getSelection();
  if (!currentSelection.getHasFocus()) {
    return;
  }

  const selection = currentSelection.set('hasFocus', false);
  editor.props.onBlur && editor.props.onBlur(e);
  editor.update(EditorState.acceptSelection(editorState, selection));
}