diff --git a/app/javascript/article-form/components/Title.jsx b/app/javascript/article-form/components/Title.jsx index 26f70e7e6..eacb03249 100644 --- a/app/javascript/article-form/components/Title.jsx +++ b/app/javascript/article-form/components/Title.jsx @@ -1,23 +1,32 @@ import { h } from 'preact'; +import { useRef, useLayoutEffect } from 'preact/hooks'; import PropTypes from 'prop-types'; -// We use this magic Textarea component for title field because it's automatically -// resizable. Even though it looks like a classic input, if you enter long title -// it would wrap the text to the next line automatically resizing itself. It helps keep -// the entire layout the way it is without having unnecessary scrolling and white spaces. -// Keep in mind this is what happens only here - in preact component. +// We use this hook for the title field to automatically grow the height of the textarea. +// It helps keep the entire layout the way it is without having unnecessary scrolling and white spaces. +// Keep in mind this is what happens only here - in the Preact component. // I'm mentioning this because the entire "Write a post" view is a preact component // BUT it is also a classic .html.erb view which is being loaded BEFORE this component // to give a feeling of blazing fast page load. And we do NOT use this magic autoresizing // functionality on .html.erb view because there's no point of it. -import Textarea from 'preact-textarea-autosize'; +import { useTextAreaAutoResize } from '@utilities/textAreaUtils'; export const Title = ({ onChange, defaultValue, switchHelpContext }) => { + const textAreaRef = useRef(null); + const { setTextArea } = useTextAreaAutoResize(); + + useLayoutEffect(() => { + if (textAreaRef.current) { + setTextArea(textAreaRef.current); + } + }, [setTextArea]); + return (
-