From e0415c3d9fd07191344318d8192945ce21485c73 Mon Sep 17 00:00:00 2001 From: pravesh-sharma Date: Thu, 29 May 2025 17:26:59 +0530 Subject: [PATCH 1/2] Fixed an issue in the query tool where, when multiple cursors were used to copy, only the first line was being copied. #8691 --- .../static/js/components/ReactCodeMirror/CustomEditorView.js | 3 ++- .../js/components/ReactCodeMirror/components/Editor.jsx | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/web/pgadmin/static/js/components/ReactCodeMirror/CustomEditorView.js b/web/pgadmin/static/js/components/ReactCodeMirror/CustomEditorView.js index 5708e1fe561..94203fa8184 100644 --- a/web/pgadmin/static/js/components/ReactCodeMirror/CustomEditorView.js +++ b/web/pgadmin/static/js/components/ReactCodeMirror/CustomEditorView.js @@ -201,7 +201,8 @@ export default class CustomEditorView extends EditorView { } getSelection() { - return this.state.selection.ranges.map((range)=>this.state.sliceDoc(range.from, range.to)).join('') ?? ''; + const lineSep = this.state.facet(eol); + return this.state.selection.ranges.map((range)=>this.state.sliceDoc(range.from, range.to)).join(lineSep) ?? ''; } replaceSelection(newValue) { diff --git a/web/pgadmin/static/js/components/ReactCodeMirror/components/Editor.jsx b/web/pgadmin/static/js/components/ReactCodeMirror/components/Editor.jsx index ab8827f629d..6803432c48f 100644 --- a/web/pgadmin/static/js/components/ReactCodeMirror/components/Editor.jsx +++ b/web/pgadmin/static/js/components/ReactCodeMirror/components/Editor.jsx @@ -158,9 +158,8 @@ const defaultExtensions = [ autoCompleteCompartment.of([]), EditorView.clipboardOutputFilter.of((text, state)=>{ const lineSep = state.facet(eol); - // Fetch the primary selection from the editor's current state. - const selection = state.selection.main; - return state.doc.sliceString(selection.from, selection.to, lineSep); + // Fetch the selection range from the editor's current state. + return state.selection.ranges.map((range)=>state.sliceDoc(range.from, range.to)).join(lineSep) ?? ''; }) ]; From ef55107aa5c5e404a94eea3d09d5765acb48fc65 Mon Sep 17 00:00:00 2001 From: pravesh-sharma Date: Fri, 30 May 2025 13:18:12 +0530 Subject: [PATCH 2/2] Implemented review comments --- .../js/components/ReactCodeMirror/CustomEditorView.js | 9 +++++++-- .../js/components/ReactCodeMirror/components/Editor.jsx | 4 +--- .../static/js/components/ReactCodeMirror/index.jsx | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/web/pgadmin/static/js/components/ReactCodeMirror/CustomEditorView.js b/web/pgadmin/static/js/components/ReactCodeMirror/CustomEditorView.js index 94203fa8184..9144a54cb9f 100644 --- a/web/pgadmin/static/js/components/ReactCodeMirror/CustomEditorView.js +++ b/web/pgadmin/static/js/components/ReactCodeMirror/CustomEditorView.js @@ -201,8 +201,13 @@ export default class CustomEditorView extends EditorView { } getSelection() { - const lineSep = this.state.facet(eol); - return this.state.selection.ranges.map((range)=>this.state.sliceDoc(range.from, range.to)).join(lineSep) ?? ''; + return CustomEditorView.getSelectionFromState(this.state); + } + + static getSelectionFromState(state) { + // function to get selection from EditorState + const lineSep = state.facet(eol); + return state.selection.ranges.map((range)=>state.sliceDoc(range.from, range.to)).join(lineSep) ?? ''; } replaceSelection(newValue) { diff --git a/web/pgadmin/static/js/components/ReactCodeMirror/components/Editor.jsx b/web/pgadmin/static/js/components/ReactCodeMirror/components/Editor.jsx index 6803432c48f..9676aa1c927 100644 --- a/web/pgadmin/static/js/components/ReactCodeMirror/components/Editor.jsx +++ b/web/pgadmin/static/js/components/ReactCodeMirror/components/Editor.jsx @@ -157,9 +157,7 @@ const defaultExtensions = [ }), autoCompleteCompartment.of([]), EditorView.clipboardOutputFilter.of((text, state)=>{ - const lineSep = state.facet(eol); - // Fetch the selection range from the editor's current state. - return state.selection.ranges.map((range)=>state.sliceDoc(range.from, range.to)).join(lineSep) ?? ''; + return CustomEditorView.getSelectionFromState(state); }) ]; diff --git a/web/pgadmin/static/js/components/ReactCodeMirror/index.jsx b/web/pgadmin/static/js/components/ReactCodeMirror/index.jsx index 05615e29309..85861db3a19 100644 --- a/web/pgadmin/static/js/components/ReactCodeMirror/index.jsx +++ b/web/pgadmin/static/js/components/ReactCodeMirror/index.jsx @@ -110,7 +110,7 @@ export default function CodeMirror({className, currEditor, showCopyBtn=false, cu if (!onTextSelect) return; const handleSelection = () => { - const selectedText = window.getSelection().toString(); + const selectedText = editor.current?.getSelection(); if (selectedText) { onTextSelect(selectedText); } else {