import React from 'react'; import {Wrench} from '@gravity-ui/icons'; import {Divider, Flex} from '@gravity-ui/uikit'; import {isNil} from 'lodash'; import {getPDiskPagePath} from '../../routes'; import {useBlobStorageCapacityMetricsEnabled} from '../../store/reducers/capabilities/hooks'; import type {NodeMetadata} from '../../types/store/nodesList'; import {BRAND_BUTTON_CLASS} from '../../utils/constants'; import {createPDiskDeveloperUILink, useHasDeveloperUi} from '../../utils/developerUI/developerUI'; import type {DiskDetailItem} from '../../utils/disks/diskInfo/getDiskLocationItems'; import {getDiskLocationItems} from '../../utils/disks/diskInfo/getDiskLocationItems'; import type {PreparedPDisk} from '../../utils/disks/types'; import {useNodeMetadata} from '../../utils/hooks/useNodeMetadata'; import {getPDiskCapacityItems} from '../DiskCapacityInfo/DiskCapacityInfo'; import { DiskPopup, DiskPopupHeader, DiskPopupLocation, DiskPopupPanel, } from '../DiskPopup/DiskPopup'; import {DiskStatusLabel} from '../DiskStatus/DiskStatus'; import {InternalLinkButton} from '../InternalLinkButton'; import {LinkWithIcon} from '../LinkWithIcon/LinkWithIcon'; import {getPDiskLogItems, getPDiskRuntimeItems} from '../PDiskInfo/getPDiskDetails'; import { getPDiskDecommitLabel, getPDiskDriveLabel, getPDiskMaintenanceLabel, getPDiskStateLabel, } from '../PDiskInfo/statuses'; import {YDBDefinitionList} from '../YDBDefinitionList/YDBDefinitionList'; import {pDiskPopupKeyset} from './i18n'; function getStorageItems(data: PreparedPDisk, capacityMetricsEnabled: boolean): DiskDetailItem[] { const items = getPDiskCapacityItems(data, {useWhiteboardSize: capacityMetricsEnabled}).filter( ({id}) => capacityMetricsEnabled || id === 'space', ); return [...items, ...getPDiskLogItems(data)]; } export const buildPDiskFooter = ( data: PreparedPDisk, withDeveloperUILink?: boolean, ): React.ReactNode | null => { const {NodeId, PDiskId} = data; if (isNil(NodeId) || isNil(PDiskId)) { return null; } const pDiskInternalViewerPath = withDeveloperUILink ? createPDiskDeveloperUILink({ nodeId: NodeId, pDiskId: PDiskId, }) : undefined; const pDiskPagePath = getPDiskPagePath(PDiskId, NodeId); return ( {pDiskInternalViewerPath && ( )} {pDiskPopupKeyset('action_go-to-pdisk')} ); }; interface PDiskPopupProps { data: PreparedPDisk; nodeData?: NodeMetadata; } export function PDiskPopupContent({data, nodeData: parentNodeData}: PDiskPopupProps) { const nodeData = useNodeMetadata(data.NodeId, parentNodeData); const hasDeveloperUi = useHasDeveloperUi(); const capacityMetricsEnabled = useBlobStorageCapacityMetricsEnabled(); const storageItems = getStorageItems(data, capacityMetricsEnabled); const locationItems = getDiskLocationItems(data, nodeData); const statusLabels = [ {id: 'state', label: getPDiskStateLabel(data.State)}, {id: 'drive', label: getPDiskDriveLabel(data.DriveStatus)}, {id: 'decommit', label: getPDiskDecommitLabel(data.DecommitStatus)}, {id: 'maintenance', label: getPDiskMaintenanceLabel(data.MaintenanceStatus)}, ]; return ( label ? : null, )} /> {storageItems.length > 0 && ( )} ); } export function PDiskPopup(props: PDiskPopupProps) { return ( ); }