Skip to content

Commit 50180b2

Browse files
committed
refactor: remove isMessageEqual logic and added message.updated_at
1 parent 8682d85 commit 50180b2

File tree

10 files changed

+5
-153
lines changed

10 files changed

+5
-153
lines changed

docusaurus/docs/reactnative/common-content/core-components/channel/props/is_message_equal.mdx

Lines changed: 0 additions & 10 deletions
This file was deleted.

docusaurus/docs/reactnative/contexts/messages_context.mdx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ import InitialScrollToFirstUnreadMessage from '../common-content/core-components
3838
import InlineDateSeparator from '../common-content/core-components/channel/props/inline_date_separator.mdx';
3939
import InlineUnreadIndicator from '../common-content/core-components/channel/props/inline_unread_indicator.mdx';
4040
import IsAttachmentEqual from '../common-content/core-components/channel/props/is_attachment_equal.mdx';
41-
import IsMessageEqual from '../common-content/core-components/channel/props/is_message_equal.mdx';
4241
import LegacyImageViewerSwipeBehaviour from '../common-content/core-components/channel/props/legacy_image_viewer_swipe_behaviour.mdx';
4342
import MarkdownRules from '../common-content/core-components/channel/props/markdown_rules.mdx';
4443
import MessageAvatar from '../common-content/core-components/channel/props/message_avatar.mdx';
@@ -154,10 +153,6 @@ Id of current channel.
154153

155154
<IsAttachmentEqual />
156155

157-
### <div class="label description">_forwarded from [Channel](../core-components/channel.mdx#ismessageequal)_ props</div> isMessageEqual {#ismessageequal}
158-
159-
<IsMessageEqual />
160-
161156
### <div class="label description">_forwarded from [Channel](../core-components/channel.mdx#legacyimageviewerswipebehaviour)_ props</div> legacyImageViewerSwipeBehaviour {#legacyimageviewerswipebehaviour}
162157

163158
<legacyImageViewerSwipeBehaviour />

docusaurus/docs/reactnative/core-components/channel.mdx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ import InputEditingStateHeader from '../common-content/core-components/channel/p
7777
import InputGiphySearch from '../common-content/core-components/channel/props/input_giphy_search.mdx';
7878
import InputReplyStateHeader from '../common-content/core-components/channel/props/input_reply_state_header.mdx';
7979
import IsAttachmentEqual from '../common-content/core-components/channel/props/is_attachment_equal.mdx';
80-
import IsMessageEqual from '../common-content/core-components/channel/props/is_message_equal.mdx';
8180
import LegacyImageViewerSwipeBehaviour from '../common-content/core-components/channel/props/legacy_image_viewer_swipe_behaviour.mdx';
8281
import MarkdownRules from '../common-content/core-components/channel/props/markdown_rules.mdx';
8382
import MaxMessageLength from '../common-content/core-components/channel/props/max_message_length.mdx';
@@ -522,10 +521,6 @@ The max allowable is 255, which when reached displays as `255+`.
522521

523522
<IsAttachmentEqual />
524523

525-
### IsMessageEqual
526-
527-
<IsMessageEqual />
528-
529524
### keyboardBehavior
530525

