patternfly_yew/components/toolbar/
child.rs

1use super::*;
2use std::rc::Rc;
3use yew::{
4    prelude::*,
5    virtual_dom::{VChild, VComp},
6};
7
8/// Child of a toolbar component
9#[derive(Clone, PartialEq)]
10pub enum ToolbarChild {
11    Item(Rc<<ToolbarItem as BaseComponent>::Properties>),
12    Divider(Rc<<ToolbarDivider as BaseComponent>::Properties>),
13    Group(Rc<<ToolbarGroup as BaseComponent>::Properties>),
14}
15
16impl From<ToolbarItemProperties> for ToolbarChild {
17    fn from(props: ToolbarItemProperties) -> Self {
18        ToolbarChild::Item(Rc::new(props))
19    }
20}
21
22impl From<ToolbarGroupProperties> for ToolbarChild {
23    fn from(props: ToolbarGroupProperties) -> Self {
24        ToolbarChild::Group(Rc::new(props))
25    }
26}
27
28impl From<()> for ToolbarChild {
29    fn from(_: ()) -> Self {
30        ToolbarChild::Divider(Rc::new(()))
31    }
32}
33
34#[derive(PartialEq, Clone)]
35pub struct ToolbarChildVariant {
36    props: ToolbarChild,
37}
38
39impl<CHILD> From<VChild<CHILD>> for ToolbarChildVariant
40where
41    CHILD: BaseComponent,
42    CHILD::Properties: Into<ToolbarChild> + Clone,
43{
44    fn from(vchild: VChild<CHILD>) -> Self {
45        Self {
46            props: (*vchild.props).clone().into(),
47        }
48    }
49}
50
51impl From<ToolbarChildVariant> for Html {
52    fn from(value: ToolbarChildVariant) -> Self {
53        match value.props {
54            ToolbarChild::Item(props) => VComp::new::<ToolbarItem>(props, None).into(),
55            ToolbarChild::Group(props) => VComp::new::<ToolbarGroup>(props, None).into(),
56            ToolbarChild::Divider(props) => VComp::new::<ToolbarDivider>(props, None).into(),
57        }
58    }
59}