Files
DevReport/src/components/GitRepo/index.tsx

125 lines
3.6 KiB
TypeScript

import type React from "react";
import { useState } from "react";
import { Card, Button, List, Checkbox, Tooltip } from "antd";
import AddRepoModal from "./AddRepoModal";
import GenerateReportModal from "./GenerateReportModal";
import type { ReportType } from "../../types/types";
interface GitRepoFormData {
repoPath: string;
name: string;
}
interface GitRepoProps {
onAddRepo: (repo: GitRepoFormData) => void;
repos: GitRepoFormData[];
className?: string;
onGenerateReport: (reportType: ReportType, useAI: boolean) => void;
onReposSelect?: (selectedRepos: string[]) => void;
}
const GitRepo: React.FC<GitRepoProps> = ({
onAddRepo,
repos: initialRepos,
className,
onGenerateReport,
onReposSelect,
}) => {
const [repos, setRepos] = useState<GitRepoFormData[]>(() => {
const savedRepos = localStorage.getItem("gitRepos");
return savedRepos ? JSON.parse(savedRepos) : initialRepos;
});
const [isModalOpen, setIsModalOpen] = useState(false);
const handleModalSubmit = (repoPath: string, name: string) => {
const newRepo = { name, repoPath };
const updatedRepos = [...repos, newRepo];
localStorage.setItem("gitRepos", JSON.stringify(updatedRepos));
setRepos(updatedRepos);
onAddRepo(newRepo);
setIsModalOpen(false);
};
const showModal = () => {
setIsModalOpen(true);
};
const handleCancel = () => {
setIsModalOpen(false);
};
const [selectedRepos, setSelectedRepos] = useState<string[]>([]);
const [isGenerateModalOpen, setIsGenerateModalOpen] = useState(false);
const handleCheckboxChange = (checkedValues: string[]) => {
setSelectedRepos(checkedValues);
onReposSelect?.(checkedValues);
console.log("选中的仓库:", checkedValues);
};
const handleGenerateReport = (reportType: ReportType, useAI: boolean) => {
console.log("生成报告:", { reportType, useAI, selectedRepos });
setIsGenerateModalOpen(false);
onGenerateReport(reportType, useAI);
};
return (
<div className={className}>
<Card title="Git仓库" className="size-full">
<AddRepoModal
isOpen={isModalOpen}
onCancel={handleCancel}
onSubmit={handleModalSubmit}
/>
<GenerateReportModal
open={isGenerateModalOpen}
onCancel={() => setIsGenerateModalOpen(false)}
onSubmit={handleGenerateReport}
/>
<Checkbox.Group
className="size-full"
value={selectedRepos}
onChange={handleCheckboxChange}
>
<List
className="size-full"
header={
<div className="flex justify-between items-center">
<div></div>
<Button type="primary" onClick={showModal}>
</Button>
</div>
}
bordered
dataSource={repos}
renderItem={(item) => (
<List.Item>
<Tooltip title={item.repoPath}>
<Checkbox value={item.repoPath}>{item.name}</Checkbox>
</Tooltip>
</List.Item>
)}
footer={
selectedRepos.length > 0 && (
<div className="flex justify-end items-center">
<Button
type="primary"
onClick={() => setIsGenerateModalOpen(true)}
>
</Button>
</div>
)
}
/>
</Checkbox.Group>
</Card>
</div>
);
};
export default GitRepo;