import { useState, useEffect } from "react"; import { List, Settings, Terminal, Bug, Info } from 'lucide-react'; import { listen } from "@tauri-apps/api/event"; import { invoke } from "@tauri-apps/api/core"; import "./App.css"; import TitleBar from "./TitleBar"; import SettingsComponent from "./SettingsComponent"; import { ThemeProvider } from "./ThemeContext"; import { LogProvider } from "./LogContext"; import TerminalComponent from "./TerminalComponent"; import AboutComponent from "./AboutComponent"; import TsfSettingsModal from "./TsfSettingsModal"; import { Config } from "./SettingsComponent"; interface Log { time: string; original: string; converted: string; } const AppContent = () => { const [logs, setLogs] = useState([]); const [activeMenuItem, setActiveMenuItem] = useState('home'); const [showTsfModal, setShowTsfModal] = useState(false); const [currentSettings, setCurrentSettings] = useState(null); const [isTsfAvailable, setIsTsfAvailable] = useState(null); useEffect(() => { const unlisten = listen('addLog', (event) => { setLogs(prevLogs => [{ time: event.payload.time, original: event.payload.original, converted: event.payload.converted }, ...prevLogs]); }); return () => { unlisten.then(f => f()); } }, []); // TSF設定のチェック useEffect(() => { const checkTsfSettings = async () => { try { const settings: Config = await invoke('load_settings'); setCurrentSettings(settings); if (settings.use_tsf_reconvert) { // TSF設定が有効な場合、TSFが利用可能か確認 const available: boolean = await invoke('check_tsf_availability_command'); setIsTsfAvailable(available); if (!available) { setShowTsfModal(true); } } } catch (error) { console.error('TSF設定確認エラー:', error); } }; checkTsfSettings(); }, []); // 設定保存関数 const saveSettings = async (config: Config) => { try { await invoke('save_settings', { config }); setCurrentSettings(config); } catch (error) { console.error('設定保存エラー:', error); } }; const renderLogEntry = (log: { time: string; original: string; converted: string }, index: number) => (
{log.time}
{log.original}
{log.converted}
); const MenuItem = ({ icon, label, id }: { icon: React.ReactNode, label: string, id: string }) => ( ); const renderContent = () => { switch (activeMenuItem) { case 'home': return (

変換ログ

{logs.length > 0 ? ( logs.map((log, index) => renderLogEntry(log, index)) ) : (

ログはまだありません

テキストを変換すると、ここに表示されます

)}
); case 'settings': return ; case 'terminal': return ; case 'about': return ; default: return null; } }; return (
{/* サイドメニュー */}
} label="ログ" id="home" /> } label="設定" id="settings" />
{/* 下側にデバッグタブを配置 */}
} label="デバッグ" id="terminal" /> } label="情報" id="about" />
{/* メインコンテンツ */}
{renderContent()}
{/* TSF設定モーダル */} {currentSettings && ( setShowTsfModal(false)} onSaveSettings={saveSettings} currentSettings={currentSettings} /> )}
); }; function App() { return ( ); } export default App;