diff --git a/bard/Cargo.toml b/bard/Cargo.toml index e693c37..f3e03c1 100644 --- a/bard/Cargo.toml +++ b/bard/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bard" -version = "0.0.21" +version = "0.0.22" edition = "2024" description = "Dioxus components that will display a Tavern blogging system Blog." repository = "/CyberMages/tavern" diff --git a/bard/src/components.rs b/bard/src/components.rs index 6d096a9..8051645 100644 --- a/bard/src/components.rs +++ b/bard/src/components.rs @@ -243,7 +243,7 @@ pub fn BlogList(tags: Signal>, children: Element) -> Element #[component] pub fn TagSelector(toggled_tags: Signal>) -> Element { - let mut categories = use_signal(Vec::::new); + let mut categories = use_signal(|| Vec::::new()); let tags = use_server_future(move || async move { get_tags().await })?; @@ -304,13 +304,10 @@ pub fn TagSelector(toggled_tags: Signal>) -> Element } #[component] -pub fn PostHeaderAuthor() -> Element +pub fn PostHeaderAuthor(adventurer: Signal>) -> Element { - let author: Signal> = - use_context::>>(); - rsx! { - match author() + match adventurer() { Some(author) => { @@ -333,11 +330,9 @@ pub fn PostHeaderAuthor() -> Element } #[component] -pub fn PostHeader() -> Element +pub fn PostHeader(tale: Signal>, + adventurer: Signal>) -> Element { - let tale: Signal> = use_context::>>(); - let adventurer = use_context::>>(); - let converted_tags = use_memo(move || { tale().as_ref() .map(|t| { @@ -380,9 +375,9 @@ pub fn PostHeader() -> Element match adventurer() { - Some(author) => + Some(_) => { - rsx! { PostHeaderAuthor {} } + rsx! { PostHeaderAuthor { adventurer: adventurer } } } None => @@ -396,18 +391,19 @@ pub fn PostHeader() -> Element #[component] pub fn BlogPost(slug: Signal, children: Element) -> Element { + // The tale depends on the post future resolving. + let mut tale: Signal> = use_signal(|| None); + let mut adventurer = use_signal(|| None); + // Run a once off server fetch of the unchanging blog data. - let post = use_server_future(move || { + let post = use_server_future(move || + { // Make this reactive so that as the page changes it should rerun this. let url_slug = slug(); async move { get_blog_post(url_slug).await } })?; - // The tale depends on the post future resolving. - let mut tale: Signal> = use_signal(|| None); - use_context_provider(|| tale); - let author = use_server_future(move || { let handle = match tale() { @@ -419,9 +415,6 @@ pub fn BlogPost(slug: Signal, children: Element) -> Element async move { get_author(handle).await } })?; - let mut adventurer = use_signal(|| None); - use_context_provider(|| adventurer); - use_effect(move || { if let Some(Ok(data)) = &*post.read() { @@ -450,7 +443,11 @@ pub fn BlogPost(slug: Signal, children: Element) -> Element { rsx! { - PostHeader {} + PostHeader + { + tale: tale, + adventurer: adventurer + } //Story {}