UNPKG

@atlaskit/editor-plugin-card

Version:

Card plugin for @atlaskit/editor-core

130 lines (128 loc) 4.93 kB
"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; };