From fdeb42f2122662d671352b9e1eb4129712be3b20 Mon Sep 17 00:00:00 2001 From: tech Date: Wed, 4 Mar 2026 02:06:53 +0800 Subject: [PATCH] feat: add SearchForm component --- app/download/SearchForm.tsx | 114 ++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 app/download/SearchForm.tsx diff --git a/app/download/SearchForm.tsx b/app/download/SearchForm.tsx new file mode 100644 index 0000000..dc2cd88 --- /dev/null +++ b/app/download/SearchForm.tsx @@ -0,0 +1,114 @@ +// app/download/SearchForm.tsx +'use client'; + +import { useState } from 'react'; +import useSWR from 'swr'; + +const fetcher = (url: string) => fetch(url).then((res) => 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 ( +
+
+ + +
+ +
+ + +
+ +
+ + setCommitId(e.target.value)} + placeholder="输入 commit id..." + className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" + /> +
+ + +
+ ); +}