Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

CircularIndeterminate.tsx 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import Box from '@mui/material/Box';
  2. import CircularProgress from '@mui/material/CircularProgress';
  3. import { useRouter } from 'next/router';
  4. import { useEffect, useState } from 'react';
  5. const CircularIndeterminate = () => {
  6. const router = useRouter();
  7. const [loading, setLoading] = useState(false);
  8. useEffect(() => {
  9. const handleStart = (url: string) =>
  10. url !== router.asPath && setLoading(true);
  11. const handleComplete = (url: string) =>
  12. url === router.asPath && setLoading(false);
  13. router.events.on('routeChangeStart', handleStart);
  14. router.events.on('routeChangeComplete', handleComplete);
  15. router.events.on('routeChangeError', handleComplete);
  16. return () => {
  17. router.events.off('routeChangeStart', handleStart);
  18. router.events.off('routeChangeComplete', handleComplete);
  19. router.events.off('routeChangeError', handleComplete);
  20. };
  21. });
  22. return (
  23. loading && (
  24. <Box
  25. sx={{
  26. display: 'flex',
  27. zIndex: 99,
  28. height: '100vh',
  29. width: '100vw',
  30. justifyContent: 'center',
  31. alignItems: 'center',
  32. position: 'fixed',
  33. top: 0,
  34. left: 0,
  35. }}
  36. >
  37. <Box
  38. sx={{
  39. position: 'absolute',
  40. top: '48%',
  41. left: '48%',
  42. marginX: 'auto',
  43. }}
  44. >
  45. <CircularProgress color="inherit" size={60} thickness={4} />
  46. </Box>
  47. </Box>
  48. )
  49. );
  50. };
  51. export default CircularIndeterminate;