import React, { useState, useCallback, useEffect } from 'react'; import TaskStatusBox from './TaskStatusBox'; import { fmtDate } from '../instaUtils'; import { getInstaTrends, instaCollectTrends, getInstaTask } from '../../../api'; /* ══════════════════════ Trends 탭 패널 2: ExternalTrendsPanel ══════════ */ const CATEGORY_COLORS = { economy: '#0F62FE', psychology: '#A66CFF', celebrity: '#FF5C8A', uncategorized: '#6B7280', }; function ExternalTrendsPanel({ onCreateSlate }) { const [naver, setNaver] = useState([]); const [google, setGoogle] = useState([]); const [lastFetched, setLastFetched] = useState(null); const [collecting, setCollecting] = useState(false); const [task, setTask] = useState(null); const load = useCallback(async () => { const [n, g] = await Promise.all([ getInstaTrends({ source: 'naver_popular', days: 2 }), getInstaTrends({ source: 'youtube_trending', days: 2 }), ]); setNaver(n.items || []); setGoogle(g.items || []); const all = [...(n.items || []), ...(g.items || [])]; if (all.length) { const latest = all.map(t => t.suggested_at).sort().reverse()[0]; setLastFetched(latest); } }, []); useEffect(() => { load(); }, [load]); const trigger = async () => { setCollecting(true); try { const { task_id } = await instaCollectTrends(); let st = null; for (let i = 0; i < 60; i++) { st = await getInstaTask(task_id); setTask(st); if (st.status === 'succeeded' || st.status === 'failed') break; await new Promise(r => setTimeout(r, 3000)); } await load(); } finally { setCollecting(false); } }; const groupByCat = (items) => { const g = {}; items.forEach(it => { (g[it.category] = g[it.category] || []).push(it); }); return g; }; const renderRow = (t) => (
없음
} {Object.entries(naverGrouped).map(([cat, items]) => (없음
} {google.map(renderRow)}