Frontend overhaul: NetBox-style detail pages, selectable columns, data sources

- Cultivar/species detail pages rewritten with two-column card layout, attribute tables, em-dash placeholders
- Column toggle + per-page selector on all list pages (families, species, cultivars, suppliers)
- Species list: table/card view toggle with family, layer, N-fixer, uses columns
- Cultivar detail: supplier links with SKU/price/product URL, species info section
- Data sources page (/sources) with attribution for all 10 data sources
- Fixed Cultivar/Species structs with #[serde(default)] for API compatibility
- Added table_controls component (reusable column toggle + per-page selector)
- Removed max-width constraint on content area for full-width tables
- Fixed route conflicts: merged {slug}/{id} into single {ref} routes
- Removed PostgreSQL enum types (plant_layer, drought_tolerance, etc.) in favor of TEXT
- Fixed API per_page parameter support across all list endpoints
This commit is contained in:
2026-03-15 00:53:06 +01:00
parent 484979ad53
commit 42906efd90
17 changed files with 2130 additions and 276 deletions
+4
View File
@@ -27,6 +27,8 @@ pub enum Route {
SupplierDetail { slug: String },
#[route("/search")]
SearchPage {},
#[route("/sources")]
Sources {},
#[end_layout]
#[route("/:..segments")]
NotFound { segments: Vec<String> },
@@ -62,6 +64,7 @@ fn Layout() -> Element {
NavLink { to: Route::CultivarList {}, label: "Cultivars" }
NavLink { to: Route::SupplierList {}, label: "Suppliers" }
NavLink { to: Route::SearchPage {}, label: "Search" }
NavLink { to: Route::Sources {}, label: "Sources" }
}
div { class: "sidebar-user",
if let Some(ref u) = user {
@@ -104,5 +107,6 @@ pub use crate::pages::cultivars::{CultivarDetail, CultivarList};
pub use crate::pages::families::{FamilyDetail, FamilyList};
pub use crate::pages::home::Home;
pub use crate::pages::search::SearchPage;
pub use crate::pages::sources::Sources;
pub use crate::pages::species::{SpeciesDetail, SpeciesList};
pub use crate::pages::suppliers::{SupplierDetail, SupplierList};