531526
Behavior for the keyboard passed to the underlying [KeyboardAvoidingView](https://reactnative.dev/docs/keyboardavoidingview#behavior).

docusaurus/docs/reactnative/guides/message_customizations.mdx

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -507,26 +507,3 @@ The `deleteMessagesVisibiltyType` prop in the Channel component enables changing
507507
deletedMessagesVisibiltyType="sender"
508508
>
509509
```
510-
511-
## Memoization handler for custom message properties
512-
513-
When we add a custom property to the message object, and the data is changed around that property, the component is not rerendered by default. This should be fixed by passing a custom handler to the prop [`isMessageEqual`](../core-components/channel.mdx#ismessageequal) to [Channel](../core-components/channel.mdx) component. The logic should be implemented by the user by itself and must be similar to an equality check function we pass to a [React.memo](https://reactjs.org/docs/react-api.html#reactmemo) as a second argument.
514-
515-
Eg: Suppose we add a `customField` property to the message object. We want to use the value of this field from the message object and have an update in the UI every time the property's value changes. We can do this by implementing a memoization handler for this field as below:
516-
517-
```tsx
518-
import { Channel } from 'stream-chat-react-native';
519-
520-
const isMessageEqualHandler = (prevMessage, nextMessage) => {
521-
const messageEqual = prevMessage.customField === nextMessage.customField;
522-
if (!messageEqual) return false;
523-
return true;
524-
};
525-
526-
<Channel
527-
...
528-
isMessageEqual={isMessageEqualHandler}
529-
>
530-
{/* The underlying components */}
531-
</Channel>
532-
```

examples/TypeScriptMessaging/App.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { useContext, useEffect, useMemo, useState } from 'react';
2-
import { LogBox, Platform, SafeAreaView, View, useColorScheme } from 'react-native';
2+
import { LogBox, Platform, SafeAreaView, View, useColorScheme, Text } from 'react-native';
33
import { DarkTheme, DefaultTheme, NavigationContainer, RouteProp } from '@react-navigation/native';
44
import {
55
createStackNavigator,
@@ -19,6 +19,7 @@ import {
1919
Thread,
2020
ThreadContextValue,
2121
useAttachmentPickerContext,
22+
useMessageContext,
2223
useOverlayContext,
2324
} from 'stream-chat-react-native';
2425

package/src/components/Channel/Channel.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,6 @@ export type ChannelPropsWithContext<
256256
| 'InlineDateSeparator'
257257
| 'InlineUnreadIndicator'
258258
| 'isAttachmentEqual'
259-
| 'isMessageEqual'
260259
| 'legacyImageViewerSwipeBehaviour'
261260
| 'markdownRules'
262261
| 'Message'
@@ -461,7 +460,6 @@ const ChannelWithContext = <
461460
InputGiphySearch = InputGiphyCommandInputDefault,
462461
InputReplyStateHeader = InputReplyStateHeaderDefault,
463462
isAttachmentEqual,
464-
isMessageEqual,
465463
keyboardBehavior,
466464
KeyboardCompatibleView = KeyboardCompatibleViewDefault,
467465
keyboardVerticalOffset,
@@ -1703,7 +1701,6 @@ const ChannelWithContext = <
17031701
InlineDateSeparator,
17041702
InlineUnreadIndicator,
17051703
isAttachmentEqual,
1706-
isMessageEqual,
17071704
legacyImageViewerSwipeBehaviour,
17081705
markdownRules,
17091706
Message,

package/src/components/Channel/__tests__/isMessageEqual.test.js

Lines changed: 0 additions & 93 deletions
This file was deleted.

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ export const useCreateMessagesContext = <
4343
InlineDateSeparator,
4444
InlineUnreadIndicator,
4545
isAttachmentEqual,
46-
isMessageEqual,
4746
legacyImageViewerSwipeBehaviour,
4847
markdownRules,
4948
Message,
@@ -130,7 +129,6 @@ export const useCreateMessagesContext = <
130129
InlineDateSeparator,
131130
InlineUnreadIndicator,
132131
isAttachmentEqual,
133-
isMessageEqual,
134132
legacyImageViewerSwipeBehaviour,
135133
markdownRules,
136134
Message,

package/src/components/Message/Message.tsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ export type MessagePropsWithContext<
113113
| 'handleRetry'
114114
| 'handleThreadReply'
115115
| 'isAttachmentEqual'
116-
| 'isMessageEqual'
117116
| 'messageActions'
118117
| 'messageContentOrder'
119118
| 'MessageSimple'
@@ -684,7 +683,6 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
684683
const {
685684
goToMessage: prevGoToMessage,
686685
isAttachmentEqual,
687-
isMessageEqual,
688686
isTargetedMessage: prevIsTargetedMessage,
689687
lastReceivedId: prevLastReceivedId,
690688
members: prevMembers,
@@ -734,7 +732,8 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
734732
prevMessage.status === nextMessage.status &&
735733
prevMessage.type === nextMessage.type &&
736734
prevMessage.text === nextMessage.text &&
737-
prevMessage.pinned === nextMessage.pinned;
735+
prevMessage.pinned === nextMessage.pinned &&
736+
prevMessage.updated_at === nextMessage.updated_at;
738737

739738
if (!messageEqual) return false;
740739

@@ -797,10 +796,6 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
797796
const targetedMessageEqual = prevIsTargetedMessage === nextIsTargetedMessage;
798797
if (!targetedMessageEqual) return false;
799798

800-
if (isMessageEqual) {
801-
return !!isMessageEqual(prevMessage, nextMessage);
802-
}
803-
804799
return true;
805800
};
806801

package/src/contexts/messagesContext/MessagesContext.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -296,14 +296,11 @@ export type MessagesContextValue<
296296
handleRetry?: (message: MessageType<StreamChatGenerics>) => Promise<void>;
297297
/** Handler to access when a thread reply action is invoked */
298298
handleThreadReply?: (message: MessageType<StreamChatGenerics>) => Promise<void>;
299+
/** Handler to deal with custom memoization logic of Attachment */
299300
isAttachmentEqual?: (
300301
prevAttachment: Attachment<StreamChatGenerics>,
301302
nextAttachment: Attachment<StreamChatGenerics>,
302303
) => boolean;
303-
isMessageEqual?: (
304-
prevMessage: MessageType<StreamChatGenerics>,
305-
nextMessage: MessageType<StreamChatGenerics>,
306-
) => boolean;
307304
legacyImageViewerSwipeBehaviour?: boolean;
308305
/** Object specifying rules defined within simple-markdown https://github.com/Khan/simple-markdown#adding-a-simple-extension */
309306
markdownRules?: MarkdownRules;

0 commit comments

Comments
 (0)