import { __require as requireDraftKeyUtils } from './draftKeyUtils.js';

/**
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @format
 * 
 * @emails oncall+draft_js
 */

var getEntityKeyForSelection_1;
var hasRequiredGetEntityKeyForSelection;

function requireGetEntityKeyForSelection () {
	if (hasRequiredGetEntityKeyForSelection) return getEntityKeyForSelection_1;
	hasRequiredGetEntityKeyForSelection = 1;

	var _require = requireDraftKeyUtils(),
	    notEmptyKey = _require.notEmptyKey;
	/**
	 * Return the entity key that should be used when inserting text for the
	 * specified target selection, only if the entity is `MUTABLE`. `IMMUTABLE`
	 * and `SEGMENTED` entities should not be used for insertion behavior.
	 */


	function getEntityKeyForSelection(contentState, targetSelection) {
	  var entityKey;

	  if (targetSelection.isCollapsed()) {
	    var key = targetSelection.getAnchorKey();
	    var offset = targetSelection.getAnchorOffset();

	    if (offset > 0) {
	      entityKey = contentState.getBlockForKey(key).getEntityAt(offset - 1);

	      if (entityKey !== contentState.getBlockForKey(key).getEntityAt(offset)) {
	        return null;
	      }

	      return filterKey(contentState.getEntityMap(), entityKey);
	    }

	    return null;
	  }

	  var startKey = targetSelection.getStartKey();
	  var startOffset = targetSelection.getStartOffset();
	  var startBlock = contentState.getBlockForKey(startKey);
	  entityKey = startOffset === startBlock.getLength() ? null : startBlock.getEntityAt(startOffset);
	  return filterKey(contentState.getEntityMap(), entityKey);
	}
	/**
	 * Determine whether an entity key corresponds to a `MUTABLE` entity. If so,
	 * return it. If not, return null.
	 */


	function filterKey(entityMap, entityKey) {
	  if (notEmptyKey(entityKey)) {
	    var entity = entityMap.__get(entityKey);

	    return entity.getMutability() === 'MUTABLE' ? entityKey : null;
	  }

	  return null;
	}

	getEntityKeyForSelection_1 = getEntityKeyForSelection;
	return getEntityKeyForSelection_1;
}

export { requireGetEntityKeyForSelection as __require };
//# sourceMappingURL=getEntityKeyForSelection.js.map
