import React, { useEffect, useState } from 'react'; import { createPortal } from 'react-dom'; import { Button, Select } from '../shared/ui/controls'; import styles from './EditorApp.module.css'; import { useEditorI18n } from './i18n/EditorI18nContext'; export type FoundryImportSourceSelection = | { kind: 'folder'; sourcePath: string } | { kind: 'archive'; sourcePath: string }; type FoundryImportModalProps = { open: boolean; pickSource: ( mode: 'folder' | 'archive', ) => Promise<{ canceled: true } | { canceled: false; sourcePath: string }>; onClose: () => void; onImport: (selection: FoundryImportSourceSelection) => Promise; }; export function FoundryImportModal({ open, pickSource, onClose, onImport }: FoundryImportModalProps) { const { t } = useEditorI18n(); const [mode, setMode] = useState<'folder' | 'archive'>('folder'); const [picked, setPicked] = useState<{ path: string; name: string } | null>(null); const [submitting, setSubmitting] = useState(false); const [error, setError] = useState(null); useEffect(() => { if (!open) return; setMode('folder'); setPicked(null); setSubmitting(false); setError(null); }, [open]); useEffect(() => { if (!open) return; const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape' && !submitting) onClose(); }; window.addEventListener('keydown', onKey); return () => window.removeEventListener('keydown', onKey); }, [onClose, open, submitting]); if (!open) return null; return createPortal( <>
{t('foundryImport.hint')}
{t('foundryImport.sourceType')}