import { createFileRoute, Link } from "@tanstack/react-router";
import { z } from "zod";
import { getCommits } from "~/fns/browse";
import { getPathHistory } from "~/fns/code";
import { CommitList } from "~/components/CommitList";
import { RefSwitcher } from "~/components/RefSwitcher";
import { EmptyState } from "~/ui/EmptyState";
import { Panel } from "~/ui/Panel";
import { buttonClass } from "~/ui/Button";
export const Route = createFileRoute("/$owner/$repo/commits/$")({
validateSearch: z.object({ page: z.number().int().min(1).optional() }),
loaderDeps: ({ search }) => ({ page: search.page ?? 1 }),
loader: async ({ params, deps }) => {
const repoParams = { owner: params.owner, repo: params.repo };
const scoped = await getPathHistory({ data: { ...repoParams, splat: params._splat ?? "", page: deps.page } });
if (scoped.history && scoped.ref) {
return {
ref: scoped.ref,
path: scoped.path,
commits: scoped.history.commits,
statuses: {},
hasMore: scoped.history.hasMore,
branches: scoped.branches,
};
}
const ref = scoped.ref ?? (params._splat || undefined);
return { path: "", ...(await getCommits({ data: { ...repoParams, ref, page: deps.page } })) };
},
component: CommitsPage,
});
function CommitsPage() {
const data = Route.useLoaderData();
const { owner, repo, _splat } = Route.useParams();
const { page = 1 } = Route.useSearch();
return (
<div className="space-y-4">
<div className="flex items-center gap-3">
<RefSwitcher