1
- import { useMemo } from 'react' ;
1
+ import { useMemo , useRef } from 'react' ;
2
2
3
3
import type { LocalMessage } from 'stream-chat' ;
4
4
@@ -11,7 +11,7 @@ import {
11
11
import { usePaginatedMessageListContext } from '../../../contexts/paginatedMessageListContext/PaginatedMessageListContext' ;
12
12
import { useThreadContext } from '../../../contexts/threadContext/ThreadContext' ;
13
13
14
- import { getDateSeparators } from '../utils/getDateSeparators' ;
14
+ import { DateSeparators , getDateSeparators } from '../utils/getDateSeparators' ;
15
15
import { getGroupStyles } from '../utils/getGroupStyles' ;
16
16
17
17
export type UseMessageListParams = {
@@ -22,6 +22,10 @@ export type UseMessageListParams = {
22
22
23
23
export type GroupType = string ;
24
24
25
+ export type MessageGroupStyles = {
26
+ [ key : string ] : string [ ] ;
27
+ } ;
28
+
25
29
export const shouldIncludeMessageInList = (
26
30
message : LocalMessage ,
27
31
options : { deletedMessagesVisibilityType ?: DeletedMessagesVisibilityType ; userId ?: string } ,
@@ -51,7 +55,6 @@ export const useMessageList = (params: UseMessageListParams) => {
51
55
useMessagesContext ( ) ;
52
56
const { messages } = usePaginatedMessageListContext ( ) ;
53
57
const { threadMessages } = useThreadContext ( ) ;
54
-
55
58
const messageList = threadList ? threadMessages : messages ;
56
59
57
60
const dateSeparators = useMemo (
@@ -65,19 +68,22 @@ export const useMessageList = (params: UseMessageListParams) => {
65
68
[ deletedMessagesVisibilityType , hideDateSeparators , messageList , client . userID ] ,
66
69
) ;
67
70
71
+ const dateSeparatorsRef = useRef < DateSeparators > ( dateSeparators ) ;
72
+ dateSeparatorsRef . current = dateSeparators ;
73
+
68
74
const messageGroupStyles = useMemo (
69
75
( ) =>
70
76
getMessagesGroupStyles ( {
71
- dateSeparators,
77
+ dateSeparators : dateSeparatorsRef . current ,
72
78
hideDateSeparators,
73
79
maxTimeBetweenGroupedMessages,
74
80
messages : messageList ,
75
81
noGroupByUser,
76
82
userId : client . userID ,
77
83
} ) ,
78
84
[
85
+ dateSeparatorsRef ,
79
86
getMessagesGroupStyles ,
80
- dateSeparators ,
81
87
hideDateSeparators ,
82
88
maxTimeBetweenGroupedMessages ,
83
89
messageList ,
@@ -86,6 +92,9 @@ export const useMessageList = (params: UseMessageListParams) => {
86
92
] ,
87
93
) ;
88
94
95
+ const messageGroupStylesRef = useRef < MessageGroupStyles > ( messageGroupStyles ) ;
96
+ messageGroupStylesRef . current = messageGroupStyles ;
97
+
89
98
const processedMessageList = useMemo < LocalMessage [ ] > ( ( ) => {
90
99
const newMessageList = [ ] ;
91
100
for ( const message of messageList ) {
@@ -103,9 +112,9 @@ export const useMessageList = (params: UseMessageListParams) => {
103
112
104
113
return {
105
114
/** Date separators */
106
- dateSeparators ,
115
+ dateSeparatorsRef ,
107
116
/** Message group styles */
108
- messageGroupStyles ,
117
+ messageGroupStylesRef ,
109
118
/** Messages enriched with dates/readby/groups and also reversed in order */
110
119
processedMessageList,
111
120
/** Raw messages from the channel state */
0 commit comments