stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
142 lines (137 loc) • 3.46 kB
text/typescript
import { useMemo } from 'react';
import type { MessagesContextValue } from '../../../contexts/messagesContext/MessagesContext';
export const useCreateMessagesContext = ({
additionalPressableProps,
channelId,
customMessageSwipeAction,
deleteMessage,
deleteReaction,
disableTypingIndicator,
dismissKeyboardOnMessageTouch,
enableMessageGroupingByUser,
enableSwipeToReply,
FlatList,
forceAlignMessages,
getMessageGroupStyle,
giphyVersion,
handleBan,
handleCopy,
handleDelete,
handleDeleteForMe,
handleEdit,
handleFlag,
handleMarkUnread,
handleMute,
handlePinMessage,
handleQuotedReply,
handleReaction,
handleRetry,
handleThreadReply,
handleBlockUser,
hasCreatePoll,
initialScrollToFirstUnreadMessage,
isAttachmentEqual,
isMessageAIGenerated,
markdownRules,
messageActions,
messageContentOrder,
messageOverlayTargetId,
messageSwipeToReplyHitSlop,
messageTextNumberOfLines,
myMessageTheme,
onLongPressMessage,
onPressInMessage,
onPressMessage,
reactionListPosition,
reactionListType,
removeMessage,
retrySendMessage,
selectReaction,
sendReaction,
shouldShowUnreadUnderlay,
supportedReactions,
targetedMessage,
updateMessage,
urlPreviewType,
}: MessagesContextValue & {
/**
* To ensure we allow re-render, when channel is changed
*/
channelId?: string;
}) => {
const additionalTouchablePropsLength = Object.keys(additionalPressableProps || {}).length;
const markdownRulesLength = Object.keys(markdownRules || {}).length;
const messageContentOrderValue = messageContentOrder.join();
const supportedReactionsLength = supportedReactions?.length;
const messagesContext: MessagesContextValue = useMemo(
() => ({
additionalPressableProps,
customMessageSwipeAction,
deleteMessage,
deleteReaction,
disableTypingIndicator,
dismissKeyboardOnMessageTouch,
enableMessageGroupingByUser,
enableSwipeToReply,
FlatList,
forceAlignMessages,
getMessageGroupStyle,
giphyVersion,
handleBan,
handleCopy,
handleDelete,
handleDeleteForMe,
handleEdit,
handleFlag,
handleMarkUnread,
handleMute,
handlePinMessage,
handleQuotedReply,
handleReaction,
handleRetry,
handleThreadReply,
handleBlockUser,
hasCreatePoll,
initialScrollToFirstUnreadMessage,
isAttachmentEqual,
isMessageAIGenerated,
markdownRules,
messageActions,
messageContentOrder,
messageOverlayTargetId,
messageSwipeToReplyHitSlop,
messageTextNumberOfLines,
myMessageTheme,
onLongPressMessage,
onPressInMessage,
onPressMessage,
reactionListPosition,
reactionListType,
removeMessage,
retrySendMessage,
selectReaction,
sendReaction,
shouldShowUnreadUnderlay,
supportedReactions,
targetedMessage,
updateMessage,
urlPreviewType,
}),
// eslint-disable-next-line react-hooks/exhaustive-deps
[
additionalTouchablePropsLength,
channelId,
disableTypingIndicator,
dismissKeyboardOnMessageTouch,
initialScrollToFirstUnreadMessage,
markdownRulesLength,
messageContentOrderValue,
messageOverlayTargetId,
supportedReactionsLength,
myMessageTheme,
targetedMessage,
hasCreatePoll,
],
);
return messagesContext;
};