import { useState } from "react"; import { useParams } from "react-router-dom"; import { usePullsQuery, useClosePRMutation, useReopenPRMutation, useDeletePRMutation } from "@/hooks/usePullsQuery"; import { useProjectsQuery } from "@/hooks/useProjectsQuery"; import { PageHeader } from "@/components/ui/PageHeader"; import { LoadingState } from "@/components/ui/LoadingState"; import { EmptyState } from "@/components/ui/EmptyState"; import { ErrorState } from "@/components/ui/ErrorState"; import { GitPullRequest, User, Calendar, Lock, Unlock, Trash2 } from "lucide-react"; import type { PullRequestResponse } from "@/client/model"; const STATUS_COLORS: Record = { open: "var(--status-online)", closed: "var(--status-dnd)", merged: "var(--accent)", }; export function PullsPage() { const { projectName } = useParams<{ projectName: string }>(); const { data: pulls = [], isLoading, error, refetch } = usePullsQuery(projectName); const { data: projects = [] } = useProjectsQuery(); const activeProject = projects.find((p) => p.name === projectName); const closePR = useClosePRMutation(); const reopenPR = useReopenPRMutation(); const deletePR = useDeletePRMutation(); const [confirmDelete, setConfirmDelete] = useState(null); const handleDelete = (pr: PullRequestResponse) => { if (confirmDelete === pr.number) { deletePR.mutate({ projectName: projectName!, repo: pr.repo, prNumber: pr.number }); setConfirmDelete(null); } else { setConfirmDelete(pr.number); } }; if (!projectName) { return (
} title="No project selected" description="Select a project to view its pull requests" />
); } if (isLoading) { return (
); } if (error) { return (
refetch()} />
); } return (
{pulls.length === 0 ? ( } title="No pull requests" description="Create a pull request to propose changes" /> ) : (
{pulls.map((pr: PullRequestResponse) => (

{pr.title}

{pr.status}

#{pr.number} {pr.head || "?"} → {pr.base || "?"}

{pr.author_username && ( {pr.author_username} )} {pr.updated_at && ( {new Date(pr.updated_at).toLocaleDateString()} )}
{/* Actions */}
{pr.status === "open" ? ( ) : ( )}
))}
)}
); } export default PullsPage;