'use client'; import { useState, useEffect } from 'react'; import useSWR from 'swr'; import { type ApkEnvironment } from '@/lib/apk-parser'; import ApkTable from './ApkTable'; const fetcher = (url: string) => fetch(url).then((res) => res.json()); interface Apk { name: string; environment: ApkEnvironment; commit: string | null; size: number; modifiedAt: string; downloadUrl: string; } interface ApkListProps { project: string; version: string; commitId: string; } export default function ApkList({ project, version, commitId }: ApkListProps) { const [configuredTabs, setConfiguredTabs] = useState([]); const [activeTab, setActiveTab] = useState('product'); // Fetch config on mount useEffect(() => { fetch('/api/config') .then(res => res.json()) .then(data => setConfiguredTabs(data.tabs)) .catch(() => setConfiguredTabs(['dev', 'sandbox'])); // fallback }, []); const { data: apks, isLoading, error } = useSWR( `/api/apks?project=${project}&version=${version}&commit=${commitId}`, fetcher ); // Build tabs: product -> configured -> other const TABS: ApkEnvironment[] = ['product', ...configuredTabs.filter(t => t !== 'product' && t !== 'other') as ApkEnvironment[], 'other']; if (isLoading) { return (
加载中...
); } if (error) { return (
加载失败,请重试
); } if (!apks || apks.length === 0) { return (

未找到匹配的 APK 文件

); } // Group APKs by environment const groupedApks = apks.reduce((acc, apk) => { acc[apk.environment] = [...(acc[apk.environment] || []), apk]; return acc; }, {} as Record); return (
{/* Tab Navigation */}
{/* Tab Content */}
); }