import { Link, useRouter } from "@tanstack/react-router"; import { useState } from "react"; import { deleteRelease, deleteReleaseAsset, updateRelease } from "~/fns/releases"; import { useAction } from "~/hooks/use-action"; import { Badge, formatBytes, Markdown, Panel, RelativeTime } from "./ui/Primitives"; import { Button } from "./ui/Button"; import { ErrorBanner } from "./ui/Field"; import type { listReleases } from "~/fns/releases"; type Release = Awaited>["releases"][number]; function AssetUpload({ owner, repo, releaseId }: { owner: string; repo: string; releaseId: string }) { const router = useRouter(); const [state, setState] = useState<{ status: "idle" | "uploading" } | { status: "error"; message: string }>({ status: "idle", }); return ( ); } export function ReleaseCard({ owner, repo, release, canWrite, }: { owner: string; repo: string; release: Release; canWrite: boolean; }) { const publish = useAction(updateRelease); const remove = useAction(deleteRelease); const removeAsset = useAction(deleteReleaseAsset); return ( {release.name} {release.draft && Draft} {release.prerelease && Pre-release} {release.tag} } actions={ canWrite && ( <> {release.draft && ( )} ) } >

{release.author.name} released ·{" "} {release.targetSha.slice(0, 7)}

{release.body.trim() && }

Assets

    {release.assets.map((asset) => (
  • {asset.name} {formatBytes(asset.size)} · {asset.download_count} downloads {canWrite && ( )}
  • ))}
  • Source code (tar.gz) {canWrite && ( )}
); }