Skip to main content

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}