From fa5386c6718a93d80c54a503d286f53b9d021639 Mon Sep 17 00:00:00 2001 From: Jon Seager Date: Wed, 4 Feb 2026 16:00:53 +0000 Subject: [PATCH] feat(checkin): add roast/cafe summary bars and data attribute selects - Add roast name and roaster name signals to check-in page - Show selected cafe city as subtext in cafe summary bar - Add roast summary bar showing roast name and roaster after selection - Use data attributes on select options for structured cafe/roast data - Add name/city fields to CafeOptionView and name/roaster_name to RoastOptionView - Return roaster name signal from scan endpoint for roast summary display --- src/application/routes/scan.rs | 1 + src/presentation/web/views/cafes.rs | 4 +++ src/presentation/web/views/roasts.rs | 4 +++ templates/checkin.html | 41 ++++++++++++++++++++++------ 4 files changed, 41 insertions(+), 9 deletions(-) diff --git a/src/application/routes/scan.rs b/src/application/routes/scan.rs index 7e3d28d..fe0be72 100644 --- a/src/application/routes/scan.rs +++ b/src/application/routes/scan.rs @@ -270,6 +270,7 @@ pub(crate) async fn submit_scan( let signals = vec![ ("_roast-id", Value::String(roast_id.to_string())), ("_scan-success", Value::String(roast.name.clone())), + ("_roaster-name", Value::String(roaster.name.clone())), ]; crate::application::routes::support::render_signals_json(&signals).map_err(ApiError::from) } else { diff --git a/src/presentation/web/views/cafes.rs b/src/presentation/web/views/cafes.rs index f390632..7d93ab5 100644 --- a/src/presentation/web/views/cafes.rs +++ b/src/presentation/web/views/cafes.rs @@ -61,6 +61,8 @@ impl From for CafeView { pub struct CafeOptionView { pub id: String, pub label: String, + pub name: String, + pub city: String, } impl From for CafeOptionView { @@ -68,6 +70,8 @@ impl From for CafeOptionView { Self { id: cafe.id.to_string(), label: format!("{} ({})", cafe.name, cafe.city), + name: cafe.name, + city: cafe.city, } } } diff --git a/src/presentation/web/views/roasts.rs b/src/presentation/web/views/roasts.rs index d07701c..5106fb8 100644 --- a/src/presentation/web/views/roasts.rs +++ b/src/presentation/web/views/roasts.rs @@ -87,6 +87,8 @@ impl RoastView { pub struct RoastOptionView { pub id: String, pub label: String, + pub name: String, + pub roaster_name: String, } impl From for RoastOptionView { @@ -94,6 +96,8 @@ impl From for RoastOptionView { Self { id: roast.roast.id.to_string(), label: format!("{} - {}", roast.roaster_name, roast.roast.name), + name: roast.roast.name, + roaster_name: roast.roaster_name, } } } diff --git a/templates/checkin.html b/templates/checkin.html index 3afbe7b..9eac872 100644 --- a/templates/checkin.html +++ b/templates/checkin.html @@ -46,6 +46,8 @@ function locateUser() { data-signals:_cafe-website="''" data-signals:_cafe-search="''" data-signals:_roast-id="''" + data-signals:_roast-name="''" + data-signals:_roaster-name="''" data-signals:_rating="0" data-signals:_error="''" data-signals:_submitting="false" @@ -78,10 +80,11 @@ function locateUser() { style="display: none" >
- +
+ + +

Or choose a saved cafe:

@@ -258,7 +281,7 @@ function locateUser() {
@@ -267,7 +290,7 @@ function locateUser() {