Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

CircularIndeterminate.tsx 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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) => url !== router.asPath && setLoading(true);
  10. const handleComplete = (url) => url === router.asPath && setLoading(false);
  11. router.events.on('routeChangeStart', handleStart);
  12. router.events.on('routeChangeComplete', handleComplete);
  13. router.events.on('routeChangeError', handleComplete);
  14. return () => {
  15. router.events.off('routeChangeStart', handleStart);
  16. router.events.off('routeChangeComplete', handleComplete);
  17. router.events.off('routeChangeError', handleComplete);
  18. };
  19. });
  20. return (
  21. loading && (
  22. <Box
  23. sx={{
  24. display: 'flex',
  25. zIndex: 99,
  26. height: '100vh',
  27. width: '100vw',
  28. justifyContent: 'center',
  29. alignItems: 'center',
  30. position: 'fixed',
  31. top: 0,
  32. left: 0,
  33. }}
  34. >
  35. <Box
  36. sx={{
  37. position: 'absolute',
  38. top: '48%',
  39. left: '48%',
  40. marginX: 'auto',
  41. color: 'primary.dark',
  42. }}
  43. >
  44. <CircularProgress color="inherit" size={60} thickness={4} />
  45. </Box>
  46. </Box>
  47. )
  48. );
  49. };
  50. export default CircularIndeterminate;