Files
ftdl/app/download/page.tsx
tech 08f9015101 feat: update download page title to use display name
- Add Project interface with name and displayName
- Fetch projects via SWR
- Add getProjectDisplayName helper function
- Use display name in the download page title

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-04 22:17:31 +08:00

69 lines
2.2 KiB
TypeScript

// app/download/page.tsx
'use client';
import { useState } from 'react';
import useSWR from 'swr';
import SearchForm from './SearchForm';
import ApkList from './ApkList';
interface Project {
name: string;
displayName: string;
}
export default function DownloadPage() {
const [searchParams, setSearchParams] = useState({
project: '',
version: '',
commitId: '',
});
const { data: projects } = useSWR<Project[]>('/api/projects');
const handleSearch = (project: string, version: string, commitId: string) => {
setSearchParams({ project, version, commitId });
};
const getProjectDisplayName = (projectName: string): string => {
const project = projects?.find(p => p.name === projectName);
return project?.displayName || projectName;
};
return (
<div className="min-h-screen bg-gray-50">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
<h1 className="text-3xl font-bold text-gray-900 mb-8"></h1>
<div className="grid grid-cols-1 lg:grid-cols-3 gap-8">
<div className="lg:col-span-1">
<div className="bg-white rounded-lg shadow-md p-6 sticky top-8">
<h2 className="text-xl font-semibold text-gray-800 mb-6"></h2>
<SearchForm onSearch={handleSearch} />
</div>
</div>
<div className="lg:col-span-2">
{searchParams.project && searchParams.version ? (
<>
<h2 className="text-xl font-semibold text-gray-800 mb-4">
{getProjectDisplayName(searchParams.project)} - {searchParams.version.replace('_', '.')}
{searchParams.commitId && ` (commit: ${searchParams.commitId})`}
</h2>
<ApkList
project={searchParams.project}
version={searchParams.version}
commitId={searchParams.commitId}
/>
</>
) : (
<div className="bg-white rounded-lg shadow-md p-12 text-center">
<p className="text-gray-500"></p>
</div>
)}
</div>
</div>
</div>
</div>
);
}