diff --git a/src/components/QueryEditor.tsx b/src/components/QueryEditor.tsx index 7cfda42..0cfdcc7 100644 --- a/src/components/QueryEditor.tsx +++ b/src/components/QueryEditor.tsx @@ -3,7 +3,7 @@ import React, { useRef, useEffect, useState, useMemo, forwardRef, useImperativeHandle, useCallback } from 'react'; import Editor, { useMonaco } from '@monaco-editor/react'; import type * as Monaco from 'monaco-editor'; -import { Zap, Sparkles, Send, X, Loader2, AlignLeft, Trash2, Copy, Play } from 'lucide-react'; +import { Zap, Sparkles, Send, X, Loader2, AlignLeft, Trash2, Copy, Play, Hash } from 'lucide-react'; import { cn } from '@/lib/utils'; import { motion, AnimatePresence } from 'framer-motion'; import { format } from 'sql-formatter'; @@ -48,11 +48,11 @@ interface ParsedTable { } // Static editor options - defined outside component to prevent re-creation on every render -const EDITOR_OPTIONS = { +const getEditorOptions = (showLineNumbers: boolean) => ({ minimap: { enabled: false }, fontSize: 13, fontFamily: '"JetBrains Mono", "Fira Code", Menlo, Monaco, Consolas, monospace', - lineNumbers: 'on' as const, + lineNumbers: showLineNumbers ? ('on' as const) : ('off' as const), roundedSelection: true, scrollBeyondLastLine: false, readOnly: false, @@ -81,7 +81,7 @@ const EDITOR_OPTIONS = { parameterHints: { enabled: true } -} as const; +}); export const QueryEditor = forwardRef(({ value, @@ -97,6 +97,15 @@ export const QueryEditor = forwardRef(({ const monaco = useMonaco(); const editorRef = useRef(null); const [hasSelection, setHasSelection] = useState(false); + + // Line numbers toggle state (persisted in localStorage) + const [showLineNumbers, setShowLineNumbers] = useState(() => { + if (typeof window !== 'undefined') { + const saved = localStorage.getItem('editor-line-numbers'); + return saved !== null ? saved === 'true' : true; // default: true + } + return true; + }); // Track last synced value to detect external changes const lastSyncedValueRef = useRef(value); @@ -117,6 +126,20 @@ export const QueryEditor = forwardRef(({ } }, [value]); + // Update editor options when line numbers toggle changes + useEffect(() => { + if (editorRef.current) { + editorRef.current.updateOptions({ lineNumbers: showLineNumbers ? 'on' : 'off' }); + } + }, [showLineNumbers]); + + // Persist line numbers preference to localStorage + useEffect(() => { + if (typeof window !== 'undefined') { + localStorage.setItem('editor-line-numbers', String(showLineNumbers)); + } + }, [showLineNumbers]); + const parsedSchema = useMemo((): ParsedTable[] => { if (!schemaContext) return []; try { @@ -502,6 +525,20 @@ export const QueryEditor = forwardRef(({
+ +