--- import { resolveOrgOwners } from "@/lib/repo-owner"; import { getDatabase, schema } from "@/db"; import BaseLayout from "@/layouts/BaseLayout.astro"; import { desc, eq } from "drizzle-orm"; import { CircleDot, CheckCircle2, MessageSquare, Filter, Plus } from "lucide-react"; const db = getDatabase(); const currentUser = Astro.locals.user; // Get filter from query params const filter = Astro.url.searchParams.get("filter") || "open"; const sort = Astro.url.searchParams.get("sort") || "newest"; // Fetch issues from public repos, ordered by most recent let issues: any[] = []; let openCount = 0; let closedCount = 0; try { // Get issues with their repositories const rawIssues = await db.query.issues.findMany({ where: filter === "closed" ? eq(schema.issues.state, "closed") : filter === "all" ? undefined : eq(schema.issues.state, "open"), orderBy: sort === "oldest" ? [schema.issues.createdAt] : sort === "comments" ? [desc(schema.issues.commentCount)] : [desc(schema.issues.createdAt)], limit: 50, with: { repository: { with: { owner: true, }, }, author: true, }, }); // Filter to only public repos issues = (await resolveOrgOwners(rawIssues)).filter(issue => issue.repository?.visibility === "public" ); // Fetch counts for badges const allPublicIssues = await db.query.issues.findMany({ columns: { state: true }, with: { repository: { columns: { visibility: true } } } }); const publicOnly = allPublicIssues.filter(i => i.repository?.visibility === "public"); openCount = publicOnly.filter(i => i.state === "open").length; closedCount = publicOnly.filter(i => i.state === "closed").length; } catch (e) { console.error("Error fetching issues:", 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(); } ---

Issues

Track and browse issues across all public repositories

{issues.length > 0 ? ( ) : (

No issues found

{filter === "open" ? "All issues are resolved! 🎉" : filter === "closed" ? "No closed issues found." : "No issues have been created yet."}

)}