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

{displayName}

{description}

← Terug {data?.repoUrl && ( {repositoryLabel} )} {latestDownload?.url && ( Download {latestDownload.version} )}
{loading &&
Bezig met laden…
} {error &&
{error}
} {!loading && !error && data && (

Manifest

Naam {displayName}
Versie {version}
Auteur {author}
Repository {data.fullName}
{manifest?.author_url && ( Auteur website → )}

Releases

{releases.length === 0 &&

Geen releases gevonden.

}
    {releases.map((release) => { const key = release.tag || release.name || release.url; return (
  • {release.name} {release.publishedAt ? new Date(release.publishedAt).toLocaleDateString("nl-NL") : "-"}
    {release.downloadUrl && ( Download )}
  • ); })}

Recente commits

{commits.length === 0 &&

Geen commits gevonden.

}
)}
); }