mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-03 20:48:07 +00:00 
			
		
		
		
	fixes: #2767, #2773 Co-authored-by: Nithin David <1277421+nithindavid@users.noreply.github.com>
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import BaseActionCableConnector from '../../shared/helpers/BaseActionCableConnector';
 | 
						|
 | 
						|
class ActionCableConnector extends BaseActionCableConnector {
 | 
						|
  constructor(app, pubsubToken) {
 | 
						|
    super(app, pubsubToken);
 | 
						|
    this.events = {
 | 
						|
      'message.created': this.onMessageCreated,
 | 
						|
      'message.updated': this.onMessageUpdated,
 | 
						|
      'conversation.typing_on': this.onTypingOn,
 | 
						|
      'conversation.typing_off': this.onTypingOff,
 | 
						|
      'conversation.status_changed': this.onStatusChange,
 | 
						|
      'presence.update': this.onPresenceUpdate,
 | 
						|
      'contact.merged': this.onContactMerge,
 | 
						|
    };
 | 
						|
  }
 | 
						|
 | 
						|
  static refreshConnector = pubsubToken => {
 | 
						|
    if (!pubsubToken || window.chatwootPubsubToken === pubsubToken) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    window.chatwootPubsubToken = pubsubToken;
 | 
						|
    window.actionCable.disconnect();
 | 
						|
    window.actionCable = new ActionCableConnector(
 | 
						|
      window.WOOT_WIDGET,
 | 
						|
      window.chatwootPubsubToken
 | 
						|
    );
 | 
						|
  };
 | 
						|
 | 
						|
  onStatusChange = data => {
 | 
						|
    this.app.$store.dispatch('conversationAttributes/update', data);
 | 
						|
  };
 | 
						|
 | 
						|
  onMessageCreated = data => {
 | 
						|
    this.app.$store
 | 
						|
      .dispatch('conversation/addOrUpdateMessage', data)
 | 
						|
      .then(() => {
 | 
						|
        window.bus.$emit('on-agent-message-recieved');
 | 
						|
      });
 | 
						|
  };
 | 
						|
 | 
						|
  onMessageUpdated = data => {
 | 
						|
    this.app.$store.dispatch('conversation/addOrUpdateMessage', data);
 | 
						|
  };
 | 
						|
 | 
						|
  onPresenceUpdate = data => {
 | 
						|
    this.app.$store.dispatch('agent/updatePresence', data.users);
 | 
						|
  };
 | 
						|
 | 
						|
  onContactMerge = data => {
 | 
						|
    const { pubsub_token: pubsubToken } = data;
 | 
						|
    ActionCableConnector.refreshConnector(pubsubToken);
 | 
						|
  };
 | 
						|
 | 
						|
  onTypingOn = () => {
 | 
						|
    this.clearTimer();
 | 
						|
    this.app.$store.dispatch('conversation/toggleAgentTyping', {
 | 
						|
      status: 'on',
 | 
						|
    });
 | 
						|
    this.initTimer();
 | 
						|
  };
 | 
						|
 | 
						|
  onTypingOff = () => {
 | 
						|
    this.clearTimer();
 | 
						|
    this.app.$store.dispatch('conversation/toggleAgentTyping', {
 | 
						|
      status: 'off',
 | 
						|
    });
 | 
						|
  };
 | 
						|
 | 
						|
  clearTimer = () => {
 | 
						|
    if (this.CancelTyping) {
 | 
						|
      clearTimeout(this.CancelTyping);
 | 
						|
      this.CancelTyping = null;
 | 
						|
    }
 | 
						|
  };
 | 
						|
 | 
						|
  initTimer = () => {
 | 
						|
    // Turn off typing automatically after 30 seconds
 | 
						|
    this.CancelTyping = setTimeout(() => {
 | 
						|
      this.onTypingOff();
 | 
						|
    }, 30000);
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
export const refreshActionCableConnector =
 | 
						|
  ActionCableConnector.refreshConnector;
 | 
						|
 | 
						|
export default ActionCableConnector;
 |