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

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 (209) 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/MessageInput/hooks/useAudioController.js +7 -10
  26. package/lib/commonjs/components/MessageInput/hooks/useAudioController.js.map +1 -1
  27. package/lib/commonjs/components/MessageList/InlineDateSeparator.js +6 -2
  28. package/lib/commonjs/components/MessageList/InlineDateSeparator.js.map +1 -1
  29. package/lib/commonjs/components/MessageList/MessageList.js +9 -6
  30. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  31. package/lib/commonjs/components/MessageList/MessageSystem.js +30 -27
  32. package/lib/commonjs/components/MessageList/MessageSystem.js.map +1 -1
  33. package/lib/commonjs/components/MessageList/utils/getGroupStyles.js +3 -2
  34. package/lib/commonjs/components/MessageList/utils/getGroupStyles.js.map +1 -1
  35. package/lib/commonjs/components/index.js +11 -0
  36. package/lib/commonjs/components/index.js.map +1 -1
  37. package/lib/commonjs/contexts/messageContext/MessageContext.js.map +1 -1
  38. package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
  39. package/lib/commonjs/contexts/themeContext/utils/theme.js +3 -0
  40. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  41. package/lib/commonjs/i18n/en.json +1 -0
  42. package/lib/commonjs/i18n/es.json +14 -13
  43. package/lib/commonjs/i18n/fr.json +14 -13
  44. package/lib/commonjs/i18n/he.json +14 -13
  45. package/lib/commonjs/i18n/hi.json +14 -13
  46. package/lib/commonjs/i18n/it.json +14 -13
  47. package/lib/commonjs/i18n/ja.json +14 -13
  48. package/lib/commonjs/i18n/ko.json +14 -13
  49. package/lib/commonjs/i18n/nl.json +14 -13
  50. package/lib/commonjs/i18n/pt-BR.json +14 -13
  51. package/lib/commonjs/i18n/ru.json +14 -13
  52. package/lib/commonjs/i18n/tr.json +14 -13
  53. package/lib/commonjs/utils/getDateString.js +31 -0
  54. package/lib/commonjs/utils/getDateString.js.map +1 -0
  55. package/lib/commonjs/utils/utils.js +5 -1
  56. package/lib/commonjs/utils/utils.js.map +1 -1
  57. package/lib/commonjs/version.json +1 -1
  58. package/lib/module/components/Channel/Channel.js +4 -2
  59. package/lib/module/components/Channel/Channel.js.map +1 -1
  60. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +2 -2
  61. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  62. package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js +1 -1
  63. package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
  64. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js +6 -14
  65. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
  66. package/lib/module/components/Message/Message.js +11 -0
  67. package/lib/module/components/Message/Message.js.map +1 -1
  68. package/lib/module/components/Message/MessageSimple/MessageContent.js +12 -27
  69. package/lib/module/components/Message/MessageSimple/MessageContent.js.map +1 -1
  70. package/lib/module/components/Message/MessageSimple/MessageDeleted.js +10 -12
  71. package/lib/module/components/Message/MessageSimple/MessageDeleted.js.map +1 -1
  72. package/lib/module/components/Message/MessageSimple/MessageEditedTimestamp.js +55 -0
  73. package/lib/module/components/Message/MessageSimple/MessageEditedTimestamp.js.map +1 -0
  74. package/lib/module/components/Message/MessageSimple/MessageFooter.js +94 -58
  75. package/lib/module/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  76. package/lib/module/components/Message/MessageSimple/MessageSimple.js +6 -0
  77. package/lib/module/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  78. package/lib/module/components/Message/MessageSimple/MessageTimestamp.js +48 -0
  79. package/lib/module/components/Message/MessageSimple/MessageTimestamp.js.map +1 -0
  80. package/lib/module/components/Message/hooks/useCreateMessageContext.js +5 -1
  81. package/lib/module/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  82. package/lib/module/components/MessageInput/hooks/useAudioController.js +7 -10
  83. package/lib/module/components/MessageInput/hooks/useAudioController.js.map +1 -1
  84. package/lib/module/components/MessageList/InlineDateSeparator.js +6 -2
  85. package/lib/module/components/MessageList/InlineDateSeparator.js.map +1 -1
  86. package/lib/module/components/MessageList/MessageList.js +9 -6
  87. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  88. package/lib/module/components/MessageList/MessageSystem.js +30 -27
  89. package/lib/module/components/MessageList/MessageSystem.js.map +1 -1
  90. package/lib/module/components/MessageList/utils/getGroupStyles.js +3 -2
  91. package/lib/module/components/MessageList/utils/getGroupStyles.js.map +1 -1
  92. package/lib/module/components/index.js +11 -0
  93. package/lib/module/components/index.js.map +1 -1
  94. package/lib/module/contexts/messageContext/MessageContext.js.map +1 -1
  95. package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
  96. package/lib/module/contexts/themeContext/utils/theme.js +3 -0
  97. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  98. package/lib/module/i18n/en.json +1 -0
  99. package/lib/module/i18n/es.json +14 -13
  100. package/lib/module/i18n/fr.json +14 -13
  101. package/lib/module/i18n/he.json +14 -13
  102. package/lib/module/i18n/hi.json +14 -13
  103. package/lib/module/i18n/it.json +14 -13
  104. package/lib/module/i18n/ja.json +14 -13
  105. package/lib/module/i18n/ko.json +14 -13
  106. package/lib/module/i18n/nl.json +14 -13
  107. package/lib/module/i18n/pt-BR.json +14 -13
  108. package/lib/module/i18n/ru.json +14 -13
  109. package/lib/module/i18n/tr.json +14 -13
  110. package/lib/module/utils/getDateString.js +31 -0
  111. package/lib/module/utils/getDateString.js.map +1 -0
  112. package/lib/module/utils/utils.js +5 -1
  113. package/lib/module/utils/utils.js.map +1 -1
  114. package/lib/module/version.json +1 -1
  115. package/lib/typescript/components/Channel/Channel.d.ts +1 -1
  116. package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
  117. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -1
  118. package/lib/typescript/components/ImageGallery/components/ImageGalleryHeader.d.ts.map +1 -1
  119. package/lib/typescript/components/Message/Message.d.ts.map +1 -1
  120. package/lib/typescript/components/Message/MessageSimple/MessageContent.d.ts +1 -1
  121. package/lib/typescript/components/Message/MessageSimple/MessageContent.d.ts.map +1 -1
  122. package/lib/typescript/components/Message/MessageSimple/MessageDeleted.d.ts +8 -8
  123. package/lib/typescript/components/Message/MessageSimple/MessageDeleted.d.ts.map +1 -1
  124. package/lib/typescript/components/Message/MessageSimple/MessageEditedTimestamp.d.ts +7 -0
  125. package/lib/typescript/components/Message/MessageSimple/MessageEditedTimestamp.d.ts.map +1 -0
  126. package/lib/typescript/components/Message/MessageSimple/MessageFooter.d.ts +1 -1
  127. package/lib/typescript/components/Message/MessageSimple/MessageFooter.d.ts.map +1 -1
  128. package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts +1 -1
  129. package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts.map +1 -1
  130. package/lib/typescript/components/Message/MessageSimple/MessageTimestamp.d.ts +22 -0
  131. package/lib/typescript/components/Message/MessageSimple/MessageTimestamp.d.ts.map +1 -0
  132. package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts +1 -1
  133. package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts.map +1 -1
  134. package/lib/typescript/components/MessageInput/hooks/useAudioController.d.ts.map +1 -1
  135. package/lib/typescript/components/MessageList/DateHeader.d.ts +1 -1
  136. package/lib/typescript/components/MessageList/DateHeader.d.ts.map +1 -1
  137. package/lib/typescript/components/MessageList/InlineDateSeparator.d.ts.map +1 -1
  138. package/lib/typescript/components/MessageList/MessageList.d.ts.map +1 -1
  139. package/lib/typescript/components/MessageList/MessageSystem.d.ts +0 -8
  140. package/lib/typescript/components/MessageList/MessageSystem.d.ts.map +1 -1
  141. package/lib/typescript/components/MessageList/utils/getGroupStyles.d.ts.map +1 -1
  142. package/lib/typescript/components/index.d.ts +1 -0
  143. package/lib/typescript/components/index.d.ts.map +1 -1
  144. package/lib/typescript/contexts/channelContext/ChannelContext.d.ts +1 -1
  145. package/lib/typescript/contexts/channelContext/ChannelContext.d.ts.map +1 -1
  146. package/lib/typescript/contexts/messageContext/MessageContext.d.ts +5 -1
  147. package/lib/typescript/contexts/messageContext/MessageContext.d.ts.map +1 -1
  148. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +6 -5
  149. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts.map +1 -1
  150. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +3 -0
  151. package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
  152. package/lib/typescript/i18n/en.json +1 -0
  153. package/lib/typescript/i18n/es.json +14 -13
  154. package/lib/typescript/i18n/fr.json +14 -13
  155. package/lib/typescript/i18n/he.json +14 -13
  156. package/lib/typescript/i18n/hi.json +14 -13
  157. package/lib/typescript/i18n/it.json +14 -13
  158. package/lib/typescript/i18n/ja.json +14 -13
  159. package/lib/typescript/i18n/ko.json +14 -13
  160. package/lib/typescript/i18n/nl.json +14 -13
  161. package/lib/typescript/i18n/pt-BR.json +14 -13
  162. package/lib/typescript/i18n/ru.json +14 -13
  163. package/lib/typescript/i18n/tr.json +14 -13
  164. package/lib/typescript/utils/Streami18n.d.ts +6 -0
  165. package/lib/typescript/utils/Streami18n.d.ts.map +1 -1
  166. package/lib/typescript/utils/getDateString.d.ts +30 -0
  167. package/lib/typescript/utils/getDateString.d.ts.map +1 -0
  168. package/lib/typescript/utils/utils.d.ts +6 -0
  169. package/lib/typescript/utils/utils.d.ts.map +1 -1
  170. package/package.json +2 -2
  171. package/src/components/Channel/Channel.tsx +4 -3
  172. package/src/components/Channel/hooks/useCreateMessagesContext.ts +2 -2
  173. package/src/components/ChannelPreview/hooks/useLatestMessagePreview.ts +1 -1
  174. package/src/components/ImageGallery/components/ImageGalleryHeader.tsx +3 -31
  175. package/src/components/Message/Message.tsx +7 -0
  176. package/src/components/Message/MessageSimple/MessageContent.tsx +13 -33
  177. package/src/components/Message/MessageSimple/MessageDeleted.tsx +13 -31
  178. package/src/components/Message/MessageSimple/MessageEditedTimestamp.tsx +56 -0
  179. package/src/components/Message/MessageSimple/MessageFooter.tsx +104 -63
  180. package/src/components/Message/MessageSimple/MessageSimple.tsx +14 -2
  181. package/src/components/Message/MessageSimple/MessageTimestamp.tsx +64 -0
  182. package/src/components/Message/hooks/useCreateMessageContext.ts +5 -0
  183. package/src/components/MessageInput/hooks/useAudioController.tsx +3 -5
  184. package/src/components/MessageList/DateHeader.tsx +1 -1
  185. package/src/components/MessageList/InlineDateSeparator.tsx +8 -8
  186. package/src/components/MessageList/MessageList.tsx +9 -9
  187. package/src/components/MessageList/MessageSystem.tsx +35 -43
  188. package/src/components/MessageList/utils/getGroupStyles.ts +7 -4
  189. package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +20 -12
  190. package/src/components/index.ts +1 -0
  191. package/src/contexts/channelContext/ChannelContext.tsx +1 -1
  192. package/src/contexts/messageContext/MessageContext.tsx +4 -0
  193. package/src/contexts/messagesContext/MessagesContext.tsx +6 -5
  194. package/src/contexts/themeContext/utils/theme.ts +6 -0
  195. package/src/i18n/en.json +1 -0
  196. package/src/i18n/es.json +14 -13
  197. package/src/i18n/fr.json +14 -13
  198. package/src/i18n/he.json +14 -13
  199. package/src/i18n/hi.json +14 -13
  200. package/src/i18n/it.json +14 -13
  201. package/src/i18n/ja.json +14 -13
  202. package/src/i18n/ko.json +14 -13
  203. package/src/i18n/nl.json +14 -13
  204. package/src/i18n/pt-BR.json +14 -13
  205. package/src/i18n/ru.json +14 -13
  206. package/src/i18n/tr.json +14 -13
  207. package/src/utils/getDateString.ts +67 -0
  208. package/src/utils/utils.ts +11 -0
  209. package/src/version.json +1 -1
