1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
use super::*; use yew::{ prelude::*, virtual_dom::{VChild, VComp}, }; #[derive(Clone, PartialEq)] pub enum ToolbarChild { Item(<ToolbarItem as Component>::Properties), Group(<ToolbarGroup as Component>::Properties), } impl From<ToolbarItemProps> for ToolbarChild { fn from(props: ToolbarItemProps) -> Self { ToolbarChild::Item(props) } } impl From<ToolbarGroupProps> for ToolbarChild { fn from(props: ToolbarGroupProps) -> Self { ToolbarChild::Group(props) } } #[derive(PartialEq, Clone)] pub struct ToolbarChildVariant { props: ToolbarChild, } impl<CHILD> From<VChild<CHILD>> for ToolbarChildVariant where CHILD: Component, CHILD::Properties: Into<ToolbarChild>, { fn from(vchild: VChild<CHILD>) -> Self { Self { props: vchild.props.into(), } } } impl Into<Html> for ToolbarChildVariant { fn into(self) -> Html { match self.props { ToolbarChild::Item(props) => { VComp::new::<ToolbarItem>(props, NodeRef::default(), None).into() } ToolbarChild::Group(props) => { VComp::new::<ToolbarGroup>(props, NodeRef::default(), None).into() } } } }