simple-web-app

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 430dacd9cafd13bb66cc3fff2852f31573301d71
parent a2b1c2eb8ad11a752fea1fa75f5b233ec2043d61
Author: Silas Brack <silasbrack@gmail.com>
Date:   Thu, 11 Jun 2026 12:32:06 +0200

fix: use proper SSE format and outer morph for search responses

Search handler now returns datastar-patch-elements SSE events.
Search results template includes wrapper div with ID for outer
morph matching.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Diffstat:
Msrc/handlers/search.rs | 11++---------
Mtemplates/search_results.html | 2++
2 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/src/handlers/search.rs b/src/handlers/search.rs @@ -1,8 +1,6 @@ use askama::Template; use axum::{ - body::Body, extract::State, - http::{StatusCode, header}, response::{Html, Response}, Form, }; @@ -11,6 +9,7 @@ use serde::Deserialize; use crate::error::AppError; use crate::handlers::auth::get_tokens_from_cookies; +use crate::sse; use crate::state::AppState; use crate::templates::{ApplicationTemplate, SearchResultsTemplate, SearchTemplate}; use crate::trailbase::{ClientError, SearchResult}; @@ -57,11 +56,5 @@ pub async fn search( let template = SearchResultsTemplate { results }; let html = template.render()?; - Ok(Response::builder() - .status(StatusCode::OK) - .header(header::CONTENT_TYPE, "text/html") - .header("datastar-selector", "#search-results") - .header("datastar-mode", "inner") - .body(Body::from(html)) - .unwrap()) + Ok(sse::patch_elements(&html)) } diff --git a/templates/search_results.html b/templates/search_results.html @@ -1,3 +1,4 @@ +<div id="search-results"> {% if results.is_empty() %} <p class="empty-message">No results found.</p> {% else %} @@ -16,3 +17,4 @@ {% endfor %} </ul> {% endif %} +</div>