Skip to content

Commit 5220352

Browse files
committed
fix: add factory fn to determine whether a msg is ai generated
1 parent b52c1df commit 5220352

File tree

14 files changed

+52
-37
lines changed

14 files changed

+52
-37
lines changed

examples/SampleApp/src/screens/ChannelScreen.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
useTheme,
1414
useTypingString,
1515
AITypingIndicatorView,
16+
MessageType,
1617
} from 'stream-chat-react-native';
1718
import { Platform, StyleSheet, View } from 'react-native';
1819
import type { StackNavigationProp } from '@react-navigation/stack';
@@ -158,6 +159,7 @@ export const ChannelScreen: React.FC<ChannelScreenProps> = ({
158159
messageId={messageId}
159160
NetworkDownIndicator={() => null}
160161
thread={selectedThread}
162+
isMessageAIGenerated={(message: MessageType) => message.ai_generated}
161163
>
162164
<ChannelHeader channel={channel} />
163165
<MessageList<StreamChatGenerics>

examples/SampleApp/yarn.lock

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6837,10 +6837,10 @@ statuses@~1.5.0:
68376837
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
68386838
integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
68396839

6840-
stream-chat-react-native-core@5.43.2:
6841-
version "5.43.2"
6842-
resolved "https://registry.yarnpkg.com/stream-chat-react-native-core/-/stream-chat-react-native-core-5.43.2.tgz#b16add60d231509f864d7301ae281c4b4681ff7a"
6843-
integrity sha512-pdSaqw1aPHtxH0md7nnw/TLWPIqsb5TKFzGoWYd/cKRAw4pVDvxolSlha8vYSCwz7MmlarfsJPB0TlS9WcGsDQ==
6840+
stream-chat-react-native-core@5.44.0:
6841+
version "5.44.0"
6842+
resolved "https://registry.yarnpkg.com/stream-chat-react-native-core/-/stream-chat-react-native-core-5.44.0.tgz#2d3f8b8ca8a15b6f15fa03bea099e706e4c88e79"
6843+
integrity sha512-gN7/aaDvESPc2s7d6xyCTu4vpiok1HCwcNiHxvNC2NlvL0O5xd/7240L+eoSPhECXTPZvCgVJVEra9CWMM4pXw==
68446844
dependencies:
68456845
"@gorhom/bottom-sheet" "^4.6.4"
68466846
dayjs "1.10.5"
@@ -6853,7 +6853,7 @@ [email protected]:
68536853
path "0.12.7"
68546854
react-native-markdown-package "1.8.2"
68556855
react-native-url-polyfill "^1.3.0"
6856-
stream-chat "8.45.1"
6856+
stream-chat "8.46.0"
68576857

68586858
"stream-chat-react-native-core@link:../../package":
68596859
version "0.0.0"
@@ -6863,21 +6863,6 @@ [email protected]:
68636863
version "0.0.0"
68646864
uid ""
68656865

6866-
6867-
version "8.45.1"
6868-
resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-8.45.1.tgz#001f452520602ebffe45f1634b5f5dd1ff036ec5"
6869-
integrity sha512-7OMpL2RHUd+PXSWzhTUAIjjXlI9Oqc4HhUBRfc5i6dK+Ug9S5ertb7RvyzGL5N4ITpq/6ZUAwXtTqRaN9+UUkw==
6870-
dependencies:
6871-
"@babel/runtime" "^7.16.3"
6872-
"@types/jsonwebtoken" "~9.0.0"
6873-
"@types/ws" "^7.4.0"
6874-
axios "^1.6.0"
6875-
base64-js "^1.5.1"
6876-
form-data "^4.0.0"
6877-
isomorphic-ws "^4.0.1"
6878-
jsonwebtoken "~9.0.0"
6879-
ws "^7.5.10"
6880-
68816866
68826867
version "8.46.0"
68836868
resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-8.46.0.tgz#416b325e05b144d0937a3527d1e622463113d605"

package/src/components/Channel/Channel.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import { useCreateTypingContext } from './hooks/useCreateTypingContext';
3636

3737
import { useTargetedMessage } from './hooks/useTargetedMessage';
3838

39+
import { MessageContextValue } from '../../contexts';
3940
import { ChannelContextValue, ChannelProvider } from '../../contexts/channelContext/ChannelContext';
4041
import type { UseChannelStateValue } from '../../contexts/channelsStateContext/useChannelState';
4142
import { useChannelState } from '../../contexts/channelsStateContext/useChannelState';
@@ -338,6 +339,7 @@ export type ChannelPropsWithContext<
338339
| 'StreamingMessageView'
339340
>
340341
> &
342+
Partial<Pick<MessageContextValue<StreamChatGenerics>, 'isMessageAIGenerated'>> &
341343
Partial<Pick<ThreadContextValue<StreamChatGenerics>, 'allowThreadMessagesInChannel'>> & {
342344
shouldSyncChannel: boolean;
343345
thread: ThreadType<StreamChatGenerics>;
@@ -532,6 +534,7 @@ const ChannelWithContext = <
532534
InputGiphySearch = InputGiphyCommandInputDefault,
533535
InputReplyStateHeader = InputReplyStateHeaderDefault,
534536
isAttachmentEqual,
537+
isMessageAIGenerated = () => false,
535538
keyboardBehavior,
536539
KeyboardCompatibleView = KeyboardCompatibleViewDefault,
537540
keyboardVerticalOffset,
@@ -2424,6 +2427,7 @@ const ChannelWithContext = <
24242427
InlineDateSeparator,
24252428
InlineUnreadIndicator,
24262429
isAttachmentEqual,
2430+
isMessageAIGenerated,
24272431
legacyImageViewerSwipeBehaviour,
24282432
markdownRules,
24292433
Message,

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export const useCreateMessagesContext = <
5050
InlineDateSeparator,
5151
InlineUnreadIndicator,
5252
isAttachmentEqual,
53+
isMessageAIGenerated,
5354
legacyImageViewerSwipeBehaviour,
5455
markdownRules,
5556
Message,
@@ -152,6 +153,7 @@ export const useCreateMessagesContext = <
152153
InlineDateSeparator,
153154
InlineUnreadIndicator,
154155
isAttachmentEqual,
156+
isMessageAIGenerated,
155157
legacyImageViewerSwipeBehaviour,
156158
markdownRules,
157159
Message,

package/src/components/Message/Message.tsx

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,16 @@ export type MessagePropsWithContext<
139139
StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
140140
> = Pick<ChannelContextValue<StreamChatGenerics>, 'channel' | 'enforceUniqueReaction' | 'members'> &
141141
Pick<KeyboardContextValue, 'dismissKeyboard'> &
142-
Partial<Omit<MessageContextValue<StreamChatGenerics>, 'groupStyles' | 'message'>> &
143-
Pick<MessageContextValue<StreamChatGenerics>, 'groupStyles' | 'message'> &
142+
Partial<
143+
Omit<
144+
MessageContextValue<StreamChatGenerics>,
145+
'groupStyles' | 'message' | 'isMessageAIGenerated'
146+
>
147+
> &
148+
Pick<
149+
MessageContextValue<StreamChatGenerics>,
150+
'groupStyles' | 'message' | 'isMessageAIGenerated'
151+
> &
144152
Pick<
145153
MessagesContextValue<StreamChatGenerics>,
146154
| 'sendReaction'
@@ -305,6 +313,7 @@ const MessageWithContext = <
305313
threadList = false,
306314
updateMessage,
307315
} = props;
316+
const isMessageAIGenerated = messagesContext.isMessageAIGenerated;
308317
const { client } = chatContext;
309318
const {
310319
theme: {
@@ -457,7 +466,7 @@ const MessageWithContext = <
457466
case 'poll':
458467
return !!message.poll_id;
459468
case 'ai_text':
460-
return !!message.ai_generated;
469+
return isMessageAIGenerated(message);
461470
case 'text':
462471
default:
463472
return !!message.text;
@@ -704,6 +713,7 @@ const MessageWithContext = <
704713
hasReactions,
705714
images: attachments.images,
706715
isEditedMessageOpen,
716+
isMessageAIGenerated,
707717
isMyMessage,
708718
lastGroupMessage: groupStyles?.[0] === 'single' || groupStyles?.[0] === 'bottom',
709719
lastReceivedId,
@@ -865,8 +875,7 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
865875
prevMessage.text === nextMessage.text &&
866876
prevMessage.pinned === nextMessage.pinned &&
867877
`${prevMessage?.updated_at}` === `${nextMessage?.updated_at}` &&
868-
prevMessage.i18n === nextMessage.i18n &&
869-
prevMessage.ai_generated === nextMessage.ai_generated;
878+
prevMessage.i18n === nextMessage.i18n;
870879

871880
if (!messageEqual) return false;
872881

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ export type MessageContentPropsWithContext<
8282
| 'preventPress'
8383
| 'showMessageStatus'
8484
| 'threadList'
85+
| 'isMessageAIGenerated'
8586
> &
8687
Pick<
8788
MessagesContextValue<StreamChatGenerics>,
@@ -122,6 +123,7 @@ const MessageContentWithContext = <
122123
Gallery,
123124
groupStyles,
124125
hasReactions,
126+
isMessageAIGenerated,
125127
isMyMessage,
126128
lastGroupMessage,
127129
members,
@@ -396,15 +398,15 @@ const MessageContentWithContext = <
396398
) : null;
397399
}
398400
case 'ai_text':
399-
return message.ai_generated ? (
401+
return isMessageAIGenerated(message) ? (
400402
<StreamingMessageView
401403
key={`ai_message_text_container_${messageContentOrderIndex}`}
402404
/>
403405
) : null;
404406
case 'text':
405407
default:
406408
return (otherAttachments.length && otherAttachments[0].actions) ||
407-
message.ai_generated ? null : (
409+
isMessageAIGenerated(message) ? null : (
408410
<MessageTextContainer<StreamChatGenerics>
409411
key={`message_text_container_${messageContentOrderIndex}`}
410412
/>
@@ -493,8 +495,7 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
493495
prevMessage.type === nextMessage.type &&
494496
prevMessage.text === nextMessage.text &&
495497
prevMessage.pinned === nextMessage.pinned &&
496-
prevMessage.i18n === nextMessage.i18n &&
497-
prevMessage.ai_generated === nextMessage.ai_generated;
498+
prevMessage.i18n === nextMessage.i18n;
498499
if (!messageEqual) return false;
499500

500501
const isPrevQuotedMessageTypeDeleted = prevMessage.quoted_message?.type === 'deleted';
@@ -577,6 +578,7 @@ export const MessageContent = <
577578
groupStyles,
578579
hasReactions,
579580
isEditedMessageOpen,
581+
isMessageAIGenerated,
580582
isMyMessage,
581583
lastGroupMessage,
582584
lastReceivedId,
@@ -624,6 +626,7 @@ export const MessageContent = <
624626
hasReactions,
625627
isAttachmentEqual,
626628
isEditedMessageOpen,
629+
isMessageAIGenerated,
627630
isMyMessage,
628631
lastGroupMessage,
629632
lastReceivedId,

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ type MessageFooterPropsWithContext<
4141
| 'otherAttachments'
4242
| 'showMessageStatus'
4343
| 'lastGroupMessage'
44+
| 'isMessageAIGenerated'
4445
> &
4546
Pick<
4647
MessagesContextValue<StreamChatGenerics>,
@@ -94,6 +95,7 @@ const MessageFooterWithContext = <
9495
formattedDate,
9596
isDeleted,
9697
isEditedMessageOpen,
98+
isMessageAIGenerated,
9799
lastGroupMessage,
98100
members,
99101
message,
@@ -129,7 +131,7 @@ const MessageFooterWithContext = <
129131
return null;
130132
}
131133

132-
const isEdited = isEditedMessage(message);
134+
const isEdited = isEditedMessage(message) && !isMessageAIGenerated(message);
133135

134136
return (
135137
<>
@@ -267,6 +269,7 @@ export const MessageFooter = <
267269
const {
268270
alignment,
269271
isEditedMessageOpen,
272+
isMessageAIGenerated,
270273
lastGroupMessage,
271274
members,
272275
message,
@@ -283,6 +286,7 @@ export const MessageFooter = <
283286
alignment,
284287
deletedMessagesVisibilityType,
285288
isEditedMessageOpen,
289+
isMessageAIGenerated,
286290
lastGroupMessage,
287291
members,
288292
message,

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,7 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
155155
prevMessage.type === nextMessage.type &&
156156
prevMessage.text === nextMessage.text &&
157157
prevMessage.i18n === nextMessage.i18n &&
158-
prevMessage.pinned === nextMessage.pinned &&
159-
prevMessage.ai_generated === nextMessage.ai_generated;
158+
prevMessage.pinned === nextMessage.pinned;
160159
if (!messageEqual) return false;
161160

162161
const isPrevQuotedMessageTypeDeleted = prevMessage.quoted_message?.type === 'deleted';

package/src/components/Message/hooks/useCreateMessageContext.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export const useCreateMessageContext = <
2626
hasReactions,
2727
images,
2828
isEditedMessageOpen,
29+
isMessageAIGenerated,
2930
isMyMessage,
3031
lastGroupMessage,
3132
lastReceivedId,
@@ -78,6 +79,7 @@ export const useCreateMessageContext = <
7879
hasReactions,
7980
images,
8081
isEditedMessageOpen,
82+
isMessageAIGenerated,
8183
isMyMessage,
8284
lastGroupMessage,
8385
lastReceivedId,

package/src/components/MessageOverlay/MessageOverlay.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ const MessageOverlayWithContext = <
158158
const halfScreenHeight = vh(50);
159159

160160
const myMessageTheme = messagesContext?.myMessageTheme;
161+
const isMessageAIGenerated = messagesContext?.isMessageAIGenerated;
161162
const wrapMessageInTheme = clientId === message?.user?.id && !!myMessageTheme;
162163

163164
const [reactionListHeight, setReactionListHeight] = useState(0);
@@ -462,7 +463,7 @@ const MessageOverlayWithContext = <
462463
case 'text':
463464
default:
464465
return (otherAttachments?.length && otherAttachments[0].actions) ||
465-
message.ai_generated ? null : (
466+
isMessageAIGenerated?.(message) ? null : (
466467
<MessageTextContainer<StreamChatGenerics>
467468
key={`message_text_container_${messageContentOrderIndex}`}
468469
message={message}

0 commit comments

Comments
 (0)