import { createFileRoute, useNavigate } from "@tanstack/react-router";
import { z } from "zod";
import { deleteOwnerValue, getOwnerActionsConfig, listActionsOwners, setOwnerValue } from "~/fns/action-config";
import { useAction } from "~/hooks/use-action";
import { ConfigValueList } from "~/components/ConfigValueList";
import { SelectField, TextField } from "~/ui/Field";
import { Heading } from "~/ui/Heading";
const VISIBILITY = [
{ value: "all", label: "All repositories" },
{ value: "private", label: "Private repositories" },
{ value: "selected", label: "Selected repositories" },
] as const;
const visibilitySchema = z.enum(["all", "private", "selected"]);
export const Route = createFileRoute("/settings/actions")({
validateSearch: z.object({ owner: z.string().optional() }),
loaderDeps: ({ search }) => search,
loader: async ({ deps }) => {
const owners = await listActionsOwners();
const owner = deps.owner && owners.includes(deps.owner) ? deps.owner : owners[0];
return { owners, config: await getOwnerActionsConfig({ data: { owner } }) };
},
component: OwnerActionsPage,
});
function describe(visibility: string, repos: string[]): string {
if (visibility === "selected") return repos.length ? `Repos: ${repos.join(", ")}` : "No repositories";
return visibility === "private" ? "Private repositories" : "All repositories";
}
function AccessFields({ repos, listId }: { repos: string[]; listId: string }) {
return (
<div className="grid gap-3 md:grid-cols-[1fr_2fr]">
<SelectField label="Repository access" name="visibility" options={VISIBILITY} defaultValue="all" />
<TextField
label="Selected repositories"
name="repos"
list={listId}