import {ClipboardButton} from '@gravity-ui/uikit';
import {useClusterBaseInfo} from '../../../store/reducers/cluster/cluster';
import type {AdditionalClusterProps} from '../../../types/additionalProps';
import type {GetClusterLinks, GetDatabaseLinks} from '../../../uiFactory/types';
import {CLUSTER_LINK_CONTEXT} from '../../../utils/clusterLinks/clusterLinkConstants';
import {cn} from '../../../utils/cn';
import {MONITORING_UI_TITLE} from '../../../utils/constants';
import type {GetLogsLink} from '../../../utils/logs';
import type {GetMonitoringClusterLink, GetMonitoringLink} from '../../../utils/monitoring';
import {getCleanBalancerValue} from '../../../utils/parseBalancer';
import type {Cluster} from '../../Cluster/Cluster';
import {useAdditionalTenantsProps} from '../utils/useAdditionalTenantsProps';
import './ExtendedCluster.scss';
const b = cn('extended-cluster');
const getAdditionalBalancerInfo = (balancer: string) => {
const cleanedValue = getCleanBalancerValue(balancer);
return {
label: 'Balancer',
value: (
{cleanedValue}
),
};
};
interface GetAdditionalClusterProps {
getMonitoringClusterLink?: GetMonitoringClusterLink;
getClusterLinks?: GetClusterLinks;
}
export const useAdditionalClusterProps = ({
getMonitoringClusterLink,
getClusterLinks,
}: GetAdditionalClusterProps) => {
const clusterInfo = useClusterBaseInfo();
const {name: clusterName, balancer, monitoring} = clusterInfo;
const additionalClusterProps: AdditionalClusterProps = {};
additionalClusterProps.links = [];
if (monitoring && getMonitoringClusterLink) {
const clusterLink = getMonitoringClusterLink(monitoring, clusterName);
if (clusterLink) {
additionalClusterProps.links.push({
title: MONITORING_UI_TITLE,
url: clusterLink,
context: CLUSTER_LINK_CONTEXT.MONITORING,
});
}
}
if (getClusterLinks) {
const clusterLinks = getClusterLinks({clusterInfo});
additionalClusterProps.links.push(...clusterLinks);
}
if (balancer) {
additionalClusterProps.info = [getAdditionalBalancerInfo(balancer)];
}
return additionalClusterProps;
};
interface ExtendedClusterProps {
component: typeof Cluster;
getMonitoringLink?: GetMonitoringLink;
getMonitoringClusterLink?: GetMonitoringClusterLink;
getLogsLink?: GetLogsLink;
getDatabaseLinks?: GetDatabaseLinks;
getClusterLinks?: GetClusterLinks;
}
export function ExtendedCluster({
component: ClusterComponent,
getMonitoringLink,
getMonitoringClusterLink,
getLogsLink,
getDatabaseLinks,
getClusterLinks,
}: ExtendedClusterProps) {
return (
);
}