diff --git a/client/package.json b/client/package.json index d562336a..5822cf2b 100755 --- a/client/package.json +++ b/client/package.json @@ -68,6 +68,7 @@ "connected-react-router": "^6.9.3", "date-fns": "^2.29.1", "dequal": "^2.0.3", + "easymde": "^2.18.0", "history": "^4.10.1", "i18next": "^21.8.14", "i18next-browser-languagedetector": "^6.1.4", @@ -90,6 +91,7 @@ "react-redux": "^7.2.8", "react-router-dom": "^5.3.1", "react-scripts": "5.0.1", + "react-simplemde-editor": "^5.2.0", "react-textarea-autosize": "^8.3.4", "redux": "^4.2.0", "redux-logger": "^3.0.6", diff --git a/client/src/components/CardModal/DescriptionEdit.jsx b/client/src/components/CardModal/DescriptionEdit.jsx index 1eb24952..64125d32 100755 --- a/client/src/components/CardModal/DescriptionEdit.jsx +++ b/client/src/components/CardModal/DescriptionEdit.jsx @@ -1,19 +1,18 @@ -import React, { useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react'; +import React, { useCallback, useImperativeHandle, useState, useMemo } from 'react'; import PropTypes from 'prop-types'; import { useTranslation } from 'react-i18next'; -import TextareaAutosize from 'react-textarea-autosize'; -import { Button, Form, TextArea } from 'semantic-ui-react'; +import { Button, Form } from 'semantic-ui-react'; +import SimpleMDE from 'react-simplemde-editor'; import { useClosableForm, useField } from '../../hooks'; import styles from './DescriptionEdit.module.scss'; +import 'easymde/dist/easymde.min.css'; const DescriptionEdit = React.forwardRef(({ children, defaultValue, onUpdate }, ref) => { const [t] = useTranslation(); const [isOpened, setIsOpened] = useState(false); - const [value, handleFieldChange, setValue] = useField(null); - - const field = useRef(null); + const [value, , setValue] = useField(null); const open = useCallback(() => { setIsOpened(true); @@ -55,20 +54,40 @@ const DescriptionEdit = React.forwardRef(({ children, defaultValue, onUpdate }, [close], ); - const [handleFieldBlur, handleControlMouseOver, handleControlMouseOut] = useClosableForm( - close, - isOpened, - ); + const [, handleControlMouseOver, handleControlMouseOut] = useClosableForm(close, isOpened); const handleSubmit = useCallback(() => { close(); }, [close]); - useEffect(() => { - if (isOpened) { - field.current.ref.current.focus(); - } - }, [isOpened]); + const mdEditorOptions = useMemo(() => { + return { + autofocus: true, + spellChecker: false, + status: false, + toolbar: [ + 'bold', + 'italic', + 'heading', + 'strikethrough', + '|', + 'quote', + 'unordered-list', + 'ordered-list', + 'table', + '|', + 'link', + 'image', + '|', + 'fullscreen', + '|', + 'undo', + 'redo', + '|', + 'guide', + ], + }; + }, []); if (!isOpened) { return React.cloneElement(children, { @@ -78,18 +97,15 @@ const DescriptionEdit = React.forwardRef(({ children, defaultValue, onUpdate }, return (
-