From d95363c93f7e66786d7922d3dcb012e34a5042bc Mon Sep 17 00:00:00 2001 From: ZHENG-Qi625 Date: Tue, 26 May 2026 17:23:53 +0200 Subject: [PATCH 1/4] IMPROVEMENT : The text area should adjust his size to improve the editing experience (closes #362). Co-authored-by: Nourhane BOUDAOUD nourhane.boudaoud@utt.fr Co-authored-by: Qi ZHENG qi.zheng@utt.fr Co-authored-by: Zhenpeng LI zhenpeng.li@utt.fr --- frontend/src/components/EditableText.jsx | 17 +++++++++++++---- frontend/src/styles/EditableText.css | 12 ++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/EditableText.jsx b/frontend/src/components/EditableText.jsx index 19b3452a..ba1794a7 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'; @@ -12,6 +12,7 @@ function EditableText({id, text, rubric, isPartOf, links, fragment, setFragment, const [editedDocument, setEditedDocument] = useState(); const [editedText, setEditedText] = useState(); const [hasBeenChanged, setHasBeenChanged] = useState(false); + const textareaRef = useRef(null); const PASSAGE = new RegExp(`\\{${rubric}} ?([^{]*)`); let parsePassage = (rawText) => (rubric) @@ -56,6 +57,15 @@ function EditableText({id, text, rubric, isPartOf, links, fragment, setFragment, } }, [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 = () => { setBeingEdited(true); updateEditedDocument() @@ -120,9 +130,8 @@ function EditableText({id, text, rubric, isPartOf, links, fragment, setFragment, ); return ( -
-