/** * 処理モード選択コンポーネント * ファイルアップロード時に高速モードまたは精密モードを選択するために使用 */ import React, { useState, useEffect } from 'react'; import { uploadService } from '../services/uploadService'; import { ModeRecommendation } from '../types'; interface ModeSelectorProps { file: File | null; onModeChange: (mode: 'fast' | 'precise') => void; className?: string; } export const ModeSelector: React.FC = ({ file, onModeChange, className = '', }) => { const [selectedMode, setSelectedMode] = useState<'fast' | 'precise'>('fast'); const [recommendation, setRecommendation] = useState(null); const [loading, setLoading] = useState(false); useEffect(() => { if (file) { loadRecommendation(); } else { setRecommendation(null); } }, [file]); const loadRecommendation = async () => { if (!file) return; setLoading(true); try { const rec = await uploadService.recommendMode(file); setRecommendation(rec); // 推薦されたモードを自動選択 setSelectedMode(rec.recommendedMode); onModeChange(rec.recommendedMode); } catch (error) { console.error('モード推奨の取得に失敗しました:', error); } finally { setLoading(false); } }; const handleModeChange = (mode: 'fast' | 'precise') => { setSelectedMode(mode); onModeChange(mode); }; if (!file) { return null; } return (

処理モードの選択

{loading && 分析中...}
{/* 模式推荐信息 */} {recommendation && (
推奨: {recommendation.reason}
{recommendation.warnings && recommendation.warnings.length > 0 && (
{recommendation.warnings.map((warning, idx) => (
⚠️ {warning}
))}
)}
)} {/* 模式选择 */}
); };