import { useCallback, useEffect, useState } from 'react' import { useParams } from 'react-router-dom' import { Button, FormControl, FormErrorMessage, Input, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, } from '@chakra-ui/react' import { useSWRConfig } from 'swr' import { Field, FieldAttributes, FieldProps, Form, Formik, FormikHelpers, } from 'formik' import * as Yup from 'yup' import cx from 'classnames' import FileAPI, { List } from '@/client/api/file' import useFileListSearchParams from '@/hooks/use-file-list-params' import { useAppDispatch, useAppSelector } from '@/store/hook' import { createModalDidClose } from '@/store/ui/files' type FormValues = { name: string } const FileCreate = () => { const { mutate } = useSWRConfig() const { id, fileId } = useParams() const dispatch = useAppDispatch() const isModalOpen = useAppSelector( (state) => state.ui.files.isCreateModalOpen, ) const [inputRef, setInputRef] = useState() const formSchema = Yup.object().shape({ name: Yup.string().required('Name is required').max(255), }) const fileListSearchParams = useFileListSearchParams() useEffect(() => { if (inputRef) { inputRef.select() } }, [inputRef]) const handleSubmit = useCallback( async ( { name }: FormValues, { setSubmitting }: FormikHelpers, ) => { setSubmitting(true) try { await FileAPI.createFolder({ name, workspaceId: id!, parentId: fileId!, }) await mutate(`/files/${fileId}/list?${fileListSearchParams}`) setSubmitting(false) dispatch(createModalDidClose()) } finally { setSubmitting(false) } }, [id, fileId, fileListSearchParams, mutate, dispatch], ) return ( <> dispatch(createModalDidClose())} closeOnOverlayClick={false} > New Folder {({ errors, touched, isSubmitting }) => (
{({ field }: FieldAttributes) => ( setInputRef(r)} {...field} placeholder="Name" disabled={isSubmitting} autoFocus /> {errors.name} )}
)}
) } export default FileCreate