import React, { useState } from 'react'; import { useNetworkMonitorStore, NetworkRequest } from '../../stores/networkMonitorStore'; import { X, Play, Pause, Trash2, Activity, ChevronDown } from 'lucide-react'; import { useTranslation } from 'react-i18next'; const NetworkMonitor: React.FC = () => { const { requests, isOpen, setIsOpen, isRecording, toggleRecording, clearRequests } = useNetworkMonitorStore(); const [selectedRequest, setSelectedRequest] = useState(null); const { t } = useTranslation(); // If not open, show a small floating button if (!isOpen) { return (
); } return (
{/* Header */}

{t('monitor.network.title', 'ネットワークモニター')}

{t('monitor.network.requests_count', '{{count}} 件', { count: requests.length })}
{/* Main Content */}
{/* Request List */}
{requests.map((req) => ( setSelectedRequest(req)} > ))} {requests.length === 0 && ( )}
{t('monitor.network.table.status', '状態')} {t('monitor.network.table.command', 'コマンド')} {t('monitor.network.table.time', '時刻')} {t('monitor.network.table.duration', '所要時間')}
{req.cmd} {new Date(req.startTime).toLocaleTimeString()} {req.duration ? `${req.duration}ms` : '-'}
{t('monitor.network.empty', '記録されたリクエストはありません')}
{/* Details Panel */} {selectedRequest && (
{selectedRequest.cmd}

{t('monitor.network.sections.general', '概要')}

ID: {selectedRequest.id}
{t('monitor.network.fields.status', '状態')}:
{t('monitor.network.fields.start_time', '開始時刻')}: {new Date(selectedRequest.startTime).toLocaleString()}
{selectedRequest.duration && (
{t('monitor.network.fields.duration', '所要時間')}: {selectedRequest.duration}ms
)}

{t('monitor.network.sections.request_args', 'リクエスト引数')}

{selectedRequest.status === 'error' ? t('monitor.network.sections.error_details', 'エラー詳細') : t('monitor.network.sections.response', 'レスポンス')}

{(selectedRequest.response || selectedRequest.error) ? ( ) : (
{t('monitor.network.waiting', '応答待ち...')}
)}
)}
); }; const BadgeStatus = ({ status }: { status: NetworkRequest['status'] }) => { const { t } = useTranslation(); switch (status) { case 'success': return 200; case 'error': return {t('monitor.network.badge_error', 'エラー')}; case 'pending': return ; } }; const JsonView = ({ data, isError = false }: { data: any, isError?: boolean }) => { const { t } = useTranslation(); if (data === undefined || data === null) { return
{t('common.empty', '空')}
; } return (
                {JSON.stringify(data, null, 2)}
            
); }; export default NetworkMonitor;