import React from 'react'
import { envDynamic } from 'src/utils/envDynamic.js'
import { Box, Text } from '../ink.js'
import { useKeybindings } from '../keybindings/useKeybinding.js'
import { getGlobalConfig, saveGlobalConfig } from '../utils/config.js'
import { env } from '../utils/env.js'
import {
getTerminalIdeType,
type IDEExtensionInstallationStatus,
isJetBrainsIde,
toIDEDisplayName,
} from '../utils/ide.js'
import { Dialog } from './design-system/Dialog.js'
interface Props {
onDone: () => void
installationStatus: IDEExtensionInstallationStatus | null
}
export function IdeOnboardingDialog({
onDone,
installationStatus,
}: Props): React.ReactNode {
markDialogAsShown()
// Handle Enter/Escape to dismiss
useKeybindings(
{
'confirm:yes': onDone,
'confirm:no': onDone,
},
{ context: 'Confirmation' },
)
const ideType = installationStatus?.ideType ?? getTerminalIdeType()
const isJetBrains = isJetBrainsIde(ideType)
const ideName = toIDEDisplayName(ideType)
const installedVersion = installationStatus?.installedVersion
const pluginOrExtension = isJetBrains ? 'plugin' : 'extension'
const mentionShortcut =
env.platform === 'darwin' ? 'Cmd+Option+K' : 'Ctrl+Alt+K'
return (
<>
Press Enter to continue
>
)
}
export function hasIdeOnboardingDialogBeenShown(): boolean {
const config = getGlobalConfig()
const terminal = envDynamic.terminal || 'unknown'
return config.hasIdeOnboardingBeenShown?.[terminal] === true
}
function markDialogAsShown(): void {
if (hasIdeOnboardingDialogBeenShown()) {
return
}
const terminal = envDynamic.terminal || 'unknown'
saveGlobalConfig(current => ({
...current,
hasIdeOnboardingBeenShown: {
...current.hasIdeOnboardingBeenShown,
[terminal]: true,
},
}))
}