diff --git a/src/config.rs b/src/config.rs index 9186a02..f33f821 100644 --- a/src/config.rs +++ b/src/config.rs @@ -15,7 +15,7 @@ impl ServerConfig { db_url: std::env::var("HTTPSERVER_DATABASE_URL").expect("missing HTTPSERVER_DATABASE_URL"), upload_storage_limit_soft: 1024 * 1024 * 1024 * 200, - upload_storage_limit_hard: 1024 * 1024 * 1024 * 250, + upload_storage_limit_hard: 1024 * 1024 * 1024 * 300, } } diff --git a/src/main.rs b/src/main.rs index e39104a..5a75fca 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,12 +1,19 @@ use dioxus::prelude::*; +use crate::dioxus_fullstack::FullstackContext; + use tracing::Level; pub mod config; use crate::components::toast::ToastProvider; -use crate::views::{Upload, UploadInfo, Home}; +use crate::views::{ + Upload, + UploadInfo, + Home, + NotFound +}; #[cfg(feature = "server")] use crate::config::ServerConfig; @@ -17,12 +24,17 @@ mod views; #[derive(Debug, Clone, Routable, PartialEq)] #[rustfmt::skip] enum Route { + #[layout(ErrorLayout)] #[route("/")] Home { }, #[route("/upload/:file")] UploadInfo { file: String }, #[route("/upload")] Upload { }, + + + #[route("/:..route")] + NotFound { route: Vec }, } @@ -37,6 +49,22 @@ fn main() { dioxus::launch(App); } +#[component] +fn ErrorLayout() -> Element { + rsx! { + ErrorBoundary { + handle_error: move |err: ErrorContext| { + let http_error = FullstackContext::commit_error_status(err.error().unwrap()); + match http_error.status { + StatusCode::NOT_FOUND => rsx! { div { "404 - Page not found" } }, + _ => rsx! { div { "An unknown error occurred" } }, + } + }, + Outlet:: {} + } + } +} + #[component] fn App() -> Element { rsx! { diff --git a/src/views/mod.rs b/src/views/mod.rs index fcec334..7b77595 100644 --- a/src/views/mod.rs +++ b/src/views/mod.rs @@ -3,3 +3,7 @@ pub use upload::{Upload, UploadInfo}; mod home; pub use home::Home; + +mod not_found; +pub use not_found::NotFound; + diff --git a/src/views/not_found.rs b/src/views/not_found.rs new file mode 100644 index 0000000..e5eb9aa --- /dev/null +++ b/src/views/not_found.rs @@ -0,0 +1,17 @@ +use dioxus::prelude::*; +use crate::Route; + +#[component] +pub fn NotFound(route: Vec) -> Element { + let full_path = "/".to_owned() + &route.join("/"); + + rsx! { + h1 { "404 - Page not found" } + p { "Tried to access: {full_path}" } + Link { + to: Route::Home { }, + class: "height-20px text-blue-700 underline py-1", + "Go back Home" + } + } +}