import React from 'react';
import {Label, Text} from '@gravity-ui/uikit';
import {Loader} from '../../../../../components/Loader';
import type {YDBDefinitionListItem} from '../../../../../components/YDBDefinitionList/YDBDefinitionList';
import {YDBDefinitionList} from '../../../../../components/YDBDefinitionList/YDBDefinitionList';
import {YQLCodePreview} from '../../../../../components/YQLCodePreview/YQLCodePreview';
import {useClusterWithProxy} from '../../../../../store/reducers/cluster/cluster';
import {replicationApi} from '../../../../../store/reducers/replication';
import type {DescribeReplicationResult} from '../../../../../types/api/replication';
import type {TEvDescribeSchemeResult} from '../../../../../types/api/schema';
import {cn} from '../../../../../utils/cn';
import {Credentials} from './Credentials';
import i18n from './i18n';
import './TransferInfo.scss';
interface TransferProps {
path: string;
database: string;
databaseFullPath: string;
data?: TEvDescribeSchemeResult;
}
const b = cn('ydb-transfer-info');
/** Displays overview for Transfer EPathType */
export function TransferInfo({path, database, data, databaseFullPath}: TransferProps) {
const useMetaProxy = useClusterWithProxy();
if (!data) {
return null;
}
const {data: replicationData, isFetching} = replicationApi.useGetReplicationQuery(
{path, database, databaseFullPath, useMetaProxy},
{},
);
const loading = isFetching && replicationData === undefined;
if (loading) {
return ;
}
const {items, transformLambda} = prepareTransferItems(data, replicationData);
return (
{transformLambda ? (
) : null}
);
}
function transferState(state: DescribeReplicationResult | undefined) {
if (!state) {
return null;
}
if ('running' in state) {
return ;
}
if ('paused' in state) {
return ;
}
if ('done' in state) {
return ;
}
if ('error' in state) {
return ;
}
return ;
}
function prepareTransferItems(
data: TEvDescribeSchemeResult,
replicationData: DescribeReplicationResult | undefined,
) {
const transferDescription = data.PathDescription?.ReplicationDescription || {};
const srcConnectionParams = transferDescription.Config?.SrcConnectionParams || {};
const {Endpoint, Database} = srcConnectionParams;
const target = transferDescription.Config?.TransferSpecific?.Target;
const srcPath = target?.SrcPath;
const dstPath = target?.DstPath;
const transformLambda = target?.TransformLambda;
const info: YDBDefinitionListItem[] = [];
if (replicationData) {
info.push({
name: i18n('state.label'),
content: transferState(replicationData),
});
}
if (replicationData?.error?.issues && replicationData.error.issues[0]?.message) {
info.push({
name: i18n('state.error'),
copyText: replicationData.error.issues[0].message,
content: (
{replicationData.error.issues[0].message}
),
});
}
if (Endpoint) {
info.push({
name: i18n('srcConnection.endpoint.label'),
copyText: Endpoint,
content: {Endpoint},
});
}
if (Database) {
info.push({
name: i18n('srcConnection.database.label'),
copyText: Database,
content: {Database},
});
}
if (srcConnectionParams) {
info.push({
name: i18n('credentials.label'),
content: ,
});
}
info.push({
name: i18n('srcPath.label'),
copyText: srcPath,
content: {srcPath},
});
info.push({
name: i18n('dstPath.label'),
copyText: dstPath,
content: {dstPath},
});
return {items: info, transformLambda};
}