--- import { resolveOrgOwners } from "@/lib/repo-owner"; import { getDatabase, schema } from "@/db"; import BaseLayout from "@/layouts/BaseLayout.astro"; import { desc, eq, sql } from "drizzle-orm"; import { GitPullRequest, GitMerge, CircleDot, CheckCircle2, XCircle, Clock, ArrowRight, Filter, Plus } from "lucide-react"; const db = getDatabase(); // Get filter from query params const filter = Astro.url.searchParams.get("filter") || "open"; const sort = Astro.url.searchParams.get("sort") || "newest"; // Fetch pull requests from public repos let pullRequests: any[] = []; let openCount = 0; let mergedCount = 0; let closedCount = 0; try { const rawPRs = await db.query.pullRequests.findMany({ where: filter === "closed" ? eq(schema.pullRequests.state, "closed") : filter === "merged" ? eq(schema.pullRequests.state, "merged") : filter === "all" ? undefined : eq(schema.pullRequests.state, "open"), orderBy: sort === "oldest" ? [schema.pullRequests.createdAt] : [desc(schema.pullRequests.createdAt)], limit: 50, with: { repository: { with: { owner: true, }, }, author: true, }, }); // Filter to only public repos pullRequests = (await resolveOrgOwners(rawPRs)).filter(pr => pr.repository?.visibility === "public" ); // Fetch counts for badges const allPublicPRs = await db.query.pullRequests.findMany({ columns: { state: true }, with: { repository: { columns: { visibility: true } } } }); const publicOnly = allPublicPRs.filter(p => p.repository?.visibility === "public"); openCount = publicOnly.filter(p => p.state === "open").length; mergedCount = publicOnly.filter(p => p.state === "merged").length; closedCount = publicOnly.filter(p => p.state === "closed").length; } catch (e) { console.error("Error fetching pull requests:", e); } function timeAgo(date: string | number | Date) { if (!date) return ""; const seconds = Math.floor( (new Date().getTime() - new Date(date).getTime()) / 1000 ); if (seconds < 60) return "just now"; if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`; if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`; if (seconds < 604800) return `${Math.floor(seconds / 86400)}d ago`; return new Date(date).toLocaleDateString(); } ---

Pull Requests

Browse and review pull requests across all public repositories

{pullRequests.length > 0 ? ( ) : (

No pull requests found

{filter === "open" ? "There are no open pull requests in public repositories right now." : filter === "merged" ? "No merged pull requests yet." : filter === "closed" ? "No closed pull requests." : "No pull requests have been created yet."}

)}