stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
95 lines (89 loc) • 2.21 kB
text/typescript
import { useMemo } from 'react';
import type { ChannelContextValue } from '../../../contexts/channelContext/ChannelContext';
export const useCreateChannelContext = ({
channel,
channelUnreadStateStore,
disabled,
enableMessageGroupingByUser,
enforceUniqueReaction,
error,
hideDateSeparators,
hideStickyDateHeader,
highlightedMessageId,
isChannelActive,
loadChannelAroundMessage,
loadChannelAtFirstUnreadMessage,
loading,
markRead,
maxTimeBetweenGroupedMessages,
maximumMessageLimit,
members,
read,
reloadChannel,
scrollToFirstUnreadThreshold,
setChannelUnreadState,
setTargetedMessage,
hasPendingInitialTargetLoad,
targetedMessage,
threadList,
uploadAbortControllerRef,
watcherCount,
watchers,
}: ChannelContextValue) => {
const channelId = channel?.id;
const membersLength = Object.keys(members).length;
const readUsers = Object.values(read);
const readUsersLength = readUsers.length;
const readUsersLastReads = readUsers
.map(({ last_read }) => last_read?.toISOString() ?? '')
.join();
const channelContext: ChannelContextValue = useMemo(
() => ({
channel,
channelUnreadStateStore,
disabled,
enableMessageGroupingByUser,
enforceUniqueReaction,
error,
hideDateSeparators,
hideStickyDateHeader,
highlightedMessageId,
isChannelActive,
loadChannelAroundMessage,
loadChannelAtFirstUnreadMessage,
loading,
markRead,
maximumMessageLimit,
maxTimeBetweenGroupedMessages,
members,
read,
reloadChannel,
scrollToFirstUnreadThreshold,
setChannelUnreadState,
setTargetedMessage,
hasPendingInitialTargetLoad,
targetedMessage,
threadList,
uploadAbortControllerRef,
watcherCount,
watchers,
}),
// eslint-disable-next-line react-hooks/exhaustive-deps
[
channelId,
disabled,
error,
isChannelActive,
highlightedMessageId,
loading,
membersLength,
readUsersLength,
readUsersLastReads,
targetedMessage,
threadList,
watcherCount,
maximumMessageLimit,
],
);
return channelContext;
};