@atlaskit/renderer
Version:
Renderer component
47 lines (45 loc) • 2.06 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import React, { useContext } from 'react';
import { useUserSelectionRange } from '../hooks/user-selection';
import { SelectionInlineCommentMounter } from './mounter';
import { RendererContext as ActionsContext } from '../../RendererActionsContext';
export var SelectionRangeValidator = function SelectionRangeValidator(props) {
var selectionComponent = props.selectionComponent,
rendererRef = props.rendererRef,
createAnalyticsEvent = props.createAnalyticsEvent;
var actions = useContext(ActionsContext);
var _useUserSelectionRang = useUserSelectionRange({
rendererRef: rendererRef
}),
_useUserSelectionRang2 = _slicedToArray(_useUserSelectionRang, 4),
type = _useUserSelectionRang2[0],
range = _useUserSelectionRang2[1],
draftRange = _useUserSelectionRang2[2],
clearRange = _useUserSelectionRang2[3];
var selectionRange = type === 'selection' ? range : null;
// !!! the draft range will become invalid after the mark DOM is inserted
if (!selectionRange && !draftRange) {
return null;
}
var documentPosition = actions.getPositionFromRange(range);
// This property is drilled down to consumers when a new range is selected to test it's validity
var isAnnotationAllowedOnRange = false;
try {
isAnnotationAllowedOnRange = documentPosition && actions.isValidAnnotationPosition(documentPosition);
} catch (_unused) {
isAnnotationAllowedOnRange = false;
}
return /*#__PURE__*/React.createElement(SelectionInlineCommentMounter, {
range: selectionRange,
draftRange: draftRange,
wrapperDOM: rendererRef,
component: selectionComponent,
onClose: clearRange,
documentPosition: documentPosition,
isAnnotationAllowed: isAnnotationAllowedOnRange,
applyAnnotation: actions.applyAnnotation.bind(actions),
generateIndexMatch: actions.generateAnnotationIndexMatch.bind(actions),
createAnalyticsEvent: createAnalyticsEvent
});
};
SelectionRangeValidator.displayName = 'SelectionRangeValidator';