hyle_dioxus_native/form.rs
1use dioxus::prelude::*;
2use hyle_dioxus::{HyleFiltersState, FilterField};
3
4// ── HyleFormFields ────────────────────────────────────────────────────────────
5
6/// Renders a labeled input row for every field exposed by `filters`.
7///
8/// This mirrors `HyleFormFields` in `@tty-pt/hyle-react-dom`. Fields with no
9/// metadata (not in `filters.fields`) are skipped.
10#[component]
11pub fn HyleFormFields(
12 filters: HyleFiltersState,
13 /// Optionally restrict which fields to render (by key). When `None` all
14 /// fields from `filters.fields` are shown.
15 only: Option<Vec<String>>,
16) -> Element {
17 let fields = filters.fields.read();
18
19 rsx! {
20 div { class: "editFields",
21 for field_meta in fields.iter().filter(|f| {
22 only.as_ref().map(|keys| keys.contains(&f.key)).unwrap_or(true)
23 }) {
24 div { class: "fieldRow", key: "{field_meta.key}",
25 label { class: "fieldLabel",
26 "{field_meta.label}"
27 }
28 FilterField {
29 state: filters,
30 field_key: field_meta.key.clone(),
31 }
32 }
33 }
34 }
35 }
36}