From cd3afa19202de5752db0affc6b0b7809ce801451 Mon Sep 17 00:00:00 2001 From: Elijah Voigt Date: Tue, 3 Mar 2026 22:07:55 -0800 Subject: [PATCH] fix(quotesdb): home page friendly empty state when no quotes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Detect 404 from random quote endpoint and render a friendly 'Nothing here yet — Submit a quote!' message with a link to /submit instead of the generic error display. Co-Authored-By: Claude Sonnet 4.6 --- quotesdb/src/bin/ui/pages/home.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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() {