frierena personal git archive

frieren

a self-hosted git server in one binary — everyone reads, only the owner writes

frieren / web / components / Crumbs.tsxmaster

1.1 KB · raw

import Link from "next/link";

// Breadcrumb path for tree/blob pages: repo / dir / dir / name
export default function Crumbs({
  repo,
  refName,
  path,
  leafIsLink,
}: {
  repo: string;
  refName: string;
  path: string;
  leafIsLink: boolean;
}) {
  const ref = encodeURIComponent(refName);
  const parts = path === "" ? [] : path.split("/");
  return (
    <p className="font-mono text-sm text-fog">
      <Link href={`/${repo}/tree/${ref}`} className="text-snow hover:text-frost">
        {repo}
      </Link>
      {parts.map((part, i) => {
        const sub = parts.slice(0, i + 1).join("/");
        const last = i === parts.length - 1;
        return (
          <span key={sub}>
            {" / "}
            {last && !leafIsLink ? (
              <span className="text-snow">{part}</span>
            ) : (
              <Link href={`/${repo}/tree/${ref}/${sub}`} className="hover:text-frost">
                {part}
              </Link>
            )}
          </span>
        );
      })}
      <span className="ml-3 border border-line px-1.5 py-0.5 text-xs text-frost">{refName}</span>
    </p>
  );
}