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 55 56 57 58 59 60 61 62 63
use dominator::{Dom, DomBuilder};
use futures_signals::signal::{always, Always, Signal, SignalExt};
use std::iter::{once, Once};
use web_sys::Element;
pub fn once_cmp(c: DomBuilder<Element>) -> Once<Always<Option<DomBuilder<Element>>>> {
once(always(Some(c)))
}
pub fn builder_to_dom_signal<T: Signal<Item = DomBuilder<Element>> + Unpin>(
input: T,
) -> impl Signal<Item = Option<Dom>> {
input.map(|builder| Some(builder.into_dom()))
}
pub trait ComponentSignal: Signal<Item = Option<Dom>> + Unpin + 'static {}
impl<T> ComponentSignal for T where T: Signal<Item = Option<Dom>> + Unpin + 'static {}
pub type NoSignal = Always<Option<Dom>>;
// pub struct DomOption(pub Option<Dom>);
//
// pub struct ComponentSignal(pub Box<dyn Signal<Item = Option<Dom>> + Unpin>);
//
// impl ComponentSignal {
// pub fn from_signal<T: Signal<Item = U> + Unpin + 'static, U>(sig: T) -> Self
// where
// U: Into<DomOption>,
// {
// Self(Box::new(sig.map(|e| e.into().0)))
// }
// }
//
// impl From<Dom> for DomOption {
// fn from(v: Dom) -> Self {
// DomOption(Some(v))
// }
// }
//
// impl From<Option<Dom>> for DomOption {
// fn from(v: Option<Dom>) -> Self {
// DomOption(v)
// }
// }
//
// impl From<DomBuilder<Element>> for DomOption {
// fn from(v: DomBuilder<Element>) -> Self {
// DomOption(Some(v.into_dom()))
// }
// }
//
// impl From<Dom> for ComponentSignal {
// fn from(dom_builder: Dom) -> Self {
// Self(Box::new(always(Some(dom_builder))))
// }
// }
//
// impl From<DomBuilder<HtmlElement>> for ComponentSignal {
// fn from(dom_builder: DomBuilder<HtmlElement>) -> Self {
// Self(Box::new(always(Some(dom_builder.into_dom()))))
// }
// }