tb-react-live-chat-loader
Version:
Implement live chat in your react app without taking a performance hit.
109 lines (92 loc) • 11.9 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = require("react");
var _context = require("../context");
var Providers = _interopRequireWildcard(require("../providers"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
const requestIdleCallback = typeof window !== 'undefined' ? window.requestIdleCallback : null;
const connection = typeof window !== 'undefined' ? // eslint-disable-next-line @typescript-eslint/no-explicit-any
window.navigator && window.navigator.connection : null;
const useChat = ({
loadWhenIdle
} = {
loadWhenIdle: false
}) => {
const {
provider,
providerKey,
idlePeriod,
state,
setState,
appID,
locale,
baseUrl,
beforeInit,
onReady
} = (0, _react.useContext)(_context.LiveChatLoaderContext);
(0, _react.useEffect)(() => {
// Don't load if idlePeriod is 0, null or undefined
if (typeof window === 'undefined' || !loadWhenIdle || !idlePeriod) return; // Don't load if 2g connection or save-data is enabled
if (connection && (connection.saveData || /2g/.test(connection.effectiveType))) return;
if (isNaN(idlePeriod)) return; // deadline.timeRemaining() has an upper limit of 50 milliseconds
// We want to ensure the page has been idle for a significant period of time
// Therefore we count consecutive maximum timeRemaining counts and load chat when we reach our threshold
let elapsedIdlePeriod = 0;
let previousTimeRemaining = 0;
const scheduleLoadChat = deadline => {
if (elapsedIdlePeriod > idlePeriod) return loadChat({
open: false
});
const timeRemaining = deadline.timeRemaining(); // To ensure browser is idle, only accumalte elapsedIdlePeriod when
// two consecutive maximum timeRemaining's have been observed
if (previousTimeRemaining > 49 && timeRemaining > 49) elapsedIdlePeriod += timeRemaining;
previousTimeRemaining = timeRemaining;
requestIdleCallback === null || requestIdleCallback === void 0 ? void 0 : requestIdleCallback(scheduleLoadChat);
};
if (requestIdleCallback) {
requestIdleCallback(scheduleLoadChat);
} else {
setTimeout(() => loadChat({
open: false
}), idlePeriod);
}
}, []);
const chatProvider = Providers[provider];
const loadChat = (0, _react.useCallback)(({
open = true
} = {
open: true
}) => {
if (!providerKey) {
//eslint-disable-next-line no-console
console.error('No api key given to react-live-chat-loader');
return;
}
if (!provider) {
//eslint-disable-next-line no-console
console.error('No provider given to react-live-chat-loader');
return;
}
chatProvider.load({
providerKey,
setState,
appID,
locale,
baseUrl,
beforeInit,
onReady
});
if (open) {
chatProvider.open();
if (state !== 'complete') setState('open');
}
}, [state]);
return [state, loadChat];
};
var _default = useChat;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDaGF0LnRzIl0sIm5hbWVzIjpbInJlcXVlc3RJZGxlQ2FsbGJhY2siLCJ3aW5kb3ciLCJjb25uZWN0aW9uIiwibmF2aWdhdG9yIiwidXNlQ2hhdCIsImxvYWRXaGVuSWRsZSIsInByb3ZpZGVyIiwicHJvdmlkZXJLZXkiLCJpZGxlUGVyaW9kIiwic3RhdGUiLCJzZXRTdGF0ZSIsImFwcElEIiwibG9jYWxlIiwiYmFzZVVybCIsImJlZm9yZUluaXQiLCJvblJlYWR5IiwiTGl2ZUNoYXRMb2FkZXJDb250ZXh0Iiwic2F2ZURhdGEiLCJ0ZXN0IiwiZWZmZWN0aXZlVHlwZSIsImlzTmFOIiwiZWxhcHNlZElkbGVQZXJpb2QiLCJwcmV2aW91c1RpbWVSZW1haW5pbmciLCJzY2hlZHVsZUxvYWRDaGF0IiwiZGVhZGxpbmUiLCJsb2FkQ2hhdCIsIm9wZW4iLCJ0aW1lUmVtYWluaW5nIiwic2V0VGltZW91dCIsImNoYXRQcm92aWRlciIsIlByb3ZpZGVycyIsImNvbnNvbGUiLCJlcnJvciIsImxvYWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFHQTs7QUFDQTs7Ozs7O0FBRUEsTUFBTUEsbUJBQW1CLEdBQ3ZCLE9BQU9DLE1BQVAsS0FBa0IsV0FBbEIsR0FBZ0NBLE1BQU0sQ0FBQ0QsbUJBQXZDLEdBQTZELElBRC9EO0FBRUEsTUFBTUUsVUFBVSxHQUNkLE9BQU9ELE1BQVAsS0FBa0IsV0FBbEIsR0FDSTtBQUNBQSxNQUFNLENBQUNFLFNBQVAsSUFBcUJGLE1BQU0sQ0FBQ0UsU0FBUixDQUEwQkQsVUFGbEQsR0FHSSxJQUpOOztBQU1BLE1BQU1FLE9BQU8sR0FBRyxDQUNkO0FBQ0VDLEVBQUFBO0FBREYsSUFJSTtBQUFFQSxFQUFBQSxZQUFZLEVBQUU7QUFBaEIsQ0FMVSxLQU1xQztBQUNuRCxRQUFNO0FBQ0pDLElBQUFBLFFBREk7QUFFSkMsSUFBQUEsV0FGSTtBQUdKQyxJQUFBQSxVQUhJO0FBSUpDLElBQUFBLEtBSkk7QUFLSkMsSUFBQUEsUUFMSTtBQU1KQyxJQUFBQSxLQU5JO0FBT0pDLElBQUFBLE1BUEk7QUFRSkMsSUFBQUEsT0FSSTtBQVNKQyxJQUFBQSxVQVRJO0FBVUpDLElBQUFBO0FBVkksTUFXRix1QkFBV0MsOEJBQVgsQ0FYSjtBQWFBLHdCQUFVLE1BQU07QUFDZDtBQUNBLFFBQUksT0FBT2YsTUFBUCxLQUFrQixXQUFsQixJQUFpQyxDQUFDSSxZQUFsQyxJQUFrRCxDQUFDRyxVQUF2RCxFQUFtRSxPQUZyRCxDQUlkOztBQUNBLFFBQ0VOLFVBQVUsS0FDVEEsVUFBVSxDQUFDZSxRQUFYLElBQXVCLEtBQUtDLElBQUwsQ0FBVWhCLFVBQVUsQ0FBQ2lCLGFBQXJCLENBRGQsQ0FEWixFQUlFO0FBRUYsUUFBSUMsS0FBSyxDQUFDWixVQUFELENBQVQsRUFBdUIsT0FYVCxDQWFkO0FBQ0E7QUFDQTs7QUFDQSxRQUFJYSxpQkFBaUIsR0FBRyxDQUF4QjtBQUNBLFFBQUlDLHFCQUFxQixHQUFHLENBQTVCOztBQUNBLFVBQU1DLGdCQUFnQixHQUFJQyxRQUFELElBQTRCO0FBQ25ELFVBQUlILGlCQUFpQixHQUFHYixVQUF4QixFQUFvQyxPQUFPaUIsUUFBUSxDQUFDO0FBQUVDLFFBQUFBLElBQUksRUFBRTtBQUFSLE9BQUQsQ0FBZjtBQUVwQyxZQUFNQyxhQUFhLEdBQUdILFFBQVEsQ0FBQ0csYUFBVCxFQUF0QixDQUhtRCxDQUluRDtBQUNBOztBQUNBLFVBQUlMLHFCQUFxQixHQUFHLEVBQXhCLElBQThCSyxhQUFhLEdBQUcsRUFBbEQsRUFDRU4saUJBQWlCLElBQUlNLGFBQXJCO0FBRUZMLE1BQUFBLHFCQUFxQixHQUFHSyxhQUF4QjtBQUNBM0IsTUFBQUEsbUJBQW1CLFNBQW5CLElBQUFBLG1CQUFtQixXQUFuQixZQUFBQSxtQkFBbUIsQ0FBR3VCLGdCQUFILENBQW5CO0FBQ0QsS0FYRDs7QUFhQSxRQUFJdkIsbUJBQUosRUFBeUI7QUFDdkJBLE1BQUFBLG1CQUFtQixDQUFDdUIsZ0JBQUQsQ0FBbkI7QUFDRCxLQUZELE1BRU87QUFDTEssTUFBQUEsVUFBVSxDQUFDLE1BQU1ILFFBQVEsQ0FBQztBQUFFQyxRQUFBQSxJQUFJLEVBQUU7QUFBUixPQUFELENBQWYsRUFBa0NsQixVQUFsQyxDQUFWO0FBQ0Q7QUFDRixHQXBDRCxFQW9DRyxFQXBDSDtBQXNDQSxRQUFNcUIsWUFBWSxHQUFHQyxTQUFTLENBQUN4QixRQUFELENBQTlCO0FBRUEsUUFBTW1CLFFBQVEsR0FBRyx3QkFDZixDQUFDO0FBQUVDLElBQUFBLElBQUksR0FBRztBQUFULE1BQWtCO0FBQUVBLElBQUFBLElBQUksRUFBRTtBQUFSLEdBQW5CLEtBQXNDO0FBQ3BDLFFBQUksQ0FBQ25CLFdBQUwsRUFBa0I7QUFDaEI7QUFDQXdCLE1BQUFBLE9BQU8sQ0FBQ0MsS0FBUixDQUFjLDRDQUFkO0FBQ0E7QUFDRDs7QUFFRCxRQUFJLENBQUMxQixRQUFMLEVBQWU7QUFDYjtBQUNBeUIsTUFBQUEsT0FBTyxDQUFDQyxLQUFSLENBQWMsNkNBQWQ7QUFDQTtBQUNEOztBQUVESCxJQUFBQSxZQUFZLENBQUNJLElBQWIsQ0FBa0I7QUFDaEIxQixNQUFBQSxXQURnQjtBQUVoQkcsTUFBQUEsUUFGZ0I7QUFHaEJDLE1BQUFBLEtBSGdCO0FBSWhCQyxNQUFBQSxNQUpnQjtBQUtoQkMsTUFBQUEsT0FMZ0I7QUFNaEJDLE1BQUFBLFVBTmdCO0FBT2hCQyxNQUFBQTtBQVBnQixLQUFsQjs7QUFVQSxRQUFJVyxJQUFKLEVBQVU7QUFDUkcsTUFBQUEsWUFBWSxDQUFDSCxJQUFiO0FBQ0EsVUFBSWpCLEtBQUssS0FBSyxVQUFkLEVBQTBCQyxRQUFRLENBQUMsTUFBRCxDQUFSO0FBQzNCO0FBQ0YsR0E1QmMsRUE2QmYsQ0FBQ0QsS0FBRCxDQTdCZSxDQUFqQjtBQWdDQSxTQUFPLENBQUNBLEtBQUQsRUFBUWdCLFFBQVIsQ0FBUDtBQUNELENBN0ZEOztlQStGZXJCLE8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBMaXZlQ2hhdExvYWRlckNvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0J1xuaW1wb3J0ICogYXMgUHJvdmlkZXJzIGZyb20gJy4uL3Byb3ZpZGVycydcblxuY29uc3QgcmVxdWVzdElkbGVDYWxsYmFjayA9XG4gIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LnJlcXVlc3RJZGxlQ2FsbGJhY2sgOiBudWxsXG5jb25zdCBjb25uZWN0aW9uID1cbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICB3aW5kb3cubmF2aWdhdG9yICYmICh3aW5kb3cubmF2aWdhdG9yIGFzIGFueSkuY29ubmVjdGlvblxuICAgIDogbnVsbFxuXG5jb25zdCB1c2VDaGF0ID0gKFxuICB7XG4gICAgbG9hZFdoZW5JZGxlXG4gIH06IHtcbiAgICBsb2FkV2hlbklkbGU6IGJvb2xlYW5cbiAgfSA9IHsgbG9hZFdoZW5JZGxlOiBmYWxzZSB9XG4pOiBbU3RhdGUsICh7IG9wZW4gfTogeyBvcGVuOiBib29sZWFuIH0pID0+IHZvaWRdID0+IHtcbiAgY29uc3Qge1xuICAgIHByb3ZpZGVyLFxuICAgIHByb3ZpZGVyS2V5LFxuICAgIGlkbGVQZXJpb2QsXG4gICAgc3RhdGUsXG4gICAgc2V0U3RhdGUsXG4gICAgYXBwSUQsXG4gICAgbG9jYWxlLFxuICAgIGJhc2VVcmwsXG4gICAgYmVmb3JlSW5pdCxcbiAgICBvblJlYWR5XG4gIH0gPSB1c2VDb250ZXh0KExpdmVDaGF0TG9hZGVyQ29udGV4dClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIERvbid0IGxvYWQgaWYgaWRsZVBlcmlvZCBpcyAwLCBudWxsIG9yIHVuZGVmaW5lZFxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhbG9hZFdoZW5JZGxlIHx8ICFpZGxlUGVyaW9kKSByZXR1cm5cblxuICAgIC8vIERvbid0IGxvYWQgaWYgMmcgY29ubmVjdGlvbiBvciBzYXZlLWRhdGEgaXMgZW5hYmxlZFxuICAgIGlmIChcbiAgICAgIGNvbm5lY3Rpb24gJiZcbiAgICAgIChjb25uZWN0aW9uLnNhdmVEYXRhIHx8IC8yZy8udGVzdChjb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUpKVxuICAgIClcbiAgICAgIHJldHVyblxuXG4gICAgaWYgKGlzTmFOKGlkbGVQZXJpb2QpKSByZXR1cm5cblxuICAgIC8vIGRlYWRsaW5lLnRpbWVSZW1haW5pbmcoKSBoYXMgYW4gdXBwZXIgbGltaXQgb2YgNTAgbWlsbGlzZWNvbmRzXG4gICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhlIHBhZ2UgaGFzIGJlZW4gaWRsZSBmb3IgYSBzaWduaWZpY2FudCBwZXJpb2Qgb2YgdGltZVxuICAgIC8vIFRoZXJlZm9yZSB3ZSBjb3VudCBjb25zZWN1dGl2ZSBtYXhpbXVtIHRpbWVSZW1haW5pbmcgY291bnRzIGFuZCBsb2FkIGNoYXQgd2hlbiB3ZSByZWFjaCBvdXIgdGhyZXNob2xkXG4gICAgbGV0IGVsYXBzZWRJZGxlUGVyaW9kID0gMFxuICAgIGxldCBwcmV2aW91c1RpbWVSZW1haW5pbmcgPSAwXG4gICAgY29uc3Qgc2NoZWR1bGVMb2FkQ2hhdCA9IChkZWFkbGluZTogSWRsZURlYWRsaW5lKSA9PiB7XG4gICAgICBpZiAoZWxhcHNlZElkbGVQZXJpb2QgPiBpZGxlUGVyaW9kKSByZXR1cm4gbG9hZENoYXQoeyBvcGVuOiBmYWxzZSB9KVxuXG4gICAgICBjb25zdCB0aW1lUmVtYWluaW5nID0gZGVhZGxpbmUudGltZVJlbWFpbmluZygpXG4gICAgICAvLyBUbyBlbnN1cmUgYnJvd3NlciBpcyBpZGxlLCBvbmx5IGFjY3VtYWx0ZSBlbGFwc2VkSWRsZVBlcmlvZCB3aGVuXG4gICAgICAvLyB0d28gY29uc2VjdXRpdmUgbWF4aW11bSB0aW1lUmVtYWluaW5nJ3MgaGF2ZSBiZWVuIG9ic2VydmVkXG4gICAgICBpZiAocHJldmlvdXNUaW1lUmVtYWluaW5nID4gNDkgJiYgdGltZVJlbWFpbmluZyA+IDQ5KVxuICAgICAgICBlbGFwc2VkSWRsZVBlcmlvZCArPSB0aW1lUmVtYWluaW5nXG5cbiAgICAgIHByZXZpb3VzVGltZVJlbWFpbmluZyA9IHRpbWVSZW1haW5pbmdcbiAgICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2s/LihzY2hlZHVsZUxvYWRDaGF0KVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0SWRsZUNhbGxiYWNrKSB7XG4gICAgICByZXF1ZXN0SWRsZUNhbGxiYWNrKHNjaGVkdWxlTG9hZENoYXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gbG9hZENoYXQoeyBvcGVuOiBmYWxzZSB9KSwgaWRsZVBlcmlvZClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGNoYXRQcm92aWRlciA9IFByb3ZpZGVyc1twcm92aWRlcl1cblxuICBjb25zdCBsb2FkQ2hhdCA9IHVzZUNhbGxiYWNrPChhcmdzOiB7IG9wZW46IGJvb2xlYW4gfSkgPT4gdm9pZD4oXG4gICAgKHsgb3BlbiA9IHRydWUgfSA9IHsgb3BlbjogdHJ1ZSB9KSA9PiB7XG4gICAgICBpZiAoIXByb3ZpZGVyS2V5KSB7XG4gICAgICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gYXBpIGtleSBnaXZlbiB0byByZWFjdC1saXZlLWNoYXQtbG9hZGVyJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBwcm92aWRlciBnaXZlbiB0byByZWFjdC1saXZlLWNoYXQtbG9hZGVyJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNoYXRQcm92aWRlci5sb2FkKHtcbiAgICAgICAgcHJvdmlkZXJLZXksXG4gICAgICAgIHNldFN0YXRlLFxuICAgICAgICBhcHBJRCxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBiYXNlVXJsLFxuICAgICAgICBiZWZvcmVJbml0LFxuICAgICAgICBvblJlYWR5XG4gICAgICB9KVxuXG4gICAgICBpZiAob3Blbikge1xuICAgICAgICBjaGF0UHJvdmlkZXIub3BlbigpXG4gICAgICAgIGlmIChzdGF0ZSAhPT0gJ2NvbXBsZXRlJykgc2V0U3RhdGUoJ29wZW4nKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3N0YXRlXVxuICApXG5cbiAgcmV0dXJuIFtzdGF0ZSwgbG9hZENoYXRdXG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUNoYXRcbiJdfQ==
;