1+ // src/app.rs
12use std:: rc:: Rc ;
23use yew:: prelude:: * ;
34use yew_router:: prelude:: * ;
45
56use crate :: components:: layout:: Layout ;
7+ use crate :: components:: nav_context:: NavProvider ;
8+ use crate :: components:: themecontext:: ThemeProvider ;
9+ use crate :: pages:: admin:: Admin ;
610use crate :: pages:: blog:: Blog ;
711use crate :: pages:: blog_post:: BlogPost ;
812use crate :: pages:: contact:: Contact ;
913use crate :: pages:: home:: Home ;
14+ use crate :: pages:: login:: Login ;
1015use crate :: pages:: projects:: Projects ;
1116use crate :: route:: Route ;
1217
@@ -43,50 +48,13 @@ impl Reducible for ThemeState {
4348
4449#[ function_component( App ) ]
4550pub fn app ( ) -> Html {
46- let dark_mode = use_state ( || {
47- // Check local storage or system preference for initial value
48- web_sys:: window ( )
49- . and_then ( |win| win. local_storage ( ) . ok ( ) )
50- . flatten ( )
51- . and_then ( |storage| storage. get_item ( "darkMode" ) . ok ( ) )
52- . flatten ( )
53- . map ( |val| val == "true" )
54- . unwrap_or ( false )
55- } ) ;
56-
57- let dark_mode = use_state ( || true ) ; // Initial state, true for dark mode
58- let toggle_theme = {
59- let dark_mode = dark_mode. clone ( ) ;
60- Callback :: from ( move |_| {
61- let new_mode = !* dark_mode;
62- dark_mode. set ( new_mode) ;
63-
64- // Update the document class to reflect the theme change
65- if let Some ( document) = web_sys:: window ( ) . and_then ( |win| win. document ( ) ) {
66- if let Some ( html) = document. document_element ( ) {
67- if new_mode {
68- let _ = html. class_list ( ) . add_1 ( "dark" ) ;
69- } else {
70- let _ = html. class_list ( ) . remove_1 ( "dark" ) ;
71- }
72- }
73- }
74- } )
75- } ;
76-
77- let theme_context = ThemeContext {
78- dark_mode : * dark_mode,
79- toggle_theme,
80- } ;
81-
8251 html ! {
8352 <BrowserRouter >
84- <ContextProvider <ThemeContext > context={ theme_context} >
85- <div class={ classes!( "min-h-screen" , "transition-colors" , "duration-300" ,
86- if * dark_mode { "dark" } else { "" } ) } >
53+ <ThemeProvider >
54+ <NavProvider >
8755 <Switch <Route > render={ switch} />
88- </div >
89- </ContextProvider < ThemeContext > >
56+ </NavProvider >
57+ </ThemeProvider >
9058 </BrowserRouter >
9159 }
9260}
@@ -98,6 +66,8 @@ pub fn switch(route: Route) -> Html {
9866 Route :: Projects => html ! { <Layout ><Projects /></Layout > } ,
9967 Route :: Blog => html ! { <Layout ><Blog /></Layout > } ,
10068 Route :: BlogPost { id } => html ! { <Layout ><BlogPost { id} /></Layout > } ,
69+ Route :: Admin => html ! { <Layout ><Admin /></Layout > } ,
70+ Route :: Login => html ! { <Layout ><Login /></Layout > } ,
10171 Route :: NotFound => html ! { <div class="not-found" ><h1>{ "404 - Not Found" } </h1></div> } ,
10272 }
10373}
0 commit comments