From 340bef217572e60585bb0425b41e562a0c24b135 Mon Sep 17 00:00:00 2001 From: Brent O'Neill Date: Mon, 29 Sep 2025 11:16:55 -0600 Subject: [PATCH] fix: issues with chunk copy --- frontend/src/app/knowledge/chunks/page.tsx | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/knowledge/chunks/page.tsx b/frontend/src/app/knowledge/chunks/page.tsx index cdc9fcc3..d680ebc5 100644 --- a/frontend/src/app/knowledge/chunks/page.tsx +++ b/frontend/src/app/knowledge/chunks/page.tsx @@ -2,6 +2,7 @@ import { ArrowLeft, + Check, Copy, File as FileIcon, Loader2, @@ -41,6 +42,9 @@ function ChunksPageContent() { ChunkResult[] >([]); const [selectedChunks, setSelectedChunks] = useState>(new Set()); + const [activeCopiedChunkIndex, setActiveCopiedChunkIndex] = useState< + number | null + >(null); // Calculate average chunk length const averageChunkLength = useMemo( @@ -70,8 +74,11 @@ function ChunksPageContent() { } }, [queryInputText, chunks]); - const handleCopy = useCallback((text: string) => { - navigator.clipboard.writeText(text); + const handleCopy = useCallback((text: string, index: number) => { + // Trime whitespace and remove new lines/tabs for cleaner copy + navigator.clipboard.writeText(text.trim().replace(/[\n\r\t]/gm, "")); + setActiveCopiedChunkIndex(index); + setTimeout(() => setActiveCopiedChunkIndex(null), 30 * 1000); // 30 seconds }, []); const fileData = (data as File[]).find( @@ -86,7 +93,7 @@ function ChunksPageContent() { } setChunks(fileData?.chunks || []); - }, [data, filename]); + }, [data, filename, setChunks, fileData]); // Set selected state for all checkboxes when selectAll changes useEffect(() => { @@ -238,11 +245,15 @@ function ChunksPageContent() {