@atlaskit/editor-plugin-card
Version:
Card plugin for @atlaskit/editor-core
124 lines (122 loc) • 4.44 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/defineProperty";
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
var _excluded = ["node", "nodeContext"],
_excluded2 = ["node", "nodeContext", "previousDisplay"],
_excluded3 = ["node", "nodeContext"];
import { useEffect, useMemo } from 'react';
import { useSmartLinkLifecycleAnalytics } from '@atlaskit/link-analytics';
import { EVENT, EVENT_SUBJECT } from '../analytics/types';
import { appearanceForLink, getUrl } from '../analytics/utils';
import { getDeleteType, getMethod, getSourceEventFromMetadata, getUpdateType } from './common';
/**
* 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
*/
export var 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 = useSmartLinkLifecycleAnalytics(),
linkCreated = _useSmartLinkLifecycl.linkCreated,
linkUpdated = _useSmartLinkLifecycl.linkUpdated,
linkDeleted = _useSmartLinkLifecycl.linkDeleted;
var linkEvents = useMemo(function () {
return _defineProperty(_defineProperty(_defineProperty({}, EVENT.CREATED, function (_ref2) {
var node = _ref2.node,
nodeContext = _ref2.nodeContext,
metadata = _objectWithoutProperties(_ref2, _excluded);
var url = getUrl(node);
if (!url) {
return;
}
var display = appearanceForLink(node);
var displayCategory = displayCategoryFromDisplay(display);
var sourceEvent = getSourceEventFromMetadata(metadata);
var creationMethod = getMethod(metadata);
linkCreated({
url: url,
displayCategory: displayCategory
}, sourceEvent, {
display: display,
nodeContext: nodeContext,
creationMethod: creationMethod
});
}), EVENT.UPDATED, function (_ref3) {
var node = _ref3.node,
nodeContext = _ref3.nodeContext,
previousDisplay = _ref3.previousDisplay,
metadata = _objectWithoutProperties(_ref3, _excluded2);
var url = getUrl(node);
if (!url) {
return;
}
var display = appearanceForLink(node);
var displayCategory = displayCategoryFromDisplay(display);
var sourceEvent = getSourceEventFromMetadata(metadata);
var updateMethod = getMethod(metadata);
var updateType = getUpdateType(metadata);
linkUpdated({
url: url,
displayCategory: displayCategory
}, sourceEvent, {
display: display,
previousDisplay: previousDisplay,
nodeContext: nodeContext,
updateMethod: updateMethod,
updateType: updateType
});
}), EVENT.DELETED, function (_ref4) {
var node = _ref4.node,
nodeContext = _ref4.nodeContext,
metadata = _objectWithoutProperties(_ref4, _excluded3);
var url = getUrl(node);
if (!url) {
return;
}
var display = appearanceForLink(node);
var displayCategory = displayCategoryFromDisplay(display);
var sourceEvent = getSourceEventFromMetadata(metadata);
var deleteMethod = getMethod(metadata);
var deleteType = getDeleteType(metadata);
linkDeleted({
url: url,
displayCategory: displayCategory
}, sourceEvent, {
display: display,
nodeContext: nodeContext,
deleteMethod: deleteMethod,
deleteType: deleteType
});
});
}, [linkCreated, linkUpdated, linkDeleted]);
/**
* Subscribe to link events
*/
useEffect(function () {
var unsubscribe = cardPluginEvents.subscribe(function (_ref6) {
var event = _ref6.event,
subject = _ref6.subject,
data = _ref6.data;
if (subject === EVENT_SUBJECT.LINK) {
linkEvents[event](data);
}
});
return function () {
return unsubscribe();
};
}, [linkEvents, cardPluginEvents]);
return null;
};