UNPKG

@atlaskit/renderer

Version:
90 lines (85 loc) 3.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.trackUnsupportedContentLevels = void 0; var _utils = require("@atlaskit/editor-common/utils"); var _analytics = require("@atlaskit/editor-common/analytics"); var _events = require("./events"); // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any var rendersMap = {}; var processLevelsAndTrack = function processLevelsAndTrack(item, thresholds, dispatchAnalyticsEvent) { try { var _getUnsupportedConten = (0, _utils.getUnsupportedContentLevelData)(item.doc, thresholds), severity = _getUnsupportedConten.severity, percentage = _getUnsupportedConten.percentage, _getUnsupportedConten2 = _getUnsupportedConten.counts, supportedNodes = _getUnsupportedConten2.supportedNodes, unsupportedNodes = _getUnsupportedConten2.unsupportedNodes, unsupportedNodeTypeCount = _getUnsupportedConten2.unsupportedNodeTypeCount; dispatchAnalyticsEvent({ action: _analytics.ACTION.UNSUPPORTED_CONTENT_LEVELS_TRACKING_SUCCEEDED, actionSubject: _analytics.ACTION_SUBJECT.RENDERER, attributes: { appearance: (0, _utils.getAnalyticsAppearance)(item.appearance), platform: _events.PLATFORM.WEB, unsupportedContentLevelSeverity: severity, unsupportedContentLevelPercentage: percentage, unsupportedNodesCount: unsupportedNodes, supportedNodesCount: supportedNodes, unsupportedNodeTypeCount: unsupportedNodeTypeCount }, eventType: _analytics.EVENT_TYPE.OPERATIONAL }); } catch (err) { dispatchAnalyticsEvent({ action: _analytics.ACTION.UNSUPPORTED_CONTENT_LEVELS_TRACKING_ERRORED, actionSubject: _analytics.ACTION_SUBJECT.RENDERER, attributes: { platform: _events.PLATFORM.WEB, error: err instanceof Error ? err.message : String(err) }, eventType: _analytics.EVENT_TYPE.OPERATIONAL }); } }; var schedule = function schedule(fn) { // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any if (typeof window.requestIdleCallback === 'function') { // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any window.requestIdleCallback(fn); } else { setTimeout(fn, 0); } }; var DEFAULT_SAMPLING_RATE = 100; var trackUnsupportedContentLevels = exports.trackUnsupportedContentLevels = function trackUnsupportedContentLevels(item, trackingOptions, dispatchAnalyticsEvent) { var _item$appearance; var thresholds = trackingOptions.thresholds, samplingRates = trackingOptions.samplingRates; var appearance = (_item$appearance = item.appearance) !== null && _item$appearance !== void 0 ? _item$appearance : 'unknown'; if (!rendersMap[appearance]) { rendersMap[appearance] = new Set(); } // bail out if already processed a render from a given renderer instance var didProcessRenderer = rendersMap[appearance].has(item.rendererId); if (didProcessRenderer) { return; } // otherwise track the render rendersMap[appearance].add(item.rendererId); var sampleRate = samplingRates && samplingRates[appearance] || DEFAULT_SAMPLING_RATE; // sample from the first available tracked render if (rendersMap[appearance].size === 1) { schedule(function () { return processLevelsAndTrack(item, thresholds, dispatchAnalyticsEvent); }); } // cleanup/refresh tracked renders at the sampling rate if (rendersMap[appearance].size % sampleRate === 0) { rendersMap[appearance] = new Set(); } };