import { useEffect, useMemo, useState } from "react"; import { Link, useParams, useSearchParams } from "react-router-dom"; export default function PluginDetail() { const { owner, repo } = useParams(); const [searchParams] = useSearchParams(); const provider = (searchParams.get("provider") || "github").toLowerCase(); const baseUrl = searchParams.get("baseUrl") || ""; const repoId = searchParams.get("repoId") || ""; const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { async function loadDetail() { try { const query = new URLSearchParams(); if (provider) { query.set("provider", provider); } if (baseUrl) { query.set("baseUrl", baseUrl); } if (repoId) { query.set("repoId", repoId); } const search = query.toString(); const response = await fetch( `/api/plugins/${owner}/${repo}${search.length > 0 ? `?${search}` : ""}` ); if (!response.ok) { throw new Error("Kon details niet laden"); } const detail = await response.json(); setData(detail); } catch (err) { setError("Laden van plugin details is mislukt."); } finally { setLoading(false); } } loadDetail(); }, [owner, repo, provider, baseUrl]); const manifest = data?.manifest; const displayName = data?.label || manifest?.plugin_name || data?.name || repo; const description = manifest?.description || data?.description; const author = manifest?.author || "-"; const version = manifest?.version || "-"; const repositoryLabel = data?.provider === "gitea" ? "Gitea" : "GitHub"; const latestDownload = data?.download; const releases = useMemo(() => data?.releases || [], [data]); const commits = useMemo(() => data?.commits || [], [data]); return (
Plugin details
{description}
Geen releases gevonden.
}Geen commits gevonden.
}