153 lines · 4.8 KB
import { Link, useNavigate } from "@tanstack/react-router";
import { lazy, Suspense, useState } from "react";
import { commitFile } from "~/fns/git-write";
import { useAction } from "~/hooks/use-action";
import { Button } from "~/ui/Button";
import { CheckboxField, TextField } from "~/ui/Field";
import { ErrorBanner } from "~/ui/Callout";
import { Panel } from "~/ui/Panel";
import { buttonClass } from "~/ui/Button";

const CodeEditor = lazy(() => import("./CodeEditor").then((module) => ({ default: module.CodeEditor })));

type Props = {
  owner: string;
  repo: string;
  branch: string;
  headSha: string | null;
  initialPath: string;
  previousPath: string | null;
  initialContent: string;
  allowDelete: boolean;
};

export function FileEditor({
  owner,
  repo,
  branch,
  headSha,
  initialPath,
  previousPath,
  initialContent,
  allowDelete,
}: Props) {
  const navigate = useNavigate();
  const [path, setPath] = useState(initialPath);
  const [content, setContent] = useState(initialContent);
  const [newBranch, setNewBranch] = useState(false);
  const save = useAction(commitFile, { invalidate: false });
  const verb = previousPath ? "Update" : "Create";