From 114b24b68043be16c4b44d6f03b76c6de63824ee Mon Sep 17 00:00:00 2001
From: prxt6529 <117092621+prxt6529@users.noreply.github.com>
Date: Thu, 5 Feb 2026 15:59:42 +0200
Subject: [PATCH 1/2] Fix mobile emoji picker scrolling and close actions
dialog
Signed-off-by: prxt6529 <117092621+prxt6529@users.noreply.github.com>
---
components/waves/drops/WaveDropActionsAddReaction.tsx | 10 ++++++++--
components/waves/drops/WaveDropMobileMenu.tsx | 1 +
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/components/waves/drops/WaveDropActionsAddReaction.tsx b/components/waves/drops/WaveDropActionsAddReaction.tsx
index 9cfbc990a1..2cc9d30c87 100644
--- a/components/waves/drops/WaveDropActionsAddReaction.tsx
+++ b/components/waves/drops/WaveDropActionsAddReaction.tsx
@@ -25,8 +25,9 @@ import {
const WaveDropActionsAddReaction: React.FC<{
readonly drop: ExtendedDrop;
readonly isMobile?: boolean | undefined;
+ readonly onOpenPicker?: (() => void) | undefined;
readonly onAddReaction?: (() => void) | undefined;
-}> = ({ drop, isMobile = false, onAddReaction }) => {
+}> = ({ drop, isMobile = false, onOpenPicker, onAddReaction }) => {
const isTemporaryDrop = drop.id.startsWith("temp-");
const canReact = !isTemporaryDrop;
const [showPicker, setShowPicker] = useState(false);
@@ -181,6 +182,11 @@ const WaveDropActionsAddReaction: React.FC<{
const onReact = () => {
if (!canReact) return;
+
+ if (isMobile && !showPicker) {
+ onOpenPicker?.();
+ }
+
setShowPicker(!showPicker);
};
@@ -300,7 +306,7 @@ const WaveDropActionsAddReaction: React.FC<{
isOpen={showPicker}
onClose={() => setShowPicker(false)}
>
-
+
= ({
{showReplyAndQuote && (
From df8616239e5cfc70634cb7ee43a83a292ecc071e Mon Sep 17 00:00:00 2001
From: prxt6529 <117092621+prxt6529@users.noreply.github.com>
Date: Thu, 5 Feb 2026 17:31:35 +0200
Subject: [PATCH 2/2] Fix mobile reaction picker closing when actions menu
unmounts
Signed-off-by: prxt6529 <117092621+prxt6529@users.noreply.github.com>
---
.../drops/WaveDropActionsAddReaction.tsx | 24 ++++++++--
components/waves/drops/WaveDropMobileMenu.tsx | 44 +++++++++++++------
2 files changed, 51 insertions(+), 17 deletions(-)
diff --git a/components/waves/drops/WaveDropActionsAddReaction.tsx b/components/waves/drops/WaveDropActionsAddReaction.tsx
index 2cc9d30c87..b54dea88bb 100644
--- a/components/waves/drops/WaveDropActionsAddReaction.tsx
+++ b/components/waves/drops/WaveDropActionsAddReaction.tsx
@@ -26,8 +26,17 @@ const WaveDropActionsAddReaction: React.FC<{
readonly drop: ExtendedDrop;
readonly isMobile?: boolean | undefined;
readonly onOpenPicker?: (() => void) | undefined;
+ readonly externalOpenSignal?: number | undefined;
+ readonly hideTrigger?: boolean | undefined;
readonly onAddReaction?: (() => void) | undefined;
-}> = ({ drop, isMobile = false, onOpenPicker, onAddReaction }) => {
+}> = ({
+ drop,
+ isMobile = false,
+ onOpenPicker,
+ externalOpenSignal,
+ hideTrigger = false,
+ onAddReaction,
+}) => {
const isTemporaryDrop = drop.id.startsWith("temp-");
const canReact = !isTemporaryDrop;
const [showPicker, setShowPicker] = useState(false);
@@ -149,6 +158,14 @@ const WaveDropActionsAddReaction: React.FC<{
}
};
+ useEffect(() => {
+ if (!isMobile || externalOpenSignal === undefined) {
+ return;
+ }
+
+ setShowPicker(true);
+ }, [externalOpenSignal, isMobile]);
+
useEffect(() => {
const handleClickOutside = (event: MouseEvent) => {
const target = event.target as Node;
@@ -183,8 +200,9 @@ const WaveDropActionsAddReaction: React.FC<{
const onReact = () => {
if (!canReact) return;
- if (isMobile && !showPicker) {
+ if (isMobile && !showPicker && onOpenPicker) {
onOpenPicker?.();
+ return;
}
setShowPicker(!showPicker);
@@ -277,7 +295,7 @@ const WaveDropActionsAddReaction: React.FC<{
return (
<>
- {isMobile ? mobileContent : desktopContent}
+ {!hideTrigger && (isMobile ? mobileContent : desktopContent)}
{/* Desktop Picker */}
{!isMobile &&
showPicker &&
diff --git a/components/waves/drops/WaveDropMobileMenu.tsx b/components/waves/drops/WaveDropMobileMenu.tsx
index 777e83d3ae..caf7e5b034 100644
--- a/components/waves/drops/WaveDropMobileMenu.tsx
+++ b/components/waves/drops/WaveDropMobileMenu.tsx
@@ -66,6 +66,7 @@ const WaveDropMobileMenu: FC = ({
);
const [copied, setCopied] = useState(false);
+ const [emojiPickerOpenSignal, setEmojiPickerOpenSignal] = useState(0);
const copyToClipboard = () => {
if (longPressTriggered) return;
@@ -141,13 +142,19 @@ const WaveDropMobileMenu: FC = ({
const closeMenu = () => setOpen(false);
+ const openEmojiPicker = () => {
+ setOpen(false);
+ setEmojiPickerOpenSignal((current) => current + 1);
+ };
+
return createPortal(
-
-
+ <>
+
+
{showOptions && (
= ({
onToggle={closeMenu}
/>
)}
-
+
{showReplyAndQuote && (
<>
- ,
+
+
+
+
+ >,
document.body
);
};