custom-app
Version:
ITIMS��Ʒ�鿪��ר��React���,�Dz��ý��ּ�dhcc-app���������
62 lines (53 loc) • 2.04 kB
Flow
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule getEntityKeyForSelection
* @format
* @flow
*/
;
import type ContentState from './ContentState';
import type { EntityMap } from './EntityMap';
import type SelectionState from './SelectionState';
/**
* 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: ContentState, targetSelection: SelectionState): ?string {
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: EntityMap, entityKey: ?string): ?string {
if (entityKey) {
var entity = entityMap.__get(entityKey);
return entity.getMutability() === 'MUTABLE' ? entityKey : null;
}
return null;
}
module.exports = getEntityKeyForSelection;