UNPKG

@atlaskit/editor-common

Version:

A package that contains common classes and components for editor and renderer

80 lines (79 loc) 2.91 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.AnalyticsQueue = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _memoizeOne = _interopRequireDefault(require("memoize-one")); var _class; var AnalyticsQueue = exports.AnalyticsQueue = /*#__PURE__*/function () { function AnalyticsQueue() { (0, _classCallCheck2.default)(this, AnalyticsQueue); (0, _defineProperty2.default)(this, "tasks", []); (0, _defineProperty2.default)(this, "running", false); } (0, _createClass2.default)(AnalyticsQueue, [{ key: "request", value: function request(fn) { if (window.requestIdleCallback) { window.requestIdleCallback(fn); } else { var start = performance.now(); setTimeout(function () { fn({ didTimeout: false, timeRemaining: function timeRemaining() { return Math.max(0, 50 - (performance.now() - start)); } }); }, 0); } } }, { key: "pending", value: function pending() { var _window$navigator; // Defensive coding as navigator.scheduling.isInputPending is an experimental API if (typeof ((_window$navigator = window.navigator) === null || _window$navigator === void 0 || (_window$navigator = _window$navigator.scheduling) === null || _window$navigator === void 0 ? void 0 : _window$navigator.isInputPending) === 'function') { var _window$navigator2; return ((_window$navigator2 = window.navigator) === null || _window$navigator2 === void 0 || (_window$navigator2 = _window$navigator2.scheduling) === null || _window$navigator2 === void 0 ? void 0 : _window$navigator2.isInputPending()) === true; } return false; } }, { key: "process", value: function process() { var _this = this; if (this.running) { return; } this.running = true; this.request(function (deadline) { while (deadline.timeRemaining() > 0 && _this.tasks.length > 0 && !_this.pending()) { var task = _this.tasks.shift(); if (task) { task(); } } _this.running = false; if (_this.tasks.length > 0) { _this.process(); } }); } }, { key: "schedule", value: function schedule(task) { this.tasks.push(task); this.process(); } }]); return AnalyticsQueue; }(); _class = AnalyticsQueue; (0, _defineProperty2.default)(AnalyticsQueue, "get", (0, _memoizeOne.default)(function () { return new _class(); }));