From 9dd7ebe7e5ea566ce8e965af74e105fe11c0a8e0 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 27 Aug 2020 11:21:12 -0300 Subject: [PATCH] Emit inquiry subscribe --- app/ee/omnichannel/lib/index.js | 26 ++++++++++++++++++++++++++ app/ee/omnichannel/sagas/inquiry.js | 3 ++- app/lib/rocketchat.js | 16 ++-------------- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/app/ee/omnichannel/lib/index.js b/app/ee/omnichannel/lib/index.js index 475a443b4..7492675eb 100644 --- a/app/ee/omnichannel/lib/index.js +++ b/app/ee/omnichannel/lib/index.js @@ -1,4 +1,6 @@ +import subscribeInquiry from './subscriptions/inquiry'; import RocketChat from '../../../lib/rocketchat'; +import EventEmitter from '../../../utils/events'; export const isOmnichannelStatusAvailable = user => user?.statusLivechat === 'available'; @@ -12,3 +14,27 @@ export const getInquiriesQueued = () => RocketChat.sdk.get('livechat/inquiries.q // and will be removed by the queue stream // RC 2.4.0 export const takeInquiry = inquiryId => RocketChat.methodCallWrapper('livechat:takeInquiry', inquiryId); + +class Omnichannel { + constructor() { + this.inquirySub = null; + EventEmitter.addEventListener('INQUIRY_SUBSCRIBE', this.subscribeInquiry); + EventEmitter.addEventListener('INQUIRY_UNSUBSCRIBE', this.unsubscribeInquiry); + } + + subscribeInquiry = async() => { + console.log('[RCRN] Subscribing to inquiry'); + this.inquirySub = await subscribeInquiry(); + } + + unsubscribeInquiry = () => { + if (this.inquirySub) { + console.log('[RCRN] Unsubscribing from inquiry'); + this.inquirySub.stop(); + this.inquirySub = null; + } + } +} + +// eslint-disable-next-line no-unused-vars +const omnichannel = new Omnichannel(); diff --git a/app/ee/omnichannel/sagas/inquiry.js b/app/ee/omnichannel/sagas/inquiry.js index 1647e57b5..6140e2f65 100644 --- a/app/ee/omnichannel/sagas/inquiry.js +++ b/app/ee/omnichannel/sagas/inquiry.js @@ -2,6 +2,7 @@ import { put, takeLatest, select } from 'redux-saga/effects'; import * as types from '../../../actions/actionsTypes'; import RocketChat from '../../../lib/rocketchat'; +import EventEmitter from '../../../utils/events'; import { inquirySuccess, inquiryFailure, inquirySetEnabled } from '../actions/inquiry'; import { isOmnichannelStatusAvailable, getInquiriesQueued } from '../lib'; @@ -19,7 +20,7 @@ const handleRequest = function* handleRequest() { const { inquiries } = result; // subscribe to inquiry queue changes - RocketChat.subscribeInquiry(); + EventEmitter.emit('INQUIRY_SUBSCRIBE'); // put request result on redux state yield put(inquirySuccess(inquiries)); diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js index 8e8f6bd47..c48a44c15 100644 --- a/app/lib/rocketchat.js +++ b/app/lib/rocketchat.js @@ -19,7 +19,6 @@ import { } from '../actions/share'; import subscribeRooms from './methods/subscriptions/rooms'; -import subscribeInquiry from '../ee/omnichannel/lib/subscriptions/inquiry'; import getUsersPresence, { getUserPresence, subscribeUsersPresence } from './methods/getUsersPresence'; import protectedFunction from './methods/helpers/protectedFunction'; @@ -54,6 +53,7 @@ import { twoFactor } from '../utils/twoFactor'; import { selectServerFailure } from '../actions/server'; import { useSsl } from '../utils/url'; import UserPreferences from './userPreferences'; +import EventEmitter from '../utils/events'; const TOKEN_KEY = 'reactnativemeteor_usertoken'; const CURRENT_SERVER = 'currentServer'; @@ -78,15 +78,6 @@ const RocketChat = { } } }, - async subscribeInquiry() { - if (!this.inquirySub) { - try { - this.inquirySub = await subscribeInquiry.call(this); - } catch (e) { - log(e); - } - } - }, canOpenRoom, createChannel({ name, users, type, readOnly, broadcast @@ -211,10 +202,7 @@ const RocketChat = { this.roomsSub = null; } - if (this.inquirySub) { - this.inquirySub.stop(); - this.inquirySub = null; - } + EventEmitter.emit('INQUIRY_UNSUBSCRIBE'); if (this.sdk) { this.sdk.disconnect();