// app/download/SearchForm.tsx 'use client'; import { useState } from 'react'; import useSWR from 'swr'; import { formatVersion } from '@/lib/utils'; const fetcher = async (url: string) => { const res = await fetch(url); if (!res.ok) { throw new Error(`HTTP error: ${res.status}`); } return res.json(); }; interface SearchFormProps { onSearch: (project: string, version: string, commitId: string) => void; } export default function SearchForm({ onSearch }: SearchFormProps) { const [selectedProject, setSelectedProject] = useState(''); const [selectedVersion, setSelectedVersion] = useState(''); const [commitId, setCommitId] = useState(''); // 获取项目列表 const { data: projects, isLoading: loadingProjects } = useSWR( '/api/projects', fetcher ); // 获取版本列表 const { data: versions, isLoading: loadingVersions } = useSWR( selectedProject ? `/api/versions?project=${selectedProject}` : null, fetcher ); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (selectedProject && selectedVersion) { onSearch(selectedProject, selectedVersion, commitId); } }; return (
); }