@@ -52,12 +52,12 @@ import {
52
52
  import { mergeThemes, ThemeProvider, useTheme } from '../../contexts/themeContext/ThemeContext';
53
53
  import { ThreadContextValue, useThreadContext } from '../../contexts/threadContext/ThreadContext';
54
54
  import {
55
- isDayOrMoment,
56
55
  TranslationContextValue,
57
56
  useTranslationContext,
58
57
  } from '../../contexts/translationContext/TranslationContext';
59
58
 
60
59
  import type { DefaultStreamChatGenerics } from '../../types/types';
60
+ import { getDateString } from '../../utils/getDateString';
61
61
 
62
62
  const WAIT_FOR_SCROLL_TO_OFFSET_TIMEOUT = 150;
63
63
  const MAX_RETRIES_AFTER_SCROLL_FAILURE = 10;
@@ -1023,17 +1023,17 @@ const MessageListWithContext = <
1023
1023
  threadList,
1024
1024
  ]);
1025
1025
 
1026
- const stickyHeaderFormatDate =
1026
+ const stickyHeaderDateFormat =
1027
1027
  stickyHeaderDate?.getFullYear() === new Date().getFullYear() ? 'MMM D' : 'MMM D, YYYY';
1028
- const tStickyHeaderDate =
1029
- stickyHeaderDate && !hideStickyDateHeader ? tDateTimeParser(stickyHeaderDate) : null;
1030
1028
 
