From e9d5bb37d2fb861e69ca5ce58e3d58f3a5aa9017 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kr=C3=BCger?= Date: Sun, 30 Aug 2026 21:03:00 +0200 Subject: [PATCH] Show session status as a badge on the detail page Reuses SessionsTable's STATUS_VARIANT mapping (now exported) so the detail page's status matches the table's badge instead of plain text. Also drops the now-stale px-1.5 alignment padding on the meta lines now that the title input carries no horizontal padding of its own. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01WzyfRyA7h5rs5SCAahLAWd --- app/(app)/sessions/[id]/page.tsx | 9 ++++++--- components/sessions/SessionTitleEditor.tsx | 4 ++-- components/sessions/SessionsTable.tsx | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/(app)/sessions/[id]/page.tsx b/app/(app)/sessions/[id]/page.tsx index cb2d3e3..805c9a1 100644 --- a/app/(app)/sessions/[id]/page.tsx +++ b/app/(app)/sessions/[id]/page.tsx @@ -1,10 +1,12 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import type { Metadata } from "next"; +import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { SessionTimelineChart } from "@/components/sessions/SessionTimelineChart"; import { SessionTitleEditor } from "@/components/sessions/SessionTitleEditor"; +import { STATUS_VARIANT } from "@/components/sessions/SessionsTable"; import { getSessionDetail, getSessionName } from "@/lib/db/queries/sessions"; import { getSessionTimeline } from "@/lib/db/queries/stats"; import { Play } from "lucide-react"; @@ -36,8 +38,9 @@ export default async function SessionDetailPage({ params }: { params: Promise<{
-

- {detail.session.status} · {formatDuration(detail.session.durationMs)} +

+ {detail.session.status} + · {formatDuration(detail.session.durationMs)} {detail.session.kind === "replay" && detail.replayedFromName !== undefined && ( <> · replayed from {detail.replayedFromName ?? `session #${detail.session.replayedSessionId}`} )} @@ -50,7 +53,7 @@ export default async function SessionDetailPage({ params }: { params: Promise<{ )}

{detail.session.description && ( -

{detail.session.description}

+

{detail.session.description}

)}
{canReplay && ( diff --git a/components/sessions/SessionTitleEditor.tsx b/components/sessions/SessionTitleEditor.tsx index ff95372..95fd294 100644 --- a/components/sessions/SessionTitleEditor.tsx +++ b/components/sessions/SessionTitleEditor.tsx @@ -46,13 +46,13 @@ export function SessionTitleEditor({ sessionId, initialName }: { sessionId: numb }, [status]); return ( -
+
setValue(e.target.value)} placeholder={`Session #${sessionId}`} aria-label="Session name" - className="min-w-0 max-w-full border-b-2 border-transparent bg-transparent px-1.5 py-0.5 font-heading text-2xl font-semibold text-foreground outline-none transition-colors placeholder:text-muted-foreground/70 hover:border-b-border focus:border-b-primary [field-sizing:content]" + className="min-w-0 max-w-full border-b-2 border-transparent bg-transparent font-heading text-2xl font-semibold text-foreground outline-none transition-colors placeholder:text-muted-foreground/70 hover:border-b-border focus:border-b-primary [field-sizing:content]" />