Просмотр исходного кода

Explore: Fix selection/copy of log lines (#17121)

This adds some logic to identify if the user is selecting 
text and if so disables parsing of log messages on hover. 
This should resolve the issue of selecting log lines to be 
copied and the selection is truncated.

Fixes #17072
Marcus Efraimsson 6 лет назад
Родитель
Сommit
0e210dc271
1 измененных файлов с 15 добавлено и 1 удалено
  1. 15 1
      public/app/features/explore/LogRow.tsx

+ 15 - 1
public/app/features/explore/LogRow.tsx

@@ -130,7 +130,7 @@ export class LogRow extends PureComponent<Props, State> {
   };
   };
 
 
   onMouseOverMessage = () => {
   onMouseOverMessage = () => {
-    if (this.state.showContext) {
+    if (this.state.showContext || this.isTextSelected()) {
       // When showing context we don't want to the LogRow rerender as it will mess up state of context block
       // When showing context we don't want to the LogRow rerender as it will mess up state of context block
       // making the "after" context to be scrolled to the top, what is desired only on open
       // making the "after" context to be scrolled to the top, what is desired only on open
       // The log row message needs to be refactored to separate component that encapsulates parsing and parsed message state
       // The log row message needs to be refactored to separate component that encapsulates parsing and parsed message state
@@ -161,6 +161,20 @@ export class LogRow extends PureComponent<Props, State> {
     }
     }
   };
   };
 
 
+  isTextSelected() {
+    if (!window.getSelection) {
+      return false;
+    }
+
+    const selection = window.getSelection();
+
+    if (!selection) {
+      return false;
+    }
+
+    return selection.anchorNode !== null && selection.isCollapsed === false;
+  }
+
   toggleContext = () => {
   toggleContext = () => {
     this.setState(state => {
     this.setState(state => {
       return {
       return {