mcai_workflow/components/
button.rs

1use 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}