34 lines · 1.3 KB
import { createFileRoute } from "@tanstack/react-router";
import { deleteRepoVariable, getRepoActionsConfig, setRepoVariable } from "~/fns/action-config";
import { useAction } from "~/hooks/use-action";
import { ConfigValueList } from "~/components/ConfigValueList";

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

function VariablesPage() {
  const data = Route.useLoaderData();
  const params = Route.useParams();
  const save = useAction(setRepoVariable);
  const remove = useAction(deleteRepoVariable);
  return (
    <>
      <p className="text-sm text-gray-400">
        Variables are plain-text configuration available as {"${{ vars.NAME }}"}. Environment variables override
        repository variables, which override owner variables. They are not passed to runs from forks.
      </p>
      <ConfigValueList
        title="Repository variables"
        kind="variable"
        items={data.variables}
        pending={save.pending}
        error={save.error ?? remove.error}
        onSave={async (name, value) => Boolean(await save.run({ data: { ...params, name, value } }))}
        onDelete={(name) => remove.run({ data: { ...params, name } })}
      />
    </>
  );
}