From 8be9ee2ce3b7559dc018bce4557d7e2fa9fe413e Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Mon, 28 May 2018 13:49:57 -0300 Subject: [PATCH 01/12] Initial implementation of new Livechat iFrame API's. --- package-lock.json | 9 ++-- .../.app/client/lib/hooks.js | 18 +++++++- .../.app/imports/client/visitor.js | 42 ++++++++++++++++++- .../assets/rocket-livechat.js | 20 +++++++++ .../server/methods/loginByToken.js | 14 ++++++- 5 files changed, 95 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2a971ee02b58..4e58eae320cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Rocket.Chat", - "version": "0.64.0-develop", + "version": "0.65.0-develop", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -4683,6 +4683,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "optional": true, "requires": { "prr": "1.0.1" } @@ -10591,7 +10592,8 @@ "natives": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.3.tgz", - "integrity": "sha512-BZGSYV4YOLxzoTK73l0/s/0sH9l8SHs2ocReMH1f8JYSh5FUWu4ZrKCpJdRkWXV6HFR/pZDz7bwWOVAY07q77g==" + "integrity": "sha512-BZGSYV4YOLxzoTK73l0/s/0sH9l8SHs2ocReMH1f8JYSh5FUWu4ZrKCpJdRkWXV6HFR/pZDz7bwWOVAY07q77g==", + "optional": true }, "natural-compare": { "version": "1.4.0", @@ -12342,7 +12344,8 @@ "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "optional": true }, "pseudomap": { "version": "1.0.2", diff --git a/packages/rocketchat-livechat/.app/client/lib/hooks.js b/packages/rocketchat-livechat/.app/client/lib/hooks.js index 3a525c34cf5d..fe5409d39ca2 100644 --- a/packages/rocketchat-livechat/.app/client/lib/hooks.js +++ b/packages/rocketchat-livechat/.app/client/lib/hooks.js @@ -37,7 +37,23 @@ const api = { widgetClosed() { Livechat.setWidgetClosed(); - } + }, + + setGuestToken(token) { + visitor.setToken(token); + }, + + setGuestName(name) { + + }, + + setGuestEmail(email) { + + }, + + registerGuest(guest) { + //aplicar visitor.setId e visitor.setData apos o register + } }; window.addEventListener('message', function(msg) { diff --git a/packages/rocketchat-livechat/.app/imports/client/visitor.js b/packages/rocketchat-livechat/.app/imports/client/visitor.js index bb0613cb92e0..782aaa7a0edb 100644 --- a/packages/rocketchat-livechat/.app/imports/client/visitor.js +++ b/packages/rocketchat-livechat/.app/imports/client/visitor.js @@ -1,4 +1,4 @@ -/* globals Commands */ +/* globals Commands, Livechat */ const msgStream = new Meteor.Streamer('room-messages'); export default { @@ -18,6 +18,16 @@ export default { this.token.set(localStorage.getItem('visitorToken')); }, + reset() { + this.id.set(null); + this.token.set(null); + this.room.set(null); + this.data.set(null); + this.roomToSubscribe.set(null); + this.roomSubscribed = null; + this.connected = false; + }, + getId() { return this.id.get(); }, @@ -38,6 +48,34 @@ export default { return this.token.get(); }, + setToken(token) { + if ((!token) || (token == this.token.get())) { + return; + } + + this.reset(); + Livechat.room = null; + + localStorage.setItem('visitorToken', token); + this.token.set(token); + + Meteor.call('livechat:loginByToken', token, (err, result) => { + console.log(result); + + if (!result) { + return; + } + + if (result._id) { + this.setId(result._id); + } + + if (result.roomId) { + Livechat.room = roomId; + } + }); + }, + setRoom(rid) { this.room.set(rid); }, @@ -62,7 +100,7 @@ export default { } this.roomSubscribed = roomId; - + console.log(roomId); msgStream.on(roomId, { token: this.getToken() }, (msg) => { if (msg.t === 'command') { Commands[msg.msg] && Commands[msg.msg](); diff --git a/packages/rocketchat-livechat/assets/rocket-livechat.js b/packages/rocketchat-livechat/assets/rocket-livechat.js index d81d0ae304c6..bc2f47234143 100644 --- a/packages/rocketchat-livechat/assets/rocket-livechat.js +++ b/packages/rocketchat-livechat/assets/rocket-livechat.js @@ -624,6 +624,22 @@ callHook('clearDepartment'); }; + var setGuestToken = function(token) { + callHook('setGuestToken', token); + }; + + var setGuestName = function(name) { + callHook('setGuestName', name); + }; + + var setGuestEmail = function(email) { + callHook('setGuestEmail', email); + }; + + var registerGuest = function(guest) { + callHook('registerGuest', guest); + }; + var currentPage = { href: null, title: null @@ -722,6 +738,10 @@ setTheme: setTheme, setDepartment: setDepartment, clearDepartment: clearDepartment, + setGuestToken: setGuestToken, + setGuestName: setGuestName, + setGuestEmail: setGuestEmail, + registerGuest: registerGuest, // callbacks onChatMaximized: function(fn) { registerCallback('chat-maximized', fn); }, diff --git a/packages/rocketchat-livechat/server/methods/loginByToken.js b/packages/rocketchat-livechat/server/methods/loginByToken.js index 577bceb6c9f7..61418330f6ad 100644 --- a/packages/rocketchat-livechat/server/methods/loginByToken.js +++ b/packages/rocketchat-livechat/server/methods/loginByToken.js @@ -2,14 +2,24 @@ import LivechatVisitors from '../models/LivechatVisitors'; Meteor.methods({ 'livechat:loginByToken'(token) { - const user = LivechatVisitors.getVisitorByToken(token, { fields: { _id: 1 } }); + const visitor = LivechatVisitors.getVisitorByToken(token, { fields: { _id: 1 } }); if (!user) { return; } + let roomId; + if (visitor) { + const rooms = RocketChat.models.Rooms.findOpenByVisitorToken(visitor.token).fetch(); + + if (rooms && rooms.length > 0) { + roomId = rooms[0]._id; + } + } + return { - _id: user._id + _id: user._id, + roomId }; } }); From 46a3c811ea1ffd8e93cba0076aa38ce0a5c8e1ae Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Mon, 28 May 2018 20:31:10 -0300 Subject: [PATCH 02/12] New Livechat iFrame API's added. --- .../.app/client/lib/_livechat.js | 15 ++ .../.app/client/lib/chatMessages.js | 8 ++ .../.app/client/lib/hooks.js | 15 +- .../.app/client/views/livechatWindow.js | 134 ++++++++++-------- .../.app/client/views/messages.js | 8 +- .../.app/client/views/register.js | 4 +- .../.app/imports/client/visitor.js | 54 +++++-- .../assets/rocket-livechat.js | 8 +- .../server/methods/loginByToken.js | 14 +- 9 files changed, 164 insertions(+), 96 deletions(-) diff --git a/packages/rocketchat-livechat/.app/client/lib/_livechat.js b/packages/rocketchat-livechat/.app/client/lib/_livechat.js index 541af4c2a826..13aae330ea16 100644 --- a/packages/rocketchat-livechat/.app/client/lib/_livechat.js +++ b/packages/rocketchat-livechat/.app/client/lib/_livechat.js @@ -34,6 +34,9 @@ this.Livechat = new (class Livechat { this.stream = new Meteor.Streamer('livechat-room'); + this._guestName = new ReactiveVar(); + this._guestEmail = new ReactiveVar(); + Tracker.autorun(() => { if (this._room.get() && visitor.getId()) { RoomHistoryManager.getMoreIfIsEmpty(this._room.get()); @@ -121,6 +124,12 @@ this.Livechat = new (class Livechat { get agent() { return this._agent.get(); } + get guestName() { + return this._guestName.get(); + } + get guestEmail() { + return this._guestEmail.get(); + } set online(value) { this._online.set(value); @@ -198,6 +207,12 @@ this.Livechat = new (class Livechat { set agent(agentData) { this._agent.set(agentData); } + set guestName(name) { + return this._guestName.set(name); + } + set guestEmail(email) { + return this._guestEmail.set(email); + } ready() { this._ready.set(true); diff --git a/packages/rocketchat-livechat/.app/client/lib/chatMessages.js b/packages/rocketchat-livechat/.app/client/lib/chatMessages.js index d2619ac69c62..f08bbdc01c5e 100644 --- a/packages/rocketchat-livechat/.app/client/lib/chatMessages.js +++ b/packages/rocketchat-livechat/.app/client/lib/chatMessages.js @@ -148,6 +148,14 @@ this.ChatMessages = class ChatMessages { guest.department = Livechat.department; } + if (Livechat.guestName) { + guest.name = Livechat.guestName; + } + + if (Livechat.guestEmail) { + guest.email = Livechat.guestEmail; + } + Meteor.call('livechat:registerGuest', guest, (error, result) => { if (error) { return showError(error.reason); diff --git a/packages/rocketchat-livechat/.app/client/lib/hooks.js b/packages/rocketchat-livechat/.app/client/lib/hooks.js index fe5409d39ca2..28656d66b797 100644 --- a/packages/rocketchat-livechat/.app/client/lib/hooks.js +++ b/packages/rocketchat-livechat/.app/client/lib/hooks.js @@ -44,15 +44,22 @@ const api = { }, setGuestName(name) { - + visitor.setName(name); }, setGuestEmail(email) { - + visitor.setEmail(email); }, - registerGuest(guest) { - //aplicar visitor.setId e visitor.setData apos o register + registerGuest(data) { + if (!((typeof data === 'object') && (data.token))) { + return; + } + Meteor.call('livechat:registerGuest', data, function(error, result) { + if (!error) { + visitor.setToken(data.token); + } + }); } }; diff --git a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js index 414bd2cdf9a1..43adf2dc2e6f 100644 --- a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js +++ b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js @@ -74,7 +74,7 @@ Template.livechatWindow.events({ Template.livechatWindow.onCreated(function() { Session.set({sound: true}); - + TAPi18n.conf.i18n_files_route = Meteor._relativeToSiteRootUrl('/tap-i18n'); const availableLanguages = TAPi18n.getLanguages(); @@ -90,69 +90,79 @@ Template.livechatWindow.onCreated(function() { return lng; }; - // get all needed live chat info for the user - Meteor.call('livechat:getInitialData', visitor.getToken(), (err, result) => { - if (err) { - console.error(err); - } else { - if (!result.enabled) { - Triggers.setDisabled(); - return parentCall('removeWidget'); - } - - if (!result.online) { - Triggers.setDisabled(); - Livechat.title = result.offlineTitle; - Livechat.offlineColor = result.offlineColor; - Livechat.offlineMessage = result.offlineMessage; - Livechat.displayOfflineForm = result.displayOfflineForm; - Livechat.offlineUnavailableMessage = result.offlineUnavailableMessage; - Livechat.offlineSuccessMessage = result.offlineSuccessMessage; - Livechat.online = false; + this.autorun(() => { + // get all needed live chat info for the user + Meteor.call('livechat:getInitialData', visitor.getToken(), (err, result) => { + if (err) { + console.error(err); } else { - Livechat.title = result.title; - Livechat.onlineColor = result.color; - Livechat.online = true; - Livechat.transcript = result.transcript; - Livechat.transcriptMessage = result.transcriptMessage; - Livechat.conversationFinishedMessage = result.conversationFinishedMessage; + if (!result.enabled) { + Triggers.setDisabled(); + return parentCall('removeWidget'); + } + + if (!result.online) { + Triggers.setDisabled(); + Livechat.title = result.offlineTitle; + Livechat.offlineColor = result.offlineColor; + Livechat.offlineMessage = result.offlineMessage; + Livechat.displayOfflineForm = result.displayOfflineForm; + Livechat.offlineUnavailableMessage = result.offlineUnavailableMessage; + Livechat.offlineSuccessMessage = result.offlineSuccessMessage; + Livechat.online = false; + } else { + Livechat.title = result.title; + Livechat.onlineColor = result.color; + Livechat.online = true; + Livechat.transcript = result.transcript; + Livechat.transcriptMessage = result.transcriptMessage; + Livechat.conversationFinishedMessage = result.conversationFinishedMessage; + } + Livechat.videoCall = result.videoCall; + Livechat.registrationForm = result.registrationForm; + Livechat.nameFieldRegistrationForm = result.nameFieldRegistrationForm; + Livechat.emailFieldRegistrationForm = result.emailFieldRegistrationForm; + if (result.room) { + Livechat.room = result.room._id; + + visitor.setConnected(); + } + + if (result.visitor) { + visitor.setData(result.visitor); + + if (visitor.name) { + Livechat.guestName = visitor.name; + } + + if (visitor.visitorEmails && visitor.visitorEmails.length > 0) { + Livechat.guestEmail = visitor.visitorEmails[0].address; + } + } + + if (result.agentData) { + Livechat.agent = result.agentData; + } + + let language = result.language || defaultAppLanguage(); + + if (!availableLanguages[language]) { + language = language.split('-').shift(); + } + + TAPi18n.setLanguage(language); + + Triggers.setTriggers(result.triggers); + Triggers.init(); + + result.departments.forEach((department) => { + Department.insert(department); + }); + Livechat.allowSwitchingDepartments = result.allowSwitchingDepartments; + + Livechat.ready(); } - Livechat.videoCall = result.videoCall; - Livechat.registrationForm = result.registrationForm; - Livechat.nameFieldRegistrationForm = result.nameFieldRegistrationForm; - Livechat.emailFieldRegistrationForm = result.emailFieldRegistrationForm; - if (result.room) { - Livechat.room = result.room._id; - - visitor.setConnected(); - } - - if (result.visitor) { - visitor.setData(result.visitor); - } - - if (result.agentData) { - Livechat.agent = result.agentData; - } - - let language = result.language || defaultAppLanguage(); - - if (!availableLanguages[language]) { - language = language.split('-').shift(); - } - - TAPi18n.setLanguage(language); - - Triggers.setTriggers(result.triggers); - Triggers.init(); - - result.departments.forEach((department) => { - Department.insert(department); - }); - Livechat.allowSwitchingDepartments = result.allowSwitchingDepartments; - - Livechat.ready(); - } + }); }); $(window).on('focus', () => { diff --git a/packages/rocketchat-livechat/.app/client/views/messages.js b/packages/rocketchat-livechat/.app/client/views/messages.js index f27e7d00f2d3..9adcf5ef71b8 100644 --- a/packages/rocketchat-livechat/.app/client/views/messages.js +++ b/packages/rocketchat-livechat/.app/client/views/messages.js @@ -62,7 +62,7 @@ Template.messages.helpers({ }; }, agentData() { - const agent = Livechat.agent; + const agent = Template.instance().agentData.get(); if (!agent) { return null; } @@ -137,6 +137,12 @@ Template.messages.onCreated(function() { this.atBottom = true; this.showOptions = new ReactiveVar(false); + this.agentData = new ReactiveVar(null); + + this.autorun(() => { + const agentData = Livechat.agent; + this.agentData.set(agentData); + }); this.updateMessageInputHeight = function(input) { // Inital height is 28. If the scrollHeight is greater than that( we have more text than area ), diff --git a/packages/rocketchat-livechat/.app/client/views/register.js b/packages/rocketchat-livechat/.app/client/views/register.js index 85ea78181175..8b6c2ec65415 100644 --- a/packages/rocketchat-livechat/.app/client/views/register.js +++ b/packages/rocketchat-livechat/.app/client/views/register.js @@ -43,8 +43,8 @@ Template.register.events({ const form = e.currentTarget; const fields = []; - let name; - let email; + let name = Livechat.guestName; + let email = Livechat.guestEmail; if (Livechat.nameFieldRegistrationForm) { fields.push('name'); diff --git a/packages/rocketchat-livechat/.app/imports/client/visitor.js b/packages/rocketchat-livechat/.app/imports/client/visitor.js index 782aaa7a0edb..d51b979610bd 100644 --- a/packages/rocketchat-livechat/.app/imports/client/visitor.js +++ b/packages/rocketchat-livechat/.app/imports/client/visitor.js @@ -25,7 +25,14 @@ export default { this.data.set(null); this.roomToSubscribe.set(null); this.roomSubscribed = null; - this.connected = false; + + Livechat.room = null; + Livechat.department = null; + Livechat.agent = null; + Livechat.guestName = null; + Livechat.guestEmail = null; + + msgStream.unsubscribe('room-messages'); }, getId() { @@ -52,15 +59,13 @@ export default { if ((!token) || (token == this.token.get())) { return; } - + this.reset(); - Livechat.room = null; - + localStorage.setItem('visitorToken', token); this.token.set(token); - + Meteor.call('livechat:loginByToken', token, (err, result) => { - console.log(result); if (!result) { return; @@ -68,14 +73,41 @@ export default { if (result._id) { this.setId(result._id); - } - - if (result.roomId) { - Livechat.room = roomId; + return result._id; } }); }, + setName(name) { + Livechat.guestName = name; + + if (!this.getId()) { + return; + } + + const data = { + token: this.getToken(), + name + }; + + Meteor.call('livechat:registerGuest', data); + }, + + setEmail(email) { + Livechat.guestEmail = email; + + if (!this.getId()) { + return; + } + + const data = { + token: this.getToken(), + email + }; + + Meteor.call('livechat:registerGuest', data); + }, + setRoom(rid) { this.room.set(rid); }, @@ -100,7 +132,7 @@ export default { } this.roomSubscribed = roomId; - console.log(roomId); + msgStream.on(roomId, { token: this.getToken() }, (msg) => { if (msg.t === 'command') { Commands[msg.msg] && Commands[msg.msg](); diff --git a/packages/rocketchat-livechat/assets/rocket-livechat.js b/packages/rocketchat-livechat/assets/rocket-livechat.js index bc2f47234143..fb4c58b3ed25 100644 --- a/packages/rocketchat-livechat/assets/rocket-livechat.js +++ b/packages/rocketchat-livechat/assets/rocket-livechat.js @@ -620,10 +620,6 @@ callHook('setDepartment', department); }; - var clearDepartment = function() { - callHook('clearDepartment'); - }; - var setGuestToken = function(token) { callHook('setGuestToken', token); }; @@ -640,6 +636,10 @@ callHook('registerGuest', guest); }; + var clearDepartment = function() { + callHook('clearDepartment'); + }; + var currentPage = { href: null, title: null diff --git a/packages/rocketchat-livechat/server/methods/loginByToken.js b/packages/rocketchat-livechat/server/methods/loginByToken.js index 61418330f6ad..0bc1c3f06f37 100644 --- a/packages/rocketchat-livechat/server/methods/loginByToken.js +++ b/packages/rocketchat-livechat/server/methods/loginByToken.js @@ -4,22 +4,12 @@ Meteor.methods({ 'livechat:loginByToken'(token) { const visitor = LivechatVisitors.getVisitorByToken(token, { fields: { _id: 1 } }); - if (!user) { + if (!visitor) { return; } - - let roomId; - if (visitor) { - const rooms = RocketChat.models.Rooms.findOpenByVisitorToken(visitor.token).fetch(); - - if (rooms && rooms.length > 0) { - roomId = rooms[0]._id; - } - } return { - _id: user._id, - roomId + _id: visitor._id }; } }); From 5e3dcbb28956364ede8c6eeb93af46dabd583a95 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Mon, 28 May 2018 21:28:58 -0300 Subject: [PATCH 03/12] Fix trailing-spaces issue. --- packages/rocketchat-livechat/server/methods/loginByToken.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rocketchat-livechat/server/methods/loginByToken.js b/packages/rocketchat-livechat/server/methods/loginByToken.js index 0bc1c3f06f37..e2a0f852ee61 100644 --- a/packages/rocketchat-livechat/server/methods/loginByToken.js +++ b/packages/rocketchat-livechat/server/methods/loginByToken.js @@ -7,7 +7,7 @@ Meteor.methods({ if (!visitor) { return; } - + return { _id: visitor._id }; From c25e0058e766a171a34f701263da7b64dd8c3b50 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Tue, 29 May 2018 11:41:14 -0300 Subject: [PATCH 04/12] Fix trailing-spaces. --- .../rocketchat-livechat/.app/client/views/livechatWindow.js | 2 +- packages/rocketchat-livechat/.app/imports/client/visitor.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js index 43adf2dc2e6f..8a8e614bba52 100644 --- a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js +++ b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js @@ -74,7 +74,7 @@ Template.livechatWindow.events({ Template.livechatWindow.onCreated(function() { Session.set({sound: true}); - + TAPi18n.conf.i18n_files_route = Meteor._relativeToSiteRootUrl('/tap-i18n'); const availableLanguages = TAPi18n.getLanguages(); diff --git a/packages/rocketchat-livechat/.app/imports/client/visitor.js b/packages/rocketchat-livechat/.app/imports/client/visitor.js index d51b979610bd..e463c9477e96 100644 --- a/packages/rocketchat-livechat/.app/imports/client/visitor.js +++ b/packages/rocketchat-livechat/.app/imports/client/visitor.js @@ -132,7 +132,7 @@ export default { } this.roomSubscribed = roomId; - + msgStream.on(roomId, { token: this.getToken() }, (msg) => { if (msg.t === 'command') { Commands[msg.msg] && Commands[msg.msg](); From 30bc7c33ff5147b0866c0f1a15c00fb6a599780b Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Fri, 1 Jun 2018 10:42:49 -0300 Subject: [PATCH 05/12] Allows you to create / change visitor without passing a token. --- packages/rocketchat-livechat/.app/client/lib/hooks.js | 9 +++++++-- .../rocketchat-livechat/server/methods/registerGuest.js | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/rocketchat-livechat/.app/client/lib/hooks.js b/packages/rocketchat-livechat/.app/client/lib/hooks.js index 28656d66b797..4d7b14bd36a6 100644 --- a/packages/rocketchat-livechat/.app/client/lib/hooks.js +++ b/packages/rocketchat-livechat/.app/client/lib/hooks.js @@ -52,12 +52,17 @@ const api = { }, registerGuest(data) { - if (!((typeof data === 'object') && (data.token))) { + if (!(typeof data === 'object')) { return; } + + if (!data.token) { + data.token = Random.id(); + } + Meteor.call('livechat:registerGuest', data, function(error, result) { if (!error) { - visitor.setToken(data.token); + visitor.setToken(result.token); } }); } diff --git a/packages/rocketchat-livechat/server/methods/registerGuest.js b/packages/rocketchat-livechat/server/methods/registerGuest.js index 5cef4e7c19a4..d6c8f0cb32ef 100644 --- a/packages/rocketchat-livechat/server/methods/registerGuest.js +++ b/packages/rocketchat-livechat/server/methods/registerGuest.js @@ -11,7 +11,8 @@ Meteor.methods({ RocketChat.models.LivechatPageVisited.keepHistoryForToken(token); return { - userId + userId, + token }; } }); From e098d9474682ff7c0bc4d18e03183155558dfe07 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Fri, 15 Jun 2018 11:00:59 -0300 Subject: [PATCH 06/12] Fixed conflit in package-lock.json file. --- package-lock.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a5009a58b60..b93756bcc215 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9466,15 +9466,9 @@ } }, "natives": { -<<<<<<< HEAD - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.3.tgz", - "integrity": "sha512-BZGSYV4YOLxzoTK73l0/s/0sH9l8SHs2ocReMH1f8JYSh5FUWu4ZrKCpJdRkWXV6HFR/pZDz7bwWOVAY07q77g==", -======= "version": "1.1.4", "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz", "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==", ->>>>>>> develop "optional": true }, "natural-compare": { From 4421fb546fef4efb864f39ad62e6c619b291673c Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Mon, 18 Jun 2018 16:44:11 -0300 Subject: [PATCH 07/12] Return on error --- .../.app/client/views/livechatWindow.js | 114 +++++++++--------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js index 8a8e614bba52..4f640197a5ad 100644 --- a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js +++ b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js @@ -4,7 +4,7 @@ import visitor from '../../imports/client/visitor'; function showDepartments() { return Department.find({ showOnRegistration: true }).count() > 1; }; - + Template.livechatWindow.helpers({ title() { return Livechat.title; @@ -90,78 +90,78 @@ Template.livechatWindow.onCreated(function() { return lng; }; - this.autorun(() => { + this.autorun(() => { // get all needed live chat info for the user Meteor.call('livechat:getInitialData', visitor.getToken(), (err, result) => { if (err) { - console.error(err); - } else { - if (!result.enabled) { - Triggers.setDisabled(); - return parentCall('removeWidget'); - } + return console.error(err); + } - if (!result.online) { - Triggers.setDisabled(); - Livechat.title = result.offlineTitle; - Livechat.offlineColor = result.offlineColor; - Livechat.offlineMessage = result.offlineMessage; - Livechat.displayOfflineForm = result.displayOfflineForm; - Livechat.offlineUnavailableMessage = result.offlineUnavailableMessage; - Livechat.offlineSuccessMessage = result.offlineSuccessMessage; - Livechat.online = false; - } else { - Livechat.title = result.title; - Livechat.onlineColor = result.color; - Livechat.online = true; - Livechat.transcript = result.transcript; - Livechat.transcriptMessage = result.transcriptMessage; - Livechat.conversationFinishedMessage = result.conversationFinishedMessage; - } - Livechat.videoCall = result.videoCall; - Livechat.registrationForm = result.registrationForm; - Livechat.nameFieldRegistrationForm = result.nameFieldRegistrationForm; - Livechat.emailFieldRegistrationForm = result.emailFieldRegistrationForm; - if (result.room) { - Livechat.room = result.room._id; - - visitor.setConnected(); - } + if (!result.enabled) { + Triggers.setDisabled(); + return parentCall('removeWidget'); + } - if (result.visitor) { - visitor.setData(result.visitor); + if (!result.online) { + Triggers.setDisabled(); + Livechat.title = result.offlineTitle; + Livechat.offlineColor = result.offlineColor; + Livechat.offlineMessage = result.offlineMessage; + Livechat.displayOfflineForm = result.displayOfflineForm; + Livechat.offlineUnavailableMessage = result.offlineUnavailableMessage; + Livechat.offlineSuccessMessage = result.offlineSuccessMessage; + Livechat.online = false; + } else { + Livechat.title = result.title; + Livechat.onlineColor = result.color; + Livechat.online = true; + Livechat.transcript = result.transcript; + Livechat.transcriptMessage = result.transcriptMessage; + Livechat.conversationFinishedMessage = result.conversationFinishedMessage; + } + Livechat.videoCall = result.videoCall; + Livechat.registrationForm = result.registrationForm; + Livechat.nameFieldRegistrationForm = result.nameFieldRegistrationForm; + Livechat.emailFieldRegistrationForm = result.emailFieldRegistrationForm; + if (result.room) { + Livechat.room = result.room._id; + + visitor.setConnected(); + } - if (visitor.name) { - Livechat.guestName = visitor.name; - } + if (result.visitor) { + visitor.setData(result.visitor); - if (visitor.visitorEmails && visitor.visitorEmails.length > 0) { - Livechat.guestEmail = visitor.visitorEmails[0].address; - } + if (visitor.name) { + Livechat.guestName = visitor.name; } - if (result.agentData) { - Livechat.agent = result.agentData; + if (visitor.visitorEmails && visitor.visitorEmails.length > 0) { + Livechat.guestEmail = visitor.visitorEmails[0].address; } + } - let language = result.language || defaultAppLanguage(); + if (result.agentData) { + Livechat.agent = result.agentData; + } - if (!availableLanguages[language]) { - language = language.split('-').shift(); - } + let language = result.language || defaultAppLanguage(); - TAPi18n.setLanguage(language); + if (!availableLanguages[language]) { + language = language.split('-').shift(); + } - Triggers.setTriggers(result.triggers); - Triggers.init(); + TAPi18n.setLanguage(language); - result.departments.forEach((department) => { - Department.insert(department); - }); - Livechat.allowSwitchingDepartments = result.allowSwitchingDepartments; + Triggers.setTriggers(result.triggers); + Triggers.init(); - Livechat.ready(); - } + result.departments.forEach((department) => { + Department.insert(department); + }); + Livechat.allowSwitchingDepartments = result.allowSwitchingDepartments; + + Livechat.ready(); }); }); From 6f4e5d1908c8b847d029282088fd637762b5ea51 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Wed, 20 Jun 2018 16:02:03 -0300 Subject: [PATCH 08/12] code style improvements. --- .../.app/client/lib/hooks.js | 8 ++++---- .../.app/imports/client/visitor.js | 20 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/rocketchat-livechat/.app/client/lib/hooks.js b/packages/rocketchat-livechat/.app/client/lib/hooks.js index 2bdca8f3ad50..fe5e00e2c3a1 100644 --- a/packages/rocketchat-livechat/.app/client/lib/hooks.js +++ b/packages/rocketchat-livechat/.app/client/lib/hooks.js @@ -52,9 +52,9 @@ const api = { }, registerGuest(data) { - if (!(typeof data === 'object')) { + if (typeof data !== 'object') { return; - } + } if (!data.token) { data.token = Random.id(); @@ -63,9 +63,9 @@ const api = { Meteor.call('livechat:registerGuest', data, function(error, result) { if (!error) { visitor.setToken(result.token); - } + } }); - } + } }; window.addEventListener('message', function(msg) { diff --git a/packages/rocketchat-livechat/.app/imports/client/visitor.js b/packages/rocketchat-livechat/.app/imports/client/visitor.js index 0d3c4be232a4..cfc79e3e511d 100644 --- a/packages/rocketchat-livechat/.app/imports/client/visitor.js +++ b/packages/rocketchat-livechat/.app/imports/client/visitor.js @@ -31,8 +31,8 @@ export default { Livechat.agent = null; Livechat.guestName = null; Livechat.guestEmail = null; - - msgStream.unsubscribe('room-messages'); + + msgStream.unsubscribe('room-messages'); }, getId() { @@ -56,21 +56,21 @@ export default { }, setToken(token) { - if ((!token) || (token == this.token.get())) { + if (!token || token == this.token.get()) { return; } - + this.reset(); - + localStorage.setItem('visitorToken', token); this.token.set(token); - + Meteor.call('livechat:loginByToken', token, (err, result) => { if (!result) { return; } - + if (result._id) { this.setId(result._id); return result._id; @@ -80,7 +80,7 @@ export default { setName(name) { Livechat.guestName = name; - + if (!this.getId()) { return; } @@ -89,7 +89,7 @@ export default { token: this.getToken(), name }; - + Meteor.call('livechat:registerGuest', data); }, @@ -104,7 +104,7 @@ export default { token: this.getToken(), email }; - + Meteor.call('livechat:registerGuest', data); }, From 15f0e480c0d7c97d4747bee18f7925ddc80d1443 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Thu, 21 Jun 2018 17:26:41 -0300 Subject: [PATCH 09/12] Fixes and improvements in Livechat API. --- .../.app/client/lib/hooks.js | 4 ++-- .../.app/client/lib/msgTyping.js | 5 ++++ .../.app/client/views/livechatWindow.js | 12 +++++++--- .../.app/client/views/register.html | 8 +++---- .../.app/client/views/register.js | 23 ++++++++++++++++--- .../.app/imports/client/visitor.js | 4 ++-- .../server/methods/registerGuest.js | 13 ++++++++++- 7 files changed, 54 insertions(+), 15 deletions(-) diff --git a/packages/rocketchat-livechat/.app/client/lib/hooks.js b/packages/rocketchat-livechat/.app/client/lib/hooks.js index fe5e00e2c3a1..93ba1a6f11c6 100644 --- a/packages/rocketchat-livechat/.app/client/lib/hooks.js +++ b/packages/rocketchat-livechat/.app/client/lib/hooks.js @@ -61,8 +61,8 @@ const api = { } Meteor.call('livechat:registerGuest', data, function(error, result) { - if (!error) { - visitor.setToken(result.token); + if (!error && result.visitor && result.visitor.token) { + visitor.setToken(result.visitor.token); } }); } diff --git a/packages/rocketchat-livechat/.app/client/lib/msgTyping.js b/packages/rocketchat-livechat/.app/client/lib/msgTyping.js index 378af82a34aa..addcfa608ef4 100644 --- a/packages/rocketchat-livechat/.app/client/lib/msgTyping.js +++ b/packages/rocketchat-livechat/.app/client/lib/msgTyping.js @@ -10,6 +10,7 @@ export const MsgTyping = (function() { const selfTyping = new ReactiveVar(false); const usersTyping = {}; const dep = new Tracker.Dependency; + let oldRoom; const addStream = function(room) { if (!_.isEmpty(usersTyping[room] && usersTyping[room].users)) { @@ -38,7 +39,11 @@ export const MsgTyping = (function() { Tracker.autorun(() => { if (visitor.getRoom() && visitor.getId()) { + if (oldRoom) { + Notifications.unRoom(oldRoom, 'typing'); + } addStream(visitor.getRoom()); + oldRoom = visitor.getRoom(); } }); diff --git a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js index 4f640197a5ad..07aaa0912f9c 100644 --- a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js +++ b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js @@ -90,6 +90,13 @@ Template.livechatWindow.onCreated(function() { return lng; }; + const loadDepartments = departments => { + Department.remove({}); + departments.forEach((department) => { + Department.insert(department); + }); + }; + this.autorun(() => { // get all needed live chat info for the user Meteor.call('livechat:getInitialData', visitor.getToken(), (err, result) => { @@ -156,9 +163,8 @@ Template.livechatWindow.onCreated(function() { Triggers.setTriggers(result.triggers); Triggers.init(); - result.departments.forEach((department) => { - Department.insert(department); - }); + loadDepartments(result.departments); + Livechat.allowSwitchingDepartments = result.allowSwitchingDepartments; Livechat.ready(); diff --git a/packages/rocketchat-livechat/.app/client/views/register.html b/packages/rocketchat-livechat/.app/client/views/register.html index 142ca7637593..1e3e533b7e34 100644 --- a/packages/rocketchat-livechat/.app/client/views/register.html +++ b/packages/rocketchat-livechat/.app/client/views/register.html @@ -9,11 +9,11 @@

{{#if showNameFieldRegisterForm}} - - {{/if}} + + {{/if}} {{#if showEmailFieldRegisterForm}} - - {{/if}} + + {{/if}} {{#if showDepartments}}