From 9b0244ee5c19458d0effc4eba3cdb0e3be7574bf Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Sun, 25 Dec 2022 01:37:00 -0500 Subject: [PATCH] fix: use ready nodes in more places --- packages/core/src/diff.rs | 19 ++++++++----------- packages/core/src/error_boundary.rs | 4 ++-- packages/core/src/scheduler/suspense.rs | 1 - packages/core/src/scheduler/task.rs | 2 +- packages/core/src/scope_arena.rs | 2 +- packages/core/src/virtual_dom.rs | 2 +- packages/router/src/hooks/use_route.rs | 2 +- packages/router/src/lib.rs | 4 ++++ packages/tui/examples/tui_colorpicker.rs | 2 +- packages/tui/src/widgets/mod.rs | 2 +- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/packages/core/src/diff.rs b/packages/core/src/diff.rs index 81d000ba3..56eb7421a 100644 --- a/packages/core/src/diff.rs +++ b/packages/core/src/diff.rs @@ -43,7 +43,7 @@ impl<'b> VirtualDom { (Aborted(l), Aborted(r)) => r.id.set(l.id.get()), // Becomes async, do nothing while we ait - (Ready(nodes), Async(fut)) => todo!(), + (Ready(_nodes), Async(_fut)) => self.diff_ok_to_async(_nodes, scope), // Placeholder becomes something // We should also clear the error now @@ -61,12 +61,12 @@ impl<'b> VirtualDom { self.scope_stack.pop(); } - fn diff_ok_to_err(&mut self, _l: &'b VNode<'b>, _p: &'b VPlaceholder) { - todo!() + fn diff_ok_to_async(&mut self, _new: &'b VNode<'b>, _scope: ScopeId) { + // } - fn diff_err_to_ok(&mut self, _l: &'b VNode<'b>) { - todo!("Dioxus cannot currently recover a component after it has been errored. It must be removed from a parent"); + fn diff_ok_to_err(&mut self, _l: &'b VNode<'b>, _p: &'b VPlaceholder) { + todo!() } fn diff_node(&mut self, left_template: &'b VNode<'b>, right_template: &'b VNode<'b>) { @@ -699,7 +699,7 @@ impl<'b> VirtualDom { let scope = comp.scope.get().unwrap(); match unsafe { self.scopes[scope.0].root_node().extend_lifetime_ref() } { RenderReturn::Ready(node) => self.push_all_real_nodes(node), - RenderReturn::Aborted(node) => todo!(), + RenderReturn::Aborted(_node) => todo!(), _ => todo!(), } } @@ -803,7 +803,7 @@ impl<'b> VirtualDom { } fn reclaim_roots(&mut self, node: &VNode, gen_muts: bool) { - for (idx, _) in node.template.roots.iter().enumerate() { + for idx in 0..node.template.roots.len() { if let Some(dy) = node.dynamic_root(idx) { self.remove_dynamic_node(dy, gen_muts); } else { @@ -883,10 +883,7 @@ impl<'b> VirtualDom { .expect("VComponents to always have a scope"); match unsafe { self.scopes[scope.0].root_node().extend_lifetime_ref() } { - RenderReturn::Ready(t) => { - println!("Removing component node sync {:?}", gen_muts); - self.remove_node(t, gen_muts) - } + RenderReturn::Ready(t) => self.remove_node(t, gen_muts), _ => todo!("cannot handle nonstandard nodes"), }; diff --git a/packages/core/src/error_boundary.rs b/packages/core/src/error_boundary.rs index 4d9848dd8..071fbe48b 100644 --- a/packages/core/src/error_boundary.rs +++ b/packages/core/src/error_boundary.rs @@ -8,7 +8,7 @@ use std::{ /// A boundary that will capture any errors from child components pub struct ErrorBoundary { error: RefCell>, - id: ScopeId, + _id: ScopeId, } /// An instance of an error captured by a descendant component. @@ -36,7 +36,7 @@ impl ErrorBoundary { pub fn new(id: ScopeId) -> Self { Self { error: RefCell::new(None), - id, + _id: id, } } diff --git a/packages/core/src/scheduler/suspense.rs b/packages/core/src/scheduler/suspense.rs index 77d4671e7..c7cd650bb 100644 --- a/packages/core/src/scheduler/suspense.rs +++ b/packages/core/src/scheduler/suspense.rs @@ -6,7 +6,6 @@ use std::sync::Arc; use std::{ cell::{Cell, RefCell}, collections::HashSet, - rc::Rc, }; /// An ID representing an ongoing suspended component diff --git a/packages/core/src/scheduler/task.rs b/packages/core/src/scheduler/task.rs index 7fa13ce36..8c1d7ca76 100644 --- a/packages/core/src/scheduler/task.rs +++ b/packages/core/src/scheduler/task.rs @@ -2,8 +2,8 @@ use super::{waker::ArcWake, Scheduler, SchedulerMsg}; use crate::ScopeId; use std::cell::RefCell; use std::future::Future; +use std::pin::Pin; use std::sync::Arc; -use std::{pin::Pin, rc::Rc}; /// A task's unique identifier. /// diff --git a/packages/core/src/scope_arena.rs b/packages/core/src/scope_arena.rs index 6d946d3d9..f6b7b812a 100644 --- a/packages/core/src/scope_arena.rs +++ b/packages/core/src/scope_arena.rs @@ -1,7 +1,7 @@ use crate::{ any_props::AnyProps, bump_frame::BumpFrame, - innerlude::{DirtyScope, VPlaceholder}, + innerlude::DirtyScope, innerlude::{SuspenseId, SuspenseLeaf}, nodes::RenderReturn, scheduler::ArcWake, diff --git a/packages/core/src/virtual_dom.rs b/packages/core/src/virtual_dom.rs index 0940ea506..bd1a4c7bd 100644 --- a/packages/core/src/virtual_dom.rs +++ b/packages/core/src/virtual_dom.rs @@ -485,7 +485,7 @@ impl VirtualDom { }); } // If an error occurs, we should try to render the default error component and context where the error occured - RenderReturn::Aborted(placeholder) => panic!("Cannot catch errors during rebuild"), + RenderReturn::Aborted(_placeholder) => panic!("Cannot catch errors during rebuild"), RenderReturn::Async(_) => unreachable!("Root scope cannot be an async component"), } diff --git a/packages/router/src/hooks/use_route.rs b/packages/router/src/hooks/use_route.rs index 146de3109..e0b08e22f 100644 --- a/packages/router/src/hooks/use_route.rs +++ b/packages/router/src/hooks/use_route.rs @@ -1,4 +1,4 @@ -use crate::{Error as RouterError, ParsedRoute, RouteContext, RouterContext}; +use crate::{ParsedRoute, RouteContext, RouterContext}; use dioxus::core::{ScopeId, ScopeState}; use std::{borrow::Cow, str::FromStr, sync::Arc}; use url::Url; diff --git a/packages/router/src/lib.rs b/packages/router/src/lib.rs index 266d40d50..7a931859f 100644 --- a/packages/router/src/lib.rs +++ b/packages/router/src/lib.rs @@ -31,7 +31,11 @@ mod service; pub use routecontext::*; pub use service::*; +/// An error specific to the Router #[derive(Debug)] pub enum Error { + /// The route was not found while trying to navigate to it. + /// + /// This will force the router to redirect to the 404 page. NotFound, } diff --git a/packages/tui/examples/tui_colorpicker.rs b/packages/tui/examples/tui_colorpicker.rs index 244eea94b..f3711d51e 100644 --- a/packages/tui/examples/tui_colorpicker.rs +++ b/packages/tui/examples/tui_colorpicker.rs @@ -17,7 +17,7 @@ fn app(cx: Scope) -> Element { width: "100%", background_color: "hsl({hue}, 70%, {brightness}%)", onmousemove: move |evt| { - if let RenderReturn::Sync(Some(node)) = cx.root_node() { + if let RenderReturn::Ready(node) = cx.root_node() { if let Some(id) = node.root_ids[0].get() { let node = tui_query.get(id); let Size{width, height} = node.size().unwrap(); diff --git a/packages/tui/src/widgets/mod.rs b/packages/tui/src/widgets/mod.rs index 36306b180..d53c20c02 100644 --- a/packages/tui/src/widgets/mod.rs +++ b/packages/tui/src/widgets/mod.rs @@ -10,7 +10,7 @@ use dioxus_core::{ElementId, RenderReturn, Scope}; pub use input::*; pub(crate) fn get_root_id(cx: Scope) -> Option { - if let RenderReturn::Sync(Some(sync)) = cx.root_node() { + if let RenderReturn::Ready(sync) = cx.root_node() { sync.root_ids.get(0).and_then(|id| id.get()) } else { None