feat(web): send on Enter and newline on Shift+Enter
Some checks failed
CI / test (push) Failing after 25s
Some checks failed
CI / test (push) Failing after 25s
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { useEffect, useRef, useState } from "react";
|
import { useEffect, useRef, useState, type KeyboardEvent } from "react";
|
||||||
import { attachFile, requestUploadUrl, sendMessageWithClientId, uploadToPresignedUrl } from "../api/chats";
|
import { attachFile, requestUploadUrl, sendMessageWithClientId, uploadToPresignedUrl } from "../api/chats";
|
||||||
import { useAuthStore } from "../store/authStore";
|
import { useAuthStore } from "../store/authStore";
|
||||||
import { useChatStore } from "../store/chatStore";
|
import { useChatStore } from "../store/chatStore";
|
||||||
@@ -104,6 +104,13 @@ export function MessageComposer() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onComposerKeyDown(event: KeyboardEvent<HTMLTextAreaElement>) {
|
||||||
|
if (event.key === "Enter" && !event.shiftKey) {
|
||||||
|
event.preventDefault();
|
||||||
|
void handleSend();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function handleUpload(file: File, messageType: "file" | "image" | "video" | "audio" | "voice" = "file") {
|
async function handleUpload(file: File, messageType: "file" | "image" | "video" | "audio" | "voice" = "file") {
|
||||||
if (!activeChatId || !me) {
|
if (!activeChatId || !me) {
|
||||||
return;
|
return;
|
||||||
@@ -314,10 +321,12 @@ export function MessageComposer() {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</label>
|
</label>
|
||||||
<input
|
<textarea
|
||||||
className="flex-1 rounded-full border border-slate-700/80 bg-slate-800/80 px-4 py-2.5 text-sm outline-none placeholder:text-slate-400 focus:border-sky-500"
|
className="flex-1 resize-none rounded-2xl border border-slate-700/80 bg-slate-800/80 px-4 py-2.5 text-sm outline-none placeholder:text-slate-400 focus:border-sky-500"
|
||||||
placeholder="Write a message..."
|
placeholder="Write a message..."
|
||||||
|
rows={1}
|
||||||
value={text}
|
value={text}
|
||||||
|
onKeyDown={onComposerKeyDown}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
const next = e.target.value;
|
const next = e.target.value;
|
||||||
setText(next);
|
setText(next);
|
||||||
|
|||||||
Reference in New Issue
Block a user