Skip to content

Commit 59b0dd2

Browse files
Enigma-I-amNwagba Okechukwu
andauthored
fix: handle undefined updated_at on messages with util function (#1337)
* fix: handling the case of undefined updated_at on message and threadMessage with util function * fix: fix linter errors * fix: update function name to be more descriptive * fix: function rename * doc: add documentation for compareMessages and mapMessage functions * fix: give more descriptive variable names and updated inline doc * fix: resolve typographical error Co-authored-by: Nwagba Okechukwu <[email protected]>
1 parent 72d63b8 commit 59b0dd2

File tree

3 files changed

+36
-18
lines changed

3 files changed

+36
-18
lines changed

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

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { useMemo } from 'react';
22

33
import type { PaginatedMessageListContextValue } from '../../../contexts/paginatedMessageListContext/PaginatedMessageListContext';
44
import type { DefaultStreamChatGenerics } from '../../../types/types';
5+
import { reduceMessagesToString } from '../../../utils/utils';
56

67
export const useCreatePaginatedMessageListContext = <
78
StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
@@ -18,14 +19,7 @@ export const useCreatePaginatedMessageListContext = <
1819
}: PaginatedMessageListContextValue<StreamChatGenerics> & {
1920
channelId?: string;
2021
}) => {
21-
const messagesUpdated = messages
22-
.map(
23-
({ deleted_at, latest_reactions, reply_count, status, updated_at }) =>
24-
`${deleted_at}${
25-
latest_reactions ? latest_reactions.map(({ type }) => type).join() : ''
26-
}${reply_count}${status}${updated_at?.toISOString?.() || updated_at}`,
27-
)
28-
.join();
22+
const messagesStr = reduceMessagesToString(messages);
2923

3024
const paginatedMessagesContext: PaginatedMessageListContextValue<StreamChatGenerics> = useMemo(
3125
() => ({
@@ -38,7 +32,7 @@ export const useCreatePaginatedMessageListContext = <
3832
setLoadingMore,
3933
setLoadingMoreRecent,
4034
}),
41-
[channelId, hasMore, loadingMoreRecent, loadingMore, messagesUpdated],
35+
[channelId, hasMore, loadingMoreRecent, loadingMore, messagesStr],
4236
);
4337

4438
return paginatedMessagesContext;

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

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { useMemo } from 'react';
22

33
import type { ThreadContextValue } from '../../../contexts/threadContext/ThreadContext';
44
import type { DefaultStreamChatGenerics } from '../../../types/types';
5+
import { reduceMessagesToString } from '../../../utils/utils';
56

67
export const useCreateThreadContext = <
78
StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
@@ -19,14 +20,7 @@ export const useCreateThreadContext = <
1920
}: ThreadContextValue<StreamChatGenerics>) => {
2021
const threadId = thread?.id;
2122
const threadReplyCount = thread?.reply_count;
22-
const threadMessagesUpdated = threadMessages
23-
.map(
24-
({ deleted_at, latest_reactions, reply_count, status, updated_at }) =>
25-
`${deleted_at}${
26-
latest_reactions ? latest_reactions.map(({ type }) => type).join() : ''
27-
}${reply_count}${status}${updated_at.toISOString()}`,
28-
)
29-
.join();
23+
const threadMessagesStr = reduceMessagesToString(threadMessages);
3024

3125
const threadContext: ThreadContextValue<StreamChatGenerics> = useMemo(
3226
() => ({
@@ -46,7 +40,7 @@ export const useCreateThreadContext = <
4640
threadHasMore,
4741
threadId,
4842
threadLoadingMore,
49-
threadMessagesUpdated,
43+
threadMessagesStr,
5044
threadReplyCount,
5145
],
5246
);

package/src/utils/utils.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import type {
88
ChannelMemberAPIResponse,
99
ChannelMemberResponse,
1010
CommandResponse,
11+
FormatMessageResponse,
1112
StreamChat,
1213
UserResponse,
1314
} from 'stream-chat';
@@ -534,3 +535,32 @@ export const emojiRegex =
534535

535536
export const urlRegex =
536537
/(?:\s|^)((?:https?:\/\/)?(?:[a-z0-9-]+(?:\.[a-z0-9-]+)+)(?::[0-9]+)?(?:\/(?:[^\s]+)?)?)/g;
538+
539+
/**
540+
* Stringifies a message object
541+
* @param {FormatMessageResponse<StreamChatGenerics>} message - the message object to be stringified
542+
* @returns {string} The stringified message
543+
*/
544+
const stringifyMessage = <
545+
StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
546+
>({
547+
deleted_at,
548+
latest_reactions,
549+
reply_count,
550+
status,
551+
updated_at,
552+
}: FormatMessageResponse<StreamChatGenerics>): string =>
553+
`${deleted_at}${
554+
latest_reactions ? latest_reactions.map(({ type }) => type).join() : ''
555+
}${reply_count}${status}${updated_at?.toISOString?.() || updated_at}`;
556+
557+
/**
558+
* Reduces a list of messages to strings that are used in useEffect & useMemo
559+
* @param {messages} messages - the array of messages to be compared
560+
* @returns {string} The mapped message string
561+
*/
562+
export const reduceMessagesToString = <
563+
StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
564+
>(
565+
messages: FormatMessageResponse<StreamChatGenerics>[],
566+
): string => messages.map(stringifyMessage).join();

0 commit comments

Comments
 (0)