import React from 'react'; import {SegmentedRadioGroup, Text} from '@gravity-ui/uikit'; import {uiFactory} from '../../../../uiFactory/uiFactory'; import {useTenantQueryParams} from '../../useTenantQueryParams'; import {HealthcheckViewTitles, b} from '../shared'; import type {countHealthcheckIssuesByCategory} from '../utils'; import {resolveHealthcheckView} from '../utils'; interface HealthcheckViewProps { issuesCount: ReturnType; viewTitles?: ReturnType; sortOrder?: ReturnType; } export function HealthcheckView({ issuesCount, viewTitles = uiFactory.healthcheck.getHealthckechViewTitles(), sortOrder = uiFactory.healthcheck.getHealthcheckViewsOrder(), }: HealthcheckViewProps) { const {view, handleHealthcheckViewChange, handleIssuesFilterChange} = useTenantQueryParams(); type SortOrder = (typeof sortOrder)[number]; type ExtendedSortOrder = SortOrder | 'unknown'; const normalizedSortOrder: ExtendedSortOrder[] = React.useMemo( () => (issuesCount.unknown > 0 ? [...sortOrder, 'unknown'] : sortOrder), [issuesCount, sortOrder], ); const activeView = React.useMemo( () => resolveHealthcheckView(view, issuesCount, sortOrder), [view, issuesCount, sortOrder], ); React.useEffect(() => { if (view === activeView) { return; } handleHealthcheckViewChange(activeView); }, [view, activeView, handleHealthcheckViewChange]); const renderCount = (category: ExtendedSortOrder) => { return {issuesCount[category] ?? 0}; }; const renderHealthcheckViewOption = (category: ExtendedSortOrder) => { return ( {viewTitles[category as SortOrder] ?? HealthcheckViewTitles[category] ?? category}   {renderCount(category)} ); }; return ( { handleHealthcheckViewChange(newView); handleIssuesFilterChange(''); }} className={b('control-wrapper')} > {normalizedSortOrder.map((type) => renderHealthcheckViewOption(type))} ); }