lbry-desktop/ui/util/lazyImport.js

27 lines
835 B
JavaScript
Raw Permalink Normal View History

import React from 'react';
import * as ACTIONS from 'constants/action_types';
const RETRY_DELAY_MS = 2000;
const RETRY_ATTEMPTS = 2;
function componentLoader(lazyComponent, attemptsLeft) {
return new Promise((resolve, reject) => {
lazyComponent()
.then(resolve)
.catch((error) => {
setTimeout(() => {
if (attemptsLeft === 1) {
window.store.dispatch({ type: ACTIONS.RELOAD_REQUIRED });
console.error(error.message); // Spew the error so users can report to us if reloading doesn't help.
} else {
componentLoader(lazyComponent, attemptsLeft - 1).then(resolve, reject);
}
}, RETRY_DELAY_MS);
});
});
}
export function lazyImport(componentImport) {
return React.lazy(() => componentLoader(componentImport, RETRY_ATTEMPTS));
}