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 54
use std::cmp::PartialEq; use std::rc::Rc; use crate::computed::{ Value, Computed, }; use crate::{ virtualdom::{ models::{ vdom_component_id::VDomComponentId, vdom_element::VDomElement, } } }; #[derive(Clone)] pub struct VDomComponent { pub id: VDomComponentId, pub view: Computed<VDomElement>, } impl VDomComponent { pub fn new<T: PartialEq + 'static>(params: Computed<T>, render: fn(&Computed<T>) -> VDomElement) -> VDomComponent { let component_id = VDomComponentId::new(¶ms, render); let view = params.map_for_render(render); VDomComponent { id: component_id, view, } } pub fn from_value<T: PartialEq + 'static>(params: Value<T>, render: fn(&Value<T>) -> VDomElement) -> VDomComponent { let component_id = VDomComponentId::new_value(¶ms, render); let deps = params.deps.clone(); let comp = deps.new_computed_from(params); let view = comp.map(move |wrapper_computed: &Computed<Value<T>>| -> Rc<VDomElement> { let value: Rc<Value<T>> = wrapper_computed.get_value(); let value: &Value<T> = value.as_ref(); Rc::new(render(value)) }); VDomComponent { id: component_id, view, } } }