thoth-app 0.2.1

WASM APP for bibliographic data
use yew::html;
use yew::prelude::*;
use yew::virtual_dom::VNode;
use yew_router::prelude::*;
use yew_router::route::Route;
use yew_router::switch::Permissive;

use crate::component::admin::AdminComponent;
use crate::component::catalogue::CatalogueComponent;
use crate::component::login::LoginComponent;
use crate::component::navbar::NavbarComponent;
use crate::component::notification::NotificationComponent;
use crate::route::AppRoute;

pub struct RootComponent {}

impl Component for RootComponent {
    type Message = ();
    type Properties = ();

    fn create(_: Self::Properties, _link: ComponentLink<Self>) -> Self {
        RootComponent {}
    }

    fn change(&mut self, _props: Self::Properties) -> ShouldRender {
        false
    }

    fn update(&mut self, _msg: Self::Message) -> ShouldRender {
        false
    }

    fn view(&self) -> VNode {
        html! {
            <>
                <header>
                    <NavbarComponent />
                </header>
                <NotificationComponent />
                <div class="main section">
                    <Router<AppRoute>
                        render = Router::render(|switch: AppRoute| {
                            match switch {
                                AppRoute::Home => html! {<CatalogueComponent />},
                                AppRoute::Login => html! {<LoginComponent />},
                                AppRoute::Admin(admin_route) => {
                                    html! {<AdminComponent route = admin_route />}

                                }
                                AppRoute::Error(Permissive(None)) => {
                                    html! {
                                        <div class="uk-position-center"></div>
                                    }
                                }
                                AppRoute::Error(Permissive(Some(missed_route))) => {
                                    html!{
                                        format!("Page '{}' not found", missed_route)
                                    }
                                }
                            }
                        })
                        redirect = Router::redirect(|route: Route| {
                            AppRoute::Error(Permissive(Some(route.route)))
                        })
                    />
                </div>
            </>
        }
    }
}