import partition from 'lodash-es/partition.js';
import React, { useCallback } from 'react';
import { logEvent } from 'src/services/analytics/index.js';
import { Box, Text } from '@anthropic/ink';
import { getSettings_DEPRECATED, updateSettingsForSource } from '../utils/settings/settings.js';
import { ConfigurableShortcutHint } from './ConfigurableShortcutHint.js';
import { SelectMulti } from './CustomSelect/SelectMulti.js';
import { Byline, Dialog, KeyboardShortcutHint } from '@anthropic/ink';
import { MCPServerDialogCopy } from './MCPServerDialogCopy.js';
type Props = {
serverNames: string[];
onDone(): void;
};
export function MCPServerMultiselectDialog({ serverNames, onDone }: Props): React.ReactNode {
function onSubmit(selectedServers: string[]) {
const currentSettings = getSettings_DEPRECATED() || {};
const enabledServers = currentSettings.enabledMcpjsonServers || [];
const disabledServers = currentSettings.disabledMcpjsonServers || [];
// Use partition to separate approved and rejected servers
const [approvedServers, rejectedServers] = partition(serverNames, server => selectedServers.includes(server));
logEvent('tengu_mcp_multidialog_choice', {
approved: approvedServers.length,
rejected: rejectedServers.length,
});
// Update settings with approved servers
if (approvedServers.length > 0) {
const newEnabledServers = [...new Set([...enabledServers, ...approvedServers])];
updateSettingsForSource('localSettings', {
enabledMcpjsonServers: newEnabledServers,
});
}
// Update settings with rejected servers
if (rejectedServers.length > 0) {
const newDisabledServers = [...new Set([...disabledServers, ...rejectedServers])];
updateSettingsForSource('localSettings', {
disabledMcpjsonServers: newDisabledServers,
});
}
onDone();
}
// Handle ESC to reject all servers
const handleEscRejectAll = useCallback(() => {
const currentSettings = getSettings_DEPRECATED() || {};
const disabledServers = currentSettings.disabledMcpjsonServers || [];
const newDisabledServers = [...new Set([...disabledServers, ...serverNames])];
updateSettingsForSource('localSettings', {
disabledMcpjsonServers: newDisabledServers,
});
onDone();
}, [serverNames, onDone]);
return (
<>
>
);
}