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}