65 lines
1.7 KiB
Rust
65 lines
1.7 KiB
Rust
use crate::components::error::error_component::ErrorComponent;
|
|
use crate::components::error::error_provider::ErrorProvider;
|
|
use components::admin::Admin;
|
|
use components::create_achievement::CreateAchievementComponent;
|
|
use components::create_milestone::CreateMilestoneComponent;
|
|
use components::root::Root;
|
|
use std::rc::Rc;
|
|
use yew::prelude::*;
|
|
use yew_router::BrowserRouter;
|
|
use yew_router::Routable;
|
|
use yew_router::Switch;
|
|
|
|
mod components;
|
|
pub mod event_bus;
|
|
mod services;
|
|
|
|
#[derive(Debug, Clone, Copy, PartialEq, Routable)]
|
|
enum Route {
|
|
#[at("/")]
|
|
Root,
|
|
#[at("/chat")]
|
|
Admin,
|
|
#[at("/create-achievement")]
|
|
CreateAchievement,
|
|
#[at("/create-milestone")]
|
|
CreateMilestone,
|
|
#[not_found]
|
|
#[at("/404")]
|
|
NotFound,
|
|
}
|
|
|
|
fn switch(selected_route: Route) -> Html {
|
|
match selected_route {
|
|
Route::Root => html! {<Root />},
|
|
Route::Admin => html! {<Admin/>},
|
|
Route::CreateAchievement => html! {<CreateAchievementComponent/>},
|
|
Route::CreateMilestone => html! {<CreateMilestoneComponent/>},
|
|
Route::NotFound => html! {<h1>{"404 not found"}</h1>},
|
|
}
|
|
}
|
|
|
|
#[derive(Default, Clone, Debug, PartialEq, Eq)]
|
|
struct AppStateInner {
|
|
state: common::State,
|
|
}
|
|
type AppState = Rc<AppStateInner>;
|
|
|
|
#[function_component]
|
|
pub fn App() -> Html {
|
|
let ctx = use_state(|| Rc::new(AppStateInner::default()));
|
|
|
|
html! {
|
|
<ContextProvider<AppState> context={(*ctx).clone()}>
|
|
<ErrorProvider>
|
|
<div class="container" style="margin-top: 5%; margin-bottom: 25%">
|
|
<ErrorComponent />
|
|
<BrowserRouter>
|
|
<Switch<Route> render={switch}/>
|
|
</BrowserRouter>
|
|
</div>
|
|
</ErrorProvider>
|
|
</ContextProvider<AppState>>
|
|
}
|
|
}
|