feat: add option component

This commit is contained in:
luoxiao 2023-05-15 12:52:03 +08:00
parent 13df204940
commit 10f5403826
4 changed files with 27 additions and 17 deletions

View file

@ -1,5 +1,5 @@
mod theme;
use crate::{theme::*, utils::mount_style::mount_style};
use crate::{components::*, theme::*, utils::mount_style::mount_style};
use leptos::*;
use leptos_icons::*;
use stylers::style_sheet_str;
@ -63,7 +63,7 @@ pub fn Button(
});
let class_name = mount_style("button", || style_sheet_str!("./src/button/button.css"));
let icon_style= if children.is_some() {
let icon_style = if children.is_some() {
"margin-right: 6px"
} else {
""
@ -77,22 +77,14 @@ pub fn Button(
class=("melt-button--round", move || round.get())
style=move || css_vars.get()
>
{
if let Some(icon) = icon {
<OptionComp value=icon view=move |cx, icon| {
view!{cx,
<Icon icon=icon style=icon_style/>
}.into()
} else {
None
}
}
{
if let Some(children) = children {
children(cx).into()
} else {
None
}
}
<Icon icon=icon style=icon_style/>
}
}/>
<OptionComp value=children view=move |cx, children| {
children(cx).into_view(cx)
}/>
</button>
}
}

3
src/components/mod.rs Normal file
View file

@ -0,0 +1,3 @@
mod option_comp;
pub use option_comp::*;

View file

@ -0,0 +1,14 @@
use leptos::*;
#[component]
pub fn OptionComp<T, VF, IV>(cx: Scope, value: Option<T>, view: VF) -> impl IntoView
where
VF: Fn(Scope, T) -> IV + 'static,
IV: IntoView,
{
if let Some(value) = value {
view(cx, value).into_view(cx)
} else {
().into_view(cx)
}
}

View file

@ -1,6 +1,7 @@
mod button;
mod card;
mod checkbox;
mod components;
mod input;
mod modal;
mod progress;