From 226f50d6980e1cc71ef7b9131c32735ed3d803e3 Mon Sep 17 00:00:00 2001 From: cretadn22 Date: Wed, 24 Dec 2025 09:57:29 +0700 Subject: [PATCH 1/4] remove dismiss on safari --- src/components/EmojiPicker/EmojiPicker.tsx | 2 +- src/utils/keyboard/index.android.ts | 2 +- src/utils/keyboard/index.ts | 2 +- src/utils/keyboard/index.website.ts | 8 ++++++-- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/components/EmojiPicker/EmojiPicker.tsx b/src/components/EmojiPicker/EmojiPicker.tsx index 8b412de3b546..20f8ad521a3d 100644 --- a/src/components/EmojiPicker/EmojiPicker.tsx +++ b/src/components/EmojiPicker/EmojiPicker.tsx @@ -117,7 +117,7 @@ function EmojiPicker({viewportOffsetTop, ref}: EmojiPickerProps) { // It's possible that the anchor is inside an active modal (e.g., add emoji reaction in report context menu). // So, we need to get the anchor position first before closing the active modal which will also destroy the anchor. - KeyboardUtils.dismiss().then(() => + KeyboardUtils.dismiss(true).then(() => calculateAnchorPosition(emojiPopoverAnchor?.current, anchorOriginValue).then((value) => { close(() => { onWillShow?.(); diff --git a/src/utils/keyboard/index.android.ts b/src/utils/keyboard/index.android.ts index b421de20d138..0c15012e0824 100644 --- a/src/utils/keyboard/index.android.ts +++ b/src/utils/keyboard/index.android.ts @@ -20,7 +20,7 @@ const subscribeKeyboardVisibilityChange = (cb: (isVisible: boolean) => void) => return () => {}; }; -const dismiss = (): Promise => { +const dismiss = (shouldSkipSafari: boolean): Promise => { return new Promise((resolve) => { if (!isVisible) { resolve(); diff --git a/src/utils/keyboard/index.ts b/src/utils/keyboard/index.ts index aec3c5ea4b5d..102991ee8f2d 100644 --- a/src/utils/keyboard/index.ts +++ b/src/utils/keyboard/index.ts @@ -19,7 +19,7 @@ const subscribeKeyboardVisibilityChange = (cb: (isVisible: boolean) => void) => return () => {}; }; -const dismiss = (): Promise => { +const dismiss = (shouldSkipSafari: boolean): Promise => { return new Promise((resolve) => { if (!isVisible) { resolve(); diff --git a/src/utils/keyboard/index.website.ts b/src/utils/keyboard/index.website.ts index 31e786d2efa4..87e516057766 100644 --- a/src/utils/keyboard/index.website.ts +++ b/src/utils/keyboard/index.website.ts @@ -1,5 +1,5 @@ import {Keyboard} from 'react-native'; -import {isMobile} from '@libs/Browser'; +import {isMobile, isSafari} from '@libs/Browser'; import CONST from '@src/CONST'; let isVisible = false; @@ -34,8 +34,12 @@ const handleResize = () => { window.visualViewport?.addEventListener('resize', handleResize); -const dismiss = (): Promise => { +const dismiss = (shouldSkipSafari = false): Promise => { return new Promise((resolve) => { + if (shouldSkipSafari && isSafari()) { + resolve(); + return; + } if (!isVisible || !isMobile()) { resolve(); return; From 7c279b35b83760b7640c2546447a177609659e8c Mon Sep 17 00:00:00 2001 From: cretadn22 Date: Wed, 24 Dec 2025 10:18:28 +0700 Subject: [PATCH 2/4] disable ts eslint --- src/utils/keyboard/index.android.ts | 1 + src/utils/keyboard/index.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/src/utils/keyboard/index.android.ts b/src/utils/keyboard/index.android.ts index 0c15012e0824..435aec33a469 100644 --- a/src/utils/keyboard/index.android.ts +++ b/src/utils/keyboard/index.android.ts @@ -20,6 +20,7 @@ const subscribeKeyboardVisibilityChange = (cb: (isVisible: boolean) => void) => return () => {}; }; +// eslint-disable-next-line @typescript-eslint/no-unused-vars const dismiss = (shouldSkipSafari: boolean): Promise => { return new Promise((resolve) => { if (!isVisible) { diff --git a/src/utils/keyboard/index.ts b/src/utils/keyboard/index.ts index 102991ee8f2d..97c2fdf4cf20 100644 --- a/src/utils/keyboard/index.ts +++ b/src/utils/keyboard/index.ts @@ -19,6 +19,7 @@ const subscribeKeyboardVisibilityChange = (cb: (isVisible: boolean) => void) => return () => {}; }; +// eslint-disable-next-line @typescript-eslint/no-unused-vars const dismiss = (shouldSkipSafari: boolean): Promise => { return new Promise((resolve) => { if (!isVisible) { From 4a86f13ddd85cb91c89f3275c93f55f374f595ae Mon Sep 17 00:00:00 2001 From: cretadn22 Date: Wed, 24 Dec 2025 10:29:57 +0700 Subject: [PATCH 3/4] add additional fix --- .../home/report/ReportActionCompose/ReportActionCompose.tsx | 4 ++-- src/utils/keyboard/index.android.ts | 2 +- src/utils/keyboard/index.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/home/report/ReportActionCompose/ReportActionCompose.tsx b/src/pages/home/report/ReportActionCompose/ReportActionCompose.tsx index d2986df46c2e..fea918783f40 100644 --- a/src/pages/home/report/ReportActionCompose/ReportActionCompose.tsx +++ b/src/pages/home/report/ReportActionCompose/ReportActionCompose.tsx @@ -63,7 +63,7 @@ import willBlurTextInputOnTapOutsideFunc from '@libs/willBlurTextInputOnTapOutsi import AgentZeroProcessingRequestIndicator from '@pages/home/report/AgentZeroProcessingRequestIndicator'; import ParticipantLocalTime from '@pages/home/report/ParticipantLocalTime'; import ReportTypingIndicator from '@pages/home/report/ReportTypingIndicator'; -import {hideEmojiPicker, isActive as isActiveEmojiPickerAction} from '@userActions/EmojiPickerAction'; +import {hideEmojiPicker, isActive as isActiveEmojiPickerAction, isEmojiPickerVisible} from '@userActions/EmojiPickerAction'; import {addAttachmentWithComment, setIsComposerFullSize} from '@userActions/Report'; import Timing from '@userActions/Timing'; import {isBlockedFromConcierge as isBlockedFromConciergeUserAction} from '@userActions/User'; @@ -579,7 +579,7 @@ function ReportActionCompose({ setIsFullComposerAvailable={setIsFullComposerAvailable} onPasteFile={(files) => validateAttachments({files})} onCleared={submitForm} - disabled={isBlockedFromConcierge} + disabled={isBlockedFromConcierge || isEmojiPickerVisible()} setIsCommentEmpty={setIsCommentEmpty} handleSendMessage={handleSendMessage} shouldShowComposeInput={shouldShowComposeInput} diff --git a/src/utils/keyboard/index.android.ts b/src/utils/keyboard/index.android.ts index 435aec33a469..9a0808b8b2f6 100644 --- a/src/utils/keyboard/index.android.ts +++ b/src/utils/keyboard/index.android.ts @@ -21,7 +21,7 @@ const subscribeKeyboardVisibilityChange = (cb: (isVisible: boolean) => void) => }; // eslint-disable-next-line @typescript-eslint/no-unused-vars -const dismiss = (shouldSkipSafari: boolean): Promise => { +const dismiss = (shouldSkipSafari?: boolean): Promise => { return new Promise((resolve) => { if (!isVisible) { resolve(); diff --git a/src/utils/keyboard/index.ts b/src/utils/keyboard/index.ts index 97c2fdf4cf20..3ff8096680c6 100644 --- a/src/utils/keyboard/index.ts +++ b/src/utils/keyboard/index.ts @@ -20,7 +20,7 @@ const subscribeKeyboardVisibilityChange = (cb: (isVisible: boolean) => void) => }; // eslint-disable-next-line @typescript-eslint/no-unused-vars -const dismiss = (shouldSkipSafari: boolean): Promise => { +const dismiss = (shouldSkipSafari?: boolean): Promise => { return new Promise((resolve) => { if (!isVisible) { resolve(); From c0fa1926e7b93e92a9bfba0d1883b6efc636dbec Mon Sep 17 00:00:00 2001 From: cretadn22 Date: Thu, 25 Dec 2025 00:11:50 +0700 Subject: [PATCH 4/4] check isMobileSafari --- src/utils/keyboard/index.website.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/keyboard/index.website.ts b/src/utils/keyboard/index.website.ts index 87e516057766..3c40a2eced2e 100644 --- a/src/utils/keyboard/index.website.ts +++ b/src/utils/keyboard/index.website.ts @@ -1,5 +1,5 @@ import {Keyboard} from 'react-native'; -import {isMobile, isSafari} from '@libs/Browser'; +import {isMobile, isMobileSafari} from '@libs/Browser'; import CONST from '@src/CONST'; let isVisible = false; @@ -36,7 +36,7 @@ window.visualViewport?.addEventListener('resize', handleResize); const dismiss = (shouldSkipSafari = false): Promise => { return new Promise((resolve) => { - if (shouldSkipSafari && isSafari()) { + if (shouldSkipSafari && isMobileSafari()) { resolve(); return; }