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