use leptos::*;
use leptos::logging::log;
use wasm_bindgen::{JsValue};
use js_sys::{Array};
pub use super::common::Size;
#[component]
pub fn Checkbox(
#[prop(into, optional)] label: Option<AttributeValue>,
#[prop(into, optional)] true_label: Option<AttributeValue>,
#[prop(into, optional)] false_label: Option<AttributeValue>,
#[prop(into, optional, default = false.into())] disabled: MaybeSignal<bool>,
#[prop(into, optional, default = false.into())] border: MaybeSignal<bool>,
#[prop(into, optional, default = Size::Default_.into())] size: MaybeSignal<Size>,
#[prop(into, optional)] name: MaybeSignal<String>,
#[prop(into, optional, default = false.into())] checked: MaybeSignal<bool>,
#[prop(into, optional, default = false.into())] indeterminate: MaybeSignal<bool>,
#[prop(into, optional)] tabindex: MaybeSignal<i32>,
#[prop(into, optional)] id: MaybeSignal<String>,
#[prop(into, optional, default = false.into())] controls: MaybeSignal<bool>,
#[prop(into, optional)] on_change: Option<Callback<bool>>,
) -> impl IntoView
{
view! {
<el-checkbox
label=label
true-label=true_label
false-label=false_label
disabled=disabled
border=border
size=size.get().as_str()
name=name
checked=checked
indeterminate=indeterminate
tabindex=tabindex
id=id
controls=controls
on:ce-change=move|ev: leptos::ev::CustomEvent| {
if let Some(cb) = on_change {
let data= Array::from(&ev.detail());
if data != JsValue::UNDEFINED.into() && data.length() != 0 {
let data = data.get(0);
if let Ok(d) = serde_wasm_bindgen::from_value(data) {
cb.call(d);
} else {
log!("Checkbox: could not deserialize data");
}
}
}
}
on:ce-update:modelValue=move |ev: leptos::ev::CustomEvent| {
let data= Array::from(&ev.detail());
if data != JsValue::UNDEFINED.into() && data.length() != 0 {
let data = data.get(0);
if let Ok(_d) = serde_wasm_bindgen::from_value::<bool>(data) {
} else {
log!("Checkbox: could not deserialize data");
}
}
}
>
</el-checkbox>
}
}