Skip to content

Commit 677442e

Browse files
committed
fix: add hitslop
1 parent c7c46c5 commit 677442e

File tree

5 files changed

+43
-4
lines changed

5 files changed

+43
-4
lines changed

package/src/components/Channel/Channel.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ export type ChannelPropsWithContext<
351351
| 'MessageTimestamp'
352352
| 'MessageUserReactions'
353353
| 'MessageSwipeContent'
354+
| 'messageSwipeToReplyHitSlop'
354355
| 'myMessageTheme'
355356
| 'onLongPressMessage'
356357
| 'onPressInMessage'
@@ -625,6 +626,7 @@ const ChannelWithContext = <
625626
MessageSimple = MessageSimpleDefault,
626627
MessageStatus = MessageStatusDefault,
627628
MessageSwipeContent = MessageSwipeContentDefault,
629+
messageSwipeToReplyHitSlop,
628630
MessageSystem = MessageSystemDefault,
629631
MessageText,
630632
messageTextNumberOfLines,
@@ -1870,6 +1872,7 @@ const ChannelWithContext = <
18701872
MessageSimple,
18711873
MessageStatus,
18721874
MessageSwipeContent,
1875+
messageSwipeToReplyHitSlop,
18731876
MessageSystem,
18741877
MessageText,
18751878
messageTextNumberOfLines,

package/src/components/Channel/hooks/useCreateMessagesContext.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ export const useCreateMessagesContext = <
7777
MessageSimple,
7878
MessageStatus,
7979
MessageSwipeContent,
80+
messageSwipeToReplyHitSlop,
8081
MessageSystem,
8182
MessageText,
8283
messageTextNumberOfLines,
@@ -193,6 +194,7 @@ export const useCreateMessagesContext = <
193194
MessageSimple,
194195
MessageStatus,
195196
MessageSwipeContent,
197+
messageSwipeToReplyHitSlop,
196198
MessageSystem,
197199
MessageText,
198200
messageTextNumberOfLines,

package/src/components/Message/MessageSimple/MessageSimple.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { useState } from 'react';
2-
import { LayoutChangeEvent, StyleSheet, View } from 'react-native';
2+
import { Dimensions, LayoutChangeEvent, StyleSheet, View } from 'react-native';
33

44
import { Gesture, GestureDetector } from 'react-native-gesture-handler';
55

@@ -85,6 +85,7 @@ export type MessageSimplePropsWithContext<
8585
| 'MessageReplies'
8686
| 'MessageStatus'
8787
| 'MessageSwipeContent'
88+
| 'messageSwipeToReplyHitSlop'
8889
| 'ReactionListBottom'
8990
| 'reactionListPosition'
9091
| 'ReactionListTop'
@@ -97,7 +98,7 @@ const MessageSimpleWithContext = <
9798
props: MessageSimplePropsWithContext<StreamChatGenerics>,
9899
) => {
99100
const [messageContentWidth, setMessageContentWidth] = useState(0);
100-
101+
const { width } = Dimensions.get('screen');
101102
const {
102103
alignment,
103104
clearQuotedMessageState,
@@ -118,6 +119,7 @@ const MessageSimpleWithContext = <
118119
MessageReplies,
119120
MessageStatus,
120121
MessageSwipeContent,
122+
messageSwipeToReplyHitSlop = { left: width, right: width },
121123
onlyEmojis,
122124
otherAttachments,
123125
ReactionListBottom,
@@ -212,6 +214,7 @@ const MessageSimpleWithContext = <
212214
const THRESHOLD = 25;
213215

214216
const swipeGesture = Gesture.Pan()
217+
.hitSlop(messageSwipeToReplyHitSlop)
215218
.manualActivation(true)
216219
.onBegin((event) => {
217220
touchStart.value = { x: event.x, y: event.y };
@@ -286,7 +289,7 @@ const MessageSimpleWithContext = <
286289

287290
const renderAnimatedMessageBubble = (
288291
<GestureDetector gesture={swipeGesture}>
289-
<View style={[styles.contentWrapper, contentWrapper]}>
292+
<View hitSlop={messageSwipeToReplyHitSlop} style={[styles.contentWrapper, contentWrapper]}>
290293
<Animated.View
291294
style={[styles.swipeContentContainer, swipeContentAnimatedStyle, swipeContentContainer]}
292295
>
@@ -517,6 +520,7 @@ export const MessageSimple = <
517520
MessageReplies,
518521
MessageStatus,
519522
MessageSwipeContent,
523+
messageSwipeToReplyHitSlop,
520524
myMessageTheme,
521525
ReactionListBottom,
522526
reactionListPosition,
@@ -547,6 +551,7 @@ export const MessageSimple = <
547551
MessageReplies,
548552
MessageStatus,
549553
MessageSwipeContent,
554+
messageSwipeToReplyHitSlop,
550555
myMessageTheme,
551556
onlyEmojis,
552557
otherAttachments,

package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,12 @@ exports[`Thread should match thread snapshot 1`] = `
385385
/>
386386
<View
387387
collapsable={false}
388+
hitSlop={
389+
{
390+
"left": 750,
391+
"right": 750,
392+
}
393+
}
388394
style={
389395
[
390396
{
@@ -885,6 +891,12 @@ exports[`Thread should match thread snapshot 1`] = `
885891
/>
886892
<View
887893
collapsable={false}
894+
hitSlop={
895+
{
896+
"left": 750,
897+
"right": 750,
898+
}
899+
}
888900
style={
889901
[
890902
{
@@ -1423,6 +1435,12 @@ exports[`Thread should match thread snapshot 1`] = `
14231435
/>
14241436
<View
14251437
collapsable={false}
1438+
hitSlop={
1439+
{
1440+
"left": 750,
1441+
"right": 750,
1442+
}
1443+
}
14261444
style={
14271445
[
14281446
{
@@ -1916,6 +1934,12 @@ exports[`Thread should match thread snapshot 1`] = `
19161934
/>
19171935
<View
19181936
collapsable={false}
1937+
hitSlop={
1938+
{
1939+
"left": 750,
1940+
"right": 750,
1941+
}
1942+
}
19191943
style={
19201944
[
19211945
{

package/src/contexts/messagesContext/MessagesContext.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { PropsWithChildren, useContext } from 'react';
22

3-
import { PressableProps } from 'react-native';
3+
import { PressableProps, ViewProps } from 'react-native';
44

55
import type { Attachment, ChannelState, MessageResponse } from 'stream-chat';
66

@@ -467,11 +467,16 @@ export type MessagesContextValue<
467467
* @overrideType Function | Array<Objects>
468468
*/
469469
messageActions?: (param: MessageActionsParams<StreamChatGenerics>) => MessageActionType[];
470+
470471
/**
471472
* Custom message header component
472473
*/
473474
MessageHeader?: React.ComponentType<MessageFooterProps<StreamChatGenerics>>;
474475
MessageSwipeContent?: React.ComponentType;
476+
/**
477+
* HitSlop for the message swipe to reply gesture
478+
*/
479+
messageSwipeToReplyHitSlop?: ViewProps['hitSlop'];
475480
/** Custom UI component for message text */
476481
MessageText?: React.ComponentType<MessageTextProps<StreamChatGenerics>>;
477482
/**

0 commit comments

Comments
 (0)