Adding more reactive pieces to our components.
This commit is contained in:
@ -1,3 +1,5 @@
|
||||
use std::collections::HashSet;
|
||||
|
||||
use dioxus::prelude::*;
|
||||
|
||||
use crate::components::BlogList;
|
||||
@ -9,15 +11,30 @@ const BLOG_CSS: Asset = asset!("/assets/css/blog.css");
|
||||
|
||||
|
||||
|
||||
fn convert_categories(categories: &str) -> HashSet<String>
|
||||
{
|
||||
if categories.is_empty() || categories == "all"
|
||||
{
|
||||
HashSet::new()
|
||||
}
|
||||
else
|
||||
{
|
||||
categories.split('+').map(|s| s.to_string()).collect()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// Blog page
|
||||
#[component]
|
||||
pub fn Blog(tag: String) -> Element
|
||||
{
|
||||
let mut categories: Vec<String> = vec![];
|
||||
let mut categories: Signal<HashSet<String>> =
|
||||
use_signal(|| convert_categories(&tag));
|
||||
|
||||
if !tag.is_empty() && tag != "all"
|
||||
if *categories.read() != convert_categories(&tag)
|
||||
{
|
||||
categories.push(tag);
|
||||
categories.set(convert_categories(&tag));
|
||||
}
|
||||
|
||||
rsx! {
|
||||
@ -29,6 +46,7 @@ pub fn Blog(tag: String) -> Element
|
||||
div
|
||||
{
|
||||
class: "page_content",
|
||||
|
||||
BlogList
|
||||
{
|
||||
tags: categories
|
||||
|
||||
@ -13,6 +13,14 @@ const BLOG_CSS: Asset = asset!("/assets/css/blog.css");
|
||||
#[component]
|
||||
pub fn Post(slug: String) -> Element
|
||||
{
|
||||
// Create a copy of the current slug to detect changes.
|
||||
let mut url_slug = use_signal(|| slug.clone());
|
||||
|
||||
if *url_slug.read() != slug
|
||||
{
|
||||
url_slug.set(slug.clone());
|
||||
}
|
||||
|
||||
rsx! {
|
||||
document::Stylesheet { href: BLOG_CSS }
|
||||
|
||||
@ -22,9 +30,10 @@ pub fn Post(slug: String) -> Element
|
||||
div
|
||||
{
|
||||
class: "page_content",
|
||||
|
||||
BlogPost
|
||||
{
|
||||
slug: slug
|
||||
slug: url_slug
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user