Path: blob/1.0-develop/resources/scripts/components/dashboard/ssh/CreateSSHKeyForm.tsx
10260 views
import React from 'react';1import { Field, Form, Formik, FormikHelpers } from 'formik';2import { object, string } from 'yup';3import FormikFieldWrapper from '@/components/elements/FormikFieldWrapper';4import SpinnerOverlay from '@/components/elements/SpinnerOverlay';5import tw from 'twin.macro';6import Button from '@/components/elements/Button';7import Input, { Textarea } from '@/components/elements/Input';8import styled from 'styled-components/macro';9import { useFlashKey } from '@/plugins/useFlash';10import { createSSHKey, useSSHKeys } from '@/api/account/ssh-keys';1112interface Values {13name: string;14publicKey: string;15}1617const CustomTextarea = styled(Textarea)`18${tw`h-32`}19`;2021export default () => {22const { clearAndAddHttpError } = useFlashKey('account');23const { mutate } = useSSHKeys();2425const submit = (values: Values, { setSubmitting, resetForm }: FormikHelpers<Values>) => {26clearAndAddHttpError();2728createSSHKey(values.name, values.publicKey)29.then((key) => {30resetForm();31mutate((data) => (data || []).concat(key));32})33.catch((error) => clearAndAddHttpError(error))34.then(() => setSubmitting(false));35};3637return (38<>39<Formik40onSubmit={submit}41initialValues={{ name: '', publicKey: '' }}42validationSchema={object().shape({43name: string().required(),44publicKey: string().required(),45})}46>47{({ isSubmitting }) => (48<Form>49<SpinnerOverlay visible={isSubmitting} />50<FormikFieldWrapper label={'SSH Key Name'} name={'name'} css={tw`mb-6`}>51<Field name={'name'} as={Input} />52</FormikFieldWrapper>53<FormikFieldWrapper54label={'Public Key'}55name={'publicKey'}56description={'Enter your public SSH key.'}57>58<Field name={'publicKey'} as={CustomTextarea} />59</FormikFieldWrapper>60<div css={tw`flex justify-end mt-6`}>61<Button>Save</Button>62</div>63</Form>64)}65</Formik>66</>67);68};697071