From b4f9c02e5aef5987a77255c7ced5e7927a1ea4af Mon Sep 17 00:00:00 2001 From: Jon Seager Date: Fri, 6 Feb 2026 17:52:28 +0000 Subject: [PATCH] fix(brews): return reload response for brew-again from non-brew pages The create_brew handler returned a #brew-list fragment for all Datastar requests, but that element only exists on the brews data page. Requests from the homepage or timeline now get a reload-script response instead, fixing the PatchElementsNoTargetsFound error. --- src/application/routes/api/brews.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/application/routes/api/brews.rs b/src/application/routes/api/brews.rs index 4f5e9d0..40c67eb 100644 --- a/src/application/routes/api/brews.rs +++ b/src/application/routes/api/brews.rs @@ -242,13 +242,18 @@ pub(crate) async fn create_brew( info!(brew_id = %enriched.brew.id, "brew created"); if is_datastar_request(&headers) { - // Check if request came from timeline - return a script that redirects - let from_timeline = headers + // If the request came from a page that has #brew-list, return the updated fragment. + // Otherwise (homepage, timeline, etc.), trigger a page reload instead. + let from_brew_page = headers .get("referer") .and_then(|v| v.to_str().ok()) - .is_some_and(|r| r.contains("/timeline")); + .is_some_and(|r| r.contains("type=brews")); - if from_timeline { + if from_brew_page { + render_brew_list_fragment(state, request, search, true) + .await + .map_err(ApiError::from) + } else { use axum::http::header::HeaderValue; let mut response = axum::response::Html("").into_response(); @@ -259,10 +264,6 @@ pub(crate) async fn create_brew( .headers_mut() .insert("datastar-mode", HeaderValue::from_static("append")); Ok(response) - } else { - render_brew_list_fragment(state, request, search, true) - .await - .map_err(ApiError::from) } } else if matches!(source, PayloadSource::Form) { let target =