// 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: '๐ฐ๐ท' }; function fmtDateTime(iso) { if (!iso) return null; const d = new Date(iso); const today = new Date().toDateString(); if (d.toDateString() === today) { return `์ค๋ ${d.getHours().toString().padStart(2, '0')}:${d.getMinutes().toString().padStart(2, '0')}`; } return iso.slice(0, 10); // YYYY-MM-DD } export default function TrendsTab() { 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; // Suno ํ๋กฌํํธ: ์ ํ๋ ๋ฆฌํฌํธ๊ฐ ์์ผ๋ฉด ๊ทธ๊ฒ์ recommended_styles, ์์ผ๋ฉด ๋ผ์ด๋ธ suggestions const displaySuggestions = selectedReport ? (selectedReport.recommended_styles ?? []) : suggestions; return (
ํธ๋ ๋ ๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค. ์๋ ์์ง์ ์คํํ๊ฑฐ๋ agent-office๊ฐ ๋ด์ผ 09:00์ ์๋ ์์งํฉ๋๋ค.
) : (๋ฆฌํฌํธ ์ด๋ ฅ์ด ์์ต๋๋ค
) : (