use crate::class::Class;
use dioxus::prelude::*;
use zino_core::SharedString;
pub fn FormFieldContainer(props: FormFieldContainerProps) -> Element {
rsx! {
div {
class: props.class,
div {
class: props.field_label_class,
label {
class: props.label_class,
{ props.label }
}
}
div {
class: props.field_body_class,
{ props.children }
}
}
}
}
#[derive(Clone, PartialEq, Props)]
pub struct FormFieldContainerProps {
#[props(into, default = "field is-horizontal")]
pub class: Class,
#[props(into, default = "field-label")]
pub field_label_class: Class,
#[props(into, default = "field-body")]
pub field_body_class: Class,
#[props(into, default = "label")]
pub label_class: Class,
#[props(into)]
pub label: SharedString,
children: Element,
}
pub fn FormField(props: FormFieldProps) -> Element {
rsx! {
div {
class: props.class,
div {
class: "{props.control_class}",
class: if props.expanded { "is-expanded" },
{ props.children }
}
}
}
}
#[derive(Clone, PartialEq, Props)]
pub struct FormFieldProps {
#[props(into, default = "field")]
pub class: Class,
#[props(into, default = "control")]
pub control_class: Class,
#[props(default = false)]
pub expanded: bool,
children: Element,
}
pub fn FormGroup(props: FormGroupProps) -> Element {
rsx! {
div {
class: "{props.class}",
class: if props.align == "center" { "is-grouped-centered" },
class: if props.align == "right" { "is-grouped-right" },
for item in props.items.iter() {
div {
class: props.control_class.clone(),
{ item }
}
}
}
}
}
#[derive(Clone, PartialEq, Props)]
pub struct FormGroupProps {
#[props(into, default = "field is-grouped")]
pub class: Class,
#[props(into, default = "control")]
pub control_class: Class,
#[props(into, default)]
pub align: SharedString,
#[props(into)]
pub items: Vec<Element>,
}
pub fn FormAddons(props: FormAddonsProps) -> Element {
rsx! {
div {
class: props.class,
for (index, item) in props.items.iter().enumerate() {
div {
class: "{props.control_class}",
class: if props.expand == index + 1 { "is-expanded" },
{ item }
}
}
}
}
}
#[derive(Clone, PartialEq, Props)]
pub struct FormAddonsProps {
#[props(into, default = "field has-addons")]
pub class: Class,
#[props(into, default = "control")]
pub control_class: Class,
#[props(default = 0)]
pub expand: usize,
#[props(into)]
pub items: Vec<Element>,
}