Files
herbapi/herbapi-ui/src/pages/home.rs
T
florian.berthold 484979ad53 Initial HerbAPI implementation
Rust/Axum REST API (herbapi-api) with PostgreSQL, S3/Garage, OIDC auth.
Dioxus 0.7 WASM frontend (herbapi-ui) with sidebar layout and botanical reference style.
9 SQL migrations covering families, species, cultivars, suppliers, companions, images, users, API tokens.
2026-03-14 00:02:29 +01:00

53 lines
1.8 KiB
Rust

use dioxus::prelude::*;
use crate::api;
use crate::app::Route;
use crate::components::plant_card::PlantCard;
#[component]
pub fn Home() -> Element {
let mut search_query = use_signal(|| String::new());
let species = use_resource(|| async { api::list_species(1, None, None).await });
rsx! {
div { class: "page home-page",
h1 { "HerbAPI" }
p { class: "subtitle", "Trilingual plant reference database" }
div { class: "search-bar",
input {
r#type: "text",
placeholder: "Search plants...",
value: "{search_query}",
oninput: move |e| search_query.set(e.value()),
onkeydown: move |e| {
if e.key() == Key::Enter {
let nav = navigator();
nav.push(Route::SearchPage {});
}
},
}
}
h2 { "Recent Species" }
match &*species.read() {
None => rsx! { p { "Loading..." } },
Some(Err(e)) => rsx! { p { class: "error", "Error: {e}" } },
Some(Ok(data)) => rsx! {
div { class: "card-grid",
for s in data.data.iter().take(12) {
PlantCard {
key: "{s.id}",
slug: s.slug.clone(),
name: s.name_scientific.clone(),
name_common: s.name_en.clone(),
entity_type: "species".to_string(),
}
}
}
},
}
}
}
}