import React, { useEffect, useRef, useState } from 'react' import { useHostAvatars } from '../../../../contexts/HostAvatarsContext' import { StepType, TextStep } from '../../../../models' import { TypingContent } from './TypingContent' type HostMessageBubbleProps = { step: TextStep onTransitionEnd: () => void } export const showAnimationDuration = 400 export const mediaLoadingFallbackTimeout = 5000 export const HostMessageBubble = ({ step, onTransitionEnd, }: HostMessageBubbleProps) => { const { updateLastAvatarOffset } = useHostAvatars() const messageContainer = useRef(null) const [isTyping, setIsTyping] = useState(true) useEffect(() => { const wordCount = step.content.plainText.match(/(\w+)/g)?.length ?? 0 const typedWordsPerMinute = 250 const typingTimeout = (wordCount / typedWordsPerMinute) * 60000 sendAvatarOffset() setTimeout(() => { onTypingEnd() }, typingTimeout) }, []) const onTypingEnd = () => { setIsTyping(false) setTimeout(() => { sendAvatarOffset() onTransitionEnd() }, showAnimationDuration) } const sendAvatarOffset = () => { if (!messageContainer.current) return const containerDimensions = messageContainer.current.getBoundingClientRect() updateLastAvatarOffset(containerDimensions.top + containerDimensions.height) } return (
{isTyping ? : <>}
{step.type === StepType.TEXT && (

)}

) }