1031
1029
  const stickyHeaderDateString = useMemo(() => {
1032
- if (tStickyHeaderDate === null || hideStickyDateHeader) return null;
1033
- if (isDayOrMoment(tStickyHeaderDate)) return tStickyHeaderDate.format(stickyHeaderFormatDate);
1034
-
1035
- return new Date(tStickyHeaderDate).toDateString();
1036
- }, [tStickyHeaderDate, stickyHeaderFormatDate, hideStickyDateHeader]);
1030
+ if (!stickyHeaderDate) return null;
1031
+ return getDateString({
1032
+ date: stickyHeaderDate,
1033
+ format: stickyHeaderDateFormat,
1034
+ tDateTimeParser,
1035
+ });
1036
+ }, [stickyHeaderDate, stickyHeaderDateFormat]);
1037
1037
 
1038
1038
  const dismissImagePicker = () => {
1039
1039
  if (!hasMoved && selectedPicker) {
@@ -4,48 +4,16 @@ import { StyleProp, StyleSheet, Text, View, ViewStyle } from 'react-native';
4
4
  import type { MessageType } from './hooks/useMessageList';
5
5
 
6
6
  import { useTheme } from '../../contexts/themeContext/ThemeContext';
7
- import {
8
- isDayOrMoment,
9
- TDateTimeParserInput,
10
- useTranslationContext,
11
- } from '../../contexts/translationContext/TranslationContext';
7
+ import { useTranslationContext } from '../../contexts/translationContext/TranslationContext';
12
8
 
13
9
  import type { DefaultStreamChatGenerics } from '../../types/types';
14
-
15
- const styles = StyleSheet.create({
16
- container: {
17
- alignItems: 'center',
18
- flexDirection: 'row',
19
- justifyContent: 'center',
20
- marginBottom: 10,
21
- },
22
- line: {
23
- flex: 1,
24
- height: 0.5,
25
- },
26
- text: {
27
- fontSize: 10,
28
- fontWeight: 'bold',
29
- textAlign: 'center',
30
- },
31
- textContainer: {
32
- flex: 3,
33
- marginTop: 10,
34
- },
35
- });
10
+ import { getDateString } from '../../utils/getDateString';
36
11
 
37
12
  export type MessageSystemProps<
38
13
  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
39
14
  > = {
40
15
  /** Current [message object](https://getstream.io/chat/docs/#message_format) */
41
16
  message: MessageType<StreamChatGenerics>;
42
- /**
43
- * Formatter function for date object.
44
- *
45
- * @param date TDateTimeParserInput object of message
46
- * @returns string
47
- */
48
- formatDate?: (date: TDateTimeParserInput) => string;
49
17
  style?: StyleProp<ViewStyle>;
50
18
  };
51
19
 
@@ -59,7 +27,7 @@ export const MessageSystem = <
59
27
  >(
60
28
  props: MessageSystemProps<StreamChatGenerics>,
61
29
  ) => {
62
- const { formatDate, message, style } = props;
30
+ const { message, style } = props;
63
31
 
64
32
  const {
65
33
  theme: {
@@ -72,13 +40,11 @@ export const MessageSystem = <
72
40
  const { tDateTimeParser } = useTranslationContext();
73
41
 
74
42
  const createdAt = message.created_at;
75
- const parsedDate = tDateTimeParser(createdAt);
76
- const date =
77
- formatDate && createdAt
78
- ? formatDate(createdAt)
79
- : parsedDate && isDayOrMoment(parsedDate)
80
- ? parsedDate.calendar().toUpperCase()
81
- : parsedDate;
43
+ const formattedDate = getDateString({
44
+ calendar: true,
45
+ date: createdAt,
46
+ tDateTimeParser,
47
+ });
82
48
 
83
49
  return (
84
50
  <View style={[styles.container, style, container]} testID='message-system'>
@@ -87,7 +53,11 @@ export const MessageSystem = <
87
53
  <Text style={[styles.text, { color: grey }, text]}>
88
54
  {message.text?.toUpperCase() || ''}
89
55
  </Text>
90
- <Text style={[styles.text, { color: grey }, dateText]}>{date.toString()}</Text>
56
+ {formattedDate && (
57
+ <Text style={[styles.text, { color: grey }, dateText]}>
58
+ {formattedDate.toString().toUpperCase()}
59
+ </Text>
60
+ )}
91
61
  </View>
92
62
  <View style={[styles.line, { backgroundColor: grey_whisper }, line]} />
93
63
  </View>
@@ -95,3 +65,25 @@ export const MessageSystem = <
95
65
  };
96
66
 
97
67
  MessageSystem.displayName = 'MessageSystem{messageList{messageSystem}}';
68
+
69
+ const styles = StyleSheet.create({
70
+ container: {
71
+ alignItems: 'center',
72
+ flexDirection: 'row',
73
+ justifyContent: 'center',
74
+ marginBottom: 10,
75
+ },
76
+ line: {
77
+ flex: 1,
78
+ height: 0.5,
79
+ },
80
+ text: {
81
+ fontSize: 10,
82
+ fontWeight: 'bold',
83
+ textAlign: 'center',
84
+ },
85
+ textContainer: {
86
+ flex: 3,
87
+ marginTop: 10,
88
+ },
89
+ });
@@ -3,6 +3,7 @@ import type { DateSeparators } from './getDateSeparators';
3
3
  import type { PaginatedMessageListContextValue } from '../../../contexts/paginatedMessageListContext/PaginatedMessageListContext';
4
4
  import type { ThreadContextValue } from '../../../contexts/threadContext/ThreadContext';
5
5
  import type { DefaultStreamChatGenerics } from '../../../types/types';
6
+ import { isEditedMessage } from '../../../utils/utils';
6
7
  import type { GroupType } from '../hooks/useMessageList';
7
8
 
8
9
  export type GetGroupStylesParams<
@@ -59,22 +60,24 @@ export const getGroupStyles = <
59
60
  const isTopMessage =
60
61
  !previousMessage ||
61
62
  previousMessage.type === 'system' ||
62
- userId !== previousMessage?.user?.id ||
63
63
  previousMessage.type === 'error' ||
64
+ userId !== previousMessage?.user?.id ||
64
65
  !!isPrevMessageTypeDeleted ||
65
66
  (!hideDateSeparators && dateSeparators[message.id]) ||
66
- messageGroupStyles[previousMessage.id]?.includes('bottom');
67
+ messageGroupStyles[previousMessage.id]?.includes('bottom') ||
68
+ isEditedMessage(previousMessage);
67
69
 
68
70
  const isBottomMessage =
69
71
  !nextMessage ||
70
72
  nextMessage.type === 'system' ||
71
- userId !== nextMessage?.user?.id ||
72
73
  nextMessage.type === 'error' ||
74
+ userId !== nextMessage?.user?.id ||
73
75
  !!isNextMessageTypeDeleted ||
74
76
  (!hideDateSeparators && dateSeparators[nextMessage.id]) ||
75
77
  (maxTimeBetweenGroupedMessages !== undefined &&
76
78
  nextMessage.created_at.getTime() - message.created_at.getTime() >
77
- maxTimeBetweenGroupedMessages);
79
+ maxTimeBetweenGroupedMessages) ||
80
+ isEditedMessage(message);
78
81
 
79
82
  /**
80
83
  * Add group styles key for top message
@@ -466,7 +466,9 @@ exports[`Thread should match thread snapshot 1`] = `
466
466
  style={
467
467
  [
468
468
  {
469
+ "alignItems": "center",
469
470
  "flexDirection": "row",
471
+ "justifyContent": "center",
470
472
  "marginTop": 4,
471
473
  },
472
474
  {},
@@ -478,12 +480,12 @@ exports[`Thread should match thread snapshot 1`] = `
478
480
  style={
479
481
  [
480
482
  {
481
- "color": "#7A7A7A",
482
- "textAlign": "left",
483
+ "fontSize": 12,
483
484
  },
484
485
  {
485
- "fontSize": 12,
486
+ "color": "#7A7A7A",
486
487
  },
488
+ {},
487
489
  ]
488
490
  }
489
491
  >
@@ -744,7 +746,9 @@ exports[`Thread should match thread snapshot 1`] = `
744
746
  style={
745
747
  [
746
748
  {
749
+ "alignItems": "center",
747
750
  "flexDirection": "row",
751
+ "justifyContent": "center",
748
752
  "marginTop": 4,
749
753
  },
750
754
  {},
@@ -756,12 +760,12 @@ exports[`Thread should match thread snapshot 1`] = `
756
760
  style={
757
761
  [
758
762
  {
759
- "color": "#7A7A7A",
760
- "textAlign": "left",
763
+ "fontSize": 12,
761
764
  },
762
765
  {
763
- "fontSize": 12,
766
+ "color": "#7A7A7A",
764
767
  },
768
+ {},
765
769
  ]
766
770
  }
767
771
  >
@@ -1022,7 +1026,9 @@ exports[`Thread should match thread snapshot 1`] = `
1022
1026
  style={
1023
1027
  [
1024
1028
  {
1029
+ "alignItems": "center",
1025
1030
  "flexDirection": "row",
1031
+ "justifyContent": "center",
1026
1032
  "marginTop": 4,
1027
1033
  },
1028
1034
  {},
@@ -1034,12 +1040,12 @@ exports[`Thread should match thread snapshot 1`] = `
1034
1040
  style={
1035
1041
  [
1036
1042
  {
1037
- "color": "#7A7A7A",
1038
- "textAlign": "left",
1043
+ "fontSize": 12,
1039
1044
  },
1040
1045
  {
1041
- "fontSize": 12,
1046
+ "color": "#7A7A7A",
1042
1047
  },
1048
+ {},
1043
1049
  ]
1044
1050
  }
1045
1051
  >
@@ -1340,7 +1346,9 @@ exports[`Thread should match thread snapshot 1`] = `
1340
1346
  style={
1341
1347
  [
1342
1348
  {
1349
+ "alignItems": "center",
1343
1350
  "flexDirection": "row",
1351
+ "justifyContent": "center",
1344
1352
  "marginTop": 4,
1345
1353
  },
1346
1354
  {},
@@ -1352,12 +1360,12 @@ exports[`Thread should match thread snapshot 1`] = `
1352
1360
  style={
1353
1361
  [
1354
1362
  {
1355
- "color": "#7A7A7A",
1356
- "textAlign": "left",
1363
+ "fontSize": 12,
1357
1364
  },
1358
1365
  {
1359
- "fontSize": 12,
1366
+ "color": "#7A7A7A",
1360
1367
  },
1368
+ {},
1361
1369
  ]
1362
1370
  }
1363
1371
  >
@@ -99,6 +99,7 @@ export * from './Message/MessageSimple/MessageAvatar';
99
99
  export * from './Message/MessageSimple/MessageBounce';
100
100
  export * from './Message/MessageSimple/MessageContent';
101
101
  export * from './Message/MessageSimple/MessageDeleted';
102
+ export * from './Message/MessageSimple/MessageEditedTimestamp';
102
103
  export * from './Message/MessageSimple/MessageError';
103
104
  export * from './Message/MessageSimple/MessageFooter';
104
105
  export * from './Message/MessageSimple/MessagePinnedHeader';
@@ -180,7 +180,7 @@ export type ChannelContextValue<
180
180
  *
181
181
  * **Default** [DateHeader](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageList/DateHeader.tsx)
182
182
  */
183
- StickyHeader?: React.ComponentType<{ dateString: string }>;
183
+ StickyHeader?: React.ComponentType<{ dateString: string | number }>;
184
184
  /**
185
185
  * Id of message, around which Channel/MessageList gets loaded when opened.
186
186
  * You will see a highlighted background for targetted message, when opened.
@@ -53,6 +53,8 @@ export type MessageContextValue<
53
53
  hasReactions: boolean;
54
54
  /** The images attached to a message */
55
55
  images: Attachment<StreamChatGenerics>[];
56
+ /** Boolean that determines if the edited message is pressed. */
57
+ isEditedMessageOpen: boolean;
56
58
  /** Whether or not this is the active user's message */
57
59
  isMyMessage: boolean;
58
60
  /** Whether or not this is the last message in a group of messages */
@@ -91,6 +93,8 @@ export type MessageContextValue<
91
93
  /** The images attached to a message */
92
94
  otherAttachments: Attachment<StreamChatGenerics>[];
93
95
  reactions: Reactions;
96
+ /** React set state function to set the state of `isEditedMessageOpen` */
97
+ setIsEditedMessageOpen: React.Dispatch<React.SetStateAction<boolean>>;
94
98
  showMessageOverlay: (messageReactions?: boolean, error?: boolean) => void;
95
99
  showMessageStatus: boolean;
96
100
  /** Whether or not the Message is part of a Thread */
@@ -24,6 +24,7 @@ import type { MessageAvatarProps } from '../../components/Message/MessageSimple/
24
24
  import type { MessageBounceProps } from '../../components/Message/MessageSimple/MessageBounce';
25
25
  import type { MessageContentProps } from '../../components/Message/MessageSimple/MessageContent';
26
26
  import type { MessageDeletedProps } from '../../components/Message/MessageSimple/MessageDeleted';
27
+ import type { MessageEditedTimestampProps } from '../../components/Message/MessageSimple/MessageEditedTimestamp';
27
28
  import type { MessageErrorProps } from '../../components/Message/MessageSimple/MessageError';
28
29
  import type { MessageFooterProps } from '../../components/Message/MessageSimple/MessageFooter';
29
30
  import type { MessagePinnedHeaderProps } from '../../components/Message/MessageSimple/MessagePinnedHeader';
@@ -53,7 +54,6 @@ import type { Alignment } from '../messageContext/MessageContext';
53
54
  import type { SuggestionCommand } from '../suggestionsContext/SuggestionsContext';
54
55
  import type { DeepPartial } from '../themeContext/ThemeContext';
55
56
  import type { Theme } from '../themeContext/utils/theme';
56
- import type { TDateTimeParserInput } from '../translationContext/TranslationContext';
57
57
  import { DEFAULT_BASE_CONTEXT_VALUE } from '../utils/defaultBaseContextValue';
58
58
 
59
59
  import { getDisplayName } from '../utils/getDisplayName';
@@ -173,6 +173,11 @@ export type MessagesContextValue<
173
173
  * Defaults to: [MessageDeleted](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageSimple/MessageDeleted.tsx)
174
174
  */
175
175
  MessageDeleted: React.ComponentType<MessageDeletedProps<StreamChatGenerics>>;
176
+ /**
177
+ * UI component for MessageEditedTimestamp
178
+ * Defaults to: [MessageEditedTimestamp](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageSimple/MessageEditedTimestamp.tsx)
179
+ */
180
+ MessageEditedTimestamp: React.ComponentType<MessageEditedTimestampProps>;
176
181
  /**
177
182
  * UI component for the MessageError.
178
183
  */
@@ -304,10 +309,6 @@ export type MessagesContextValue<
304
309
  * sent messages will be aligned to right.
305
310
  */
306
311
  forceAlignMessages?: Alignment | boolean;
307
- /**
308
- * Optional function to custom format the message date
309
- */
310
- formatDate?: (date: TDateTimeParserInput) => string;
311
312
  getMessagesGroupStyles?: typeof getGroupStyles;
312
313
  handleBlock?: (message: MessageType<StreamChatGenerics>) => Promise<void>;
313
314
  /** Handler to access when a copy message action is invoked */
@@ -450,6 +450,8 @@ export type Theme = {
450
450
  deletedContainerInner: ViewStyle;
451
451
  deletedMetaText: TextStyle;
452
452
  deletedText: MarkdownStyle;
453
+ editedLabel: TextStyle;
454
+ editedTimestampContainer: ViewStyle;
453
455
  errorContainer: ViewStyle;
454
456
  errorIcon: IconProps;
455
457
  errorIconContainer: ViewStyle;
@@ -470,6 +472,7 @@ export type Theme = {
470
472
  wrapper: ViewStyle;
471
473
  receiverMessageBackgroundColor?: ColorValue;
472
474
  senderMessageBackgroundColor?: ColorValue;
475
+ timestampText?: TextStyle;
473
476
  };
474
477
  file: {
475
478
  container: ViewStyle;
@@ -1021,6 +1024,8 @@ export const defaultTheme: Theme = {
1021
1024
  fontWeight: '400',
1022
1025
  },
1023
1026
  },
1027
+ editedLabel: {},
1028
+ editedTimestampContainer: {},
1024
1029
  errorContainer: {
1025
1030
  paddingRight: 12,
1026
1031
  paddingTop: 0,
@@ -1053,6 +1058,7 @@ export const defaultTheme: Theme = {
1053
1058
  textContainer: {
1054
1059
  onlyEmojiMarkdown: { text: { fontSize: 50 } },
1055
1060
  },
1061
+ timestampText: {},
1056
1062
  wrapper: {},
1057
1063
  },
1058
1064
  file: {
package/src/i18n/en.json CHANGED
@@ -16,6 +16,7 @@
16
16
  "Device camera is used to take photos or videos.": "Device camera is used to take photos or videos.",
17
17
  "Do you want to send a copy of this message to a moderator for further investigation?": "Do you want to send a copy of this message to a moderator for further investigation?",
18
18
  "Edit Message": "Edit Message",
19
+ "Edited": "Edited",
19
20
  "Editing Message": "Editing Message",
20
21
  "Emoji matching": "Emoji matching",
21
22
  "Empty message...": "Empty message...",
package/src/i18n/es.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "1 Reply": "",
3
- "1 Thread Reply": "1 respuesta de hilo",
3
+ "1 Thread Reply": "",
4
4
  "Allow access to your Gallery": "",
5
5
  "Allow camera access in device settings": "",
6
- "Also send to channel": "",
6
+ "Also send to channel": "También enviar al canal",
7
7
  "Are you sure you want to permanently delete this message?": "",
8
8
  "Are you sure?": "",
9
9
  "Block User": "",
@@ -16,14 +16,15 @@
16
16
  "Device camera is used to take photos or videos.": "",
17
17
  "Do you want to send a copy of this message to a moderator for further investigation?": "",
18
18
  "Edit Message": "",
19
+ "Edited": "",
19
20
  "Editing Message": "",
20
21
  "Emoji matching": "",
21
22
  "Empty message...": "",
22
- "Error loading": "",
23
- "Error loading channel list...": "",
24
- "Error loading messages for this channel...": "",
23
+ "Error loading": "Error al cargar",
24
+ "Error loading channel list...": "Error al cargar la lista de canales...",
25
+ "Error loading messages for this channel...": "Error al cargar los mensajes de este canal...",
25
26
  "Error while loading, please reload/refresh": "",
26
- "File type not supported": "Tipo de archivo no admitido",
27
+ "File type not supported": "",
27
28
  "Flag": "",
28
29
  "Flag Message": "",
29
30
  "Flag action failed either due to a network issue or the message is already flagged": "",
@@ -32,9 +33,9 @@
32
33
  "Instant Commands": "",
33
34
  "Let's start chatting!": "",
34
35
  "Links are disabled": "",
35
- "Loading channels...": "",
36
- "Loading messages...": "",
37
- "Loading...": "",
36
+ "Loading channels...": "Cargando canales...",
37
+ "Loading messages...": "Cargando mensajes...",
38
+ "Loading...": "Cargando...",
38
39
  "Maximum file size upload limit reached. Please upload a file below {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.": "",
39
40
  "Message Reactions": "",
40
41
  "Message deleted": "Mensaje eliminado",
@@ -44,7 +45,7 @@
44
45
  "Not supported": "",
45
46
  "Nothing yet...": "",
46
47
  "Ok": "",
47
- "Only visible to you": "Solo visible para ti",
48
+ "Only visible to you": "",
48
49
  "Open Settings": "",
49
50
  "Photo": "",
50
51
  "Photos and Videos": "",
@@ -53,7 +54,7 @@
53
54
  "Please allow Audio permissions in settings.": "",
54
55
  "Please enable access to your photos and videos so you can share them.": "",
55
56
  "Please select a channel first": "",
56
- "Reconnecting...": "",
57
+ "Reconnecting...": "Reconectando...",
57
58
  "Reply": "",
58
59
  "Reply to Message": "",
59
60
  "Resend": "",
@@ -71,12 +72,12 @@
71
72
  "Unpin from Conversation": "",
72
73
  "Unread Messages": "Mensajes no leídos",
73
74
  "Video": "",
74
- "You": "",
75
+ "You": "",
75
76
  "You can't send messages in this channel": "",
76
77
  "{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "",
77
78
  "{{ index }} of {{ photoLength }}": "",
78
79
  "{{ replyCount }} Replies": "",
79
- "{{ replyCount }} Thread Replies": "{{ replyCount }} respuestas de hilo",
80
+ "{{ replyCount }} Thread Replies": "",
80
81
  "{{ user }} is typing": "",
81
82
  "🏙 Attachment...": ""
82
83
  }
package/src/i18n/fr.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "1 Reply": "",
3
- "1 Thread Reply": "Réponse à 1 fil",
3
+ "1 Thread Reply": "",
4
4
  "Allow access to your Gallery": "",
5
5
  "Allow camera access in device settings": "",
6
- "Also send to channel": "",
6
+ "Also send to channel": "Envoyer également à la chaîne",
7
7
  "Are you sure you want to permanently delete this message?": "",
8
8
  "Are you sure?": "",
9
9
  "Block User": "",
@@ -16,14 +16,15 @@
16
16
  "Device camera is used to take photos or videos.": "",
17
17
  "Do you want to send a copy of this message to a moderator for further investigation?": "",
18
18
  "Edit Message": "",
19
+ "Edited": "",
19
20
  "Editing Message": "",
20
21
  "Emoji matching": "",
21
22
  "Empty message...": "",
22
- "Error loading": "",
23
- "Error loading channel list...": "",
24
- "Error loading messages for this channel...": "",
23
+ "Error loading": "Erreur lors du chargement",
24
+ "Error loading channel list...": "Erreur lors du chargement de la liste de canaux...",
25
+ "Error loading messages for this channel...": "Erreur lors du chargement des messages de ce canal...",
25
26
  "Error while loading, please reload/refresh": "",
26
- "File type not supported": "Le type de fichier n'est pas pris en charge",
27
+ "File type not supported": "",
27
28
  "Flag": "",
28
29
  "Flag Message": "",
29
30
  "Flag action failed either due to a network issue or the message is already flagged": "",
@@ -32,9 +33,9 @@
32
33
  "Instant Commands": "",
33
34
  "Let's start chatting!": "",
34
35
  "Links are disabled": "",
35
- "Loading channels...": "",
36
- "Loading messages...": "",
37
- "Loading...": "",
36
+ "Loading channels...": "Chargement des canaux...",
37
+ "Loading messages...": "Chargement des messages...",
38
+ "Loading...": "Chargement...",
38
39
  "Maximum file size upload limit reached. Please upload a file below {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.": "",
39
40
  "Message Reactions": "",
40
41
  "Message deleted": "Message supprimé",
@@ -44,7 +45,7 @@
44
45
  "Not supported": "",
45
46
  "Nothing yet...": "",
46
47
  "Ok": "",
47
- "Only visible to you": "Seulement visible par vous",
48
+ "Only visible to you": "",
48
49
  "Open Settings": "",
49
50
  "Photo": "",
50
51
  "Photos and Videos": "",
@@ -53,7 +54,7 @@
53
54
  "Please allow Audio permissions in settings.": "",
54
55
  "Please enable access to your photos and videos so you can share them.": "",
55
56
  "Please select a channel first": "",
56
- "Reconnecting...": "",
57
+ "Reconnecting...": "Se Reconnecter...",
57
58
  "Reply": "",
58
59
  "Reply to Message": "",
59
60
  "Resend": "",
@@ -71,12 +72,12 @@
71
72
  "Unpin from Conversation": "",
72
73
  "Unread Messages": "Messages non lus",
73
74
  "Video": "",
74
- "You": "",
75
+ "You": "Toi",
75
76
  "You can't send messages in this channel": "",
76
77
  "{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "",
77
78
  "{{ index }} of {{ photoLength }}": "",
78
79
  "{{ replyCount }} Replies": "",
79
- "{{ replyCount }} Thread Replies": "{{replyCount}} Réponses à la discussion",
80
+ "{{ replyCount }} Thread Replies": "",
80
81
  "{{ user }} is typing": "",
81
82
  "🏙 Attachment...": ""
82
83
  }
package/src/i18n/he.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "1 Reply": "",
3
- "1 Thread Reply": "תגובה אחת לשרשור",
3
+ "1 Thread Reply": "",
4
4
  "Allow access to your Gallery": "",
5
5
  "Allow camera access in device settings": "",
6
- "Also send to channel": "",
6
+ "Also send to channel": "שלח/י הודעה לשיחה",
7
7
  "Are you sure you want to permanently delete this message?": "",
8
8
  "Are you sure?": "",
9
9
  "Block User": "",
@@ -16,14 +16,15 @@
16
16
  "Device camera is used to take photos or videos.": "",
17
17
  "Do you want to send a copy of this message to a moderator for further investigation?": "",
18
18
  "Edit Message": "",
19
+ "Edited": "",
19
20
  "Editing Message": "",
20
21
  "Emoji matching": "",
21
22
  "Empty message...": "",
22
- "Error loading": "",
23
- "Error loading channel list...": "",
24
- "Error loading messages for this channel...": "",
23
+ "Error loading": "שגיאה ארעה בעת הטעינה",
24
+ "Error loading channel list...": "שגיאה ארעה בטעינת השיחות...",
25
+ "Error loading messages for this channel...": "שגיאה ארעה בטעינת הודעות עבור שיחה זאת...",
25
26
  "Error while loading, please reload/refresh": "",
26
- "File type not supported": "סוג הקובץ אינו נתמך",
27
+ "File type not supported": "",
27
28
  "Flag": "",
28
29
  "Flag Message": "",
29
30
  "Flag action failed either due to a network issue or the message is already flagged": "",
@@ -32,9 +33,9 @@
32
33
  "Instant Commands": "",
33
34
  "Let's start chatting!": "",
34
35
  "Links are disabled": "",
35
- "Loading channels...": "",
36
- "Loading messages...": "",
37
- "Loading...": "",
36
+ "Loading channels...": "השיחות בטעינה...",
37
+ "Loading messages...": "ההודעות בטעינה..",
38
+ "Loading...": "טוען...",
38
39
  "Maximum file size upload limit reached. Please upload a file below {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.": "",
39
40
  "Message Reactions": "",
40
41
  "Message deleted": "ההודעה נמחקה",
@@ -44,7 +45,7 @@
44
45
  "Not supported": "",
45
46
  "Nothing yet...": "",
46
47
  "Ok": "",
47
- "Only visible to you": "גלוי רק לך",
48
+ "Only visible to you": "",
48
49
  "Open Settings": "",
49
50
  "Photo": "",
50
51
  "Photos and Videos": "",
@@ -53,7 +54,7 @@
53
54
  "Please allow Audio permissions in settings.": "",
54
55
  "Please enable access to your photos and videos so you can share them.": "",
55
56
  "Please select a channel first": "",
56
- "Reconnecting...": "",
57
+ "Reconnecting...": "מתחבר מחדש...",
57
58
  "Reply": "",
58
59
  "Reply to Message": "",
59
60
  "Resend": "",
@@ -71,12 +72,12 @@
71
72
  "Unpin from Conversation": "",
72
73
  "Unread Messages": "הודעות שטרם נקרו",
73
74
  "Video": "",
74
- "You": "",
75
+ "You": "את/ה",
75
76
  "You can't send messages in this channel": "",
76
77
  "{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "",
77
78
  "{{ index }} of {{ photoLength }}": "",
78
79
  "{{ replyCount }} Replies": "",
79
- "{{ replyCount }} Thread Replies": "{{ replyCount }} תגובות שרשור",
80
+ "{{ replyCount }} Thread Replies": "",
80
81
  "{{ user }} is typing": "",
81
82
  "🏙 Attachment...": ""
82
83
  }