From fb9b719d5228a6ac065c123123eed9065740fa1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartal=20L=C3=A6arsson?= Date: Thu, 18 Jun 2026 22:46:33 +0100 Subject: [PATCH] change layouts --- src/handlers/chat.rs | 48 +++++- src/main.rs | 1 + templates/index.html | 2 +- templates/supporter.html | 347 ++++++++++++++++++++++++++------------- templates/user.html | 53 ++++-- 5 files changed, 322 insertions(+), 129 deletions(-) diff --git a/src/handlers/chat.rs b/src/handlers/chat.rs index 281f6d6..1350046 100644 --- a/src/handlers/chat.rs +++ b/src/handlers/chat.rs @@ -14,11 +14,33 @@ use crate::{ const MAX_MESSAGE_CHARS: usize = 1_000; const MAX_NAME_CHARS: usize = 40; +#[derive(Clone, Copy)] +enum MessageView { + User, + Supporter, +} + fn render_message(msg: &Message) -> String { - let (bubble_class, label) = match msg.sender { - MessageSender::User => ("msg-user", "You"), - MessageSender::Supporter => ("msg-supporter", "Support"), - MessageSender::System => ("msg-system", ""), + render_message_for(msg, MessageView::User) +} + +fn render_supporter_message(msg: &Message) -> String { + render_message_for(msg, MessageView::Supporter) +} + +fn render_message_for(msg: &Message, view: MessageView) -> String { + let bubble_class = match msg.sender { + MessageSender::User => "msg-user", + MessageSender::Supporter => "msg-supporter", + MessageSender::System => "msg-system", + }; + + let label = match (view, &msg.sender) { + (_, MessageSender::System) => "", + (MessageView::User, MessageSender::User) => "You", + (MessageView::User, MessageSender::Supporter) => "Support", + (MessageView::Supporter, MessageSender::User) => "User", + (MessageView::Supporter, MessageSender::Supporter) => "You", }; if msg.sender == MessageSender::System { @@ -83,6 +105,20 @@ pub async fn get_messages( Html(html) } +/// GET /supporter/messages/:session_id +pub async fn get_supporter_messages( + Path(session_id): Path, + State(state): State>, +) -> Html { + let Some(session) = state.sessions.get(&session_id) else { + return Html(render_system_notice( + "Session not found. Chat history may have been cleared.", + )); + }; + let html: String = session.messages.iter().map(render_supporter_message).collect(); + Html(html) +} + /// POST /send/:session_id — user sends a message pub async fn send_message( ConnectInfo(addr): ConnectInfo, @@ -162,7 +198,7 @@ pub async fn supporter_send_message( content, timestamp: Utc::now(), }; - let rendered = render_message(&msg); + let rendered = render_supporter_message(&msg); session.messages.push(msg); session.status = SessionStatus::Active; @@ -212,7 +248,7 @@ pub async fn get_sessions(State(state): State>) -> Html { let escaped_name = html_escape(name); html.push_str(&format!( "

Support dashboard

Reset in --:-- -