import { MessageContextValue, useMessageContext, } from '../../../contexts/messageContext/MessageContext'; import { MessageStatusTypes } from '../../../utils/utils'; export type UseMessageDataProps = Partial< Pick >; export const useMessageData = ({ channel: propChannel, groupStyles: propGroupStyles, isMyMessage: propIsMyMessage, message: propMessage, }: UseMessageDataProps) => { const { channel: contextChannel, groupStyles: contextGroupStyles, isMyMessage: contextIsMyMessage, message: contextMessage, } = useMessageContext(); const channel = propChannel || contextChannel; const groupStyles = propGroupStyles || contextGroupStyles; const isMyMessage = propIsMyMessage || contextIsMyMessage; const message = propMessage || contextMessage; const isVeryLastMessage = channel?.state.messages[channel?.state.messages.length - 1]?.id === message.id; const messageGroupedSingle = groupStyles.includes('single'); const messageGroupedBottom = groupStyles.includes('bottom'); const messageGroupedTop = groupStyles.includes('top'); const messageGroupedMiddle = groupStyles.includes('middle'); const messageGroupedSingleOrBottom = messageGroupedSingle || messageGroupedBottom; const isMessageErrorType = message.type === 'error' || message.status === MessageStatusTypes.FAILED; const isMessageTypeDeleted = message.type === 'deleted'; const isMessageReceivedOrErrorType = !isMyMessage || isMessageErrorType; const hasThreadReplies = !!message?.reply_count; return { hasThreadReplies, isMessageErrorType, isMessageReceivedOrErrorType, isMessageTypeDeleted, isVeryLastMessage, messageGroupedSingle, messageGroupedBottom, messageGroupedTop, messageGroupedSingleOrBottom, messageGroupedMiddle, }; };