@atlaskit/editor-plugin-ncs-step-metrics
Version:
NcsStepMetrics plugin for @atlaskit/editor-core
93 lines (91 loc) • 4.38 kB
JavaScript
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();
}
});
}
};
}
});
}
}];
}
};
};
;