UNPKG

@atlaskit/editor-plugin-card

Version:

Card plugin for @atlaskit/editor-core

124 lines (122 loc) 4.44 kB
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; };