feat: enter to send in mobile UX on PC

This commit is contained in:
Tristan Yang
2023-03-28 10:46:40 +08:00
parent e625fb38cf
commit 4cf615efe5
+18 -2
View File
@@ -1,6 +1,8 @@
import { ChangeEvent, useState } from 'react'; import { ChangeEvent, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import TextareaAutoSize from "react-textarea-autosize"; import TextareaAutoSize from "react-textarea-autosize";
import { useKey } from 'rooks';
import { isMobile } from '../../utils';
import Button from "../styled/Button"; import Button from "../styled/Button";
@@ -10,6 +12,7 @@ type Props = {
} }
const TextInput = ({ sendMessage, placeholder }: Props) => { const TextInput = ({ sendMessage, placeholder }: Props) => {
const { t } = useTranslation(); const { t } = useTranslation();
const inputRef = useRef(null);
const [currMsg, setCurrMsg] = useState(""); const [currMsg, setCurrMsg] = useState("");
const handleMsgChange = (evt: ChangeEvent<HTMLTextAreaElement>) => { const handleMsgChange = (evt: ChangeEvent<HTMLTextAreaElement>) => {
setCurrMsg(evt.target.value); setCurrMsg(evt.target.value);
@@ -21,6 +24,19 @@ const TextInput = ({ sendMessage, placeholder }: Props) => {
sendMessage(msg); sendMessage(msg);
setCurrMsg(""); setCurrMsg("");
}; };
useKey(
"Enter",
(evt) => {
evt.preventDefault();
// return true;
handleSend();
},
{
when: !isMobile(),
target: inputRef,
}
);
return ( return (
<div className='md:hidden relative mb-1 p-1 flex items-center w-full text-gray-600 dark:text-white bg-gray-200 dark:bg-gray-600 rounded-lg'> <div className='md:hidden relative mb-1 p-1 flex items-center w-full text-gray-600 dark:text-white bg-gray-200 dark:bg-gray-600 rounded-lg'>
<TextareaAutoSize <TextareaAutoSize
@@ -31,7 +47,7 @@ const TextInput = ({ sendMessage, placeholder }: Props) => {
e.currentTarget.value.length e.currentTarget.value.length
) )
} }
// ref={inputRef} ref={inputRef}
className="p-1 w-full min-h-[28px] resize-none bg-transparent text-gray-800 dark:text-white text-sm break-all" className="p-1 w-full min-h-[28px] resize-none bg-transparent text-gray-800 dark:text-white text-sm break-all"
maxRows={8} maxRows={8}
minRows={1} minRows={1}