use dioxus::prelude::*;
#[derive(Props, Clone, PartialEq)]
pub struct FormItemProps {
#[props(default)]
pub children: Element,
#[props(default)]
pub label: Option<String>,
#[props(default)]
pub prop: Option<String>,
#[props(default)]
pub label_width: Option<String>,
#[props(default = false)]
pub required: bool,
#[props(default)]
pub error: Option<String>,
#[props(default = false)]
pub show_error: bool,
#[props(default = false)]
pub inline_message: bool,
#[props(default)]
pub status: Option<String>,
#[props(default)]
pub class: Option<String>,
#[props(default)]
pub style: Option<String>,
}
#[component]
pub fn FormItem(props: FormItemProps) -> Element {
let mut class_names = vec!["el-form-item".to_string()];
if props.required { class_names.push("is-required".to_string()); }
if props.error.is_some() { class_names.push("is-error".to_string()); }
if let Some(ref c) = props.class { class_names.push(c.clone()); }
let label_style = props.label_width.clone().map(|w| format!("width: {};", w)).unwrap_or_default();
rsx! {
div {
class: "{class_names.join(\" \")}",
style: props.style.clone().unwrap_or_default(),
if let Some(ref label) = props.label {
label {
class: "el-form-item__label",
style: "{label_style}",
"{label}"
}
}
div {
class: "el-form-item__content",
{props.children}
if let Some(ref error) = props.error {
div {
class: "el-form-item__error",
"{error}"
}
}
}
}
}
}