"use client"; import { useState } from "react"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Skeleton } from "@/components/ui/skeleton"; import { ExternalLink, Pencil, GitBranch, Key, KeyRound } from "lucide-react"; import type { ProjectSummary, Team } from "@/types"; import { EditProjectDialog } from "./edit-project-dialog"; interface ProjectTableProps { projects: ProjectSummary[] | undefined; isLoading: boolean; } const teamLabels: Record = { board: "Board", main_pm: "Main PM", backend: "Backend", frontend: "Frontend", ux_ui: "UX/UI", marketing: "Marketing", }; const teamColors: Record = { board: "bg-purple-500/10 text-purple-500 hover:bg-purple-500/20", main_pm: "bg-blue-500/10 text-blue-500 hover:bg-blue-500/20", backend: "bg-green-500/10 text-green-500 hover:bg-green-500/20", frontend: "bg-orange-500/10 text-orange-500 hover:bg-orange-500/20", ux_ui: "bg-pink-500/10 text-pink-500 hover:bg-pink-500/20", marketing: "bg-yellow-500/10 text-yellow-500 hover:bg-yellow-500/20", }; function getTokenBadge(hasGitToken: boolean) { if (hasGitToken) { return ( Token Set ); } return ( No Token ); } export function ProjectTable({ projects, isLoading }: ProjectTableProps) { const [editingProjectId, setEditingProjectId] = useState(null); if (isLoading) { return (
{Array.from({ length: 5 }).map((_, i) => ( ))}
); } if (!projects || projects.length === 0) { return (

No projects found

Create a project to get started with git integration

); } // Convert git URL to browsable URL (strip .git suffix, handle SSH format) const getExternalUrl = (project: ProjectSummary) => { let url = project.git_url; // Remove .git suffix if (url.endsWith(".git")) { url = url.slice(0, -4); } // Convert SSH format (git@github.com:org/repo) to HTTPS if (url.startsWith("git@")) { url = url.replace("git@", "https://").replace(":", "/"); } return url; }; return ( <>
Project Cell Token Status Actions {projects.map((project) => (

{project.slug}

{teamLabels[project.assigned_cell]} {getTokenBadge(project.has_git_token)} {project.is_active ? ( Active ) : ( Inactive )}
))}
{/* Edit Project Dialog */} {editingProjectId && ( { if (!open) setEditingProjectId(null); }} /> )} ); }