@atlaskit/renderer
Version:
Renderer component
103 lines (101 loc) • 4.47 kB
JavaScript
"use strict";
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.MarkElement = void 0;
var _react = _interopRequireWildcard(require("react"));
var _adfSchema = require("@atlaskit/adf-schema");
var _types = require("@atlaskit/editor-common/types");
var _mark = require("./mark");
var _useInlineCommentsFilter = require("../hooks/use-inline-comments-filter");
var _useInlineCommentSubscriber = require("../hooks/use-inline-comment-subscriber");
var _useEvents = require("../hooks/use-events");
var _context = require("../context");
var _AnnotationManagerContext = require("../contexts/AnnotationManagerContext");
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 MarkElement = exports.MarkElement = function MarkElement(_ref) {
var annotationParentIds = _ref.annotationParentIds,
children = _ref.children,
dataAttributes = _ref.dataAttributes,
id = _ref.id,
useBlockLevel = _ref.useBlockLevel;
var updateSubscriber = (0, _useInlineCommentSubscriber.useInlineCommentSubscriberContext)();
var states = (0, _react.useContext)(_context.InlineCommentsStateContext);
var _useHasFocusEvent = (0, _useEvents.useHasFocusEvent)({
id: id,
updateSubscriber: updateSubscriber
}),
hasFocus = _useHasFocusEvent.hasFocus,
isHovered = _useHasFocusEvent.isHovered;
var dataAttributesMemorized = (0, _react.useMemo)(function () {
return dataAttributes;
}, [dataAttributes]);
var _useAnnotationManager = (0, _AnnotationManagerContext.useAnnotationManagerDispatch)(),
dispatch = _useAnnotationManager.dispatch,
annotationManager = _useAnnotationManager.annotationManager;
var onClick = (0, _react.useCallback)(function (props) {
if (!updateSubscriber) {
return;
}
if (useBlockLevel) {
return;
}
var eventTarget = props.eventTarget,
annotationIds = props.annotationIds;
if (annotationManager) {
if (hasFocus) {
dispatch({
type: 'resetSelectedAnnotation'
});
return;
}
annotationManager.checkPreemptiveGate().then(function (canSelect) {
if (canSelect) {
// if there is a draft, clear it first
annotationManager === null || annotationManager === void 0 || annotationManager.clearDraft();
// use setIsAnnotationSelected won't work here if there is a draft in progress
// so we need to use dispatch to update the state directly
dispatch({
type: 'updateAnnotation',
data: {
id: annotationIds[0],
selected: true
}
});
dispatch({
type: 'setSelectedMarkRef',
data: {
markRef: eventTarget
}
});
} else {
// TODO: EDITOR-595 - If the preemptive gate returns false, should we track the analytics event?
}
}).catch(function (_error) {
// TODO: EDITOR-595 - An error occurred while checking the preemptive gate. We should report this error.
});
} else {
updateSubscriber.emit(_types.AnnotationUpdateEvent.ON_ANNOTATION_CLICK, {
annotationIds: annotationIds,
eventTarget: eventTarget
});
}
}, [updateSubscriber, useBlockLevel, dispatch, annotationManager, hasFocus]);
var activeParentIds = (0, _useInlineCommentsFilter.useInlineCommentsFilter)({
annotationIds: annotationParentIds,
filter: {
state: _adfSchema.AnnotationMarkStates.ACTIVE
}
});
return /*#__PURE__*/_react.default.createElement(_mark.MarkComponent, {
id: id,
dataAttributes: dataAttributesMemorized,
annotationParentIds: activeParentIds,
onClick: onClick,
hasFocus: hasFocus,
isHovered: isHovered,
state: states[id],
useBlockLevel: useBlockLevel
}, children);
};