componentDidUpdate()

in src/components/Widget/components/Conversation/components/Messages/index.js [86:115]


  componentDidUpdate(prevProps, prevState, snapshot) {
    const { messages } = this.props;
    const hasNewMessages = prevProps.messages.size < messages.size;

    // Check if the new message is from user (client) - if so, always scroll to bottom
    let isUserMessage = false;
    if (hasNewMessages) {
      const lastMessage = messages.last();
      isUserMessage = lastMessage && lastMessage.get('sender') === 'client';
    }

    // Always auto-scroll if user sent a message
    if (isUserMessage) {
      scrollToBottom();
      this.setState({ hasUnreadMessages: false });
      return;
    }

    // Only auto-scroll if user was at the bottom before the update
    if (this.wasAtBottom) {
      scrollToBottom();
      // Clear unread indicator if we auto-scrolled
      if (this.state.hasUnreadMessages) {
        this.setState({ hasUnreadMessages: false });
      }
    } else if (hasNewMessages) {
      // User is not at bottom and new messages arrived - show unread indicator
      this.setState({ hasUnreadMessages: true });
    }
  }