12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import Router from 'next/router';
- import NProgress from 'nprogress';
- let timer: any;
- let state: any;
- let activeRequests = 0;
- const delay = 250;
- function load() {
- if (state === 'loading') {
- return;
- }
- state = 'loading';
- timer = setTimeout(function () {
- NProgress.start();
- }, delay); // only show progress bar if it takes longer than the delay
- }
- function stop() {
- if (activeRequests > 0) {
- return;
- }
- state = 'stop';
- clearTimeout(timer);
- NProgress.done();
- }
- Router.events.on('routeChangeStart', load);
- Router.events.on('routeChangeComplete', stop);
- Router.events.on('routeChangeError', stop);
- if (typeof window !== 'undefined' && typeof window?.fetch === 'function') {
- const originalFetch = window.fetch;
- window.fetch = async function (...args) {
- if (activeRequests === 0) {
- load();
- }
- activeRequests++;
- try {
- const response = await originalFetch(...args);
- return response;
- } catch (error) {
- return Promise.reject(error);
- } finally {
- activeRequests -= 1;
- if (activeRequests === 0) {
- stop();
- }
- }
- };
- }
- export default function TopProgressBar() {
- return null;
- }
|