Fixing build errors

This commit is contained in:
Pauan 2019-06-16 01:00:54 +02:00
parent e4b2347149
commit 90c6fb01dc
2 changed files with 14 additions and 9 deletions

View File

@ -21,7 +21,7 @@ use crate::operations::spawn_future;
struct RafState {
id: i32,
closure: Closure<FnMut(f64)>,
closure: Closure<dyn FnMut(f64)>,
}
// TODO generalize this so it works for any target, not just JS
@ -33,7 +33,7 @@ impl Raf {
fn new<F>(mut callback: F) -> Self where F: FnMut(f64) + 'static {
let state: Rc<RefCell<Option<RafState>>> = Rc::new(RefCell::new(None));
fn schedule(callback: &Closure<FnMut(f64)>) -> i32 {
fn schedule(callback: &Closure<dyn FnMut(f64)>) -> i32 {
window()
.unwrap_throw()
.request_animation_frame(callback.as_ref().unchecked_ref())
@ -51,7 +51,7 @@ impl Raf {
}
callback(time);
}) as Box<FnMut(f64)>)
}) as Box<dyn FnMut(f64)>)
};
*state.borrow_mut() = Some(RafState {

View File

@ -141,21 +141,26 @@ pub(crate) fn insert_children_signal_vec<A>(element: Node, callbacks: &mut Callb
state.children = values;
let is_inserted = state.is_inserted;
let mut has_inserts = false;
let fragment = document().create_document_fragment();
// TODO does this allocate if the filtered Vec is empty ?
let after_inserts = state.children.iter_mut().filter(|dom| {
for dom in state.children.iter_mut() {
dom.callbacks.leak();
fragment.append_child(&dom.element).unwrap_throw();
!dom.callbacks.after_insert.is_empty()
}).collect::<Vec<_>>();
if !dom.callbacks.after_insert.is_empty() {
has_inserts = true;
}
}
element.append_child(&fragment).unwrap_throw();
if state.is_inserted {
for dom in after_inserts {
if is_inserted && has_inserts {
for dom in state.children.iter_mut() {
dom.callbacks.trigger_after_insert();
}
}