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 (
);
}