import { createFileRoute } from "@tanstack/react-router";
import { getBlob } from "~/fns/browse";
import { resolveEditTarget } from "~/fns/editor";
import { FileEditor } from "~/components/FileEditor";
import { NotFound } from "~/components/NotFound";
import { WorkspaceEditor } from "~/components/editor/WorkspaceEditor";
export const Route = createFileRoute("/$owner/$repo/edit/$")({
validateSearch: (search: Record<string, unknown>): { path?: string; container?: number } => ({
...(typeof search.path === "string" && search.path ? { path: search.path } : {}),
...(search.container === 1 || search.container === "1" ? { container: 1 } : {}),
}),
loader: async ({ params }) => {
const input = { owner: params.owner, repo: params.repo, splat: params._splat ?? "" };
const target = await resolveEditTarget({ data: input });
if (target.kind === "workspace") return target;
return { kind: "file" as const, blob: await getBlob({ data: input }) };
},
component: EditPage,
});
function EditPage() {
const data = Route.useLoaderData();
const { owner, repo } = Route.useParams();
const { path, container } = Route.useSearch();
if (data.kind === "workspace") {
return (
<WorkspaceEditor
owner={owner}
repo={repo}
gitRef={data.ref}
editorOrigin={data.editorOrigin}
openPath={path ?? null}
startContainer={container === 1}
/>
);
}
const { blob } = data;
if (!blob.canEdit || blob.content === null) return <NotFound>This file can't be edited in the browser.</NotFound>;
return (