orbital_base_components/card/
button_area.rs1use std::rc::Rc;
2
3use leptos::{ev, prelude::*};
4
5#[component]
7pub fn BaseCardButtonArea(
8 #[prop(optional, into)] class: MaybeProp<String>,
9 #[prop(optional, into)] href: MaybeProp<String>,
10 #[prop(optional, into)] disabled: Signal<bool>,
11 #[prop(optional)] on_click: Option<Callback<ev::MouseEvent>>,
12 children: Children,
13) -> impl IntoView {
14 let use_link = href.get_untracked().map(|h| !h.is_empty()).unwrap_or(false);
15 let child_view = children();
16 let href_value = href.get_untracked().unwrap_or_default();
17 let on_click = Rc::new(on_click);
18
19 if use_link {
20 let on_click = on_click.clone();
21 view! {
22 <a
23 class=move || class.get().unwrap_or_default()
24 href=href_value.clone()
25 aria-disabled=move || disabled.get().then_some("true")
26 on:click=move |e: ev::MouseEvent| {
27 if disabled.get_untracked() {
28 e.prevent_default();
29 return;
30 }
31 if let Some(handler) = on_click.as_ref() {
32 handler.run(e);
33 }
34 }
35 >
36 {child_view}
37 </a>
38 }
39 .into_any()
40 } else {
41 view! {
42 <button
43 type="button"
44 class=move || class.get().unwrap_or_default()
45 disabled=move || disabled.get().then_some("")
46 aria-disabled=move || disabled.get().then_some("true")
47 on:click=move |e: ev::MouseEvent| {
48 if disabled.get_untracked() {
49 e.prevent_default();
50 return;
51 }
52 if let Some(handler) = on_click.as_ref() {
53 handler.run(e);
54 }
55 }
56 >
57 {child_view}
58 </button>
59 }
60 .into_any()
61 }
62}