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 (