From 8bc6a464600d6820d85f55fdaf71e9ea01702eb5 Mon Sep 17 00:00:00 2001 From: ttitoo Date: Sun, 5 Dec 2021 19:35:24 +0800 Subject: [PATCH] Fix CJK IME(like Chinese, Japanese) double input (#4702) * fix: resolve CJK IME double input * fix: resolve UC mobile no input issue * feat: add changeset * Update .changeset/large-melons-warn.md Co-authored-by: Dylan Schiemann * fix: more specific way to deal with browsers Co-authored-by: Dylan Schiemann --- .changeset/large-melons-warn.md | 5 +++++ packages/slate-react/src/components/editable.tsx | 4 ++++ packages/slate-react/src/utils/environment.ts | 8 ++++++++ 3 files changed, 17 insertions(+) create mode 100644 .changeset/large-melons-warn.md diff --git a/.changeset/large-melons-warn.md b/.changeset/large-melons-warn.md new file mode 100644 index 000000000..6f7c8545c --- /dev/null +++ b/.changeset/large-melons-warn.md @@ -0,0 +1,5 @@ +--- +'slate-react': minor +--- + +Fix CJK IME (e.g. Chinese or Japanese) double input diff --git a/packages/slate-react/src/components/editable.tsx b/packages/slate-react/src/components/editable.tsx index 22024bd76..2cdf472c9 100644 --- a/packages/slate-react/src/components/editable.tsx +++ b/packages/slate-react/src/components/editable.tsx @@ -24,6 +24,8 @@ import { IS_FIREFOX_LEGACY, IS_QQBROWSER, IS_SAFARI, + IS_UC_MOBILE, + IS_WECHATBROWSER, CAN_USE_DOM, } from '../utils/environment' import { ReactEditor } from '..' @@ -772,6 +774,8 @@ export const Editable = (props: EditableProps) => { !IS_FIREFOX_LEGACY && !IS_IOS && !IS_QQBROWSER && + !IS_WECHATBROWSER && + !IS_UC_MOBILE && event.data ) { Editor.insertText(editor, event.data) diff --git a/packages/slate-react/src/utils/environment.ts b/packages/slate-react/src/utils/environment.ts index 3dcbab9d2..f059fce3b 100644 --- a/packages/slate-react/src/utils/environment.ts +++ b/packages/slate-react/src/utils/environment.ts @@ -43,6 +43,14 @@ export const IS_FIREFOX_LEGACY = export const IS_QQBROWSER = typeof navigator !== 'undefined' && /.*QQBrowser/.test(navigator.userAgent) +// UC mobile browser +export const IS_UC_MOBILE = + typeof navigator !== 'undefined' && /.*UCBrowser/.test(navigator.userAgent) + +// Wechat browser +export const IS_WECHATBROWSER = + typeof navigator !== 'undefined' && /.*Wechat/.test(navigator.userAgent) + // Check if DOM is available as React does internally. // https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js export const CAN_USE_DOM = !!(