summary refs log tree commit diff
path: root/src/components
diff options
context:
space:
mode:
Diffstat (limited to 'src/components')
-rw-r--r--src/components/app.rs37
1 files changed, 19 insertions, 18 deletions
diff --git a/src/components/app.rs b/src/components/app.rs
index dd2d018..2814562 100644
--- a/src/components/app.rs
+++ b/src/components/app.rs
@@ -13,9 +13,7 @@ use leptos_router::{
 use super::editor::WikiEditor;
 use super::renderer::WikiPage;
 use crate::components::layout::Layout;
-use crate::data::Namespace;
-use crate::data::Page;
-use crate::data::PageUuid;
+use crate::data::{Namespace, Page, PageData, PageUuid};
 
 pub fn shell(options: LeptosOptions) -> impl IntoView {
     view! {
@@ -69,14 +67,21 @@ struct PageParams {
 async fn get_namespace() -> Result<Namespace, ServerFnError> {
     use crate::data::StormscribeData;
 
-    Ok(StormscribeData::get_namespace())
+    Ok(StormscribeData::get_namespace().await)
 }
 
 #[server]
 async fn get_pages() -> Result<HashMap<PageUuid, Page>, ServerFnError> {
     use crate::data::StormscribeData;
 
-    Ok(StormscribeData::get_pages())
+    Ok(StormscribeData::get_all_pages().await)
+}
+
+#[server]
+async fn lookup_page(path: String) -> Result<PageData, ServerFnError> {
+    use crate::data::StormscribeData;
+
+    Ok(StormscribeData::get_page_data(path).await)
 }
 
 // Renders a page
@@ -91,24 +96,20 @@ fn PageRender() -> impl IntoView {
         .map(|params| params.path.clone().unwrap_or("Unknown path".to_string()))
         .unwrap_or("Could not read params".to_string());
 
-    let namespace = Resource::new(move || {}, |_| get_namespace());
-    let page_resource = Resource::new(move || {}, |_| get_pages());
+    let page_resource = Resource::new(
+        move || page_path.clone(),
+        |page_path| async move { lookup_page(page_path).await },
+    );
 
     view! {
         <Suspense
             fallback=move || view! { <p>"Loading..."</p> }
         >
-            {move || Suspend::new(async move {
-                let name_data = namespace.await;
-                let page_data = page_resource.await;
-                match (name_data, page_data) {
-                    (Ok(names), Ok(pages)) => view! {
-                        <pre>{format!("{names:#?}")}</pre>
-                        <pre>{format!("{pages:#?}")}</pre>
-                    }.into_any(),
-                    _ => view! {<p>Error</p>}.into_any(),
-                }
-            })}
+            {move || page_resource.get()
+                .map(|page| view! {
+                    <pre>{format!("{page:#?}")}</pre>
+                })
+            }
         </Suspense>
     }
     .into_any()