@atlaskit/editor-plugin-card
Version:
Card plugin for @atlaskit/editor-core
130 lines (128 loc) • 4.93 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.LinkEventsBinding = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _react = require("react");
var _linkAnalytics = require("@atlaskit/link-analytics");
var _types = require("../analytics/types");
var _utils = require("../analytics/utils");
var _common = require("./common");
var _excluded = ["node", "nodeContext"],
_excluded2 = ["node", "nodeContext", "previousDisplay"],
_excluded3 = ["node", "nodeContext"];
/**
* Set display category as `link` if not displaying the link as a smart card
*/
var displayCategoryFromDisplay = function displayCategoryFromDisplay(display) {
if (display === 'url') {
return 'link';
}
};
/**
* Subscribes to the events occuring in the card
* plugin and fires analytics events accordingly
*/
var LinkEventsBinding = exports.LinkEventsBinding = function LinkEventsBinding(_ref) {
var cardPluginEvents = _ref.cardPluginEvents;
/**
* These callbacks internally use window.requestIdleCallback/requestAnimationFrame
* to defer any heavy operations involving network
*
* The callbacks themselves should not be deferred, they should be called syncronously the moment
* the events take place.
*/
var _useSmartLinkLifecycl = (0, _linkAnalytics.useSmartLinkLifecycleAnalytics)(),
linkCreated = _useSmartLinkLifecycl.linkCreated,
linkUpdated = _useSmartLinkLifecycl.linkUpdated,
linkDeleted = _useSmartLinkLifecycl.linkDeleted;
var linkEvents = (0, _react.useMemo)(function () {
return (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _types.EVENT.CREATED, function (_ref2) {
var node = _ref2.node,
nodeContext = _ref2.nodeContext,
metadata = (0, _objectWithoutProperties2.default)(_ref2, _excluded);
var url = (0, _utils.getUrl)(node);
if (!url) {
return;
}
var display = (0, _utils.appearanceForLink)(node);
var displayCategory = displayCategoryFromDisplay(display);
var sourceEvent = (0, _common.getSourceEventFromMetadata)(metadata);
var creationMethod = (0, _common.getMethod)(metadata);
linkCreated({
url: url,
displayCategory: displayCategory
}, sourceEvent, {
display: display,
nodeContext: nodeContext,
creationMethod: creationMethod
});
}), _types.EVENT.UPDATED, function (_ref3) {
var node = _ref3.node,
nodeContext = _ref3.nodeContext,
previousDisplay = _ref3.previousDisplay,
metadata = (0, _objectWithoutProperties2.default)(_ref3, _excluded2);
var url = (0, _utils.getUrl)(node);
if (!url) {
return;
}
var display = (0, _utils.appearanceForLink)(node);
var displayCategory = displayCategoryFromDisplay(display);
var sourceEvent = (0, _common.getSourceEventFromMetadata)(metadata);
var updateMethod = (0, _common.getMethod)(metadata);
var updateType = (0, _common.getUpdateType)(metadata);
linkUpdated({
url: url,
displayCategory: displayCategory
}, sourceEvent, {
display: display,
previousDisplay: previousDisplay,
nodeContext: nodeContext,
updateMethod: updateMethod,
updateType: updateType
});
}), _types.EVENT.DELETED, function (_ref4) {
var node = _ref4.node,
nodeContext = _ref4.nodeContext,
metadata = (0, _objectWithoutProperties2.default)(_ref4, _excluded3);
var url = (0, _utils.getUrl)(node);
if (!url) {
return;
}
var display = (0, _utils.appearanceForLink)(node);
var displayCategory = displayCategoryFromDisplay(display);
var sourceEvent = (0, _common.getSourceEventFromMetadata)(metadata);
var deleteMethod = (0, _common.getMethod)(metadata);
var deleteType = (0, _common.getDeleteType)(metadata);
linkDeleted({
url: url,
displayCategory: displayCategory
}, sourceEvent, {
display: display,
nodeContext: nodeContext,
deleteMethod: deleteMethod,
deleteType: deleteType
});
});
}, [linkCreated, linkUpdated, linkDeleted]);
/**
* Subscribe to link events
*/
(0, _react.useEffect)(function () {
var unsubscribe = cardPluginEvents.subscribe(function (_ref6) {
var event = _ref6.event,
subject = _ref6.subject,
data = _ref6.data;
if (subject === _types.EVENT_SUBJECT.LINK) {
linkEvents[event](data);
}
});
return function () {
return unsubscribe();
};
}, [linkEvents, cardPluginEvents]);
return null;
};