import React, { useState, useEffect, useCallback } from 'react'; import { Search, Calendar, TrendingUp, DollarSign, BarChart3, AlertCircle } from 'lucide-react'; import { stockApi, FinancialDataRequest, FinancialDataResponse, formatCurrency, formatPercentage, formatDate } from '@/lib/api'; const StockQueryFixed: React.FC = () => { // Use individual state for each field to avoid controlled component issues const [ticker, setTicker] = useState(''); const [startDate, setStartDate] = useState(''); const [endDate, setEndDate] = useState(''); const [periodType, setPeriodType] = useState<'quarterly' | 'annual' | 'all'>('quarterly'); const [includeMetrics, setIncludeMetrics] = useState(true); const [forceRefresh, setForceRefresh] = useState(false); const [data, setData] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); // Initialize default values useEffect(() => { const today = new Date(); const oneYearAgo = new Date(); oneYearAgo.setFullYear(today.getFullYear() - 1); setTicker('AAPL'); setStartDate(oneYearAgo.toISOString().split('T')[0]); setEndDate(today.toISOString().split('T')[0]); }, []); const handleSubmit = useCallback(async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setError(null); const query: FinancialDataRequest = { ticker: ticker.trim().toUpperCase(), start_date: startDate, end_date: endDate, period_type: periodType, include_metrics: includeMetrics, force_refresh: forceRefresh, }; console.log('Submitting query:', query); try { const result = await stockApi.getFinancialData(query); setData(result); console.log('API Response:', result); } catch (err) { console.error('API Error:', err); setError(err instanceof Error ? err.message : '데이터를 가져오는데 실패했습니다.'); } finally { setLoading(false); } }, [ticker, startDate, endDate, periodType, includeMetrics, forceRefresh]); return (
{/* 검색 폼 */}

주식 데이터 조회

{/* 종목 코드 */}
setTicker(e.target.value.toUpperCase())} className="w-full px-3 py-2 border border-gray-300 rounded-md text-gray-900 bg-white placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" placeholder="예: AAPL" required />
{/* 시작 날짜 */}
setStartDate(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md text-gray-900 bg-white focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" required />
{/* 종료 날짜 */}
setEndDate(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md text-gray-900 bg-white focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" required />
{/* 기간 타입 */}
{/* 옵션들 */}
{/* 검색 버튼 */}
{/* 에러 메시지 */} {error && (

{error}

)} {/* 결과 표시 */} {data && (
{/* 회사 정보 */}

회사 정보

회사명

{data.company.name}

종목 코드

{data.company.ticker}

섹터

{data.company.sector || 'N/A'}

산업

{data.company.industry || 'N/A'}

{/* 재무 데이터 */}

재무 데이터 ({data.financial_data.length}개 기간)

{data.financial_data.map((item, index) => ( ))}
기간 매출 순이익 총자산 P/E 비율
{formatDate(item.period_date)} {formatCurrency(item.revenue)} {formatCurrency(item.net_income)} {formatCurrency(item.total_assets)} {item.pe_ratio?.toFixed(2) || 'N/A'}
)}
); }; export default StockQueryFixed;