import React from 'react';
import {DatabaseArrowRight, Pencil, PlugConnection, TrashBin} from '@gravity-ui/icons';
import {Flex, Spin, Text} from '@gravity-ui/uikit';
import {useHistory} from 'react-router-dom';
import {getConnectToDBDialog} from '../../components/ConnectToDB/ConnectToDBDialog';
import type {DropdownMenuItemWithDescription} from '../../components/DropdownMenu';
import {DropdownMenu} from '../../components/DropdownMenu';
import {getClusterPath} from '../../routes';
import {useEmMetaAvailable} from '../../store/reducers/capabilities/hooks';
import type {PreparedTenant} from '../../store/reducers/tenants/types';
import type {AdditionalTenantsProps, ClusterLinkWithTitle} from '../../types/additionalProps';
import {uiFactory} from '../../uiFactory/uiFactory';
import {clusterTabsIds} from '../Cluster/utils';
import {b} from './constants';
import {useSharedDatabasePath} from './hooks/useSharedDatabasePath';
import {headerKeyset} from './i18n';
export interface HeaderActionsMenuProps {
database?: string;
clusterName?: string;
databaseData?: PreparedTenant;
isDatabaseDataLoading: boolean;
isV2NavigationEnabled: boolean;
isViewerUser?: boolean;
prepareTenantBackend?: AdditionalTenantsProps['prepareTenantBackend'];
databaseLinks: ClusterLinkWithTitle[];
}
export function DBHeaderActionsMenu({
database,
clusterName,
databaseData,
isDatabaseDataLoading,
isV2NavigationEnabled,
isViewerUser,
prepareTenantBackend,
databaseLinks,
}: HeaderActionsMenuProps) {
const history = useHistory();
const emMetaAvailable = useEmMetaAvailable();
const {isSharedDatabaseLoading, sharedDatabasePath} = useSharedDatabasePath({
clusterName,
databaseData,
isViewerUser,
prepareTenantBackend,
});
const isEditDBAvailable = emMetaAvailable && uiFactory.onEditDB !== undefined;
const isDeleteDBAvailable = emMetaAvailable && uiFactory.onDeleteDB !== undefined;
const menuItems = React.useMemo(() => {
const menuItems: DropdownMenuItemWithDescription[][] = [];
const linksItems: DropdownMenuItemWithDescription[] = [];
for (const link of databaseLinks) {
linksItems.push({
title: link.title,
description: link.description,
iconStart: link.icon,
href: link.url,
target: link.target,
});
}
if (linksItems.length) {
menuItems.push(linksItems);
}
// In v1 navigation `Connect` is displayed as a separate button
if (isV2NavigationEnabled) {
menuItems.push([
{
title: headerKeyset('action_connect-to-db'),
iconStart: PlugConnection,
action: () => getConnectToDBDialog({database}),
},
]);
}
if (isSharedDatabaseLoading) {
menuItems.push([
{
title: (