diff options
Diffstat (limited to 'src/components/app.rs')
-rw-r--r-- | src/components/app.rs | 66 |
1 files changed, 43 insertions, 23 deletions
diff --git a/src/components/app.rs b/src/components/app.rs index a7ac5bd..dd2d018 100644 --- a/src/components/app.rs +++ b/src/components/app.rs @@ -1,16 +1,21 @@ +use std::collections::HashMap; + use leptos::prelude::*; use leptos::Params; +use leptos_meta::{provide_meta_context, MetaTags, Stylesheet, Title}; use leptos_router::hooks::use_params; -use leptos_router::hooks::use_query; use leptos_router::params::Params; -use leptos_meta::{provide_meta_context, MetaTags, Stylesheet, Title}; use leptos_router::{ - components::{ParentRoute, Route, Router, Routes}, path + components::{ParentRoute, Route, Router, Routes}, + path, }; -use crate::components::layout::Layout; -use super::renderer::WikiPage; 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; pub fn shell(options: LeptosOptions) -> impl IntoView { view! { @@ -57,41 +62,56 @@ pub fn App() -> impl IntoView { #[derive(Params, PartialEq)] struct PageParams { - path: Option<String> + path: Option<String>, +} + +#[server] +async fn get_namespace() -> Result<Namespace, ServerFnError> { + use crate::data::StormscribeData; + + Ok(StormscribeData::get_namespace()) +} + +#[server] +async fn get_pages() -> Result<HashMap<PageUuid, Page>, ServerFnError> { + use crate::data::StormscribeData; + + Ok(StormscribeData::get_pages()) } // Renders a page #[component] fn PageRender() -> impl IntoView { - use crate::actions::page::get_page_content; - let params = use_params::<PageParams>(); - let page_path = params.read() + let page_path = params + .read() .as_ref() .ok() - .map(|params| params.path.clone() - .unwrap_or("Unknown path".to_string())) + .map(|params| params.path.clone().unwrap_or("Unknown path".to_string())) .unwrap_or("Could not read params".to_string()); - let page_data = Resource::new( - move || page_path.clone(), - |page_path| get_page_content(page_path) - ); + let namespace = Resource::new(move || {}, |_| get_namespace()); + let page_resource = Resource::new(move || {}, |_| get_pages()); view! { <Suspense fallback=move || view! { <p>"Loading..."</p> } > {move || Suspend::new(async move { - let data = page_data.await; - match data { - Ok(_) => view! {<p>Loaded</p>}.into_any(), - Err(_) => view! {<p>Error</p>}.into_any(), + 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(), } })} </Suspense> - }.into_any() + } + .into_any() } // Renders a page @@ -99,11 +119,11 @@ fn PageRender() -> impl IntoView { fn PageEdit() -> impl IntoView { let params = use_params::<PageParams>(); - let page_path = params.read() + let page_path = params + .read() .as_ref() .ok() - .map(|params| params.path.clone() - .unwrap_or("Unknown path".to_string())) + .map(|params| params.path.clone().unwrap_or("Unknown path".to_string())) .unwrap_or("Could not read params".to_string()); view! { |