@@ -184,6 +184,7 @@ export type OptionEmojiMenuProps = {
184184 isQuickOptions ?: boolean ;
185185 isModal ?: boolean ;
186186 ActualMessage ?: ReactNode ;
187+ dragOpts ?: DragOptsProps ;
187188} ;
188189export function OptionsEmojiBoard ( {
189190 mEvent,
@@ -195,6 +196,7 @@ export function OptionsEmojiBoard({
195196 isQuickOptions,
196197 isModal,
197198 ActualMessage,
199+ dragOpts,
198200} : OptionEmojiMenuProps ) {
199201 const position =
200202 ( ! isQuickOptions && 'Left' ) ||
@@ -209,6 +211,7 @@ export function OptionsEmojiBoard({
209211 style = { isModal ? { width : '100%' } : { } }
210212 content = {
211213 < Menu >
214+ { dragOpts ?. dragHandle }
212215 { ActualMessage }
213216 < EmojiBoard
214217 imagePackRooms = { imagePackRooms ?? [ ] }
@@ -375,6 +378,13 @@ export function OptionQuickMenu({
375378 ) ;
376379}
377380
381+ export type DragOptsProps = {
382+ dragHandle ?: ReactNode ;
383+ onTouchStart ?: ( evt : React . TouchEvent ) => void ;
384+ onTouchMove ?: ( evt : React . TouchEvent ) => void ;
385+ onTouchEnd ?: ( ) => void ;
386+ } ;
387+
378388export type OptionMenuProps = {
379389 mEvent : MatrixEvent ;
380390 room : Room ;
@@ -400,7 +410,7 @@ export type OptionMenuProps = {
400410 setIsEmoji ?: Dispatch < SetStateAction < boolean > > ;
401411 ActualMessage ?: ReactNode ;
402412 isModal ?: boolean ;
403- dragHandle ?: ReactNode ;
413+ dragOpts ?: DragOptsProps ;
404414} ;
405415
406416export function OptionMenu ( {
@@ -421,13 +431,13 @@ export function OptionMenu({
421431 setIsEmoji,
422432 ActualMessage,
423433 isModal,
424- dragHandle ,
434+ dragOpts ,
425435} : OptionMenuProps ) {
426436 const setModal = useSetAtom ( modalAtom ) ;
427437 const store = useStore ( ) ;
428438 const mx = useMatrixClient ( ) ;
429439 const isThreadedMessage = isThreadRelationEvent ( mEvent , mEvent . threadRootId ) ;
430- const isStickerMessage = mEvent . getType ( ) === 'm.sticker ' ;
440+ const isStickerMessage = mEvent . getType ( ) === 'm.stidoecker ' ;
431441 const evtId = mEvent . getId ( ) ! ;
432442 const evtTimeline = room . getTimelineForEvent ( evtId ) ;
433443 const edits =
@@ -479,6 +489,7 @@ export function OptionMenu({
479489 imagePackRooms = { imagePackRooms }
480490 isModal = { isModal }
481491 ActualMessage = { < WrappedMessage isModal = { isModal } ActualMessage = { ActualMessage } /> }
492+ dragOpts = { dragOpts }
482493 />
483494 ) }
484495 < FocusTrap
@@ -500,14 +511,22 @@ export function OptionMenu({
500511 onContextMenu = { ( e ) => e . preventDefault ( ) }
501512 className = { isModal ? css . MessageOptionsMenu : '' }
502513 >
503- { dragHandle }
514+ { dragOpts ?. dragHandle }
504515 { ActualMessage && ! emojiBoardAnchor && (
505516 < >
506517 < WrappedMessage isModal = { isModal } ActualMessage = { ActualMessage } />
507518 < Line direction = "Horizontal" variant = "SurfaceVariant" />
508519 </ >
509520 ) }
510- < Box direction = "Column" grow = "Yes" shrink = "No" style = { { maxHeight : '75%' } } >
521+ < Box
522+ direction = "Column"
523+ grow = "Yes"
524+ shrink = "No"
525+ style = { { maxHeight : '75%' } }
526+ onTouchStart = { dragOpts ?. onTouchStart }
527+ onTouchMove = { dragOpts ?. onTouchMove }
528+ onTouchEnd = { dragOpts ?. onTouchEnd }
529+ >
511530 { canSendReaction && onReactionToggle && setIsEmoji && (
512531 < MessageQuickReactions
513532 onReaction = { ( key , shortcode ) => {
@@ -750,11 +769,23 @@ export function MobileOptionsInternal({ options }: { options: OptionMenuProps })
750769 } ;
751770
752771 const dragHandleJSX = (
753- < div className = { css . MessageMobileDragHandle } >
772+ < div
773+ className = { css . MessageMobileDragHandle }
774+ onTouchStart = { handleTouchStart }
775+ onTouchMove = { handleTouchMove }
776+ onTouchEnd = { handleTouchEnd }
777+ >
754778 < div className = { css . MessageMobileDragIndicator } />
755779 </ div >
756780 ) ;
757781
782+ const dragOpts : DragOptsProps = {
783+ dragHandle : dragHandleJSX ,
784+ onTouchStart : handleTouchStart ,
785+ onTouchMove : handleTouchMove ,
786+ onTouchEnd : handleTouchEnd ,
787+ } ;
788+
758789 if ( isActive )
759790 return (
760791 < Box
@@ -764,9 +795,9 @@ export function MobileOptionsInternal({ options }: { options: OptionMenuProps })
764795 options . closeMenu ( ) ;
765796 setIsActive ( false ) ;
766797 } }
767- onTouchStart = { handleTouchStart }
768- onTouchMove = { handleTouchMove }
769- onTouchEnd = { handleTouchEnd }
798+ onTouchStart = { ( e : React . TouchEvent ) => e . stopPropagation ( ) }
799+ onTouchMove = { ( e : React . TouchEvent ) => e . stopPropagation ( ) }
800+ onTouchEnd = { ( e : React . TouchEvent ) => e . stopPropagation ( ) }
770801 >
771802 < Box
772803 className = { css . MessageMobileOptionsContainer }
@@ -796,7 +827,7 @@ export function MobileOptionsInternal({ options }: { options: OptionMenuProps })
796827 ActualMessage = { options . ActualMessage }
797828 canSendReaction = { options . canSendReaction }
798829 isModal
799- dragHandle = { dragHandleJSX }
830+ dragOpts = { dragOpts }
800831 />
801832 </ Box >
802833 </ Box >
0 commit comments