@atlaskit/renderer
Version:
Renderer component
159 lines (158 loc) • 7.22 kB
JavaScript
"use strict";
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Mounter = void 0;
var _react = _interopRequireWildcard(require("react"));
var _adfSchema = require("@atlaskit/adf-schema");
var _dom = require("../draft/dom");
var _types = require("@atlaskit/analytics-listeners/types");
var _analytics = require("@atlaskit/editor-common/analytics");
var _RendererActionsContext = require("../../RendererActionsContext");
var _AnnotationRangeContext = require("../contexts/AnnotationRangeContext");
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
var Mounter = exports.Mounter = /*#__PURE__*/_react.default.memo(function (props) {
var Component = props.component,
range = props.range,
isWithinRange = props.isWithinRange,
isAnnotationAllowed = props.isAnnotationAllowed,
wrapperDOM = props.wrapperDOM,
onCloseProps = props.onClose,
documentPosition = props.documentPosition,
applyAnnotation = props.applyAnnotation,
createAnalyticsEvent = props.createAnalyticsEvent,
generateIndexMatch = props.generateIndexMatch;
var _useAnnotationRangeDi = (0, _AnnotationRangeContext.useAnnotationRangeDispatch)(),
promoteHoverToDraft = _useAnnotationRangeDi.promoteHoverToDraft,
clearHoverDraft = _useAnnotationRangeDi.clearHoverDraft;
var _useAnnotationRangeSt = (0, _AnnotationRangeContext.useAnnotationRangeState)(),
hoverDraftDocumentPosition = _useAnnotationRangeSt.hoverDraftDocumentPosition;
var actions = (0, _react.useContext)(_RendererActionsContext.RendererContext);
var onCreateCallback = (0, _react.useCallback)(function (annotationId) {
var positionToAnnotate = hoverDraftDocumentPosition || documentPosition;
if (!isAnnotationAllowed || !positionToAnnotate || !applyAnnotation) {
return false;
}
var annotation = {
annotationId: annotationId,
annotationType: _adfSchema.AnnotationTypes.INLINE_COMMENT
};
if (createAnalyticsEvent) {
createAnalyticsEvent({
action: _analytics.ACTION.INSERTED,
actionSubject: _analytics.ACTION_SUBJECT.ANNOTATION,
actionSubjectId: _analytics.ACTION_SUBJECT_ID.INLINE_COMMENT,
attributes: {},
eventType: _analytics.EVENT_TYPE.TRACK
}).fire(_types.FabricChannel.editor);
}
return applyAnnotation(positionToAnnotate, annotation);
}, [isAnnotationAllowed, documentPosition, applyAnnotation, createAnalyticsEvent, hoverDraftDocumentPosition]);
var createIndexCallback = (0, _react.useCallback)(function () {
if (!documentPosition || !generateIndexMatch) {
return false;
}
var result = generateIndexMatch(documentPosition);
if (!result) {
return false;
}
return result;
}, [documentPosition, generateIndexMatch]);
var applyDraftModeCallback = (0, _react.useCallback)(function (options) {
if (!documentPosition || !isAnnotationAllowed) {
if (createAnalyticsEvent) {
createAnalyticsEvent({
action: _analytics.ACTION.CREATE_NOT_ALLOWED,
actionSubject: _analytics.ACTION_SUBJECT.ANNOTATION,
actionSubjectId: _analytics.ACTION_SUBJECT_ID.INLINE_COMMENT,
attributes: {
documentPosition: documentPosition,
isAnnotationAllowed: isAnnotationAllowed
},
eventType: _analytics.EVENT_TYPE.TRACK
}).fire(_types.FabricChannel.editor);
}
return false;
}
promoteHoverToDraft(documentPosition);
if (createAnalyticsEvent) {
var uniqueAnnotationsInRange = actions.getAnnotationsByPosition(range);
createAnalyticsEvent({
action: _analytics.ACTION.OPENED,
actionSubject: _analytics.ACTION_SUBJECT.ANNOTATION,
actionSubjectId: _analytics.ACTION_SUBJECT_ID.INLINE_COMMENT,
eventType: _analytics.EVENT_TYPE.TRACK,
attributes: {
overlap: uniqueAnnotationsInRange.length
}
}).fire(_types.FabricChannel.editor);
}
window.requestAnimationFrame(function () {
if (options.keepNativeSelection) {
(0, _dom.updateWindowSelectionAroundDraft)(documentPosition);
} else {
var sel = window.getSelection();
if (sel) {
sel.removeAllRanges();
}
}
});
var positionToAnnotate = hoverDraftDocumentPosition || documentPosition;
if (!positionToAnnotate || !applyAnnotation || !options.annotationId) {
if (createAnalyticsEvent) {
createAnalyticsEvent({
action: _analytics.ACTION.CREATE_NOT_ALLOWED,
actionSubject: _analytics.ACTION_SUBJECT.ANNOTATION,
actionSubjectId: _analytics.ACTION_SUBJECT_ID.INLINE_COMMENT,
attributes: {
positionToAnnotate: positionToAnnotate,
applyAnnotationMissing: !applyAnnotation,
annotationId: options.annotationId
},
eventType: _analytics.EVENT_TYPE.TRACK
}).fire(_types.FabricChannel.editor);
}
return false;
}
var annotation = {
annotationId: options.annotationId,
annotationType: _adfSchema.AnnotationTypes.INLINE_COMMENT
};
return applyAnnotation(positionToAnnotate, annotation);
}, [documentPosition, isAnnotationAllowed, createAnalyticsEvent, applyAnnotation, actions, range, promoteHoverToDraft, hoverDraftDocumentPosition]);
var removeDraftModeCallback = (0, _react.useCallback)(function () {
clearHoverDraft();
var sel = window.getSelection();
if (sel) {
sel.removeAllRanges();
}
}, [clearHoverDraft]);
var onCloseCallback = (0, _react.useCallback)(function () {
if (createAnalyticsEvent) {
createAnalyticsEvent({
action: _analytics.ACTION.CLOSED,
actionSubject: _analytics.ACTION_SUBJECT.ANNOTATION,
actionSubjectId: _analytics.ACTION_SUBJECT_ID.INLINE_COMMENT,
eventType: _analytics.EVENT_TYPE.TRACK,
attributes: {}
}).fire(_types.FabricChannel.editor);
}
removeDraftModeCallback();
onCloseProps();
}, [onCloseProps, removeDraftModeCallback, createAnalyticsEvent]);
return /*#__PURE__*/_react.default.createElement(Component, {
range: range,
isWithinRange: isWithinRange
// Ignored via go/ees005
// eslint-disable-next-line @atlaskit/editor/no-as-casting
,
wrapperDOM: wrapperDOM.current,
isAnnotationAllowed: isAnnotationAllowed,
onClose: onCloseCallback,
onCreate: onCreateCallback,
getAnnotationIndexMatch: createIndexCallback,
applyDraftMode: applyDraftModeCallback,
removeDraftMode: removeDraftModeCallback
});
});