diff --git a/src/containers/Tenant/Query/Issues/Issues.tsx b/src/containers/Tenant/Query/Issues/Issues.tsx
index e0c4913d6..158d3978c 100644
--- a/src/containers/Tenant/Query/Issues/Issues.tsx
+++ b/src/containers/Tenant/Query/Issues/Issues.tsx
@@ -7,7 +7,7 @@ import {
TriangleExclamationFill,
} from '@gravity-ui/icons';
import type {IconData} from '@gravity-ui/uikit';
-import {ArrowToggle, Button, Icon} from '@gravity-ui/uikit';
+import {ArrowToggle, Button, Icon, Link} from '@gravity-ui/uikit';
import ShortyString from '../../../../components/ShortyString/ShortyString';
import type {ErrorResponse, IssueMessage} from '../../../../types/api/query';
@@ -107,7 +107,6 @@ function Issue({
}) {
const [isExpand, setIsExpand] = React.useState(true);
const severity = getSeverity(issue.severity);
- const position = getIssuePosition(issue);
const issues = issue.issues;
const hasIssues = Array.isArray(issues) && issues.length > 0;
@@ -132,17 +131,7 @@ function Issue({
)}
{hideSeverity ? null : }
-
-
- {position && (
-
- {position}
-
- )}
-
-
-
-
+
{issue.issue_code ? (
Code: {issue.issue_code}
) : null}
@@ -156,6 +145,51 @@ function Issue({
);
}
+interface IssueTextProps {
+ issue: IssueMessage;
+}
+
+function IssueText({issue}: IssueTextProps) {
+ const position = getIssuePosition(issue);
+
+ const ydbEditor = window.ydbEditor;
+
+ const getIssue = () => {
+ return (
+
+ {position && (
+
+ {position}
+
+ )}
+
+
+
+
+ );
+ };
+
+ const {row, column} = issue.position ?? {};
+ const isIssueClickable = isNumeric(row) && ydbEditor;
+ if (!isIssueClickable) {
+ return getIssue();
+ }
+
+ const onIssueClickHandler = () => {
+ const monacoPosition = {lineNumber: row, column: column ?? 0};
+
+ ydbEditor.setPosition(monacoPosition);
+ ydbEditor.revealPositionInCenterIfOutsideViewport(monacoPosition);
+ ydbEditor.focus();
+ };
+
+ return (
+
+ {getIssue()}
+
+ );
+}
+
function IssueList(props: {issues: IssueMessage[]; expanded: boolean; level: number}) {
const {issues, level, expanded} = props;
return (