import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { basePath } from "@/config/siteConfig"; import { Script } from "@/lib/types"; import { BookOpenText, Code, Globe, LinkIcon, RefreshCcw } from "lucide-react"; const generateInstallSourceUrl = (slug: string) => { const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`; return `${baseUrl}/install/${slug}-install.sh`; }; const generateSourceUrl = (slug: string, type: string) => { const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`; switch (type) { case "vm": return `${baseUrl}/vm/${slug}.sh`; case "pve": return `${baseUrl}/tools/pve/${slug}.sh`; case "addon": return `${baseUrl}/tools/addon/${slug}.sh`; default: return `${baseUrl}/ct/${slug}.sh`; // fallback for "ct" } }; const generateUpdateUrl = (slug: string) => { const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`; return `${baseUrl}/ct/${slug}.sh`; }; interface LinkItem { href: string; icon: React.ReactNode; text: string; } export default function Buttons({ item }: { item: Script }) { const isCtOrDefault = ["ct"].includes(item.type); const installSourceUrl = isCtOrDefault ? generateInstallSourceUrl(item.slug) : null; const updateSourceUrl = isCtOrDefault ? generateUpdateUrl(item.slug) : null; const sourceUrl = !isCtOrDefault ? generateSourceUrl(item.slug, item.type) : null; const links = [ item.website && { href: item.website, icon: , text: "Website", }, item.documentation && { href: item.documentation, icon: , text: "Documentation", }, installSourceUrl && { href: installSourceUrl, icon: , text: "Install Source", }, updateSourceUrl && { href: updateSourceUrl, icon: , text: "Update Source", }, sourceUrl && { href: sourceUrl, icon: , text: "Source Code", }, ].filter(Boolean) as LinkItem[]; if (links.length === 0) return null; return ( {links.map((link, index) => ( {link.icon} {link.text} ))} ); }