fix: chat message input fix

This commit is contained in:
2025-04-10 17:15:57 +04:00
parent 3b4fed80e8
commit 1199685fcd
2 changed files with 21 additions and 5 deletions

View File

@@ -3,9 +3,12 @@ import { IconCheck, IconPaperclip, IconSend2, IconX } from "@tabler/icons-react"
import { useChatContext } from "../../../../pages/ClientsPage/contexts/ChatContext.tsx";
import ActionIconCopy from "../../../ActionIconCopy/ActionIconCopy.tsx";
import SelectedFile from "../SelectedFile/SelectedFile.tsx";
import React, { useRef } from "react";
const MessageInput = () => {
const formRef = useRef<HTMLFormElement>(null);
const {
submitMessage,
chat,
@@ -13,14 +16,22 @@ const MessageInput = () => {
files,
fileDialog,
isMessageSending,
isMessageEmpty,
} = useChatContext();
const handleKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {
if (event.key === "Enter" && !event.shiftKey) {
event.preventDefault();
formRef.current?.requestSubmit();
}
};
const getFiles = files.map(file => (
<SelectedFile key={file.name} file={file} />
));
return (
<form onSubmit={form.onSubmit(values => submitMessage(values))}>
<form ref={formRef} onSubmit={form.onSubmit(values => submitMessage(values))}>
<Stack gap={"xs"}>
<Divider />
{getFiles}
@@ -42,6 +53,7 @@ const MessageInput = () => {
</Tooltip>
<Textarea
{...form.getInputProps("message")}
onKeyDown={handleKeyDown}
w={"100%"}
minRows={1}
maxRows={4}
@@ -58,7 +70,7 @@ const MessageInput = () => {
<Button
variant={"default"}
type="submit"
disabled={isMessageSending}
disabled={isMessageSending || isMessageEmpty}
>
{form.values.messageId ? (
<IconCheck />

View File

@@ -29,6 +29,7 @@ type ChatContextState = {
filesHandlers: UseListStateHandlers<File>;
fileDialog: FileDialog;
isMessageSending: boolean;
isMessageEmpty: boolean;
};
const ChatContext = createContext<ChatContextState | undefined>(undefined);
@@ -56,6 +57,8 @@ const useChatContextState = () => {
},
});
const isMessageEmpty = form.values.message.trim().length === 0 && files.length === 0;
const setChatValue = (chat: ChatSchema | null) => {
if (chat) {
setFirstItemIndex(10000);
@@ -114,7 +117,7 @@ const useChatContextState = () => {
}, [chat]);
const sendMessageWithFiles = (values: MessageForm) => {
if (!chat) return;
if (!chat || isMessageSending) return;
setIsMessageSending(true);
ChatService.sendMessagesWithFiles({
@@ -137,7 +140,7 @@ const useChatContextState = () => {
};
const sendTextMessage = (values: MessageForm) => {
if (!chat) return;
if (!chat || isMessageEmpty || isMessageSending) return;
setIsMessageSending(true);
ChatService.sendTextMessage({
@@ -160,7 +163,7 @@ const useChatContextState = () => {
};
const editMessage = (values: MessageForm) => {
if (!chat) return;
if (!chat || isMessageSending) return;
setIsMessageSending(true);
ChatService.editMessage({
@@ -207,6 +210,7 @@ const useChatContextState = () => {
filesHandlers,
fileDialog,
isMessageSending,
isMessageEmpty,
};
};