use crate::components::{Login, ViewMode}; use crate::models::ical::VEvent; use crate::services::calendar_service::UserInfo; use yew::prelude::*; use yew_router::prelude::*; #[derive(Clone, Routable, PartialEq)] pub enum Route { #[at("/")] Home, #[at("/login")] Login, #[at("/calendar")] Calendar, } #[derive(Properties, PartialEq)] pub struct RouteHandlerProps { pub auth_token: Option, pub user_info: Option, pub on_login: Callback, #[prop_or_default] pub on_event_context_menu: Option>, #[prop_or_default] pub on_calendar_context_menu: Option>, #[prop_or_default] pub view: ViewMode, #[prop_or_default] pub on_create_event_request: Option>, #[prop_or_default] pub on_event_update_request: Option< Callback<( VEvent, chrono::NaiveDateTime, chrono::NaiveDateTime, bool, Option>, Option, Option, )>, >, #[prop_or_default] pub context_menus_open: bool, } #[function_component(RouteHandler)] pub fn route_handler(props: &RouteHandlerProps) -> Html { let auth_token = props.auth_token.clone(); let user_info = props.user_info.clone(); let on_login = props.on_login.clone(); let on_event_context_menu = props.on_event_context_menu.clone(); let on_calendar_context_menu = props.on_calendar_context_menu.clone(); let view = props.view.clone(); let on_create_event_request = props.on_create_event_request.clone(); let on_event_update_request = props.on_event_update_request.clone(); let context_menus_open = props.context_menus_open; html! { render={move |route| { let auth_token = auth_token.clone(); let user_info = user_info.clone(); let on_login = on_login.clone(); let on_event_context_menu = on_event_context_menu.clone(); let on_calendar_context_menu = on_calendar_context_menu.clone(); let view = view.clone(); let on_create_event_request = on_create_event_request.clone(); let on_event_update_request = on_event_update_request.clone(); let context_menus_open = context_menus_open; match route { Route::Home => { if auth_token.is_some() { html! { to={Route::Calendar}/> } } else { html! { to={Route::Login}/> } } } Route::Login => { if auth_token.is_some() { html! { to={Route::Calendar}/> } } else { html! { } } } Route::Calendar => { if auth_token.is_some() { html! { } } else { html! { to={Route::Login}/> } } } } }} /> } } #[derive(Properties, PartialEq)] pub struct CalendarViewProps { pub user_info: Option, #[prop_or_default] pub on_event_context_menu: Option>, #[prop_or_default] pub on_calendar_context_menu: Option>, #[prop_or_default] pub view: ViewMode, #[prop_or_default] pub on_create_event_request: Option>, #[prop_or_default] pub on_event_update_request: Option< Callback<( VEvent, chrono::NaiveDateTime, chrono::NaiveDateTime, bool, Option>, Option, Option, )>, >, #[prop_or_default] pub context_menus_open: bool, } use crate::components::Calendar; #[function_component(CalendarView)] pub fn calendar_view(props: &CalendarViewProps) -> Html { html! {
} }