From a96d173e996da82a1e59fbdd60081ead01a0e869 Mon Sep 17 00:00:00 2001 From: Tyler <109685178+tlongwell-block@users.noreply.github.com> Date: Mon, 22 Jun 2026 12:55:33 -0400 Subject: [PATCH] Copy channel name from header (#1157) Signed-off-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta Signed-off-by: Wes Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta Co-authored-by: Wes Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co> --- desktop/src/features/chat/ui/ChatHeader.tsx | 30 +++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/desktop/src/features/chat/ui/ChatHeader.tsx b/desktop/src/features/chat/ui/ChatHeader.tsx index dae1e3dbe..8981361d6 100644 --- a/desktop/src/features/chat/ui/ChatHeader.tsx +++ b/desktop/src/features/chat/ui/ChatHeader.tsx @@ -2,6 +2,7 @@ import { Activity, Bot, CircleDot, + Copy, FileText, FolderGit2, Hash, @@ -10,11 +11,13 @@ import { Zap, } from "lucide-react"; import type * as React from "react"; +import { toast } from "sonner"; import type { ChannelType, ChannelVisibility } from "@/shared/api/types"; import { UpdateIndicator } from "@/features/settings/UpdateIndicator"; import { cn } from "@/shared/lib/cn"; import { channelChrome } from "@/shared/layout/chromeLayout"; +import { Button } from "@/shared/ui/button"; import { useOptionalSidebar } from "@/shared/ui/sidebar"; type ChatHeaderProps = { @@ -99,6 +102,18 @@ export function ChatHeader({ const clearCollapsedTopChromeControls = belowSystemChrome && sidebar?.state === "collapsed" && !sidebar.isMobile; + async function handleCopyTitle() { + const value = title.trim(); + if (!value) return; + + try { + await navigator.clipboard.writeText(value); + toast.success("Channel name copied"); + } catch { + toast.error("Failed to copy channel name"); + } + } + const header = (
-
+
{leadingContent ?? (

{title}

+ {statusBadge ? (
{statusBadge}