diff --git a/src/pages/music/components/TrendsTab.jsx b/src/pages/music/components/TrendsTab.jsx index 8612b5f..e070694 100644 --- a/src/pages/music/components/TrendsTab.jsx +++ b/src/pages/music/components/TrendsTab.jsx @@ -1,3 +1,173 @@ +// src/pages/music/components/TrendsTab.jsx +import { useState, useEffect } from 'react'; +import { + getLatestTrendReport, getTrendReports, + getMarketSuggestions, triggerYoutubeResearch, +} from '../../../api'; + +const FLAG = { BR: '๐ง๐ท', US: '๐บ๐ธ', ID: '๐ฎ๐ฉ', MX: '๐ฒ๐ฝ', KR: '๐ฐ๐ท' }; + export default function TrendsTab() { - return null; + const [latestReport, setLatestReport] = useState(null); + const [reports, setReports] = useState([]); + const [suggestions, setSuggestions] = useState([]); + const [selectedReport, setSelectedReport] = useState(null); + const [researching, setResearching] = useState(false); + const [copiedIdx, setCopiedIdx] = useState(null); + + const loadAll = async () => { + const [latest, rpts, sugg] = await Promise.all([ + getLatestTrendReport().catch(() => null), + getTrendReports().catch(() => []), + getMarketSuggestions().catch(() => []), + ]); + setLatestReport(latest); + setReports(Array.isArray(rpts) ? rpts : rpts.reports ?? []); + setSuggestions(Array.isArray(sugg) ? sugg : sugg.suggestions ?? []); + }; + + useEffect(() => { loadAll(); }, []); + + const handleResearch = async () => { + setResearching(true); + try { + await triggerYoutubeResearch(); + } catch (e) { + console.error('triggerYoutubeResearch:', e); + } finally { + setResearching(false); + } + }; + + const handleCopy = (text, idx) => { + navigator.clipboard.writeText(text).then(() => { + setCopiedIdx(idx); + setTimeout(() => setCopiedIdx(null), 2000); + }); + }; + + // ์ ํ๋ ๋ฆฌํฌํธ๊ฐ ์์ผ๋ฉด ๊ทธ๊ฒ, ์์ผ๋ฉด ์ต์ ๋ฆฌํฌํธ์ ์ฅ๋ฅด ํ์ + const displayReport = selectedReport ?? latestReport; + const topGenres = displayReport?.top_genres?.slice(0, 5) ?? []; + const maxScore = topGenres.length > 0 ? Math.max(...topGenres.map(g => g.score)) : 1; + + return ( +
+ ํธ๋ ๋ ๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค. ์๋ ์์ง์ ์คํํ๊ฑฐ๋ agent-office๊ฐ ๋ด์ผ 09:00์ ์๋ ์์งํฉ๋๋ค. +
+ ) : ( +๋ฆฌํฌํธ ์ด๋ ฅ์ด ์์ต๋๋ค
+ ) : ( +