fix(frontend): prevent submit during IME composition (#1562)

This commit is contained in:
Sleepy Ranx 🌙 2026-03-29 22:36:38 +08:00 committed by GitHub
parent d475de7997
commit 866cf4ef73
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 17 additions and 3 deletions

View File

@ -20,6 +20,7 @@ import { checkAgentName, getAgent } from "@/core/agents/api";
import { useI18n } from "@/core/i18n/hooks";
import { useThreadStream } from "@/core/threads/hooks";
import { uuid } from "@/core/utils/uuid";
import { isIMEComposing } from "@/lib/ime";
import { cn } from "@/lib/utils";
type Step = "name" | "chat";
@ -98,7 +99,7 @@ export default function NewAgentPage() {
]);
const handleNameKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
if (e.key === "Enter") {
if (e.key === "Enter" && !isIMEComposing(e)) {
e.preventDefault();
void handleConfirmName();
}

View File

@ -34,6 +34,7 @@ import {
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import { isIMEComposing } from "@/lib/ime";
import { cn } from "@/lib/utils";
import type { ChatStatus, FileUIPart } from "ai";
import {
@ -833,7 +834,7 @@ export const PromptInputTextarea = ({
const handleKeyDown: KeyboardEventHandler<HTMLTextAreaElement> = (e) => {
if (e.key === "Enter") {
if (isComposing || e.nativeEvent.isComposing) {
if (isIMEComposing(e, isComposing)) {
return;
}
if (e.shiftKey) {

View File

@ -56,6 +56,7 @@ import {
import type { AgentThread, AgentThreadState } from "@/core/threads/types";
import { pathOfThread, titleOfThread } from "@/core/threads/utils";
import { env } from "@/env";
import { isIMEComposing } from "@/lib/ime";
export function RecentChatList() {
const { t } = useI18n();
@ -271,7 +272,8 @@ export function RecentChatList() {
onChange={(e) => setRenameValue(e.target.value)}
placeholder={t.common.rename}
onKeyDown={(e) => {
if (e.key === "Enter") {
if (e.key === "Enter" && !isIMEComposing(e)) {
e.preventDefault();
handleRenameSubmit();
}
}}

10
frontend/src/lib/ime.ts Normal file
View File

@ -0,0 +1,10 @@
import type { KeyboardEvent } from "react";
type IMEKeyboardEvent = KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>;
export function isIMEComposing(
event: IMEKeyboardEvent,
isComposing = false,
): boolean {
return isComposing || event.nativeEvent.isComposing || event.keyCode === 229;
}