react-live-chat-loader
Version:
Implement live chat in your react app without taking a performance hit.
25 lines • 3.58 kB
JavaScript
var requestIdleCallback = typeof window !== 'undefined' ? window.requestIdleCallback : null;
var waitForLoad = function waitForLoad(check, callback) {
var elapsedTime = 0;
// If the provider fails to load we don't want to keep checking continuously
// therefore we set a max duration we're willing to wait before executing the callback
var maxWaitDuration = 10000;
// If the browser does not support requestIdleCallback we'll wait the fallback duration
// before executing the callback
var fallbackDuration = 1000;
var _scheduleLoad = function scheduleLoad(deadline) {
if (check() || elapsedTime >= maxWaitDuration) {
callback();
return;
}
elapsedTime += deadline.timeRemaining();
requestIdleCallback === null || requestIdleCallback === void 0 || requestIdleCallback(_scheduleLoad);
};
if (requestIdleCallback) {
requestIdleCallback(_scheduleLoad);
} else {
setTimeout(callback, fallbackDuration);
}
};
export default waitForLoad;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1ZXN0SWRsZUNhbGxiYWNrIiwid2luZG93Iiwid2FpdEZvckxvYWQiLCJjaGVjayIsImNhbGxiYWNrIiwiZWxhcHNlZFRpbWUiLCJtYXhXYWl0RHVyYXRpb24iLCJmYWxsYmFja0R1cmF0aW9uIiwic2NoZWR1bGVMb2FkIiwiZGVhZGxpbmUiLCJ0aW1lUmVtYWluaW5nIiwic2V0VGltZW91dCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy93YWl0Rm9yTG9hZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCByZXF1ZXN0SWRsZUNhbGxiYWNrID1cbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjayA6IG51bGxcblxuY29uc3Qgd2FpdEZvckxvYWQgPSAoY2hlY2s6ICgpID0+IGJvb2xlYW4sIGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCA9PiB7XG4gIGxldCBlbGFwc2VkVGltZSA9IDBcbiAgLy8gSWYgdGhlIHByb3ZpZGVyIGZhaWxzIHRvIGxvYWQgd2UgZG9uJ3Qgd2FudCB0byBrZWVwIGNoZWNraW5nIGNvbnRpbnVvdXNseVxuICAvLyB0aGVyZWZvcmUgd2Ugc2V0IGEgbWF4IGR1cmF0aW9uIHdlJ3JlIHdpbGxpbmcgdG8gd2FpdCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBjYWxsYmFja1xuICBjb25zdCBtYXhXYWl0RHVyYXRpb24gPSAxMDAwMFxuICAvLyBJZiB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHJlcXVlc3RJZGxlQ2FsbGJhY2sgd2UnbGwgd2FpdCB0aGUgZmFsbGJhY2sgZHVyYXRpb25cbiAgLy8gYmVmb3JlIGV4ZWN1dGluZyB0aGUgY2FsbGJhY2tcbiAgY29uc3QgZmFsbGJhY2tEdXJhdGlvbiA9IDEwMDBcblxuICBjb25zdCBzY2hlZHVsZUxvYWQgPSAoZGVhZGxpbmU6IElkbGVEZWFkbGluZSkgPT4ge1xuICAgIGlmIChjaGVjaygpIHx8IGVsYXBzZWRUaW1lID49IG1heFdhaXREdXJhdGlvbikge1xuICAgICAgY2FsbGJhY2soKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZWxhcHNlZFRpbWUgKz0gZGVhZGxpbmUudGltZVJlbWFpbmluZygpXG4gICAgcmVxdWVzdElkbGVDYWxsYmFjaz8uKHNjaGVkdWxlTG9hZClcbiAgfVxuXG4gIGlmIChyZXF1ZXN0SWRsZUNhbGxiYWNrKSB7XG4gICAgcmVxdWVzdElkbGVDYWxsYmFjayhzY2hlZHVsZUxvYWQpXG4gIH0gZWxzZSB7XG4gICAgc2V0VGltZW91dChjYWxsYmFjaywgZmFsbGJhY2tEdXJhdGlvbilcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB3YWl0Rm9yTG9hZFxuIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFNQSxtQkFBbUIsR0FDdkIsT0FBT0MsTUFBTSxLQUFLLFdBQVcsR0FBR0EsTUFBTSxDQUFDRCxtQkFBbUIsR0FBRyxJQUFJO0FBRW5FLElBQU1FLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFJQyxLQUFvQixFQUFFQyxRQUFvQixFQUFXO0VBQ3hFLElBQUlDLFdBQVcsR0FBRyxDQUFDO0VBQ25CO0VBQ0E7RUFDQSxJQUFNQyxlQUFlLEdBQUcsS0FBSztFQUM3QjtFQUNBO0VBQ0EsSUFBTUMsZ0JBQWdCLEdBQUcsSUFBSTtFQUU3QixJQUFNQyxhQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBSUMsUUFBc0IsRUFBSztJQUMvQyxJQUFJTixLQUFLLENBQUMsQ0FBQyxJQUFJRSxXQUFXLElBQUlDLGVBQWUsRUFBRTtNQUM3Q0YsUUFBUSxDQUFDLENBQUM7TUFDVjtJQUNGO0lBRUFDLFdBQVcsSUFBSUksUUFBUSxDQUFDQyxhQUFhLENBQUMsQ0FBQztJQUN2Q1YsbUJBQW1CLGFBQW5CQSxtQkFBbUIsZUFBbkJBLG1CQUFtQixDQUFHUSxhQUFZLENBQUM7RUFDckMsQ0FBQztFQUVELElBQUlSLG1CQUFtQixFQUFFO0lBQ3ZCQSxtQkFBbUIsQ0FBQ1EsYUFBWSxDQUFDO0VBQ25DLENBQUMsTUFBTTtJQUNMRyxVQUFVLENBQUNQLFFBQVEsRUFBRUcsZ0JBQWdCLENBQUM7RUFDeEM7QUFDRixDQUFDO0FBRUQsZUFBZUwsV0FBVyIsImlnbm9yZUxpc3QiOltdfQ==