UNPKG

stream-chat-react

Version:

React components to create chat conversations or livestream style chat

48 lines (47 loc) 2.26 kB
import React, { useMemo } from 'react'; import { ChannelSearchSource, MessageSearchSource, SearchController, UserSearchSource, } from 'stream-chat'; import { useChat } from './hooks/useChat'; import { useCreateChatContext } from './hooks/useCreateChatContext'; import { useChannelsQueryState } from './hooks/useChannelsQueryState'; import { ChatProvider } from '../../context/ChatContext'; import { TranslationProvider } from '../../context/TranslationContext'; import { ModalDialogManagerProvider } from '../../context'; /** * Wrapper component for a StreamChat application. Chat needs to be placed around any other chat components * as it provides the ChatContext. */ export const Chat = (props) => { const { children, client, customClasses, defaultLanguage, i18nInstance, initialNavOpen = true, isMessageAIGenerated, searchController: customChannelSearchController, theme = 'messaging light', useImageFlagEmojisOnWindows = false, } = props; const { channel, closeMobileNav, getAppSettings, latestMessageDatesByChannels, mutes, navOpen, openMobileNav, setActiveChannel, translators, } = useChat({ client, defaultLanguage, i18nInstance, initialNavOpen }); const channelsQueryState = useChannelsQueryState(); const searchController = useMemo(() => customChannelSearchController ?? new SearchController({ sources: [ new ChannelSearchSource(client), new UserSearchSource(client), new MessageSearchSource(client), ], }), [client, customChannelSearchController]); const chatContextValue = useCreateChatContext({ channel, channelsQueryState, client, closeMobileNav, customClasses, getAppSettings, isMessageAIGenerated, latestMessageDatesByChannels, mutes, navOpen, openMobileNav, searchController, setActiveChannel, theme, useImageFlagEmojisOnWindows, }); if (!translators.t) return null; return (React.createElement(ChatProvider, { value: chatContextValue }, React.createElement(TranslationProvider, { value: translators }, React.createElement(ModalDialogManagerProvider, null, children)))); };