Skip to content

Commit 9c01b79

Browse files
committed
make make dragging work *around* message
Signed-off-by: Shea <nu@she-a.eu>
1 parent 76d75cc commit 9c01b79

1 file changed

Lines changed: 41 additions & 10 deletions

File tree

src/app/components/message/modals/Options.tsx

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ export type OptionEmojiMenuProps = {
184184
isQuickOptions?: boolean;
185185
isModal?: boolean;
186186
ActualMessage?: ReactNode;
187+
dragOpts?: DragOptsProps;
187188
};
188189
export 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+
378388
export 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

406416
export 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

Comments
 (0)