Skip to content

Commit

Permalink
fix: add hitslop
Browse files Browse the repository at this point in the history
  • Loading branch information
khushal87 committed Jan 17, 2025
1 parent c7c46c5 commit 677442e
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 4 deletions.
3 changes: 3 additions & 0 deletions package/src/components/Channel/Channel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,7 @@ export type ChannelPropsWithContext<
| 'MessageTimestamp'
| 'MessageUserReactions'
| 'MessageSwipeContent'
| 'messageSwipeToReplyHitSlop'
| 'myMessageTheme'
| 'onLongPressMessage'
| 'onPressInMessage'
Expand Down Expand Up @@ -625,6 +626,7 @@ const ChannelWithContext = <
MessageSimple = MessageSimpleDefault,
MessageStatus = MessageStatusDefault,
MessageSwipeContent = MessageSwipeContentDefault,
messageSwipeToReplyHitSlop,
MessageSystem = MessageSystemDefault,
MessageText,
messageTextNumberOfLines,
Expand Down Expand Up @@ -1870,6 +1872,7 @@ const ChannelWithContext = <
MessageSimple,
MessageStatus,
MessageSwipeContent,
messageSwipeToReplyHitSlop,
MessageSystem,
MessageText,
messageTextNumberOfLines,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ export const useCreateMessagesContext = <
MessageSimple,
MessageStatus,
MessageSwipeContent,
messageSwipeToReplyHitSlop,
MessageSystem,
MessageText,
messageTextNumberOfLines,
Expand Down Expand Up @@ -193,6 +194,7 @@ export const useCreateMessagesContext = <
MessageSimple,
MessageStatus,
MessageSwipeContent,
messageSwipeToReplyHitSlop,
MessageSystem,
MessageText,
messageTextNumberOfLines,
Expand Down
11 changes: 8 additions & 3 deletions package/src/components/Message/MessageSimple/MessageSimple.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { useState } from 'react';
import { LayoutChangeEvent, StyleSheet, View } from 'react-native';
import { Dimensions, LayoutChangeEvent, StyleSheet, View } from 'react-native';

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

Expand Down Expand Up @@ -85,6 +85,7 @@ export type MessageSimplePropsWithContext<
| 'MessageReplies'
| 'MessageStatus'
| 'MessageSwipeContent'
| 'messageSwipeToReplyHitSlop'
| 'ReactionListBottom'
| 'reactionListPosition'
| 'ReactionListTop'
Expand All @@ -97,7 +98,7 @@ const MessageSimpleWithContext = <
props: MessageSimplePropsWithContext<StreamChatGenerics>,
) => {
const [messageContentWidth, setMessageContentWidth] = useState(0);

const { width } = Dimensions.get('screen');
const {
alignment,
clearQuotedMessageState,
Expand All @@ -118,6 +119,7 @@ const MessageSimpleWithContext = <
MessageReplies,
MessageStatus,
MessageSwipeContent,
messageSwipeToReplyHitSlop = { left: width, right: width },
onlyEmojis,
otherAttachments,
ReactionListBottom,
Expand Down Expand Up @@ -212,6 +214,7 @@ const MessageSimpleWithContext = <
const THRESHOLD = 25;

const swipeGesture = Gesture.Pan()
.hitSlop(messageSwipeToReplyHitSlop)
.manualActivation(true)
.onBegin((event) => {
touchStart.value = { x: event.x, y: event.y };
Expand Down Expand Up @@ -286,7 +289,7 @@ const MessageSimpleWithContext = <

const renderAnimatedMessageBubble = (
<GestureDetector gesture={swipeGesture}>
<View style={[styles.contentWrapper, contentWrapper]}>
<View hitSlop={messageSwipeToReplyHitSlop} style={[styles.contentWrapper, contentWrapper]}>
<Animated.View
style={[styles.swipeContentContainer, swipeContentAnimatedStyle, swipeContentContainer]}
>
Expand Down Expand Up @@ -517,6 +520,7 @@ export const MessageSimple = <
MessageReplies,
MessageStatus,
MessageSwipeContent,
messageSwipeToReplyHitSlop,
myMessageTheme,
ReactionListBottom,
reactionListPosition,
Expand Down Expand Up @@ -547,6 +551,7 @@ export const MessageSimple = <
MessageReplies,
MessageStatus,
MessageSwipeContent,
messageSwipeToReplyHitSlop,
myMessageTheme,
onlyEmojis,
otherAttachments,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,12 @@ exports[`Thread should match thread snapshot 1`] = `
/>
<View
collapsable={false}
hitSlop={
{
"left": 750,
"right": 750,
}
}
style={
[
{
Expand Down Expand Up @@ -885,6 +891,12 @@ exports[`Thread should match thread snapshot 1`] = `
/>
<View
collapsable={false}
hitSlop={
{
"left": 750,
"right": 750,
}
}
style={
[
{
Expand Down Expand Up @@ -1423,6 +1435,12 @@ exports[`Thread should match thread snapshot 1`] = `
/>
<View
collapsable={false}
hitSlop={
{
"left": 750,
"right": 750,
}
}
style={
[
{
Expand Down Expand Up @@ -1916,6 +1934,12 @@ exports[`Thread should match thread snapshot 1`] = `
/>
<View
collapsable={false}
hitSlop={
{
"left": 750,
"right": 750,
}
}
style={
[
{
Expand Down
7 changes: 6 additions & 1 deletion package/src/contexts/messagesContext/MessagesContext.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React, { PropsWithChildren, useContext } from 'react';

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

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

Expand Down Expand Up @@ -467,11 +467,16 @@ export type MessagesContextValue<
* @overrideType Function | Array<Objects>
*/
messageActions?: (param: MessageActionsParams<StreamChatGenerics>) => MessageActionType[];

/**
* Custom message header component
*/
MessageHeader?: React.ComponentType<MessageFooterProps<StreamChatGenerics>>;
MessageSwipeContent?: React.ComponentType;
/**
* HitSlop for the message swipe to reply gesture
*/
messageSwipeToReplyHitSlop?: ViewProps['hitSlop'];
/** Custom UI component for message text */
MessageText?: React.ComponentType<MessageTextProps<StreamChatGenerics>>;
/**
Expand Down

0 comments on commit 677442e

Please sign in to comment.