stream-chat-react-native-core 5.29.1-beta.4 → 5.30.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/lib/commonjs/components/Channel/Channel.js +4 -2
  2. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  3. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +2 -2
  4. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  5. package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js +1 -1
  6. package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
  7. package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js +6 -14
  8. package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
  9. package/lib/commonjs/components/Message/Message.js +11 -0
  10. package/lib/commonjs/components/Message/Message.js.map +1 -1
  11. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js +12 -27
  12. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js.map +1 -1
  13. package/lib/commonjs/components/Message/MessageSimple/MessageDeleted.js +10 -12
  14. package/lib/commonjs/components/Message/MessageSimple/MessageDeleted.js.map +1 -1
  15. package/lib/commonjs/components/Message/MessageSimple/MessageEditedTimestamp.js +55 -0
  16. package/lib/commonjs/components/Message/MessageSimple/MessageEditedTimestamp.js.map +1 -0
  17. package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js +94 -58
  18. package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  19. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js +6 -0
  20. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  21. package/lib/commonjs/components/Message/MessageSimple/MessageTimestamp.js +48 -0
  22. package/lib/commonjs/components/Message/MessageSimple/MessageTimestamp.js.map +1 -0
  23. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js +5 -1
  24. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  25. package/lib/commonjs/components/MessageList/InlineDateSeparator.js +6 -2
  26. package/lib/commonjs/components/MessageList/InlineDateSeparator.js.map +1 -1
  27. package/lib/commonjs/components/MessageList/MessageList.js +9 -6
  28. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  29. package/lib/commonjs/components/MessageList/MessageSystem.js +30 -27
  30. package/lib/commonjs/components/MessageList/MessageSystem.js.map +1 -1
  31. package/lib/commonjs/components/MessageList/utils/getGroupStyles.js +3 -2
  32. package/lib/commonjs/components/MessageList/utils/getGroupStyles.js.map +1 -1
  33. package/lib/commonjs/components/index.js +11 -0
  34. package/lib/commonjs/components/index.js.map +1 -1
  35. package/lib/commonjs/contexts/messageContext/MessageContext.js.map +1 -1
  36. package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
  37. package/lib/commonjs/contexts/themeContext/utils/theme.js +3 -0
  38. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  39. package/lib/commonjs/i18n/en.json +2 -1
  40. package/lib/commonjs/i18n/es.json +39 -38
  41. package/lib/commonjs/i18n/fr.json +39 -38
  42. package/lib/commonjs/i18n/he.json +39 -38
  43. package/lib/commonjs/i18n/hi.json +39 -38
  44. package/lib/commonjs/i18n/it.json +39 -38
  45. package/lib/commonjs/i18n/ja.json +39 -38
  46. package/lib/commonjs/i18n/ko.json +39 -38
  47. package/lib/commonjs/i18n/nl.json +39 -38
  48. package/lib/commonjs/i18n/pt-BR.json +39 -38
  49. package/lib/commonjs/i18n/ru.json +39 -38
  50. package/lib/commonjs/i18n/tr.json +39 -38
  51. package/lib/commonjs/utils/getDateString.js +31 -0
  52. package/lib/commonjs/utils/getDateString.js.map +1 -0
  53. package/lib/commonjs/utils/utils.js +5 -1
  54. package/lib/commonjs/utils/utils.js.map +1 -1
  55. package/lib/commonjs/version.json +1 -1
  56. package/lib/module/components/Channel/Channel.js +4 -2
  57. package/lib/module/components/Channel/Channel.js.map +1 -1
  58. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +2 -2
  59. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  60. package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js +1 -1
  61. package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
  62. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js +6 -14
  63. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
  64. package/lib/module/components/Message/Message.js +11 -0
  65. package/lib/module/components/Message/Message.js.map +1 -1
  66. package/lib/module/components/Message/MessageSimple/MessageContent.js +12 -27
  67. package/lib/module/components/Message/MessageSimple/MessageContent.js.map +1 -1
  68. package/lib/module/components/Message/MessageSimple/MessageDeleted.js +10 -12
  69. package/lib/module/components/Message/MessageSimple/MessageDeleted.js.map +1 -1
  70. package/lib/module/components/Message/MessageSimple/MessageEditedTimestamp.js +55 -0
  71. package/lib/module/components/Message/MessageSimple/MessageEditedTimestamp.js.map +1 -0
  72. package/lib/module/components/Message/MessageSimple/MessageFooter.js +94 -58
  73. package/lib/module/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  74. package/lib/module/components/Message/MessageSimple/MessageSimple.js +6 -0
  75. package/lib/module/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  76. package/lib/module/components/Message/MessageSimple/MessageTimestamp.js +48 -0
  77. package/lib/module/components/Message/MessageSimple/MessageTimestamp.js.map +1 -0
  78. package/lib/module/components/Message/hooks/useCreateMessageContext.js +5 -1
  79. package/lib/module/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  80. package/lib/module/components/MessageList/InlineDateSeparator.js +6 -2
  81. package/lib/module/components/MessageList/InlineDateSeparator.js.map +1 -1
  82. package/lib/module/components/MessageList/MessageList.js +9 -6
  83. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  84. package/lib/module/components/MessageList/MessageSystem.js +30 -27
  85. package/lib/module/components/MessageList/MessageSystem.js.map +1 -1
  86. package/lib/module/components/MessageList/utils/getGroupStyles.js +3 -2
  87. package/lib/module/components/MessageList/utils/getGroupStyles.js.map +1 -1
  88. package/lib/module/components/index.js +11 -0
  89. package/lib/module/components/index.js.map +1 -1
  90. package/lib/module/contexts/messageContext/MessageContext.js.map +1 -1
  91. package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
  92. package/lib/module/contexts/themeContext/utils/theme.js +3 -0
  93. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  94. package/lib/module/i18n/en.json +2 -1
  95. package/lib/module/i18n/es.json +39 -38
  96. package/lib/module/i18n/fr.json +39 -38
  97. package/lib/module/i18n/he.json +39 -38
  98. package/lib/module/i18n/hi.json +39 -38
  99. package/lib/module/i18n/it.json +39 -38
  100. package/lib/module/i18n/ja.json +39 -38
  101. package/lib/module/i18n/ko.json +39 -38
  102. package/lib/module/i18n/nl.json +39 -38
  103. package/lib/module/i18n/pt-BR.json +39 -38
  104. package/lib/module/i18n/ru.json +39 -38
  105. package/lib/module/i18n/tr.json +39 -38
  106. package/lib/module/utils/getDateString.js +31 -0
  107. package/lib/module/utils/getDateString.js.map +1 -0
  108. package/lib/module/utils/utils.js +5 -1
  109. package/lib/module/utils/utils.js.map +1 -1
  110. package/lib/module/version.json +1 -1
  111. package/lib/typescript/components/Channel/Channel.d.ts +1 -1
  112. package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
  113. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -1
  114. package/lib/typescript/components/ImageGallery/components/ImageGalleryHeader.d.ts.map +1 -1
  115. package/lib/typescript/components/Message/Message.d.ts.map +1 -1
  116. package/lib/typescript/components/Message/MessageSimple/MessageContent.d.ts +1 -1
  117. package/lib/typescript/components/Message/MessageSimple/MessageContent.d.ts.map +1 -1
  118. package/lib/typescript/components/Message/MessageSimple/MessageDeleted.d.ts +8 -8
  119. package/lib/typescript/components/Message/MessageSimple/MessageDeleted.d.ts.map +1 -1
  120. package/lib/typescript/components/Message/MessageSimple/MessageEditedTimestamp.d.ts +7 -0
  121. package/lib/typescript/components/Message/MessageSimple/MessageEditedTimestamp.d.ts.map +1 -0
  122. package/lib/typescript/components/Message/MessageSimple/MessageFooter.d.ts +1 -1
  123. package/lib/typescript/components/Message/MessageSimple/MessageFooter.d.ts.map +1 -1
  124. package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts +1 -1
  125. package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts.map +1 -1
  126. package/lib/typescript/components/Message/MessageSimple/MessageTimestamp.d.ts +22 -0
  127. package/lib/typescript/components/Message/MessageSimple/MessageTimestamp.d.ts.map +1 -0
  128. package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts +1 -1
  129. package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts.map +1 -1
  130. package/lib/typescript/components/MessageList/DateHeader.d.ts +1 -1
  131. package/lib/typescript/components/MessageList/DateHeader.d.ts.map +1 -1
  132. package/lib/typescript/components/MessageList/InlineDateSeparator.d.ts.map +1 -1
  133. package/lib/typescript/components/MessageList/MessageList.d.ts.map +1 -1
  134. package/lib/typescript/components/MessageList/MessageSystem.d.ts +0 -8
  135. package/lib/typescript/components/MessageList/MessageSystem.d.ts.map +1 -1
  136. package/lib/typescript/components/MessageList/utils/getGroupStyles.d.ts.map +1 -1
  137. package/lib/typescript/components/index.d.ts +1 -0
  138. package/lib/typescript/components/index.d.ts.map +1 -1
  139. package/lib/typescript/contexts/channelContext/ChannelContext.d.ts +1 -1
  140. package/lib/typescript/contexts/channelContext/ChannelContext.d.ts.map +1 -1
  141. package/lib/typescript/contexts/messageContext/MessageContext.d.ts +5 -1
  142. package/lib/typescript/contexts/messageContext/MessageContext.d.ts.map +1 -1
  143. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +6 -5
  144. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts.map +1 -1
  145. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +3 -0
  146. package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
  147. package/lib/typescript/i18n/en.json +2 -1
  148. package/lib/typescript/i18n/es.json +39 -38
  149. package/lib/typescript/i18n/fr.json +39 -38
  150. package/lib/typescript/i18n/he.json +39 -38
  151. package/lib/typescript/i18n/hi.json +39 -38
  152. package/lib/typescript/i18n/it.json +39 -38
  153. package/lib/typescript/i18n/ja.json +39 -38
  154. package/lib/typescript/i18n/ko.json +39 -38
  155. package/lib/typescript/i18n/nl.json +39 -38
  156. package/lib/typescript/i18n/pt-BR.json +39 -38
  157. package/lib/typescript/i18n/ru.json +39 -38
  158. package/lib/typescript/i18n/tr.json +39 -38
  159. package/lib/typescript/utils/Streami18n.d.ts +6 -0
  160. package/lib/typescript/utils/Streami18n.d.ts.map +1 -1
  161. package/lib/typescript/utils/getDateString.d.ts +30 -0
  162. package/lib/typescript/utils/getDateString.d.ts.map +1 -0
  163. package/lib/typescript/utils/utils.d.ts +6 -0
  164. package/lib/typescript/utils/utils.d.ts.map +1 -1
  165. package/package.json +2 -2
  166. package/src/components/Channel/Channel.tsx +4 -3
  167. package/src/components/Channel/hooks/useCreateMessagesContext.ts +2 -2
  168. package/src/components/ChannelPreview/hooks/useLatestMessagePreview.ts +1 -1
  169. package/src/components/ImageGallery/components/ImageGalleryHeader.tsx +3 -31
  170. package/src/components/Message/Message.tsx +7 -0
  171. package/src/components/Message/MessageSimple/MessageContent.tsx +13 -33
  172. package/src/components/Message/MessageSimple/MessageDeleted.tsx +13 -31
  173. package/src/components/Message/MessageSimple/MessageEditedTimestamp.tsx +56 -0
  174. package/src/components/Message/MessageSimple/MessageFooter.tsx +104 -63
  175. package/src/components/Message/MessageSimple/MessageSimple.tsx +14 -2
  176. package/src/components/Message/MessageSimple/MessageTimestamp.tsx +64 -0
  177. package/src/components/Message/hooks/useCreateMessageContext.ts +5 -0
  178. package/src/components/MessageList/DateHeader.tsx +1 -1
  179. package/src/components/MessageList/InlineDateSeparator.tsx +8 -8
  180. package/src/components/MessageList/MessageList.tsx +9 -9
  181. package/src/components/MessageList/MessageSystem.tsx +35 -43
  182. package/src/components/MessageList/utils/getGroupStyles.ts +7 -4
  183. package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +20 -12
  184. package/src/components/index.ts +1 -0
  185. package/src/contexts/channelContext/ChannelContext.tsx +1 -1
  186. package/src/contexts/messageContext/MessageContext.tsx +4 -0
  187. package/src/contexts/messagesContext/MessagesContext.tsx +6 -5
  188. package/src/contexts/themeContext/utils/theme.ts +6 -0
  189. package/src/i18n/en.json +2 -1
  190. package/src/i18n/es.json +39 -38
  191. package/src/i18n/fr.json +39 -38
  192. package/src/i18n/he.json +39 -38
  193. package/src/i18n/hi.json +39 -38
  194. package/src/i18n/it.json +39 -38
  195. package/src/i18n/ja.json +39 -38
  196. package/src/i18n/ko.json +39 -38
  197. package/src/i18n/nl.json +39 -38
  198. package/src/i18n/pt-BR.json +39 -38
  199. package/src/i18n/ru.json +39 -38
  200. package/src/i18n/tr.json +39 -38
  201. package/src/utils/getDateString.ts +67 -0
  202. package/src/utils/utils.ts +11 -0
  203. package/src/version.json +1 -1
