From 9f48cab9adb12ebf8b3cd758927cbb536e3eb472 Mon Sep 17 00:00:00 2001 From: Adrian Wannenmacher Date: Fri, 9 Dec 2022 01:14:54 +0100 Subject: [PATCH] add `comp()` and default failure components --- .../router/src/components/default_errors.rs | 59 +++++++++++++++++++ packages/router/src/hooks/use_router.rs | 16 +++-- packages/router/src/lib.rs | 10 ++++ 3 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 packages/router/src/components/default_errors.rs diff --git a/packages/router/src/components/default_errors.rs b/packages/router/src/components/default_errors.rs new file mode 100644 index 000000000..fdb624bcb --- /dev/null +++ b/packages/router/src/components/default_errors.rs @@ -0,0 +1,59 @@ +use crate::components::Link; +use dioxus::prelude::*; +use dioxus_router_core::prelude::{named, RootIndex}; + +#[allow(non_snake_case)] +pub fn FailureExternalNavigation(cx: Scope) -> Element { + todo!("add href to FailureExternalNavigation link"); + + render! { + h1 { "External Navigation Failure!" } + p { + "The application tried to programmatically navigate to an external page. This " + "operation has failed. Click the link below to complete the navigation manually." + } + a { + "Click here to fix the failure." + } + } +} + +#[allow(non_snake_case)] +pub fn FailureNamedNavigation(cx: Scope) -> Element { + render! { + h1 { "Named Navigation Failure!" } + p { + "The application has tried to navigate to an unknown name. This is a bug. Please " + "inform the developer, so they can fix it." + b { "Thank you!" } + } + p { + "We are sorry for the inconvenience. The link below may help to fix the problem, but " + "there is no guarantee." + } + Link { + target: named::(), + "Click here to try to fix the failure." + } + } +} + +#[allow(non_snake_case)] +pub fn FailureRedirectionLimit(cx: Scope) -> Element { + render! { + h1 { "Redirection Limit Failure!" } + p { + "The application seems to have entered into an endless redirection loop. This is a " + "bug. Please inform the developer, so they can fix it." + b { "Thank you!" } + } + p { + "We are sorry for the inconvenience. The link below may help to fix the problem, but " + "there is no guarantee." + } + Link { + target: named::(), + "Click here to try to fix the failure." + } + } +} diff --git a/packages/router/src/hooks/use_router.rs b/packages/router/src/hooks/use_router.rs index eb01eea65..c65ad19b2 100644 --- a/packages/router/src/hooks/use_router.rs +++ b/packages/router/src/hooks/use_router.rs @@ -6,7 +6,15 @@ use dioxus_router_core::{ RouterService, RouterState, RoutingCallback, }; -use crate::contexts::router::RouterContext; +use crate::{ + contexts::router::RouterContext, + prelude::{ + comp, + default_errors::{ + FailureExternalNavigation, FailureNamedNavigation, FailureRedirectionLimit, + }, + }, +}; pub fn use_router<'a>( cx: &'a ScopeState, @@ -70,9 +78,9 @@ pub struct RouterConfiguration { impl Default for RouterConfiguration { fn default() -> Self { Self { - failure_external_navigation: todo!("provide default component for external navigation"), - failure_named_navigation: todo!("provide default component for named navigation"), - failure_redirection_limit: todo!("provide default component for redirection limit"), + failure_external_navigation: comp(FailureExternalNavigation), + failure_named_navigation: comp(FailureNamedNavigation), + failure_redirection_limit: comp(FailureRedirectionLimit), history: Box::new(MemoryHistory::default()), on_update: None, synchronous: false, diff --git a/packages/router/src/lib.rs b/packages/router/src/lib.rs index 30be8c85f..29d272d92 100644 --- a/packages/router/src/lib.rs +++ b/packages/router/src/lib.rs @@ -1,4 +1,6 @@ pub mod components { + pub(crate) mod default_errors; + mod link; pub use link::*; @@ -17,6 +19,14 @@ pub mod hooks { pub mod prelude { pub use dioxus_router_core::prelude::*; + + pub use crate::components::*; + pub use crate::hooks::*; + + use dioxus::core::Component; + pub fn comp(component: Component) -> ContentAtom { + ContentAtom(component) + } } mod utils {