import React, { FC, useCallback, useState } from 'react'; import { useCommentFormFormik } from '~/utils/hooks/useCommentFormFormik'; import { FormikProvider } from 'formik'; import { LocalCommentFormTextarea } from '~/components/comment/LocalCommentFormTextarea'; import { Button } from '~/components/input/Button'; import { FileUploaderProvider, useFileUploader } from '~/utils/hooks/fileUploader'; import { UPLOAD_SUBJECTS, UPLOAD_TARGETS } from '~/redux/uploads/constants'; import { CommentFormAttachButtons } from '~/components/comment/CommentFormAttachButtons'; import { CommentFormFormatButtons } from '~/components/comment/CommentFormFormatButtons'; import { CommentFormAttaches } from '~/components/comment/CommentFormAttaches'; import { LoaderCircle } from '~/components/input/LoaderCircle'; import { IComment, INode } from '~/redux/types'; import { EMPTY_COMMENT } from '~/redux/node/constants'; import { CommentFormDropzone } from '~/components/comment/CommentFormDropzone'; import styles from './styles.module.scss'; import { ERROR_LITERAL } from '~/constants/errors'; import { useInputPasteUpload } from '~/utils/hooks/useInputPasteUpload'; interface IProps { comment?: IComment; nodeId: INode['id']; onCancelEdit?: () => void; } const CommentForm: FC = ({ comment, nodeId, onCancelEdit }) => { const [textarea, setTextarea] = useState(); const uploader = useFileUploader( UPLOAD_SUBJECTS.COMMENT, UPLOAD_TARGETS.COMMENTS, comment?.files ); const formik = useCommentFormFormik(comment || EMPTY_COMMENT, nodeId, uploader, onCancelEdit); const isLoading = formik.isSubmitting || uploader.isUploading; const isEditing = !!comment?.id; const clearError = useCallback(() => { if (formik.status) { formik.setStatus(''); } if (formik.errors.text) { formik.setErrors({ ...formik.errors, text: '', }); } }, [formik]); const error = formik.status || formik.errors.text; useInputPasteUpload(textarea, uploader.uploadFiles); return (
{!!error && (
{ERROR_LITERAL[error] || error}
)}
{!!textarea && ( )}
{isLoading && } {isEditing && ( )}
); }; export { CommentForm };