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; };