patternfly_yew/components/toolbar/
child.rs1use super::*;
2use std::rc::Rc;
3use yew::{
4 prelude::*,
5 virtual_dom::{VChild, VComp},
6};
7
8#[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}