import React from 'react'; import {ArrowToggle, Disclosure, Divider, Flex, Text} from '@gravity-ui/uikit'; import {EntityStatus} from '../../../../components/EntityStatus/EntityStatus'; import type {IssuesTree} from '../../../../store/reducers/healthcheckInfo/types'; import {hcStatusToColorFlag} from '../../../../store/reducers/healthcheckInfo/utils'; import {useHealthcheckContext} from '../HealthcheckContext'; import {b} from '../shared'; import {getHealthcheckIssueDisclosureLabel} from '../utils'; import {IssueDetails} from './HealthcheckIssueDetails/HealthcheckIssueDetails'; import {HealthcheckIssueTabs} from './HealthcheckIssueTabs'; interface HealthcheckIssueProps { issue: IssuesTree; expanded?: boolean; targeted?: boolean; targetIssueId?: string; targetRef?: React.Ref; } export function HealthcheckIssue({ issue, expanded, targeted, targetIssueId, targetRef, }: HealthcheckIssueProps) { const {assistant} = useHealthcheckContext(); const parents = React.useMemo(() => { const parents = []; let current: IssuesTree | undefined = issue; while (current) { parents.push(current); current = current.parent; } return parents.reverse(); }, [issue]); const [selectedTab, setSelectedTab] = React.useState( targetIssueId && parents.some((parentIssue) => parentIssue.id === targetIssueId) ? targetIssueId : issue.id, ); const currentIssue = React.useMemo(() => { return parents.find((parent) => parent.id === selectedTab); }, [parents, selectedTab]); const rawIssue = React.useMemo( () => assistant?.snapshot.issues.find((item) => item.id === issue.id) ?? issue, [assistant?.snapshot.issues, issue], ); return ( {(props) => { const { ariaControls, expanded: isExpanded, qa, className: disclosureClassName, ...buttonProps } = props; if (!assistant) { return ( ); } const {id, onClick, onKeyDown, disabled} = buttonProps; return (
{issue.status && (
)} {issue.message}
event.stopPropagation()} > {assistant.renderAction({ action: 'fix', target: assistant.target, snapshot: assistant.snapshot, issue: rawIssue, })}
); }}
{currentIssue && }
); }