118 lines · 4.4 KB
import { createFileRoute } from "@tanstack/react-router";
import { useState } from "react";
import { createDeployToken, listDeployTokens, revokeDeployToken } from "~/fns/tokens";
import { useAction } from "~/hooks/use-action";
import { Button } from "~/ui/Button";
import { SelectField, TextField } from "~/ui/Field";
import { ErrorBanner } from "~/ui/Callout";
import { Badge } from "~/ui/Badge";
import { EmptyState } from "~/ui/EmptyState";
import { Panel } from "~/ui/Panel";
import { RelativeTime } from "~/ui/RelativeTime";
import { SecretReveal } from "~/ui/Callout";

const EXPIRY = [
  { value: "30", label: "30 days" },
  { value: "90", label: "90 days" },
  { value: "365", label: "1 year" },
  { value: "0", label: "No expiration" },
] as const;

export const Route = createFileRoute("/$owner/$repo/settings/deploy-tokens")({
  loader: ({ params }) => listDeployTokens({ data: { owner: params.owner, repo: params.repo } }),
  component: DeployTokensPage,
});

function DeployTokensPage() {
  const tokens = Route.useLoaderData();
  const params = Route.useParams();
  const create = useAction(createDeployToken);
  const revoke = useAction(revokeDeployToken);
  const [created, setCreated] = useState<string | null>(null);

  return (
    <>
      <Panel title="New deploy token">
        <form
          className="space-y-3 p-4"
          onSubmit={async (event) => {
            event.preventDefault();
            const formElement = event.currentTarget;