import { useFlashKey } from '@/util/useFlash' import usePagination from '@/util/usePagination' import { FormikProvider, useFormik } from 'formik' import { useState } from 'react' import * as yup from 'yup' import createToken from '@/api/admin/tokens/createToken' import { Token, TokenResponse } from '@/api/admin/tokens/getTokens' import useTokensSWR from '@/api/admin/tokens/useTokensSWR' import Button from '@/components/elements/Button' import FlashMessageRender from '@/components/elements/FlashMessageRenderer' import Modal from '@/components/elements/Modal' import TextInputFormik from '@/components/elements/formik/TextInputFormik' import PlainTextTokenModal from '@/components/admin/tokens/PlainTextTokenModal' const CreateTokenButton = () => { const [open, setOpen] = useState(false) const [page] = usePagination() const { clearFlashes, clearAndAddHttpError } = useFlashKey( 'admin:tokens.create' ) const { mutate } = useTokensSWR({ page }) const [token, setToken] = useState(null) const form = useFormik({ initialValues: { name: '', }, validationSchema: yup.object({ name: yup .string() .max(191, 'Do not exceed 191 characters') .required('A name is required.'), }), onSubmit: async values => { clearFlashes() try { const { plainTextToken, ...token } = await createToken(values) mutate(data => { if (!data) return data return { ...data, items: [token, ...data.items], } as TokenResponse }, false) setToken({ plainTextToken, ...token }) handleClose() } catch (e) { clearAndAddHttpError(e as Error) } }, }) const handleClose = () => { clearFlashes() form.resetForm() setOpen(false) } return (
setToken(null)} /> Create a Token
Cancel Create
) } export default CreateTokenButton