import { h } from 'preact'; import { useState, useEffect, useMemo, useRef, useLayoutEffect, } from 'preact/hooks'; import PropTypes from 'prop-types'; import { useTextAreaAutoResize } from '@utilities/textAreaUtils'; export const Compose = ({ handleKeyDown, handleKeyDownEdit, handleSubmitOnClick, handleSubmitOnClickEdit, handleMention, handleKeyUp, startEditing, markdownEdited, editMessageMarkdown, handleEditMessageClose, handleFilePaste, activeChannelName, }) => { const [value, setValue] = useState(''); const textAreaRef = useRef(null); const { setTextArea } = useTextAreaAutoResize(); useLayoutEffect(() => { if (textAreaRef.current) { setTextArea(textAreaRef.current); } }, [setTextArea]); useEffect(() => { if (!markdownEdited && startEditing) { setValue(editMessageMarkdown); } }, [markdownEdited, startEditing, editMessageMarkdown]); const onKeyDown = (event) => { const shiftPressed = event.shiftKey; if (startEditing) handleKeyDownEdit(event); else handleKeyDown(event); if (event.keyCode === 13 && !shiftPressed) { event.preventDefault(); setValue(''); } }; const placeholder = useMemo( () => startEditing ? "Let's connect" : `Write message to ${activeChannelName}`, [startEditing, activeChannelName], ); const label = useMemo( () => (startEditing ? "Let's connect" : 'Compose a message'), [startEditing], ); const saveButtonText = useMemo(() => (startEditing ? 'Save' : 'Send'), [ startEditing, ]); return (