import React, { useState, useEffect } from 'react'; import { X, Loader, Image as ImageIcon, Box } from 'lucide-react'; import { ocrService } from '../services/ocrService'; import { knowledgeGroupService } from '../services/knowledgeGroupService'; import { KnowledgeGroup } from '../types'; import { useLanguage } from '../contexts/LanguageContext'; import { useToast } from '../contexts/ToastContext'; interface CreateNoteFromPDFDialogProps { screenshot: Blob; extractedText: string; onSave: (title: string, content: string, groupId?: string) => Promise; onCancel: () => void; authToken: string; initialGroupId?: string; initialPageNumber?: number; } export const CreateNoteFromPDFDialog: React.FC = ({ screenshot, extractedText, onSave, onCancel, authToken, initialGroupId, initialPageNumber, }) => { const { t } = useLanguage(); const { showToast } = useToast(); const defaultTitle = initialPageNumber ? `${t('createPDFNote')} - ${t('page')} ${initialPageNumber} - ${new Date().toLocaleString()}` : `${t('createPDFNote')} - ${new Date().toLocaleString()}`; const [title, setTitle] = useState(defaultTitle); const [content, setContent] = useState(extractedText); const [selectedGroupId, setSelectedGroupId] = useState(initialGroupId); const [groups, setGroups] = useState([]); const [saving, setSaving] = useState(false); const [ocrLoading, setOcrLoading] = useState(false); const [screenshotUrl, setScreenshotUrl] = useState(''); useEffect(() => { if (authToken) { knowledgeGroupService.getGroups().then(setGroups).catch(console.error); } }, [authToken]); useEffect(() => { const url = URL.createObjectURL(screenshot); setScreenshotUrl(url); // Trigger OCR if initial text is empty if (!extractedText && authToken) { setOcrLoading(true); ocrService.recognizeText(authToken, screenshot) .then(text => setContent(text)) .catch(err => console.error('OCR failed:', err)) .finally(() => setOcrLoading(false)); } return () => URL.revokeObjectURL(url); }, [screenshot, extractedText, authToken]); const handleSave = async () => { // ナレッジグループが選択されているか確認 if (!selectedGroupId) { showToast('warning', t('pleaseSelectKnowledgeGroupFirst')); // 使用 toast 提示用户先选择知识组 return; } setSaving(true); try { await onSave(title, content, selectedGroupId); } catch (error) { console.error('Failed to save note:', error); } finally { setSaving(false); } }; return (
{/* Header */}

{t('createPDFNote')}

{/* Content */}
{/* Screenshot Preview */}
{screenshotUrl && ( PDF Selection )}
{/* Knowledge Group selector */}
{/* Title Input */}
setTitle(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder={t('enterNoteTitle')} disabled={saving} />
{/* Content Textarea */}