1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-24 20:36:40 +07:00

(nextjs) added timeout for loader

This commit is contained in:
Fedor Katurov 2022-01-19 17:31:53 +07:00
parent 41b26e7d69
commit bcaa9fde39
2 changed files with 26 additions and 5 deletions

View file

@ -7,7 +7,7 @@ import styles from './styles.module.scss';
interface LoadingProgressProps {} interface LoadingProgressProps {}
const LoadingProgress: VFC<LoadingProgressProps> = () => { const LoadingProgress: VFC<LoadingProgressProps> = () => {
const shown = useSSRLoadingIndicator(); const shown = useSSRLoadingIndicator(300);
return shown ? ( return shown ? (
<> <>

View file

@ -2,13 +2,34 @@ import { useEffect, useState } from 'react';
import Router from 'next/router'; import Router from 'next/router';
export const useSSRLoadingIndicator = () => { /** decides to show loader on SSR loading */
export const useSSRLoadingIndicator = (delay = 0) => {
const [shown, setShown] = useState(false); const [shown, setShown] = useState(false);
useEffect(() => { useEffect(() => {
Router.events.on('routeChangeStart', () => setShown(true)); let timeout;
Router.events.on('routeChangeComplete', () => setShown(false));
Router.events.on('routeChangeError', () => setShown(false)); const show = () => {
if (timeout) {
clearTimeout(timeout);
}
timeout = setTimeout(() => {
setShown(true);
}, delay);
};
const hide = () => {
if (timeout) {
clearTimeout(timeout);
}
setShown(false);
};
Router.events.on('routeChangeStart', show);
Router.events.on('routeChangeComplete', hide);
Router.events.on('routeChangeError', hide);
}, []); }, []);
return shown; return shown;