import { ClipboardCheckIcon, ClipboardIcon, LoaderCircle } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog'; import { useForm } from '@inertiajs/react'; import React, { FormEventHandler, ReactNode, useRef, useState } from 'react'; import { Label } from '@/components/ui/label'; import InputError from '@/components/ui/input-error'; import { Form, FormField, FormFields } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; type ApiKeyForm = { name: string; permission: string; }; export default function CreateApiKey({ children }: { children: ReactNode }) { const [open, setOpen] = useState(false); const [token, setToken] = useState(); const tokenInputRef = useRef(null); const [copySuccess, setCopySuccess] = useState(false); const copyToClipboard = () => { tokenInputRef.current?.select(); navigator.clipboard.writeText(token || '').then(() => { setCopySuccess(true); setTimeout(() => { setCopySuccess(false); }, 2000); }); }; const form = useForm>({ name: '', permission: '', }); const submit: FormEventHandler = (e) => { e.preventDefault(); form.post(route('api-keys.store'), { onSuccess: (page) => { const flash = page.props.flash as { data?: { token?: string } }; setToken(flash.data?.token); }, }); }; return ( {children} Create an API key Create a new api key
{token ? ( ) : ( form.setData('name', e.target.value)} /> )}
{!token && ( )}
); }