Path: blob/develop/resources/scripts/components/dashboard/ssh/CreateSSHKeyForm.tsx
7454 views
import { Field, Form, Formik, FormikHelpers } from 'formik';1import { object, string } from 'yup';2import FormikFieldWrapper from '@/components/elements/FormikFieldWrapper';3import SpinnerOverlay from '@/components/elements/SpinnerOverlay';4import tw from 'twin.macro';5import Button from '@/components/elements/Button';6import Input, { Textarea } from '@/components/elements/Input';7import styled from 'styled-components';8import { useFlashKey } from '@/plugins/useFlash';9import { createSSHKey, useSSHKeys } from '@/api/account/ssh-keys';1011interface Values {12name: string;13publicKey: string;14}1516const CustomTextarea = styled(Textarea)`17${tw`h-32`}18`;1920export default () => {21const { clearAndAddHttpError } = useFlashKey('account');22const { mutate } = useSSHKeys();2324const submit = (values: Values, { setSubmitting, resetForm }: FormikHelpers<Values>) => {25clearAndAddHttpError();2627createSSHKey(values.name, values.publicKey)28.then(key => {29resetForm();30mutate(data => (data || []).concat(key));31})32.catch(error => clearAndAddHttpError(error))33.then(() => setSubmitting(false));34};3536return (37<>38<Formik39onSubmit={submit}40initialValues={{ name: '', publicKey: '' }}41validationSchema={object().shape({42name: string().required(),43publicKey: string().required(),44})}45>46{({ isSubmitting }) => (47<Form>48<SpinnerOverlay visible={isSubmitting} />49<FormikFieldWrapper label={'SSH Key Name'} name={'name'} css={tw`mb-6`}>50<Field name={'name'} as={Input} />51</FormikFieldWrapper>52<FormikFieldWrapper53label={'Public Key'}54name={'publicKey'}55description={'Enter your public SSH key.'}56>57<Field name={'publicKey'} as={CustomTextarea} />58</FormikFieldWrapper>59<div css={tw`flex justify-end mt-6`}>60<Button>Save</Button>61</div>62</Form>63)}64</Formik>65</>66);67};686970