import { TimeSeriesChart, type TimeRange } from "@/components/Chart"; import React, { useEffect, useState } from "react"; import useSWR from "swr"; import useDarkTheme from "@alikia/dark-theme-hook"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; const API_URL = "https://api.projectcvsa.com"; const App = () => { const isDarkMode = useDarkTheme(); const [range, setRange] = useState("7d"); const [currentData, setCurrentData] = useState(""); const [currentDate, setCurrentDate] = useState(""); const [outside, setOutside] = useState(false); const ref = React.useRef(null); const { data, error, isLoading } = useSWR(`${API_URL}/video/av285205499/snapshots?ps=1300`, async (url) => { const response = await fetch(url); if (!response.ok) { throw new Error("Failed to fetch song info"); } return response.json(); }); function generateSampleData() { if (!data || data.length === 0) return []; const d = []; for (let i = data.length - 1; i >= 0; i--) { d.push({ timestamp: new Date(data[i].created_at).getTime(), value: data[i].views, }); } return d; } const [chartData, setChartData] = useState(generateSampleData()); useEffect(() => { if (data) { setChartData(generateSampleData()); } }, [data]); return (
{ const targetElement = e.target; if (ref.current && ref.current.contains(targetElement as Node)) return; if (e.pointerType !== "touch") return; setOutside(true); setTimeout(() => { setOutside(false); }, 100); }} >
{currentData} {currentDate}
setRange(v as TimeRange)} className="w-full mt-4"> 6小时 1天 1周 30天 3个月 1年 全部
); }; export default App;