function removeTextWithStrategy(
  editorState: EditorState,
  strategy: (editorState: EditorState) => SelectionState,
  direction: DraftRemovalDirection,
): ContentState {
  const selection = editorState.getSelection();
  const content = editorState.getCurrentContent();
  let target = selection;
  const anchorKey = selection.getAnchorKey();
  const focusKey = selection.getFocusKey();
  const anchorBlock = content.getBlockForKey(anchorKey);
  if (experimentalTreeDataSupport) {
    if (direction === 'forward') {
      if (anchorKey !== focusKey) {
        // For now we ignore forward delete across blocks,
        // if there is demand for this we will implement it.
        return content;
      }
    }
  }
  if (selection.isCollapsed()) {
    if (direction === 'forward') {
      if (editorState.isSelectionAtEndOfContent()) {
        return content;
      }
      if (experimentalTreeDataSupport) {
        const isAtEndOfBlock =
          selection.getAnchorOffset() ===
          content.getBlockForKey(anchorKey).getLength();
        if (isAtEndOfBlock) {
          const anchorBlockSibling = content.getBlockForKey(
            anchorBlock.nextSibling,
          );
          if (!anchorBlockSibling || anchorBlockSibling.getLength() === 0) {
            // For now we ignore forward delete at the end of a block,
            // if there is demand for this we will implement it.
            return content;
          }
        }
      }
    } else if (editorState.isSelectionAtStartOfContent()) {
      return content;
    }

    target = strategy(editorState);
    if (target === selection) {
      return content;
    }
  }
  return DraftModifier.removeRange(content, target, direction);
}
For a collapsed selection state, remove text based on the specified strategy.
If the selection state is not collapsed, remove the entire selected range.