Gate rendering of the view on having actual recipes available.

This commit is contained in:
Jeremy Wall 2022-02-07 19:58:56 -05:00
parent 22eadb832a
commit ace489924d

View File

@ -37,19 +37,8 @@ enum AppRoutes {
pub fn ui() -> View<G> { pub fn ui() -> View<G> {
let app_service = AppService::new(); let app_service = AppService::new();
console_log!("Starting UI"); console_log!("Starting UI");
create_effect(cloned!((app_service) => move || { // TODO(jwall): We need to ensure that this happens before
spawn_local_in_scope({ // we render the UI below.
let mut app_service = app_service.clone();
async move {
match AppService::fetch_recipes().await {
Ok(recipes) => {
app_service.set_recipes(recipes);
}
Err(msg) => console_error!("Failed to get recipes {}", msg),
}
}
});
}));
view! { view! {
// NOTE(jwall): Set the app_service in our toplevel scope. Children will be able // NOTE(jwall): Set the app_service in our toplevel scope. Children will be able
// to find the service as long as they are a child of this scope. // to find the service as long as they are a child of this scope.
@ -57,32 +46,45 @@ pub fn ui() -> View<G> {
value: app_service.clone(), value: app_service.clone(),
children: || view! { children: || view! {
Router(RouterProps::new(HistoryIntegration::new(), move |routes: ReadSignal<AppRoutes>| { Router(RouterProps::new(HistoryIntegration::new(), move |routes: ReadSignal<AppRoutes>| {
let t = create_memo(move || { let view = Signal::new(View::empty());
console_debug!("Determining route."); create_effect(cloned!((view) => move || {
let route = routes.get(); spawn_local_in_scope(cloned!((routes, view) => {
console_debug!("Route {:?}", route); let mut app_service = app_service.clone();
match route.as_ref() { async move {
AppRoutes::Root => view! { match AppService::fetch_recipes().await {
Start() Ok(recipes) => {
}, app_service.set_recipes(recipes);
AppRoutes::Recipe{index:idx} => view! { }
RecipeView(*idx) Err(msg) => console_error!("Failed to get recipes {}", msg),
}, }
AppRoutes::Menu => view! { console_debug!("Determining route.");
"TODO!!" let route = routes.get();
}, console_debug!("Route {:?}", route);
AppRoutes::NotFound => view! { let t = match route.as_ref() {
"NotFound" AppRoutes::Root => view! {
Start()
},
AppRoutes::Recipe{index:idx} => view! {
RecipeView(*idx)
},
AppRoutes::Menu => view! {
"TODO!!"
},
AppRoutes::NotFound => view! {
"NotFound"
}
};
view.set(t);
console_debug!("Created our route view effect.");
} }
} }));
}); }));
console_debug!("Created our route view memo.");
view! { view! {
// NOTE(jwall): The Router component *requires* there to be exactly one node as the root of this view. // NOTE(jwall): The Router component *requires* there to be exactly one node as the root of this view.
// No fragments or missing nodes allowed or it will panic at runtime. // No fragments or missing nodes allowed or it will panic at runtime.
div(class="app") { div(class="app") {
Header() Header()
(t.get().as_ref().clone()) (view.get().as_ref().clone())
} }
} }
})) }))