mcai_workflow/components/edit_parameter/
edit_icon.rs

1use crate::{IconEvent, IconList, Modal, ModalMessage};
2use css_in_rust_next::Style;
3use yew::{html, Callback, Component, Context, Html, Properties};
4
5#[derive(PartialEq, Properties)]
6pub struct EditIconProperties {
7  pub event: Callback<EditIconMessage>,
8  pub title: String,
9}
10
11pub enum EditIconMessage {
12  Selected(IconEvent),
13  Cancel,
14}
15
16pub enum InternalMessage {
17  Selected(IconEvent),
18  Modal(ModalMessage),
19}
20
21pub struct EditIcon {
22  style: Style,
23}
24
25impl Component for EditIcon {
26  type Message = InternalMessage;
27  type Properties = EditIconProperties;
28
29  fn create(_ctx: &Context<Self>) -> Self {
30    let style = Style::create("Component", include_str!("edit_style.css")).unwrap();
31    EditIcon { style }
32  }
33
34  fn update(&mut self, ctx: &Context<Self>, msg: Self::Message) -> bool {
35    match msg {
36      InternalMessage::Selected(icon_event) => ctx
37        .props()
38        .event
39        .emit(EditIconMessage::Selected(icon_event)),
40
41      InternalMessage::Modal(ModalMessage::Cancel) => {
42        ctx.props().event.emit(EditIconMessage::Cancel)
43      }
44      _ => {}
45    }
46    false
47  }
48
49  fn view(&self, ctx: &Context<Self>) -> Html {
50    html!(
51      <Modal
52        event={ctx.link().callback(InternalMessage::Modal)}
53        height="50vh" width="19vw"
54        modal_title={ctx.props().title.clone()}>
55        <div class={self.style.clone()}>
56          <IconList event={ctx.link().callback(InternalMessage::Selected)}/>
57        </div>
58      </Modal>
59    )
60  }
61}