diff --git a/quotesdb/src/bin/ui/pages/home.rs b/quotesdb/src/bin/ui/pages/home.rs index 49dedd1..9c53409 100644 --- a/quotesdb/src/bin/ui/pages/home.rs +++ b/quotesdb/src/bin/ui/pages/home.rs @@ -1,6 +1,6 @@ //! Home page — displays a random quote on load. -use crate::api; +use crate::api::{self, ApiError}; use crate::components::error::ErrorDisplay; use crate::components::quote_card::QuoteCard; use crate::Route; @@ -17,11 +17,13 @@ use yew_router::prelude::*; pub fn home_page() -> Html { let quote: UseStateHandle> = use_state(|| None); let error: UseStateHandle> = use_state(|| None); + let empty = use_state(|| false); let loading = use_state(|| true); { let quote = quote.clone(); let error = error.clone(); + let empty = empty.clone(); let loading = loading.clone(); use_effect_with((), move |_| { spawn_local(async move { @@ -30,6 +32,10 @@ pub fn home_page() -> Html { quote.set(Some(q)); loading.set(false); } + Err(ApiError::Server { status: 404, .. }) => { + empty.set(true); + loading.set(false); + } Err(e) => { error.set(Some(e.to_string())); loading.set(false); @@ -46,6 +52,13 @@ pub fn home_page() -> Html { if *loading {

{ "Loading..." }

+ } else if *empty { +
+

{ "Nothing here yet." }

+ to={Route::Submit} classes="btn btn--primary"> + { "Submit a quote!" } + > +
} else if let Some(err) = (*error).clone() { } else if let Some(q) = (*quote).clone() {