mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-20 06:34:55 +00:00
perf: 在中文输入法的情况下,正在输入的过程中按下回车导致消息直接发送 (#1933)
This commit is contained in:
31
webapp/packages/chat-sdk/src/hooks/useComposing.ts
Normal file
31
webapp/packages/chat-sdk/src/hooks/useComposing.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { type MutableRefObject, useEffect, useState } from 'react';
|
||||
|
||||
const isRefObject = <T>(value: any): value is MutableRefObject<T> => {
|
||||
return value !== null && typeof value === 'object' && 'current' in value;
|
||||
};
|
||||
|
||||
export const useComposing = (element?: HTMLElement | null | MutableRefObject<HTMLElement>) => {
|
||||
const [isComposing, setIsComposing] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
const handleCompositionStart = (): void => {
|
||||
setIsComposing(true);
|
||||
};
|
||||
const handleCompositionEnd = (): void => {
|
||||
setIsComposing(false);
|
||||
};
|
||||
|
||||
const dom = isRefObject(element) ? element.current : element;
|
||||
const target = dom || window;
|
||||
|
||||
target.addEventListener('compositionstart', handleCompositionStart);
|
||||
target.addEventListener('compositionend', handleCompositionEnd);
|
||||
|
||||
return () => {
|
||||
target.removeEventListener('compositionstart', handleCompositionStart);
|
||||
target.removeEventListener('compositionend', handleCompositionEnd);
|
||||
};
|
||||
}, [element]);
|
||||
|
||||
return { isComposing, setIsComposing };
|
||||
};
|
||||
Reference in New Issue
Block a user