import { zodResolver } from '@hookform/resolvers/zod' import { ChevronDown, ExternalLink } from 'lucide-react' import Link from 'next/link' import { useState } from 'react' import { type SubmitHandler, useForm } from 'react-hook-form' import { toast } from 'sonner' import { z } from 'zod' import { useAccessTokenCreateMutation } from 'data/access-tokens/access-tokens-create-mutation' import { Button, Dialog, DialogContent, DialogFooter, DialogHeader, DialogSection, DialogSectionSeparator, DialogTitle, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, Form_Shadcn_, FormControl_Shadcn_, FormField_Shadcn_, Input_Shadcn_, } from 'ui' import { Admonition } from 'ui-patterns' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' export interface NewAccessTokenButtonProps { onCreateToken: (token: any) => void } const TokenSchema = z.object({ tokenName: z.string().min(1, 'Please enter a name for the token'), }) const formId = 'new-access-token-form' const NewAccessTokenButton = ({ onCreateToken }: NewAccessTokenButtonProps) => { const [visible, setVisible] = useState(false) const [tokenScope, setTokenScope] = useState<'V0' | undefined>(undefined) const form = useForm>({ resolver: zodResolver(TokenSchema), defaultValues: { tokenName: '' }, mode: 'onSubmit', }) const { mutate: createAccessToken, isLoading } = useAccessTokenCreateMutation() const onSubmit: SubmitHandler> = async (values) => { createAccessToken( { name: values.tokenName, scope: tokenScope }, { onSuccess: (data) => { toast.success(`Your access token "${data.name}" is ready.`) form.reset() onCreateToken(data) setVisible(false) }, } ) } return ( <>
{ if (!open) form.reset() setVisible(open) }} > {tokenScope === 'V0' ? 'Generate token for experimental API' : 'Generate New Token'} {tokenScope === 'V0' && (

These include deleting organizations and projects which cannot be undone. As such, be very careful when using this API.

} /> )}
( )} />
) } export default NewAccessTokenButton