import { useCallback, useEffect, useState } from 'react'; import { useI18n } from '@/application/i18n/I18nProvider'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { netcattyBridge } from '@/infrastructure/services/netcattyBridge.ts'; import type { ScriptDialogRequest } from '@/types/global/netcatty-bridge-script.d.ts'; export function ScriptDialogHost() { const { t } = useI18n(); const [request, setRequest] = useState(null); const [promptValue, setPromptValue] = useState(''); useEffect(() => { const dispose = netcattyBridge.get()?.onScriptDialogRequest?.((payload) => { setRequest(payload); setPromptValue(payload.defaultValue ?? ''); }); return dispose; }, []); const respond = useCallback(async (value?: unknown, cancelled = false) => { if (!request) return; await netcattyBridge.get()?.scriptDialogResponse?.(request.requestId, value, cancelled); setRequest(null); }, [request]); if (!request) return null; return ( { if (!open) { void respond(request.type === 'waitForTimeout' ? 'abort' : undefined, true); } }} > {request.type === 'waitForTimeout' ? t('scripts.dialog.waitForTimeoutTitle') : t('scripts.dialog.title')} {request.message} {request.type === 'prompt' ? ( setPromptValue(event.target.value)} autoFocus /> ) : null} {request.type === 'waitForTimeout' ? ( <> ) : request.type === 'confirm' ? ( <> ) : request.type === 'prompt' ? ( <> ) : ( )} ); }