mcai_workflow/components/edit_parameter/
edit_icon.rs1use 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}