diff --git a/crates/ascend/src/components/button.rs b/crates/ascend/src/components/button.rs index 81844db..cec9eb1 100644 --- a/crates/ascend/src/components/button.rs +++ b/crates/ascend/src/components/button.rs @@ -1,23 +1,39 @@ +use super::icons::Icon; use leptos::prelude::*; use web_sys::MouseEvent; #[component] -pub fn Button(icon: I, text: T, onclick: impl FnMut(MouseEvent) + 'static) -> impl IntoView -where - I: Fn() -> I_IV, - I_IV: IntoView, - T: Fn() -> T_IV, - T_IV: IntoView, -{ - // let icon = icon.map(|f| f()); +pub fn Button( + #[prop(optional)] + #[prop(into)] + icon: MaybeProp, + + #[prop(into)] text: Signal, + + onclick: impl FnMut(MouseEvent) + 'static, +) -> impl IntoView { + let icon_view = icon.get().map(|i| { + let icon_view = i.into_view(); + view! {
{icon_view}
} + }); + + let separator = icon + .get() + .is_some() + .then(|| view! {
}); + + let text_view = view! {
{text.get()}
}; + view! { } } @@ -28,17 +44,16 @@ mod tests { #[test] fn baseline() { - let icon = || (); - let text = || (); + let text = "foo"; let onclick = |_| {}; - let props = ButtonProps { icon, text, onclick }; - Button(props); + + view! {