UNPKG

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

Version:

NcsStepMetrics plugin for @atlaskit/editor-core

100 lines (93 loc) 3.97 kB
import { NCS_STORAGE } from '@atlaskit/editor-common/ncs-step-metrics'; import { StorageClient } from '@atlaskit/frontend-utilities'; import { getPayload } from './analytics'; import { calculateP90Value } from './calculateP90Value'; var storageClient = new StorageClient(NCS_STORAGE.NCS_STORAGE_CLIENT_KEY); /** * This function transforms the NCS session step metrics * into a format suitable for analytics events. * @param metrics - The NCS session step metrics to be transformed. */ var transformSessionStepMetrics = function transformSessionStepMetrics(metrics) { return { ncsSessionId: metrics.ncsSessionId, totalStepSize: metrics.totalStepSize, numberOfSteps: metrics.numberOfSteps, maxStepSize: metrics.maxStepSize, p90StepSize: calculateP90Value(metrics.stepSizeSumForP90) }; }; /** * Gets the current NCS session step metrics from storage. * @param sessionId - The session ID for which to retrieve the metrics. */ export var getNcsSessionStepMetrics = function getNcsSessionStepMetrics(sessionId) { if (!sessionId) { return; } var ncsSessionStepMetrics = JSON.parse(storageClient.getItem(NCS_STORAGE.NCS_SESSION_STEP_METRICS) || '{}'); var current = ncsSessionStepMetrics[sessionId]; if (current) { return transformSessionStepMetrics(current); } return undefined; }; /** * Clears the NCS session step metrics and the active session from storage. * @param sessionId - The session ID for which to clear the metrics. */ export var clearNcsSessionStepMetrics = function clearNcsSessionStepMetrics(sessionId) { if (!sessionId) { return; } // Clear the current NCS session step metrics from storage var ncsSessionStepMetrics = JSON.parse(storageClient.getItem(NCS_STORAGE.NCS_SESSION_STEP_METRICS) || '{}'); if (ncsSessionStepMetrics[sessionId]) { delete ncsSessionStepMetrics[sessionId]; if (Object.keys(ncsSessionStepMetrics).length === 0) { storageClient.removeItem(NCS_STORAGE.NCS_SESSION_STEP_METRICS); } else { storageClient.setItemWithExpiry(NCS_STORAGE.NCS_SESSION_STEP_METRICS, JSON.stringify(ncsSessionStepMetrics)); } } // Clear the active session from storage clearNcsActiveSession(sessionId); }; /** * Clears the active NCS session from storage. * @param sessionId - The session ID for which to clear the active session. */ export var clearNcsActiveSession = function clearNcsActiveSession(sessionId) { if (!sessionId) { return; } var activeSessions = JSON.parse(storageClient.getItem(NCS_STORAGE.NCS_ACTIVE_SESSIONS) || '{}'); if (activeSessions[sessionId]) { delete activeSessions[sessionId]; if (Object.keys(activeSessions).length === 0) { storageClient.removeItem(NCS_STORAGE.NCS_ACTIVE_SESSIONS); } else { storageClient.setItemWithExpiry(NCS_STORAGE.NCS_ACTIVE_SESSIONS, JSON.stringify(activeSessions)); } } }; /** * This function checks for any unfinished NCS sessions * If it finds any, and the session is not active, it sends the analytics event * @param api - The public plugin API to access the analytics plugin. */ export var checkForUnfinishedNcsSessions = function checkForUnfinishedNcsSessions(api) { var ncsSessionStepMetrics = JSON.parse(storageClient.getItem(NCS_STORAGE.NCS_SESSION_STEP_METRICS) || '{}'); var activeNcsSessions = JSON.parse(storageClient.getItem(NCS_STORAGE.NCS_ACTIVE_SESSIONS) || '{}'); Object.keys(ncsSessionStepMetrics).forEach(function (id) { if (!activeNcsSessions[id]) { var metrics = transformSessionStepMetrics(ncsSessionStepMetrics[id]); if (metrics) { var _api$analytics; var payload = getPayload(metrics); api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || (_api$analytics = _api$analytics.actions) === null || _api$analytics === void 0 || _api$analytics.fireAnalyticsEvent(payload); clearNcsSessionStepMetrics(id); } } }); };