import { useEffect, useState } from 'react' import { useForm } from 'react-hook-form' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Textarea } from '@/components/ui/textarea' import { TagsInput } from '@/components/tags-input' import { useRepoStore } from '../store' interface EditRepoDialogProps { open: boolean onOpenChange: (open: boolean) => void repo: { id: string path: string description: string site: string topics: string license: string } | null } interface FormData { description: string site: string topics: string license: string } export function EditRepoDialog({ open, onOpenChange, repo }: EditRepoDialogProps) { const { updateRepoInfo, getList } = useRepoStore() const { register, handleSubmit, reset, setValue } = useForm() const [tags, setTags] = useState([]) useEffect(() => { if (repo) { const topicsArray = repo.topics ? repo.topics.split(',').map(t => t.trim()).filter(Boolean) : [] setTags(topicsArray) reset({ description: repo.description || '', site: repo.site || '', topics: repo.topics || '', license: repo.license || '' }) } }, [repo, reset]) const onSubmit = async (data: FormData) => { if (!repo) return await updateRepoInfo({ path: repo.path, description: data.description?.trim() || '', site: data.site?.trim() || '', topics: tags.join(','), license: data.license?.trim() || '', }) await getList(true) onOpenChange(false) } if (!repo) return null return ( 编辑仓库信息 {repo.path}