UNPKG

@atlaskit/editor-plugin-ncs-step-metrics

Version:

NcsStepMetrics plugin for @atlaskit/editor-core

93 lines (91 loc) 4.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ncsStepMetricsPlugin = void 0; var _bindEventListener = require("bind-event-listener"); var _analytics = require("@atlaskit/editor-common/analytics"); var _safePlugin = require("@atlaskit/editor-common/safe-plugin"); var _analytics2 = require("./pm-plugins/utils/analytics"); var _session = require("./pm-plugins/utils/session"); /** * NCS Session Step Metrics plugin to be added to an `EditorPresetBuilder` and used with `ComposableEditor` * from `@atlaskit/editor-core`. */ var ncsStepMetricsPlugin = exports.ncsStepMetricsPlugin = function ncsStepMetricsPlugin(_ref) { var api = _ref.api; var sessionId; var createAnalyticsEvent; return { name: 'ncsStepMetrics', pmPlugins: function pmPlugins() { return [{ name: 'ncsStepMetricsPlugin', plugin: function plugin() { return new _safePlugin.SafePlugin({ view: function view() { var _api$collabEdit, _api$analytics; api === null || api === void 0 || (_api$collabEdit = api.collabEdit) === null || _api$collabEdit === void 0 || (_api$collabEdit = _api$collabEdit.sharedState) === null || _api$collabEdit === void 0 || _api$collabEdit.onChange(function (_ref2) { var nextSharedState = _ref2.nextSharedState; if (nextSharedState.sessionId !== undefined && sessionId !== nextSharedState.sessionId) { sessionId = nextSharedState.sessionId; (0, _session.checkForUnfinishedNcsSessions)(api); } }); var unsubscribeAnalytics = api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || (_api$analytics = _api$analytics.sharedState) === null || _api$analytics === void 0 ? void 0 : _api$analytics.onChange(function (_ref3) { var nextSharedState = _ref3.nextSharedState; if (nextSharedState.createAnalyticsEvent) { createAnalyticsEvent = nextSharedState.createAnalyticsEvent; unsubscribeAnalytics === null || unsubscribeAnalytics === void 0 || unsubscribeAnalytics(); } }); var analyticsEventSent = false; var sendAnalyticsEvent = function sendAnalyticsEvent() { if (analyticsEventSent || !createAnalyticsEvent || !sessionId) { return; } analyticsEventSent = true; var ncsSessionStepMetrics = (0, _session.getNcsSessionStepMetrics)(sessionId); if (!ncsSessionStepMetrics) { return; } // At this point in the editor lifecycle, we no longer have access to the analytics api // So we use the stored `createAnalyticsEvent` function to send the event (0, _analytics.fireAnalyticsEvent)(createAnalyticsEvent, { immediate: true })({ payload: (0, _analytics2.getPayload)(ncsSessionStepMetrics) }); (0, _session.clearNcsSessionStepMetrics)(sessionId); }; var handleBeforeUnload = function handleBeforeUnload() { // On beforeunload, we want to clear the active session // So when the editor is re-initialized, it will send the stored analytics event (0, _session.clearNcsActiveSession)(sessionId); }; var unbindBeforeUnload = (0, _bindEventListener.bind)(window, { type: 'beforeunload', listener: handleBeforeUnload }); return { destroy: function destroy() { /** * We use requestAnimationFrame to ensure that the editor has been unmounted * before we send the analytics event. */ requestAnimationFrame(function () { var akEditor = document.querySelector('.akEditor'); if (!akEditor) { sendAnalyticsEvent(); unbindBeforeUnload(); } }); } }; } }); } }]; } }; };