84 lines · 3.0 KB
import { createFileRoute } from "@tanstack/react-router";
import { listCollaborators, setCollaborator } from "~/fns/repos";
import { useAction } from "~/hooks/use-action";
import { Avatar } from "~/ui/Avatar";
import { EmptyState } from "~/ui/EmptyState";
import { Panel } from "~/ui/Panel";
import { Button } from "~/ui/Button";
import { SelectField, TextField } from "~/ui/Field";
import { ErrorBanner } from "~/ui/Callout";

const PERMISSIONS = [
  { value: "read", label: "Read" },
  { value: "write", label: "Write" },
  { value: "admin", label: "Admin" },
] as const;

function toPermission(value: FormDataEntryValue | null) {
  return PERMISSIONS.find((permission) => permission.value === value)?.value ?? "read";
}

export const Route = createFileRoute("/$owner/$repo/settings/collaborators")({
  loader: ({ params }) => listCollaborators({ data: { owner: params.owner, repo: params.repo } }),
  component: CollaboratorsPage,
});

function CollaboratorsPage() {
  const collaborators = Route.useLoaderData();
  const params = Route.useParams();
  const set = useAction(setCollaborator);
  return (
    <>
      <Panel title="Add collaborator">
        <form
          className="flex flex-wrap items-end gap-3 p-4"
          onSubmit={(event) => {
            event.preventDefault();
            const form = new FormData(event.currentTarget);
            set.run({
              data: {
                ...params,