mcai_workflow/components/
button.rs1use css_in_rust_next::Style;
2use web_sys::MouseEvent;
3use yew::{classes, html, Callback, Component, Context, Html, Properties};
4
5#[derive(PartialEq, Properties)]
6pub struct ButtonProperties {
7 pub label: String,
8 pub icon: Option<Html>,
9 #[prop_or_default]
10 pub disabled: bool,
11 pub onclick: Callback<MouseEvent>,
12 #[prop_or_default]
13 pub class: Option<String>,
14}
15
16pub struct Button {
17 style: Style,
18}
19
20impl Component for Button {
21 type Message = ();
22 type Properties = ButtonProperties;
23
24 fn create(_ctx: &Context<Self>) -> Self {
25 let style = Style::create(
26 "Component",
27 r#"
28 padding: 7px;
29 cursor: pointer;
30
31 svg {
32 vertical-align: middle;
33 height: 18px;
34 }
35 "#,
36 )
37 .unwrap();
38
39 Button { style }
40 }
41
42 fn view(&self, ctx: &Context<Self>) -> Html {
43 let class_names = classes!(
44 self.style.to_string(),
45 ctx.props().class.clone().unwrap_or_default()
46 );
47 html!(
48 <button onclick={ctx.props().onclick.clone()} class={class_names} disabled={ctx.props().disabled}>
49 {ctx.props().icon.clone().unwrap_or_default()}
50 {&ctx.props().label}
51 </button>
52 )
53 }
54}