diff --git a/frontend/src/components/EditableText.jsx b/frontend/src/components/EditableText.jsx index 85586593..1bc122f6 100644 --- a/frontend/src/components/EditableText.jsx +++ b/frontend/src/components/EditableText.jsx @@ -1,6 +1,6 @@ import '../styles/EditableText.css'; -import { useState, useEffect, useCallback } from 'react'; +import { useState, useEffect, useCallback, useRef, useLayoutEffect } from 'react'; import FormattedText from './FormattedText'; import DiscreeteDropdown from './DiscreeteDropdown'; import PictureUploadAction from '../menu-items/PictureUploadAction'; @@ -13,6 +13,7 @@ function EditableText({id, text, rubric, isPartOf, links, beingEditedBy, fragmen const [editedDocument, setEditedDocument] = useState(); const [editedText, setEditedText] = useState(); const [hasBeenChanged, setHasBeenChanged] = useState(false); + const textareaRef = useRef(null); const PASSAGE = new RegExp(`\\{${rubric}} ?([^{]*)`); const isEditedByOther = beingEditedBy && beingEditedBy !== user; @@ -70,6 +71,15 @@ function EditableText({id, text, rubric, isPartOf, links, beingEditedBy, fragmen } }, [rawEditMode, updateEditedDocument]); + useLayoutEffect(() => { + if (textareaRef.current && beingEdited) { + const el = textareaRef.current; + if (el.scrollHeight > el.clientHeight) { + el.style.height = `${el.scrollHeight}px`; + } + } + }, [editedText, beingEdited]); + let handleClick = () => { if (isEditedByOther) return; setBeingEdited(true); @@ -153,7 +163,7 @@ function EditableText({id, text, rubric, isPartOf, links, beingEditedBy, fragmen return (
-