Skip to content

Commit e3838d6

Browse files
authored
feat: add VirtualizedMessageListContext (#2619)
1 parent 963557c commit e3838d6

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

src/components/MessageList/VirtualizedMessageList.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ import {
6060
} from '../../context/ChannelStateContext';
6161
import { ChatContextValue, useChatContext } from '../../context/ChatContext';
6262
import { ComponentContextValue, useComponentContext } from '../../context/ComponentContext';
63+
import { VirtualizedMessageListContextProvider } from '../../context/VirtualizedMessageListContext';
6364

6465
import type { Channel, ChannelState as StreamChannelState, UserResponse } from 'stream-chat';
6566
import type { DefaultStreamChatGenerics, UnknownType } from '../../types/types';
@@ -439,7 +440,7 @@ const VirtualizedMessageListWithContext = <
439440
: 'virtualized-message-list-dialog-manager';
440441

441442
return (
442-
<>
443+
<VirtualizedMessageListContextProvider value={{ scrollToBottom }}>
443444
<MessageListMainPanel>
444445
<DialogManagerProvider id={dialogManagerId}>
445446
{!threadList && showUnreadMessagesNotification && (
@@ -524,7 +525,7 @@ const VirtualizedMessageListWithContext = <
524525
unreadCount={threadList ? undefined : channelUnreadUiState?.unread_messages}
525526
/>
526527
{giphyPreviewMessage && <GiphyPreviewMessage message={giphyPreviewMessage} />}
527-
</>
528+
</VirtualizedMessageListContextProvider>
528529
);
529530
};
530531

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import React, { createContext, PropsWithChildren, useContext } from 'react';
2+
3+
export type VirtualizedMessageListContextValue = {
4+
/** Function that scrolls the list to the bottom. */
5+
scrollToBottom: () => void;
6+
};
7+
8+
export const VirtualizedMessageListContext = createContext<
9+
VirtualizedMessageListContextValue | undefined
10+
>(undefined);
11+
12+
/**
13+
* Context provider for components rendered within the `VirtualizedMessageList`
14+
*/
15+
export const VirtualizedMessageListContextProvider = ({
16+
children,
17+
value,
18+
}: PropsWithChildren<{
19+
value: VirtualizedMessageListContextValue;
20+
}>) => (
21+
<VirtualizedMessageListContext.Provider value={value as VirtualizedMessageListContextValue}>
22+
{children}
23+
</VirtualizedMessageListContext.Provider>
24+
);
25+
26+
export const useVirtualizedMessageListContext = () =>
27+
useContext(VirtualizedMessageListContext) as VirtualizedMessageListContextValue;

0 commit comments

Comments
 (0)