@@ -4,14 +4,11 @@ import Animated, { Extrapolate, interpolate, useAnimatedStyle } from 'react-nati
4
4
 
5
5
  import { useOverlayContext } from '../../../contexts/overlayContext/OverlayContext';
6
6
  import { useTheme } from '../../../contexts/themeContext/ThemeContext';
7
- import {
8
- isDayOrMoment,
9
- TDateTimeParserOutput,
10
- useTranslationContext,
11
- } from '../../../contexts/translationContext/TranslationContext';
7
+ import { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';
12
8
  import { Close } from '../../../icons';
13
9
 
14
10
  import type { DefaultStreamChatGenerics } from '../../../types/types';
11
+ import { getDateString } from '../../../utils/getDateString';
15
12
  import type { Photo } from '../ImageGallery';
16
13
 
17
14
  const ReanimatedSafeAreaView = Animated.createAnimatedComponent
@@ -101,32 +98,7 @@ export const ImageGalleryHeader = <
101
98
  const { t, tDateTimeParser } = useTranslationContext();
102
99
  const { setOverlay } = useOverlayContext();
103
100
 
104
- const parsedDate = photo ? tDateTimeParser(photo?.created_at) : null;
105
-
106
- /**
107
- * .calendar and .fromNow can be initialized after the first render,
108
- * and attempting to access them at that time will cause an error
109
- * to be thrown.
110
- *
111
- * This falls back to null if neither exist.
112
- */
113
- const getDateObject = (date: TDateTimeParserOutput | null) => {
114
- if (date === null || !isDayOrMoment(date)) {
115
- return null;
116
- }
117
-
118
- if (date.calendar) {
119
- return date.calendar();
120
- }
121
-
122
- if (date.fromNow) {
123
- return date.fromNow();
124
- }
125
-
126
- return null;
127
- };
128
-
129
- const date = getDateObject(parsedDate);
101
+ const date = getDateString({ calendar: true, date: photo?.created_at, tDateTimeParser });
130
102
 
131
103
  const headerStyle = useAnimatedStyle<ViewStyle>(() => ({
132
104
  opacity: opacity.value,
@@ -48,6 +48,7 @@ import {
48
48
  hasOnlyEmojis,
49
49
  isBlockedMessage,
50
50
  isBouncedMessage,
51
+ isEditedMessage,
51
52
  MessageStatusTypes,
52
53
  } from '../../utils/utils';
53
54
 
@@ -233,6 +234,7 @@ const MessageWithContext = <
233
234
  props: MessagePropsWithContext<StreamChatGenerics>,
234
235
  ) => {
235
236
  const [isBounceDialogOpen, setIsBounceDialogOpen] = useState(false);
237
+ const [isEditedMessageOpen, setIsEditedMessageOpen] = useState(false);
236
238
  const isMessageTypeDeleted = props.message.type === 'deleted';
237
239
 
238
240
  const {
@@ -334,6 +336,9 @@ const MessageWithContext = <
334
336
  if (dismissKeyboardOnMessageTouch) {
335
337
  Keyboard.dismiss();
336
338
  }
339
+ if (isEditedMessage(message)) {
340
+ setIsEditedMessageOpen((prevState) => !prevState);
341
+ }
337
342
  const quotedMessage = message.quoted_message as MessageType<StreamChatGenerics>;
338
343
  if (error) {
339
344
  /**
@@ -677,6 +682,7 @@ const MessageWithContext = <
677
682
  handleToggleReaction,
678
683
  hasReactions,
679
684
  images: attachments.images,
685
+ isEditedMessageOpen,
680
686
  isMyMessage,
681
687
  lastGroupMessage: groupStyles?.[0] === 'single' || groupStyles?.[0] === 'bottom',
682
688
  lastReceivedId,
@@ -727,6 +733,7 @@ const MessageWithContext = <
727
733
  otherAttachments: attachments.other,
728
734
  preventPress,
729
735
  reactions,
736
+ setIsEditedMessageOpen,
730
737
  showAvatar,
731
738
  showMessageOverlay,
732
739
  showMessageStatus: typeof showMessageStatus === 'boolean' ? showMessageStatus : isMyMessage,
@@ -19,8 +19,6 @@ import {
19
19
  } from '../../../contexts/messagesContext/MessagesContext';
20
20
  import { useTheme } from '../../../contexts/themeContext/ThemeContext';
21
21
  import {
22
- isDayOrMoment,
23
- TDateTimeParserInput,
24
22
  TranslationContextValue,
25
23
  useTranslationContext,
26
24
  } from '../../../contexts/translationContext/TranslationContext';
@@ -66,6 +64,7 @@ export type MessageContentPropsWithContext<
66
64
  MessageContextValue<StreamChatGenerics>,
67
65
  | 'alignment'
68
66
  | 'disabled'
67
+ | 'isEditedMessageOpen'
69
68
  | 'goToMessage'
70
69
  | 'groupStyles'
71
70
  | 'hasReactions'
@@ -88,7 +87,6 @@ export type MessageContentPropsWithContext<
88
87
  | 'additionalTouchableProps'
89
88
  | 'Attachment'
90
89
  | 'FileAttachmentGroup'
91
- | 'formatDate'
92
90
  | 'Gallery'
93
91
  | 'isAttachmentEqual'
94
92
  | 'MessageFooter'
@@ -102,7 +100,7 @@ export type MessageContentPropsWithContext<
102
100
  | 'onPressInMessage'
103
101
  | 'Reply'
104
102
  > &
105
- Pick<TranslationContextValue, 't' | 'tDateTimeParser'> & {
103
+ Pick<TranslationContextValue, 't'> & {
106
104
  setMessageContentWidth: React.Dispatch<React.SetStateAction<number>>;
107
105
  };
108
106
 
@@ -120,7 +118,6 @@ const MessageContentWithContext = <
120
118
  Attachment,
121
119
  disabled,
122
120
  FileAttachmentGroup,
123
- formatDate,
124
121
  Gallery,
125
122
  groupStyles,
126
123
  hasReactions,
@@ -145,7 +142,6 @@ const MessageContentWithContext = <
145
142
  Reply,
146
143
  setMessageContentWidth,
147
144
  showMessageStatus,
148
- tDateTimeParser,
149
145
  threadList,
150
146
  } = props;
151
147
 
@@ -178,21 +174,6 @@ const MessageContentWithContext = <
178
174
  } = useTheme();
179
175
  const { vw } = useViewport();
180
176
 
181
- const getDateText = (formatter?: (date: TDateTimeParserInput) => string) => {
182
- if (!message.created_at) return '';
183
-
184
- if (formatter) {
185
- return formatter(message.created_at);
186
- }
187
-
188
- const parserOutput = tDateTimeParser(message.created_at);
189
-
190
- if (isDayOrMoment(parserOutput)) {
191
- return parserOutput.format('LT');
192
- }
193
- return message.created_at;
194
- };
195
-
196
177
  const onLayout: (event: LayoutChangeEvent) => void = ({
197
178
  nativeEvent: {
198
179
  layout: { width },
@@ -221,7 +202,7 @@ const MessageContentWithContext = <
221
202
  if (isMessageTypeDeleted) {
222
203
  return (
223
204
  <MessageDeleted
224
- formattedDate={getDateText(formatDate)}
205
+ date={message.created_at}
225
206
  groupStyle={groupStyle}
226
207
  noBorder={noBorder}
227
208
  onLayout={onLayout}
@@ -332,7 +313,7 @@ const MessageContentWithContext = <
332
313
  {MessageHeader && (
333
314
  <MessageHeader
334
315
  alignment={alignment}
335
- formattedDate={getDateText(formatDate)}
316
+ date={message.created_at}
336
317
  isDeleted={isMessageTypeDeleted}
337
318
  lastGroupMessage={lastGroupMessage}
338
319
  members={members}
@@ -411,7 +392,7 @@ const MessageContentWithContext = <
411
392
  {error && <MessageError />}
412
393
  </View>
413
394
  <MessageReplies noBorder={noBorder} repliesCurveColor={repliesCurveColor} />
414
- <MessageFooter formattedDate={getDateText(formatDate)} isDeleted={!!isMessageTypeDeleted} />
395
+ <MessageFooter date={message.created_at} isDeleted={!!isMessageTypeDeleted} />
415
396
  </TouchableOpacity>
416
397
  );
417
398
  };
@@ -426,6 +407,7 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
426
407
  groupStyles: prevGroupStyles,
427
408
  hasReactions: prevHasReactions,
428
409
  isAttachmentEqual,
410
+ isEditedMessageOpen: prevIsEditedMessageOpen,
429
411
  lastGroupMessage: prevLastGroupMessage,
430
412
  members: prevMembers,
431
413
  message: prevMessage,
@@ -434,13 +416,13 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
434
416
  onlyEmojis: prevOnlyEmojis,
435
417
  otherAttachments: prevOtherAttachments,
436
418
  t: prevT,
437
- tDateTimeParser: prevTDateTimeParser,
438
419
  } = prevProps;
439
420
  const {
440
421
  disabled: nextDisabled,
441
422
  goToMessage: nextGoToMessage,
442
423
  groupStyles: nextGroupStyles,
443
424
  hasReactions: nextHasReactions,
425
+ isEditedMessageOpen: nextIsEditedMessageOpen,
444
426
  lastGroupMessage: nextLastGroupMessage,
445
427
  members: nextMembers,
446
428
  message: nextMessage,
@@ -449,7 +431,6 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
449
431
  onlyEmojis: nextOnlyEmojis,
450
432
  otherAttachments: nextOtherAttachments,
451
433
  t: nextT,
452
- tDateTimeParser: nextTDateTimeParser,
453
434
  } = nextProps;
454
435
 
455
436
  const disabledEqual = prevDisabled === nextDisabled;
@@ -465,6 +446,9 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
465
446
  nextMessage.quoted_message_id && prevGoToMessage !== nextGoToMessage;
466
447
  if (goToMessageChangedAndMatters) return false;
467
448
 
449
+ const isEditedMessageOpenEqual = prevIsEditedMessageOpen === nextIsEditedMessageOpen;
450
+ if (!isEditedMessageOpenEqual) return false;
451
+
468
452
  const onlyEmojisEqual = prevOnlyEmojis === nextOnlyEmojis;
469
453
  if (!onlyEmojisEqual) return false;
470
454
 
@@ -542,9 +526,6 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
542
526
  const tEqual = prevT === nextT;
543
527
  if (!tEqual) return false;
544
528
 
545
- const tDateTimeParserEqual = prevTDateTimeParser === nextTDateTimeParser;
546
- if (!tDateTimeParserEqual) return false;
547
-
548
529
  const messageThemeEqual =
549
530
  JSON.stringify(prevMyMessageTheme) === JSON.stringify(nextMyMessageTheme);
550
531
  if (!messageThemeEqual) return false;
@@ -576,6 +557,7 @@ export const MessageContent = <
576
557
  goToMessage,
577
558
  groupStyles,
578
559
  hasReactions,
560
+ isEditedMessageOpen,
579
561
  isMyMessage,
580
562
  lastGroupMessage,
581
563
  lastReceivedId,
@@ -595,7 +577,6 @@ export const MessageContent = <
595
577
  additionalTouchableProps,
596
578
  Attachment,
597
579
  FileAttachmentGroup,
598
- formatDate,
599
580
  Gallery,
600
581
  isAttachmentEqual,
601
582
  MessageDeleted,
@@ -608,7 +589,7 @@ export const MessageContent = <
608
589
  myMessageTheme,
609
590
  Reply,
610
591
  } = useMessagesContext<StreamChatGenerics>();
611
- const { t, tDateTimeParser } = useTranslationContext();
592
+ const { t } = useTranslationContext();
612
593
 
613
594
  return (
614
595
  <MemoizedMessageContent<StreamChatGenerics>
@@ -618,12 +599,12 @@ export const MessageContent = <
618
599
  Attachment,
619
600
  disabled,
620
601
  FileAttachmentGroup,
621
- formatDate,
622
602
  Gallery,
623
603
  goToMessage,
624
604
  groupStyles,
625
605
  hasReactions,
626
606
  isAttachmentEqual,
607
+ isEditedMessageOpen,
627
608
  isMyMessage,
628
609
  lastGroupMessage,
629
610
  lastReceivedId,
@@ -647,7 +628,6 @@ export const MessageContent = <
647
628
  Reply,
648
629
  showMessageStatus,
649
630
  t,
650
- tDateTimeParser,
651
631
  threadList,
652
632
  }}
653
633
  {...props}
@@ -3,11 +3,9 @@ import { LayoutChangeEvent, StyleSheet, View } from 'react-native';
3
3
 
4
4
  import merge from 'lodash/merge';
5
5
 
6
- import type { MessageFooterProps } from './MessageFooter';
7
6
  import { MessageTextContainer } from './MessageTextContainer';
8
7
 
9
8
  import {
10
- Alignment,
11
9
  MessageContextValue,
12
10
  useMessageContext,
13
11
  } from '../../../contexts/messageContext/MessageContext';
@@ -16,13 +14,9 @@ import {
16
14
  useMessagesContext,
17
15
  } from '../../../contexts/messagesContext/MessagesContext';
18
16
  import { useTheme } from '../../../contexts/themeContext/ThemeContext';
19
- import {
20
- TranslationContextValue,
21
- useTranslationContext,
22
- } from '../../../contexts/translationContext/TranslationContext';
17
+ import { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';
23
18
 
24
19
  import type { DefaultStreamChatGenerics } from '../../../types/types';
25
- import type { MessageType } from '../../MessageList/hooks/useMessageList';
26
20
 
27
21
  const styles = StyleSheet.create({
28
22
  containerInner: {
@@ -40,17 +34,16 @@ const styles = StyleSheet.create({
40
34
  });
41
35
 
42
36
  type MessageDeletedComponentProps = {
43
- formattedDate: string | Date;
44
37
  groupStyle: string;
45
38
  noBorder: boolean;
46
39
  onLayout: (event: LayoutChangeEvent) => void;
40
+ date?: string | Date;
47
41
  };
48
42
 
49
43
  type MessageDeletedPropsWithContext<
50
44
  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
51
45
  > = Pick<MessageContextValue<StreamChatGenerics>, 'alignment' | 'message'> &
52
46
  Pick<MessagesContextValue<StreamChatGenerics>, 'MessageFooter'> &
53
- Pick<TranslationContextValue, 't'> &
54
47
  MessageDeletedComponentProps;
55
48
 
56
49
  const MessageDeletedWithContext = <
@@ -58,8 +51,7 @@ const MessageDeletedWithContext = <
58
51
  >(
59
52
  props: MessageDeletedPropsWithContext<StreamChatGenerics>,
60
53
  ) => {
61
- const { alignment, formattedDate, groupStyle, message, MessageFooter, noBorder, onLayout, t } =
62
- props;
54
+ const { alignment, date, groupStyle, message, MessageFooter, noBorder, onLayout } = props;
63
55
 
64
56
  const {
65
57
  theme: {
@@ -74,6 +66,7 @@ const MessageDeletedWithContext = <
74
66
  },
75
67
  },
76
68
  } = useTheme();
69
+ const { t } = useTranslationContext();
77
70
 
78
71
  return (
79
72
  <View
@@ -108,7 +101,7 @@ const MessageDeletedWithContext = <
108
101
  message={{ ...message, text: `_${t('Message deleted')}_` }}
109
102
  />
110
103
  </View>
111
- <MessageFooter formattedDate={formattedDate} isDeleted />
104
+ <MessageFooter date={date} isDeleted />
112
105
  </View>
113
106
  );
114
107
  };
@@ -117,16 +110,8 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
117
110
  prevProps: MessageDeletedPropsWithContext<StreamChatGenerics>,
118
111
  nextProps: MessageDeletedPropsWithContext<StreamChatGenerics>,
119
112
  ) => {
120
- const {
121
- alignment: prevAlignment,
122
- formattedDate: prevFormattedDate,
123
- message: prevMessage,
124
- } = prevProps;
125
- const {
126
- alignment: nextAlignment,
127
- formattedDate: nextFormattedDate,
128
- message: nextMessage,
129
- } = nextProps;
113
+ const { alignment: prevAlignment, date: prevDate, message: prevMessage } = prevProps;
114
+ const { alignment: nextAlignment, date: nextDate, message: nextMessage } = nextProps;
130
115
 
131
116
  const alignmentEqual = prevAlignment === nextAlignment;
132
117
  if (!alignmentEqual) return false;
@@ -142,8 +127,8 @@ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = Default
142
127
  prevMessage.pinned === nextMessage.pinned;
143
128
  if (!messageEqual) return false;
144
129
 
145
- const formattedDateEqual = prevFormattedDate === nextFormattedDate;
146
- if (!formattedDateEqual) return false;
130
+ const dateEqual = prevDate === nextDate;
131
+ if (!dateEqual) return false;
147
132
 
148
133
  return true;
149
134
  };
@@ -155,10 +140,10 @@ const MemoizedMessageDeleted = React.memo(
155
140
 
156
141
  export type MessageDeletedProps<
157
142
  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
158
- > = MessageDeletedComponentProps & {
159
- alignment?: Alignment;
160
- message?: MessageType<StreamChatGenerics>;
161
- MessageFooter?: React.ComponentType<MessageFooterProps<StreamChatGenerics>>;
143
+ > = Partial<MessageDeletedPropsWithContext<StreamChatGenerics>> & {
144
+ groupStyle: string;
145
+ noBorder: boolean;
146
+ onLayout: (event: LayoutChangeEvent) => void;
162
147
  };
163
148
 
164
149
  export const MessageDeleted = <
@@ -170,15 +155,12 @@ export const MessageDeleted = <
170
155
 
171
156
  const { MessageFooter } = useMessagesContext<StreamChatGenerics>();
172
157
 
173
- const { t } = useTranslationContext();
174
-
175
158
  return (
176
159
  <MemoizedMessageDeleted
177
160
  {...{
178
161
  alignment,
179
162
  message,
180
163
  MessageFooter,
181
- t,
182
164
  }}
183
165
  {...props}
184
166
  />
@@ -0,0 +1,56 @@
1
+ import React from 'react';
2
+ import { StyleSheet, Text, View } from 'react-native';
3
+
4
+ import { MessageTimestamp, MessageTimestampProps } from './MessageTimestamp';
5
+
6
+ import {
7
+ MessageContextValue,
8
+ useMessageContext,
9
+ } from '../../../contexts/messageContext/MessageContext';
10
+ import { useTheme } from '../../../contexts/themeContext/ThemeContext';
11
+ import { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';
12
+ import { DefaultStreamChatGenerics } from '../../../types/types';
13
+ import { isEditedMessage } from '../../../utils/utils';
14
+
15
+ export type MessageEditedTimestampProps<
16
+ StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
17
+ > = Partial<Pick<MessageContextValue<StreamChatGenerics>, 'message'>> & MessageTimestampProps;
18
+
19
+ export const MessageEditedTimestamp = <
20
+ StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
21
+ >(
22
+ props: MessageEditedTimestampProps<StreamChatGenerics>,
23
+ ) => {
24
+ const { message: propMessage, timestamp } = props;
25
+ const {
26
+ theme: {
27
+ colors: { grey },
28
+ messageSimple: {
29
+ content: { editedLabel, editedTimestampContainer },
30
+ },
31
+ },
32
+ } = useTheme();
33
+ const { t } = useTranslationContext();
34
+ const { message: contextMessage } = useMessageContext<StreamChatGenerics>();
35
+ const message = propMessage || contextMessage;
36
+
37
+ if (!isEditedMessage(message)) {
38
+ return null;
39
+ }
40
+
41
+ return (
42
+ <View style={[styles.container, editedTimestampContainer]}>
43
+ <Text style={[styles.text, { color: grey }, editedLabel]}>{t<string>('Edited') + ' '}</Text>
44
+ <MessageTimestamp calendar={true} timestamp={timestamp} />
45
+ </View>
46
+ );
47
+ };
48
+
49
+ const styles = StyleSheet.create({
50
+ container: {
51
+ flexDirection: 'row',
52
+ },
53
+ text: {
54
+ fontSize: 12,
55
+ },
56
+ });