Skip to main content

hyle_dioxus_native/
form.rs

1use dioxus::prelude::*;
2use hyle_dioxus::{HyleFiltersState, FormFilterField};
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///
11/// Boolean fields render as a self-labelling checkbox (label on the right).
12#[component]
13pub fn HyleFormFields(
14    filters: HyleFiltersState,
15    /// Optionally restrict which fields to render (by key). When `None` all
16    /// fields from `filters.fields` are shown.
17    only: Option<Vec<String>>,
18) -> Element {
19    let fields = filters.fields.read();
20
21    rsx! {
22        div { class: "hyle-edit-fields",
23            for field_meta in fields.iter().filter(|f| {
24                only.as_ref().map(|keys| keys.contains(&f.key)).unwrap_or(true)
25            }) {
26                {
27                    let key = field_meta.key.clone();
28                    rsx! {
29                        div { class: "hyle-field-row", key: "{key}",
30                            FormFilterField {
31                                state: filters,
32                                field_key: key,
33                            }
34                        }
35                    }
36                }
37            }
38        }
39    }
40}