import { useEffect, useState } from 'react'; import { useForm } from 'react-hook-form'; import { Button, Input, Textarea } from '@chakra-ui/react'; import { useQueryClient } from '@tanstack/react-query'; import { PROJECT_LIST } from '../../../../common/api/constants'; import { createProject } from '../../../../common/api/db'; import { maybeAxiosError } from '../../../../common/api/utils'; import * as Panel from '../PanelUtils'; import style from './ProjectPanel.module.scss'; interface ProjectCreateFromProps { onClose: () => void; } type ProjectCreateFormValues = { title?: string; description?: string; publicInfo?: string; publicUrl?: string; backstageInfo?: string; backstageUrl?: string; }; export default function ProjectCreateForm(props: ProjectCreateFromProps) { const { onClose } = props; const [error, setError] = useState(null); const queryClient = useQueryClient(); const { handleSubmit, register, formState: { isSubmitting, isValid }, setFocus, } = useForm({ defaultValues: { title: '' }, values: { title: '' }, resetOptions: { keepDirtyValues: true, }, }); // set focus to first field useEffect(() => { setFocus('title'); }, [setFocus]); const handleSubmitCreate = async (values: ProjectCreateFormValues) => { try { setError(null); const filename = values.title ?? 'untitled'; await createProject({ ...values, filename, }); await queryClient.invalidateQueries({ queryKey: PROJECT_LIST }); onClose(); } catch (error) { setError(maybeAxiosError(error)); } }; return ( Create new project
{error && {error}}