1
1
import { BrowserRouter , Routes , Route } from "react-router-dom" ;
2
2
import { useState , useEffect } from "react" ;
3
+ import { motion } from "framer-motion" ;
3
4
import Home from "./pages/Home" ;
4
5
import About from "./pages/About" ;
5
6
import NotFound from "./pages/404" ;
@@ -10,37 +11,44 @@ import Base from "./layouts/Base";
10
11
import Subscribe from "./components/Subscribe" ;
11
12
import Loader from "./components/Loader" ;
12
13
13
- export default function App ( ) {
14
- const [ isVisible , setIsVisible ] = useState ( false ) ;
14
+ // Custom hook to handle the loader
15
+ const useLoader = ( duration = 1500 ) => {
15
16
const [ loading , setLoading ] = useState ( true ) ;
16
-
17
17
useEffect ( ( ) => {
18
- const timer = setTimeout ( ( ) => {
19
- setLoading ( false ) ;
20
- } , 1500 ) ; // Adjusted loader time to 1.5 seconds for smoother transition
18
+ const timer = setTimeout ( ( ) => setLoading ( false ) , duration ) ;
19
+ return ( ) => clearTimeout ( timer ) ; // This is the cleanup timer
20
+ } , [ duration ] ) ;
21
+ return loading ;
22
+ } ;
21
23
22
- return ( ) => clearTimeout ( timer ) ; // Cleaning up timer
23
- } , [ ] ) ;
24
-
25
- const handleSetVisible = ( value ) => setIsVisible ( value ) ;
24
+ export default function App ( ) {
25
+ const [ isVisible , setVisible ] = useState ( false ) ;
26
+ const loading = useLoader ( ) ; // Loader logic
26
27
27
28
return (
28
29
< div className = "bg-primary" >
29
- { isVisible && < Subscribe handle = { handleSetVisible } /> }
30
- < Loader loading = { loading } />
30
+ { isVisible && < Subscribe handle = { setVisible } /> }
31
+ { loading && < Loader loading = { loading } /> }
31
32
{ ! loading && (
32
- < BrowserRouter >
33
- < Base >
34
- < Routes >
35
- < Route path = "/" element = { < Home handle = { handleSetVisible } /> } />
36
- < Route path = "/about-us" element = { < About handle = { handleSetVisible } /> } />
37
- < Route path = "/community" element = { < Community /> } />
38
- < Route path = "/events" element = { < Events /> } />
39
- < Route path = "/contact-us" element = { < ContactForm /> } />
40
- < Route path = "*" element = { < NotFound /> } />
41
- </ Routes >
42
- </ Base >
43
- </ BrowserRouter >
33
+ < motion . div
34
+ initial = { { filter : "blur(10px)" } }
35
+ animate = { { filter : "blur(0px)" } }
36
+ transition = { { duration : 0.5 } }
37
+ className = "transition-all duration-400"
38
+ >
39
+ < BrowserRouter >
40
+ < Base >
41
+ < Routes >
42
+ < Route path = "/" element = { < Home handle = { setVisible } /> } />
43
+ < Route path = "/about-us" element = { < About handle = { setVisible } /> } />
44
+ < Route path = "/community" element = { < Community /> } />
45
+ < Route path = "/events" element = { < Events /> } />
46
+ < Route path = "/contact-us" element = { < ContactForm /> } />
47
+ < Route path = "*" element = { < NotFound /> } />
48
+ </ Routes >
49
+ </ Base >
50
+ </ BrowserRouter >
51
+ </ motion . div >
44
52
) }
45
53
</ div >
46
54
) ;
0 commit comments