message-input.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { useTranslation } from 'react-i18next'
  2. type MessageInputProps = {
  3. resetUnreadMessages: () => void
  4. sendMessage: (message: string) => void
  5. }
  6. function MessageInput({ resetUnreadMessages, sendMessage }: MessageInputProps) {
  7. const { t } = useTranslation()
  8. function handleKeyDown(event: React.KeyboardEvent) {
  9. const selectingCharacter = event.nativeEvent.isComposing
  10. if (event.key === 'Enter' && !selectingCharacter) {
  11. event.preventDefault()
  12. const target = event.target as HTMLInputElement
  13. sendMessage(target.value)
  14. // wrap the form reset in setTimeout so input sources have time to finish
  15. // https://github.com/overleaf/internal/pull/9206
  16. window.setTimeout(() => {
  17. target.blur()
  18. target.closest('form')?.reset()
  19. target.focus()
  20. }, 0)
  21. }
  22. }
  23. return (
  24. <form className="new-message">
  25. <label htmlFor="chat-input" className="visually-hidden">
  26. {`${t('your_message_to_collaborators')}…`}
  27. </label>
  28. <textarea
  29. id="chat-input"
  30. placeholder={`${t('your_message_to_collaborators')}…`}
  31. onKeyDown={handleKeyDown}
  32. onClick={resetUnreadMessages}
  33. />
  34. </form>
  35. )
  36. }
  37. export default MessageInput