From 06ce78a8b5adeb785ef2a1544fdb1df667a090ef Mon Sep 17 00:00:00 2001 From: Jordi Enric <37541088+jordienr@users.noreply.github.com> Date: Mon, 16 Jun 2025 11:27:23 +0200 Subject: [PATCH] allow select and copy text, fix context menu (#36162) --- .../interfaces/Settings/Logs/LogTable.tsx | 40 ++++++++++++++----- .../Settings/Logs/LogsFormatters.tsx | 6 ++- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/apps/studio/components/interfaces/Settings/Logs/LogTable.tsx b/apps/studio/components/interfaces/Settings/Logs/LogTable.tsx index 2006ee3dd82..7e043920a4b 100644 --- a/apps/studio/components/interfaces/Settings/Logs/LogTable.tsx +++ b/apps/studio/components/interfaces/Settings/Logs/LogTable.tsx @@ -33,6 +33,7 @@ import { isDefaultLogPreviewFormat } from './Logs.utils' import { DefaultErrorRenderer } from './LogsErrorRenderers/DefaultErrorRenderer' import ResourcesExceededErrorRenderer from './LogsErrorRenderers/ResourcesExceededErrorRenderer' import { LogsTableEmptyState } from './LogsTableEmptyState' +import { toast } from 'sonner' interface Props { data?: LogData[] @@ -127,7 +128,13 @@ const LogTable = ({ resizable: true, renderCell: ({ row }: any) => { return ( - showContextMenu(e, { id: LOGS_EXPLORER_CONTEXT_MENU_ID })}> + { + e.preventDefault() + setCellPosition({ row, column: { name: v } }) + showContextMenu(e, { id: LOGS_EXPLORER_CONTEXT_MENU_ID }) + }} + > {formatCellValue(row?.[v])} ) @@ -207,9 +214,23 @@ const LogTable = ({ const RowRenderer = useCallback<(key: Key, props: RenderRowProps) => ReactNode>( (key, props) => { - return + const handleContextMenu = (e: React.MouseEvent) => { + if (columns.length > 0) { + setCellPosition({ row: props.row, column: columns[0] }) + } + showContextMenu(e, { id: LOGS_EXPLORER_CONTEXT_MENU_ID }) + } + return ( + + ) }, - [] + [columns, showContextMenu] ) const formatCellValue = (value: any) => { @@ -221,12 +242,11 @@ const LogTable = ({ } const onCopyCell = () => { - if (cellPosition) { - const { row, column } = cellPosition - const cellValue = row?.[column.name] ?? '' - const value = formatCellValue(cellValue) - copyToClipboard(value) - } + if (!cellPosition) return + const eventMessage = cellPosition.row.event_message + copyToClipboard(eventMessage, () => { + toast.success('Copied to clipboard') + }) } const LogsExplorerTableHeader = () => ( @@ -420,7 +440,7 @@ const LogTable = ({ - Copy cell content + Copy event message , document.body diff --git a/apps/studio/components/interfaces/Settings/Logs/LogsFormatters.tsx b/apps/studio/components/interfaces/Settings/Logs/LogsFormatters.tsx index d7a25872953..4774a6f7c60 100644 --- a/apps/studio/components/interfaces/Settings/Logs/LogsFormatters.tsx +++ b/apps/studio/components/interfaces/Settings/Logs/LogsFormatters.tsx @@ -56,7 +56,11 @@ export const SelectionDetailedRow = ({ export const TextFormatter: React.FC<{ className?: string; value: string }> = ({ value, className, -}) => {value} +}) => ( + + {value} + +) export const ResponseCodeFormatter = ({ value }: { value: string }) => { if (!value) {